2010-02-02 12 views
7

Tôi có một dự án Java chạy trên Glassfish hiển thị một số mã HTML trông xấu xí. Một tác dụng phụ của nó từ việc sử dụng các thư viện JSP nội bộ và bên ngoài khác nhau. Tôi muốn thiết lập một số loại bộ lọc hậu xuất hiện sẽ cung cấp HTML cuối cùng thông qua HTMLTidy để nguồn đó tốt đẹp và gọn gàng để hỗ trợ gỡ lỗi. Điều này có thể không?Nguồn cấp dữ liệu được hiển thị trên các trang jsp thông qua htmltidy

Có cơ chế tích hợp để thực hiện một số hành động sau khi máy chủ hiển thị JSP thành HTML không? Hành động đó có thể lấy HTML được tạo dưới dạng chuỗi và thao tác không? Có một số tùy chọn tích hợp dễ dàng để thực hiện việc này mà không cần mã hóa thêm không?

Trả lời

5
+0

Rất mát mẻ. Cảm ơn câu trả lời !!! – Freiheit

+1

Tôi cũng muốn lưu ý rằng JTidyFilter vẫn còn hơi thô và không có bản phát hành chính thức. Bạn phải tải xuống từ các đêm JTidy tại: http://jtidy.sourceforge.net/nightly/ – Freiheit

0

Nếu bạn có thể làm thay đổi dòng điều khiển để bạn có được đầu ra html trước khi nó quay trở lại trình duyệt, sau đó jtidy có thể giúp bạn.

Mặc dù vậy, tôi sẽ xem đây là sự cố khắc phục sự cố tồi tệ nhất. Về lâu dài, điều gì sẽ giúp ích nhiều hơn là tách mã tạo html của bạn và cấu trúc lại đó. Ngay cả trong các dự án lớn, phức tạp, bạn sẽ có thể làm điều này trong những phần nhỏ và bạn sẽ nhận được một cải tiến dần dần. Nếu không, nếu các vấn đề của bạn phát triển đến mức mà gọn gàng không thể giúp đỡ, bạn sẽ trở lại nơi bạn đã bắt đầu (và thậm chí có nhiều mã khó sử dụng hơn).

3

Hành vi này cũng có thể được loại bỏ ở một mức độ nhất định bằng cách đặt thuộc tính JSP 2.1 trimDirectiveWhitespaces thành true. Điều này có thể được kích hoạt trong các tập tin JSP cá nhân bằng cách:

<%@page trimDirectiveWhitespaces="true" %> 

Hoặc trên tất cả file JSP bởi các mục sau đây trong web.xml (mà cần phải được khai báo Servlet 2.5!):

<jsp-config> 
    <jsp-property-group> 
     <url-pattern>*.jsp</url-pattern> 
     <trim-directive-whitespaces>true</trim-directive-whitespaces> 
    </jsp-property-group> 
</jsp-config> 

Trong trước -JSP 2.1 container hoặc trong các thùng chứa JSP 2.1 mà thực sự không hỗ trợ điều này vì một số lý do bên trong, chẳng hạn như Tomcat, bạn cần tham khảo tài liệu JspServlet của mình cho bất kỳ tham số khởi tạo nào. Trong ví dụ Tomcat, bạn có thể cấu hình nó cũng bằng cách thiết lập trimSpaces init-param của JspServlet để true trong /conf/web.xml Tomcat:

<init-param> 
    <param-name>trimSpaces</param-name> 
    <param-value>true</param-value> 
</init-param> 

Ghi nhận nên rằng cách tiếp cận cả hai không thực sự "format" mã HTML . Nó thực sự chỉ cắt tỉa khoảng trắng được để lại bởi taglibs và tập lệnh. Xem thêm this Sun article. Vì vậy, ví dụ như sau ..

<ul> 
    <c:forEach items="${list}" var="item"> 
     <li>${item}</li> 
    </c:forEach> 
</ul> 

..would về cơ bản kết thúc trong

<ul> 
     <li>item1</li> 
     <li>item2</li> 
     <li>item3</li> 
</ul> 

Như vậy với thụt đầu dòng kép. Bạn thực sự có thể workaround này bằng cách format mã như vậy mà thẻ JSP là nửa thụt:

<ul> 
    <c:forEach items="${list}" var="item"> 
    <li>${item}</li> 
    </c:forEach> 
</ul> 

Nhưng tôi nghĩ rằng JTidyFilter là dễ dàng hơn đây :)