表单提交时若有中文则容易乱码,因为表单(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 文档被修改之后一定要重新部署项目!!!