Eva*_*Chu 8 java jsp tomcat utf-8 request
我正在开发使用Java/JSP/Tomcat的/ mysql的一个简单的Web应用程序,最的问题在于对字符编码,因为我需要处理UTF-8编码,而不是默认的8851的.
首先,我想描述一下我的程序结构.我正在使用一个名为Controller.java的Servlet来处理所有请求.所以在web.xml中,我有一个Controller servlet,它从*.do获取所有请求.
然后该控制器将派遣根据请求的URL的请求,例如,如果客户端请求register.do,控制器将请求分派到Register.java.
在Register.java中,有一个方法将请求作为参数,即:
public String perform(HttpServletRequest request) {
do something with the request...
}
Run Code Online (Sandbox Code Playgroud)
所以问题是如果我想在这个方法中用UTF-8打印一些东西,它会给出随机字符.例如,我有一个存储几个常量的枚举,其中一个属性是Enum在繁体中文中的名称.如果我打印出来的话
public static void main(Stirng[] args{
System.out.println(MyEnum.One.getChn());
logger.info(MyEnum.One.getChn());
}
Run Code Online (Sandbox Code Playgroud)
这是用中文正确打印的.但是,如果我将确切的代码放在处理HttpServletRequest的方法中:
public String perform(HttpServletRequest request) {
System.out.println(MyEnum.One.getChn());
logger.info(MyEnum.One.getChn());
}
Run Code Online (Sandbox Code Playgroud)
它们被打印为随机字符,但我可以从调试窗口(eclipse)看到变量保存正确的中文字符.
因此,当我想存储request.getParameter()中的值时,会发生同样的情况.在调试窗口中,我可以看到变量保存了正确的字符,但我将其打印出来或尝试将其存储在数据库中,它是随机字符.
我不知道为什么行为会像这样,这阻止我阅读提交的表单值并将它们存储到数据库中.有人可以给出一些暗示吗?
十分感谢.
Pau*_*nis 11
这是一个小教程,您需要做什么才能使UTF-8在您的Web应用程序中工作:
您必须在应用程序中实现Filter以进行字符编码:
public class CharacterEncodingFilter implements Filter {
@Override
public void init(FilterConfig filterConfig)
throws ServletException {
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain)
throws IOException, ServletException {
servletRequest.setCharacterEncoding("UTF-8");
servletResponse.setContentType("text/html; charset=UTF-8");
filterChain.doFilter(servletRequest, servletResponse);
}
@Override
public void destroy() {
}
}
Run Code Online (Sandbox Code Playgroud)
您必须确保tomcat的server.xml的文件连接器元素具有URIEncoding属性,该属性的值为UTF-8.
<Connector port="8080"
protocol="HTTP/1.1"
connectionTimeout="20000"
URIEncoding="UTF-8"
redirectPort="8443"/>
Run Code Online (Sandbox Code Playgroud)
您还需要在每个JSP页面中指定它:
<%@page contentType="text/html" pageEncoding="UTF-8"%>
Run Code Online (Sandbox Code Playgroud)
如果你需要使用UTF-8编码(实际上,现在每个人都应该这样做),那么你可以按照Tomcat常见问题解答中的"UTF-8无处不在"进行操作:
http://wiki.apache.org/tomcat/FAQ/CharacterEncoding#Q8
请记住,您还需要在数据库的文本字段中支持UTF-8.
还要记住,有时会将带有非ASCII字符的字符串"打印"到日志文件中,否则控制台会受到影响
您可能最好将值写入文件,然后使用十六进制编辑器检查内容,以确保获得所需的字节值.
| 归档时间: |
|
| 查看次数: |
36332 次 |
| 最近记录: |