通过Filter统一全站编码

为什么在filter 中设置编码

之前每个servlet都设置编码方式,防止请求和响应出现乱码,那么出现大量重复代码,而filter能够对请求消息和响应消息进行处理,所以把重复代码提取到filter中来。


编写表单form.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>表单</title>
</head>
<body style="text-align: center;">
<a href="CharacterServlet?name=传智播客&password=123456">单击超链接登录</a>
<form action="CharacterServlet"      method="post">
    <table border="1" width="600px" cellpadding="0" cellspacing="0"
           align="center">
        <tr>
            <td height="30" align="center">用户名:</td>
            <td>&nbsp;<input type="text" name="name" />
            </td>
        </tr>
        <tr>
            <td height="30" align="center">密 &nbsp; 码:</td>
            <td>&nbsp;<input type="password" name="password" />
            </td>
        </tr>
        <tr>
            <td height="30" colspan="2" align="center">
                <input type="submit" value="登录" />
                &nbsp;&nbsp;&nbsp;&nbsp;
                <input type="reset" value="重置" />
            </td>
        </tr>
    </table>
</form>
</body>
</html>

创建CharacterServlet

public class CharacterServlet extends HttpServlet {
    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        PrintWriter out = response.getWriter();
        out.write("name="+request.getParameter("name")+"<br/>");
        out.write("password="+request.getParameter("password")+"<br/>");
    }
    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        doGet(request, response);
    }
}

创建CharacterFilter

@WebFilter(filterName = "CharacterFilter",urlPatterns = "/*")
public class CharacterFilter implements Filter {
    public void init(FilterConfig filterConfig) throws ServletException {
    }
    public void doFilter(ServletRequest req, ServletResponse resp,
                         FilterChain chain) throws IOException, ServletException {
        HttpServletRequest request = (HttpServletRequest) req;
        HttpServletResponse response = (HttpServletResponse) resp;
        // 拦截所有的请求 解决全站中文乱码
        //如果是访问servlet,指定 request 和 response 的编码,否则直接放行
        if(request.getRequestURI().endsWith("Servlet")){
            request.setCharacterEncoding("utf-8");
            response.setContentType("text/html;charset=utf-8");
        }
        chain.doFilter(request, response);
    }
    public void destroy() {
    }
}

启动项目,在浏览器上查看是否乱码

http://localhost:8080/javaweb-demo/form.html

测试post提交和get提交的参数返回到浏览器上是否乱码。 

 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值