我用代码教会你:Filter做登录拦截
1.前言
在大家刚开始学习Java Web时,相信最先接触到的一定是JSP + Servlet来开发web应用。这里我们来唠一唠Servlet中的过滤器Filter的使用,以及相应的实际开发场景。
2.Filter是什么?
2.1官方这么定义Filter
过滤器(Filter)是一个对象,它对资源(servlet或静态内容)的请求或资源的响应执行过滤任务,或对两者执行过滤任务。——摘自JavaEE6文档
2.2查看Filter文档
Java EE6文档:https://tool.oschina.net/apidocs/apidoc?api=javaEE6
3.Filter执行流程图解
4.实际开发场景中的Filter
4.1统一编码处理
4.1.1业务场景
在我们开发Java Web中,form表单经常需要填写中文并且传递到服务器中进行存储。因此,我们进行需要处理乱码问题。
若注册表单有中文参数,则处理注册的Servlet就需要处理中文乱码问题;若登录表单有中文参数,则处理登录的Servlet就需要处理中文乱码问题;2个表单有中文就要处理2次,那10个form表单,100个form表单呢???
因此,通过Filter来统一处理所有请求的中文乱码问题,非常的酸爽。下面我们用代码演示下:
4.1.2项目结构
PS:此时我们实现一个这样的效果:写2个表单分别是login.jsp与register.jsp,填写中文进行提交表单。通过filter进行统一处理多个表单的中文乱码问题。
4.1.3 处理表单的Servlet
RegisterServlet:
@WebServlet(name = "RegisterServlet",urlPatterns = "/register.do")
public class RegisterServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//接收参数
String username = request.getParameter("username");
String pwd = request.getParameter("pwd");
System.out.println("username:"+username+",pwd:"+pwd);
request.getRequestDispatcher("login.jsp").forward(request,response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request,response);
}
}
LoginServlet:
@WebServlet(name