《学习内容》:
//========学习内容=========
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集合,他是有序可重复的,所以他是依次执行的。
有问题的地方:
学习完责任链设计模式后 感觉暂时没有可以想到的应用场景.