JSP: Thẻ <c: out> của JSTL


110

Viết một trang JSP, chính xác thì <c:out>làm gì? Tôi nhận thấy rằng cả hai điều sau đây đều có cùng kết quả:

<p>The person's name is <c:out value="${person.name}" /></p>
<p>The person's name is ${person.name}</p>

Câu trả lời:


153

c:out thoát các ký tự HTML để bạn có thể tránh viết mã trang web chéo.

nếu person.name = <script>alert("Yo")</script>

tập lệnh sẽ được thực thi trong trường hợp thứ hai, nhưng không phải khi sử dụng c:out


2
Chỉ khi 'EscapeXML' nó được đặt thành true (không chắc có phải là theo mặc định hay không)
Chris Serra

17
Tôi tin rằng nó đúng theo mặc định.
Zack The Human,

7
NB nó thoát khỏi XML không phải HTML. Một trong những điều tinh tế khó chịu hơn của JSTL. Cuối cùng tôi luôn viết HTML thoát EL fn của riêng mình.
Adam Gent

4
Tên thuộc tính là trường hợp nhạy cảm vì vậy nó escapeXml = "true" không escapeXML
Đánh dấu Chorley

2
Tôi không biết mẫu mã của câu trả lời này đang hiển thị gì- ai đó có thể làm rõ không? Nó đề cập đến "trường hợp thứ hai" nhưng tôi không thấy điều đó và tôi không thấy c: out được sử dụng trong mã.
IcedDante

126

Như Will Wagner đã nói, trong phiên bản jsp cũ, bạn luôn nên sử dụng c:outđể xuất văn bản động.

Hơn nữa, bằng cách sử dụng cú pháp này:

<c:out value="${person.name}">No name</c:out>

bạn có thể hiển thị văn bản "Không có tên" khi tên rỗng.


24
Mát mẻ! Tôi không biết điều đó.
Adam Asham

Đồng ý, mát mẻ. Cảm ơn đã chỉ dạy và giúp đỡ. Tôi cũng không biết điều đó. Chúc mừng!
B-Money

20
hoặc <c: out value = "$ {person.name}" default = "No Name" />
gmustudent,

2
JSR 52, bản phát hành bảo trì 2, xem trang 22 "với nội dung". Liên kết: download.oracle.com/otndocs/jcp/jstl-1.2-mrel2-eval-oth-JSpec
Barett

1
@Barett. Mát mẻ. Tôi tự hỏi tại sao điều này không bao giờ tạo ra bất kỳ hướng dẫn hoặc ví dụ nào. Một cú pháp thuận tiện hơn IMO thuộc tính mặc định.
Thilo


5

Bạn có thể bật tính năng thoát các thực thể Xml một cách rõ ràng bằng cách sử dụng giá trị thuộc tính EscapeXml bằng với true. FYI, theo mặc định là "true".


Một số mã ví dụ thực sự sẽ giúp làm cho câu trả lời này hoàn chỉnh.
RachelD

4

Các phiên bản cũ hơn của JSP không hỗ trợ cú pháp thứ hai.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.