2014-11-06 14 views
6

Tôi đang tìm kiếm trợ giúp để có được tất cả các lớp trong ngăn xếp với mã hóa UTF-8.JSP/GlassFish: cách thiết lập mã hóa UTF-8 đúng cách

tôi tìm thấy bài viết này tốt đẹp:

http://www.javapractices.com/topic/TopicAction.do?Id=206

mô tả 3 nơi tôi cần phải lo lắng về việc mã hóa. Vì (1) cơ sở dữ liệu Oracle của tôi hiện được đặt thành UTF-8, nên máy chủ (2) trình duyệt và (3) phải lo lắng.

Tôi cũng tìm thấy bài viết chi tiết này

http://balusc.blogspot.com/2009/05/unicode-how-to-get-characters-right.html#JSPServletRequest

mà tôi đang cố gắng để làm theo dưới đây, nhưng với một số câu hỏi newbie về thực hiện.

Để giải quyết các trình duyệt, tôi đã thực hiện chắc chắn bao gồm những điều sau ở phía trên cùng của mỗi trang JSP:

<%@page pageEncoding="UTF-8"%> 

(Để tham khảo, xem here).

Để giải quyết những máy chủ, tôi đã chắc chắn bao gồm các dòng sau trong servlet Java và các trang JSP trước khi ban hành một request.getParameter() hoặc request.getAttribute() tuyên bố:

request.setCharacterEncoding("UTF-8"); 

Kể từ khi tôi đang sử dụng GlassFish 3.1.2, tôi hiểu nó không sử dụng UTF-8 theo mặc định, vì vậy tôi cần phải thiết lập nó bằng tay nào đó.

Tôi đã nhìn thấy rất nhiều trang web nói về một tệp có tên glassfish-web.xml. Đây có phải là một phần của thủy tinh bình thường được cài đặt không? Tôi không biết tìm nó ở đâu. Tôi đã sử dụng tệp web.xml trong thư mục WEB-INF cho ứng dụng web của mình. Ai đó có thể giúp tôi tìm hiểu xem tôi có cần phải sửa đổi tệp web.xml này không, hoặc tôi có cần phải định vị hoặc tạo tệp mới có tên glassfish-web.xml, để định cấu hình mã hóa cho glassfish không?

tập tin web.xml của tôi bắt đầu với:

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" 
    "http://java.sun.com/dtd/web-app_2_3.dtd"> 
<web-app> 
... 

Đối với các yêu cầu/servlet JSP, tôi bao gồm các dòng sau trong web.xml tập tin

<parameter-encoding default-charset="UTF-8"/> 

Đây có phải là OK để đưa vào tập tin web.xml? Hoặc, nó cần phải đi trong một số tập tin glassfish-web.xml?

Đối với phản ứng/servlet JSP, tôi đặt sau đây trong tập tin web.xml của tôi (xem câu trả lời được chấp nhận here):

<jsp-config> 
    <jsp-property-group> 
     <url-pattern>*.jsp</url-pattern> 
     <page-encoding>UTF-8</page-encoding> 
    </jsp-property-group> 
</jsp-config> 

tôi giả những dòng này chỉ cần chèn giữa <web-app></web-app>. Nhưng, hãy cho tôi biết nếu họ nên đi vào bên trong một số bộ mô tả khác (chẳng hạn như <glassfish-web-app></glassfish-web-app>)?

Tôi cũng đặt sau trong phần JSP <head>:

<meta http-equiv="content-type" content="text/html; charset=utf-8"> 

tài liệu tham khảo hữu ích:

How to get rid of WARNING: PWC4011: Unable to set request character encoding to UTF-8

https://stackoverflow.com/tags/servlet-filters/info

https://wikis.oracle.com/display/GlassFish/FaqHttpRequestParameterEncoding

Trả lời

9

Th e glassfish-web.xml là một tệp bạn có thể tạo trong thư mục WEB-INF của mình. Đối với Glassfish 3.x nó phải trông giống như thế này:

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE glassfish-web-app PUBLIC "-//GlassFish.org//DTD GlassFish Application Server 3.1 Servlet 3.0//EN" "http://glassfish.org/dtds/glassfish-web-app_3_0-1.dtd"> 
<glassfish-web-app> 
    <jsp-config> 
    </jsp-config> 
    <parameter-encoding default-charset="UTF-8" /> 
</glassfish-web-app> 

Và bạn là đúng, các thiết lập thông số mã hóa có được trong tập tin này và không có trong web.xml :)

Xem thêm :

+0

Cảm ơn @unwichtich, vì vậy có đúng là BOTH tệp phải tồn tại trong thư mục WEB-INF (có nghĩa là 'web.xml' AND' glassfish-web.xml') không? Ngoài ra, tôi có cần phải cấu hình GlassFish để tìm tệp 'glassfish-web.xml' này sau khi tôi tạo nó hay GlassFish sẽ tìm thấy nó tự động không? – user46688

+1

Glassfish-web.xml không thực sự cần thiết nếu bạn không phải sử dụng nó cho một số thuộc tính cấu hình cụ thể của Glassfish như mã hóa mặc định. Tệp được quét tự động nếu được đặt trong thư mục WEB-INF, đảm bảo Làm sạch & Xây dựng dự án của bạn trước khi triển khai lại :) – unwichtich

+0

Xin lỗi, tôi quên rằng điều này cũng được yêu cầu. Tôi đã cập nhật câu trả lời của mình. – unwichtich

Các vấn đề liên quan