为什么在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> <input type="text" name="name" />
</td>
</tr>
<tr>
<td height="30" align="center">密 码:</td>
<td> <input type="password" name="password" />
</td>
</tr>
<tr>
<td height="30" colspan="2" align="center">
<input type="submit" value="登录" />
<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提交的参数返回到浏览器上是否乱码。