关于Java过滤器处理表单中文乱码

作者:希望我的代码能解决你的问题

jsp页面代码

index.jsp页面

<form action="Login" method="get">
        <input type="text" name="name"  placeholder="用户名" />
        <br />
        <input type="password" name="pwd" placeholder="密码"/>
        <input type="submit" value="登陆">
</form>

show.jsp代码

<body>
    登陆成功!
</body>

servlet代码

public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

            String oldName = request.getParameter("name");
            String oldPwd = request.getParameter("pwd");
            //检查是否转码成功
            System.out.println(oldName+"==================");
            if("周周".equals(oldName)&&"123456".equals(oldPwd)){
                response.sendRedirect("show.jsp");
            }
    }

过滤器代码块

public class EncodeFilter implements Filter{
    //编码
    private String encode ;
    public void destroy() {
        // TODO Auto-generated method stub
        this.encode=null;
    }

    public void doFilter(ServletRequest req, ServletResponse res,
            FilterChain filter) throws IOException, ServletException {
        // TODO Auto-generated method stub
        // 转为HttpServletRequest对象
        HttpServletRequest request = (HttpServletRequest)req;
        // 重新获得编码后的请求:
        HttpServletRequest newReq =null;
        // 提交方式
        String method = request.getMethod();
        // 提交方式判断
        if("POST".equals(method)){
            // post方式
            request.setCharacterEncoding(this.encode);
        }else{
            // GET方式
            newReq = new HttpServletRequestWrapper(request){
                // 重写方法getParameter方法
                @Override
                public String getParameter(String name){
                    String value = super.getParameter(name);
                    String newValue =null;
                    try {
                        if(value!=null){
                        newValue = new     String(value.getBytes("iso-8859-1"),encode);
                        }
                    } catch (Exception e) {
                        // TODO: handle exception
                        System.out.println("转码失败");
                    }
                    return newValue;
                }
            };
        }
        // 这里直接用HttpservletRequest的父类ServletRequest 
        filter.doFilter(req, res);
    }

    public void init(FilterConfig config) throws ServletException {
        // TODO Auto-generated method stub
        // 获得编码格式
        this.encode=config.getInitParameter("encoding");
    }

}

web.xml配置

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 
    xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
    http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
  <servlet>
    <servlet-name>Login</servlet-name>
    <servlet-class>com.###.servlet.Login</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>Login</servlet-name>
    <url-pattern>/Login</url-pattern>
  </servlet-mapping>
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
  <!-- 编码 -->
  <filter>
        <filter-name>encode</filter-name>
        <!--包名加上类名-->
        <filter-class>com.###.filter.EncodeFilter</filter-class>
        <init-param>
                <!-- 参数名 -->
                <param-name>encoding</param-name>
                <!-- 编码参数 -->
                <param-value>UTF-8</param-value>
        </init-param>
  </filter>
  <filter-mapping>  
            <filter-name>encode</filter-name>
            <url-pattern>/*</url-pattern>
  </filter-mapping>

</web-app>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值