文章目录
1 实验目的
- 了解过滤器的在项目开发中的作用;
- 重点掌握过滤器的开发与部署步骤;
- 了解过滤器链的作用。
2 实验原理
过滤器是Java Web三大组件之一,它与Servlet很相似,但过滤器与Servlet功能不同,过滤器是用来拦截请求的,而不是处理请求的。
当用户请求某个Servlet时,会先执行部署在这个请求上的Filter,如果Filter“放行”,那么会继承执行用户请求的Servlet;如果Filter不“放行”,那么就不会执行用户请求的Servlet。
其实可以这样理解,当用户请求某个Servlet时,Tomcat会去执行注册在这个请求上的Filter,然后是否“放行”由Filter来决定。可以理解为,Filter来决定是否调用Servlet。当执行完成Servlet的代码后,它将作三件事情:
(1)产生响应并返回给客户;
(2)如果有过滤器链,容器会将请求传递给下一个过滤器;
(3)将请求传递给下一个资源。当请求返回客户时,它以相反方向经过同一组过滤器返回。过滤器链中的每个过滤器可能会修改响应。
3 实验任务与步骤
3.1 编写过滤器,进行中文乱码处理
任务描述:
编写过滤器类,处理所有请求编码,解决中文乱码问题。
实验步骤:
- 编写一个用户请求表单页面login.jsp,供用户提供表单向服务器传递请求参数。
- 编写Servlet(CheckParamServlet.java),处理用户提交的请求参数。
- 修改web.xml配置。
3.1.1 编写login.html
<!DOCTYPE html>
<html>
<head>
<title>使用过滤器改变请求编码</title>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
</head>
<body>
<center>
<h2>请输入用户名和口令:</h2>
<form method="post" action="../CheckParamServlet">
<table>
<tr>
<td>用户名:</td>
<td><input name="name" type="text"></td>
</tr>
<tr>
<td>口 令:</td>
<td><input name="pass" type="password"></td>
<tr>
<td></td>
<td>
<input name="ok" type="submit" value="提交">
<input name="cancel" type="reset" value="重置">
</td>
</tr>
</table>
</form>
</center>
</body>
</html>
3.1.2 编写CheckParamServlet.java
package exp07.bean;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class CheckParamServlet extends HttpServlet {
public CheckParamServlet() {
super();
}
@Override
public void destroy() {
super.destroy();
}
@Override
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String name = request.getParameter("name");
String pass = request.getParameter("pass");
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
out.println("<html><head><title>Param Test</title></head>")