页面a.htm
<%@page contentType="text/html;charset=gb2312"%>
<form action="b.jsp" method="post">
用户名:<input type="text" name="name">
<input type="submit" value="提交">
</form>
页面b.jsp
<%@page contentType="text/html;charset=GB2312"%>
输入的内容为:<%=request.getParameter("name")%>
过滤器:
package com.cn.filter;
import java.io.*;
import javax.servlet.*;
public class EncodingFilter implements Filter{
public void init(FilterConfig filterConfig) throws ServletException
{
System.out.println("过滤器初始化");
}
public void doFilter(ServletRequest request,ServletResponse response,FilterChain chain)
throws IOException,ServletException{
System.out.println("过滤器执行前");
String name=request.getParameter("name");
if(name!=null){
request.setCharacterEncoding("GB2312") ;
System.out.println(name); //该处在控制台输出的也是乱码
chain.doFilter(request,response);
}
System.out.println("过滤器执行后");
}
}
web.xml配置文件
<filter>
<filter-name>filter</filter-name>
<filter-class>com.cn.filter.EncodingFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
不知道是哪里错了,怎么一直无法提交中文?
<%@page contentType="text/html;charset=gb2312"%>
<form action="b.jsp" method="post">
用户名:<input type="text" name="name">
<input type="submit" value="提交">
</form>
页面b.jsp
<%@page contentType="text/html;charset=GB2312"%>
输入的内容为:<%=request.getParameter("name")%>
过滤器:
package com.cn.filter;
import java.io.*;
import javax.servlet.*;
public class EncodingFilter implements Filter{
public void init(FilterConfig filterConfig) throws ServletException
{
System.out.println("过滤器初始化");
}
public void doFilter(ServletRequest request,ServletResponse response,FilterChain chain)
throws IOException,ServletException{
System.out.println("过滤器执行前");
String name=request.getParameter("name");
if(name!=null){
request.setCharacterEncoding("GB2312") ;
System.out.println(name); //该处在控制台输出的也是乱码
chain.doFilter(request,response);
}
System.out.println("过滤器执行后");
}
}
web.xml配置文件
<filter>
<filter-name>filter</filter-name>
<filter-class>com.cn.filter.EncodingFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
不知道是哪里错了,怎么一直无法提交中文?
过滤器执行前
乱码
过滤器执行后
.....
这个过滤器的问题一直没搞明白是哪里出的错,曾经在一个ssh的项目里遇到过,没解决。如今单独做过滤器的测试还是没通过,一直想弄明白到底是哪出了问题,请高手们指点一下
String name=new String((request.getParameter( "name")).getBytes( "ISO8859-1 "), "GB2312 ");//至于你要把什么改成什么,看你机器的设置了.
然后,你应该象3L说的,应该设置的是返回的字符集,非请求的.
public void doFilter(ServletRequest request,ServletResponse response,FilterChain chain)
throws IOException,ServletException{
System.out.println("过滤器执行前");
request.setCharacterEncoding("GB2312") ; //在request.getParameter("name")之前转码,根据你的机器设置编码GB2312 reponse.setCharacterEncoding("GB2312");
String name=request.getParameter("name");
if(name!=null){
System.out.println(name);
}
chain.doFilter(request,response);
System.out.println("过滤器执行后");
}
}
提交的两种方式,GET和POST
1.记住超链接是GET方式提交
2.POST方式提交可以统一转码(这样获得的参数可以统一转码) ,也就是说你可以用过滤器来统一转码
例:request.setCharacterEncoding("UTF-8"); //如果你用的编码方式是GBK就写GBK,要写在获得参数的前面
String name=request.getParameter("name");
System.out.println(name); //可以转过来,必须是POST提交
3.GET方式不能用统一转码
但可以这样做:
String name=request.getParameter("name");
name=new String(name.getBytes("ISO-8859-1"),"UTF-8"); //这种也叫重新赋值的方式
System.out.println(name);
但这样做也带来很多不便,假如你有很多request.getParameter("something"); 你必须一一转码.
4.GET方式还有一种配置可以在Tomcat下配置URIEncoding=UTF-8
HttpServletResponse arg1) {
// TODO Auto-generated method stub
// post转码方式
if (arg0.getMethod().compareToIgnoreCase("post") > 0) {
try {
arg0.setCharacterEncoding("gbk");
System.out.println("post方式转码!");
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} else {
// get转码方式;
Iterator it = arg0.getParameterMap().values().iterator();
System.out.println("get方式转码!");
while (it.hasNext()) {
String[] para = (String[]) it.next(); for (int i = 0; i < para.length; i++) {
try {
para[i] = new String(para[i].getBytes("ISO-8859-1"),
"gbk");
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
} return super.processPreprocess(arg0, arg1);
}
throws IOException,ServletException{
System.out.println("过滤器执行前");
String name=request.getParameter("name");
String fromPageCode="GB2312";
String cType=req.getHeader("content-type");
if(cType.indexOf("utf-8")>=0)
fromPageCode="utf-8";
if(name!=null){
request.setCharacterEncoding(fromPageCode) ;
System.out.println(name);
chain.doFilter(request,response);
}
System.out.println("过滤器执行后");
}