《学习内容》:

    //========学习内容=========
    Filter基本使用
    Filter管理机制
    Filter链的执行
    责任链模式

    《知识点—笔记》
    //=========================

    《代码内容》:
    TestFilder

    1. package filter;
    2. import javax.servlet.*;
    3. import javax.servlet.http.HttpFilter;
    4. import javax.servlet.http.HttpServletRequest;
    5. import javax.servlet.http.HttpServletResponse;
    6. import javax.servlet.http.HttpSession;
    7. import java.io.IOException;
    8. public class TestFilter extends HttpFilter {
    9. protected void doFilter(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws IOException, ServletException {
    10. HttpSession session = request.getSession();
    11. String username = (String)session.getAttribute("username");
    12. String requestURI = request.getRequestURI();
    13. System.out.println("URI"+"==="+requestURI);
    14. if (requestURI.contains("index") || requestURI.contains("login")){
    15. chain.doFilter(request,response);
    16. }else {
    17. if (username != null){
    18. request.getRequestDispatcher("welcome.jsp").forward(request,response);
    19. }else {
    20. request.getRequestDispatcher("index.jsp").forward(request, response);
    21. }
    22. }
    23. }
    24. }

    LoginController

    1. package controller;
    2. import service.LoginService;
    3. import javax.servlet.ServletException;
    4. import javax.servlet.http.HttpServlet;
    5. import javax.servlet.http.HttpServletRequest;
    6. import javax.servlet.http.HttpServletResponse;
    7. import javax.servlet.http.HttpSession;
    8. import java.io.IOException;
    9. public class LoginController extends HttpServlet {
    10. private static LoginService service = new LoginService();
    11. protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    12. System.out.println("控制层执行了");
    13. request.setCharacterEncoding("UTF-8");
    14. String username = request.getParameter("username");
    15. String password = request.getParameter("password");
    16. System.out.println(username+"--"+password);
    17. String loginResult = service.login(username,password);
    18. HttpSession session = request.getSession();
    19. session.setAttribute("loginResult",loginResult);
    20. System.out.println(loginResult);
    21. if ("登录成功".equals(loginResult)){
    22. session.setAttribute("username",username);
    23. session.setMaxInactiveInterval(10);
    24. request.getRequestDispatcher("welcome.jsp").forward(request,response);
    25. }else {
    26. request.getRequestDispatcher("idnex.jsp").forward(request,response);
    27. }
    28. }
    29. protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    30. this.doPost(request,response);
    31. }
    32. }

    web.xml

    1. <?xml version="1.0" encoding="UTF-8"?>
    2. <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
    3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    4. xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
    5. version="4.0">
    6. <filter>
    7. <filter-name>request</filter-name>
    8. <filter-class>filter.TestFilter</filter-class>
    9. </filter>
    10. <filter-mapping>
    11. <filter-name>request</filter-name>
    12. <url-pattern>/*</url-pattern>
    13. </filter-mapping>
    14. <servlet>
    15. <servlet-name>login</servlet-name>
    16. <servlet-class>controller.LoginController</servlet-class>
    17. </servlet>
    18. <servlet-mapping>
    19. <servlet-name>login</servlet-name>
    20. <url-pattern>/login</url-pattern>
    21. </servlet-mapping>
    22. </web-app>

    学习总结:
    学懂的:
    通过Filter过滤器**去过滤在servlet执行之前的操作,那么如果有多个Filter对象,他是怎么执行的呢?——经过测试,他是按照配置文件依次执行
    但是经过模拟Filter底层发现,原**来他是用了ArrayList集合,他是有序可重复的,所以他是依次执行的。
    有问题的地方:
    学习完责任链设计模式后 感觉暂时没有可以想到的应用场景.