表单提交时若有中文则容易乱码,因为表单(form)有两种提交的方式,因此,引起乱码也有两种情况:
一,若表单以get方式提交,解决乱码的方法如下:
修改tomcat安装目录下的conf/server.xml:添加如下内容:
URIEncoding="UTF-8" 或URIEncoding="UTF-8" useBodyEncodingForURI="true"
最后server.xml变为:
。。。。。。
<Connector connectionTimeout="20000" port="80" protocol="HTTP/1.1" redirectPort="8443"
URIEncoding="UTF-8"
/>
或 <Connector connectionTimeout="20000" port="80" protocol="HTTP/1.1" redirectPort="8443"
URIEncoding="UTF-8" useBodyEncodingForURI="true"
/>
。。。。。
----------------------------------------------------
二,若表单以post方式提交,解决乱码的方法如下:
----------------------------------------------------
在servlet中添加如下语句:
request.setCharacterEncoding("GBK");
则servlet中部分代码如下:
response.setContentType("text/html;charset=GBK");
request.setCharacterEncoding("GBK");
PrintWriter out = response.getWriter();
----------------------------------------------------
若表单提交的属性值中有中文,最好使用 post 方式提交:
method=post
建议:用表单提交数据时永远使用post方式提交。
然后使用一个过滤器,代码如下:
package com.huang.filter;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
public class CharsetFilter implements Filter {
public void destroy() {
// TODO Auto-generated method stub
}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
request.setCharacterEncoding("GBK");
response.setCharacterEncoding("GBK");
chain.doFilter(request, response);
}
public void init(FilterConfig fConfig) throws ServletException {
}
}
在web.xml中添加如下代码:
<filter>
<filter-name>CharsetFilter</filter-name>
<filter-class>com.huang.filter.CharsetFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>CharsetFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
web.xml 文档被修改之后一定要重新部署项目!!!
转载于:https://blog.51cto.com/huangwei520/516244