《学习内容》:
//========学习内容=========
Filter基本使用
Filter管理机制
Filter链的执行
责任链模式
《知识点—笔记》
//=========================
《代码内容》:
TestFilder
package filter;import javax.servlet.*;import javax.servlet.http.HttpFilter;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.HttpSession;import java.io.IOException;public class TestFilter extends HttpFilter {protected void doFilter(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws IOException, ServletException {HttpSession session = request.getSession();String username = (String)session.getAttribute("username");String requestURI = request.getRequestURI();System.out.println("URI"+"==="+requestURI);if (requestURI.contains("index") || requestURI.contains("login")){chain.doFilter(request,response);}else {if (username != null){request.getRequestDispatcher("welcome.jsp").forward(request,response);}else {request.getRequestDispatcher("index.jsp").forward(request, response);}}}}
LoginController
package controller;import service.LoginService;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.HttpSession;import java.io.IOException;public class LoginController extends HttpServlet {private static LoginService service = new LoginService();protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {System.out.println("控制层执行了");request.setCharacterEncoding("UTF-8");String username = request.getParameter("username");String password = request.getParameter("password");System.out.println(username+"--"+password);String loginResult = service.login(username,password);HttpSession session = request.getSession();session.setAttribute("loginResult",loginResult);System.out.println(loginResult);if ("登录成功".equals(loginResult)){session.setAttribute("username",username);session.setMaxInactiveInterval(10);request.getRequestDispatcher("welcome.jsp").forward(request,response);}else {request.getRequestDispatcher("idnex.jsp").forward(request,response);}}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doPost(request,response);}}
web.xml
<?xml version="1.0" encoding="UTF-8"?><web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"version="4.0"><filter><filter-name>request</filter-name><filter-class>filter.TestFilter</filter-class></filter><filter-mapping><filter-name>request</filter-name><url-pattern>/*</url-pattern></filter-mapping><servlet><servlet-name>login</servlet-name><servlet-class>controller.LoginController</servlet-class></servlet><servlet-mapping><servlet-name>login</servlet-name><url-pattern>/login</url-pattern></servlet-mapping></web-app>
学习总结:
学懂的:
通过Filter过滤器**去过滤在servlet执行之前的操作,那么如果有多个Filter对象,他是怎么执行的呢?——经过测试,他是按照配置文件依次执行
但是经过模拟Filter底层发现,原**来他是用了ArrayList集合,他是有序可重复的,所以他是依次执行的。
有问题的地方:
学习完责任链设计模式后 感觉暂时没有可以想到的应用场景.
