2012-01-18 25 views
5

Nếu tôi cần phải thiết lập mã hóa tương tự cho tất cả các ứng dụng được triển khai trong một trường hợp tomcat, tôi có thể chỉnh sửa server.xml và thêm một phần như thế này:Cách định cấu hình URIEncoding cho một ứng dụng web nhất định?

<Connector port="8081" protocol="HTTP/1.1" 
    connectionTimeout="20000" 
    redirectPort="8443" 
    URIEncoding="UTF-8"/> 

Có cách nào để xác định mã hóa cho một ứng dụng nào đó? (có thể trong số web.xml hoặc ở nơi khác)?

Trả lời

2

Theo như tôi biết web.xml không cho phép những gì bạn muốn, vì vậy tôi sẽ đề xuất các cách sau.

  1. bộ nó mỗi trang (ví dụ cho JSP <%@page pageEncoding="UTF-8" %>)
  2. lọc Sử dụng HTTP để thiết lập mã hóa. Trong trường hợp này, bạn không phải đặt riêng cho từng trang.
  3. Nếu bạn đang sử dụng khuôn khổ web, hãy thử sử dụng các công cụ mà nó cung cấp. Ví dụ cho Struts bạn có thể định nghĩa mã hóa trong định nghĩa mẫu.
5

Nếu bạn sử dụng Spring MVC, bạn có thể sử dụng CharacterEncodingFilter trong web.xml như thế này:

<filter> 
    <filter-name>encodingFilter</filter-name> 
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> 
    <init-param> 
     <param-name>encoding</param-name> 
     <param-value>UTF-8</param-value> 
    </init-param> 
</filter> 
<filter-mapping> 
    <filter-name>encodingFilter</filter-name> 
    <servlet-name>my-spring-dispatcher-servlet</servlet-name> 
</filter-mapping> 

Nếu không, bạn cần phải viết một bộ lọc mà không một cái gì đó như:

httpRequest.setCharacterEncoding("UTF-8") 

EDIT:

Bạn cần để chỉ định useBodyEncodingForURI="true" trong Tomcat 5+ để bộ lọc này có hiệu lực:

<Connector port="8081" protocol="HTTP/1.1" 
    connectionTimeout="20000" 
    redirectPort="8443" 
    useBodyEncodingForURI="true" /> 
Các vấn đề liên quan