Filter解决中文乱码问题

一、编写过滤器工具,在过滤器中将编码解码方式改为utf-8:

  因为index.jsp提交表单到名为DoServlet,由DoServlet请求转发到main.jsp,所以我直接过滤DoServlet

  

注:新版本是用注解直接注册,而不用在web.xml中注册,所以注解中默认为url,所以过滤时必须和需要过滤的目标url相同

 

 二、结果:

三、代码

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>登录</title>
</head>
<body>
    <form action="${pageContext.request.contextPath }/DoServlet" method="post">
            用户名:<input id="name" name="name" type="text" /><br/>
            密码:<input id="password" name="password" type="password" /><br/>
            <input  type="submit" value="登录" />
    </form>
</body>
</html>
index.jsp
<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>主页</title>
</head>
<body>
    <h1>${name }</h1><br/>
    <h1>${password }</h1>
</body>
</html>
main.jsp
package servlet;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/DoServlet")
public class DoServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
    public DoServlet() {
        super();
    }
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("我是doServlet");
        String name = request.getParameter("name");
        String password = request.getParameter("password");
        request.setAttribute("name", name);
        request.setAttribute("password", password);
        request.getRequestDispatcher("main.jsp").forward(request, response);
    }
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        
        doGet(request, response);
    }

}
DoServlet.java
package filter;

import java.io.IOException;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;

@WebFilter(urlPatterns = "/DoServlet")
public class Filter implements javax.servlet.Filter {
    public Filter() {
    }

    public void destroy() {
        // TODO Auto-generated method stub
    }
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        response.setContentType("text/html;charset=utf-8");
        request.setCharacterEncoding("utf-8");
        System.out.println("filter执行前");
        chain.doFilter(request, response);
        System.out.println("filter执行后");
    }

    /**
     * @see Filter#init(FilterConfig)
     */
    public void init(FilterConfig fConfig) throws ServletException {
        // TODO Auto-generated method stub
    }

}
Filter.java

 

posted @ 2019-04-17 10:47  123gogo  阅读(247)  评论(0编辑  收藏  举报