Browse Source

1201 会话管理和过滤器

Demi 6 months ago
parent
commit
c09f4b58d2

+ 29 - 0
tomcat-demo/src/main/java/com/sf/tomcatdemo/cookie/CookieServlet1.java

@@ -0,0 +1,29 @@
+package com.sf.tomcatdemo.cookie;
+
+import jakarta.servlet.ServletException;
+import jakarta.servlet.annotation.WebServlet;
+import jakarta.servlet.http.Cookie;
+import jakarta.servlet.http.HttpServlet;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
+
+import java.io.IOException;
+
+@WebServlet("/cookie/servlet1")
+public class CookieServlet1 extends HttpServlet {
+
+    @Override
+    protected void service(HttpServletRequest req, HttpServletResponse resp)
+            throws ServletException, IOException {
+
+        // 创建Cookie放入到响应对象中
+        Cookie cookie = new Cookie("c1","v1");
+        // 设置cookie的有效时间 单位是秒
+        cookie.setMaxAge(60);
+        resp.addCookie(cookie);
+
+        Cookie cookie2 = new Cookie("c2","v2");
+        cookie2.setPath("/cookie/servlet2");
+        resp.addCookie(cookie2);
+    }
+}

+ 27 - 0
tomcat-demo/src/main/java/com/sf/tomcatdemo/cookie/CookieServlet2.java

@@ -0,0 +1,27 @@
+package com.sf.tomcatdemo.cookie;
+
+import jakarta.servlet.ServletException;
+import jakarta.servlet.annotation.WebServlet;
+import jakarta.servlet.http.Cookie;
+import jakarta.servlet.http.HttpServlet;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
+
+import java.io.IOException;
+
+@WebServlet("/cookie/servlet2")
+public class CookieServlet2 extends HttpServlet {
+
+    @Override
+    protected void service(HttpServletRequest req, HttpServletResponse resp)
+            throws ServletException, IOException {
+        // 从请求中获取多个cookie
+        Cookie[] cookies = req.getCookies();
+        if(cookies != null && cookies.length > 0) {
+            // 遍历多个cookie
+            for(Cookie cookie : cookies) {
+                System.out.println(cookie.getName() + " " + cookie.getValue());
+            }
+        }
+    }
+}

+ 23 - 0
tomcat-demo/src/main/java/com/sf/tomcatdemo/filter/FilterServlet.java

@@ -0,0 +1,23 @@
+package com.sf.tomcatdemo.filter;
+
+import jakarta.servlet.ServletException;
+import jakarta.servlet.annotation.WebServlet;
+import jakarta.servlet.http.HttpServlet;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
+
+import java.io.IOException;
+
+@WebServlet("/filter/servlet")
+public class FilterServlet extends HttpServlet {
+    @Override
+    protected void service(HttpServletRequest req, HttpServletResponse resp)
+            throws ServletException, IOException {
+        System.out.println("FilterServlet");
+        try {
+            Thread.sleep(15);
+        } catch (InterruptedException e) {
+            throw new RuntimeException(e);
+        }
+    }
+}

+ 34 - 0
tomcat-demo/src/main/java/com/sf/tomcatdemo/filter/LoggingFilter.java

@@ -0,0 +1,34 @@
+package com.sf.tomcatdemo.filter;
+
+import jakarta.servlet.*;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
+
+import java.io.IOException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+// 日志过滤器
+public class LoggingFilter implements Filter {
+
+    private SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+
+    @Override
+    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
+            throws IOException, ServletException {
+        // 缩小请求和响应的范围
+        HttpServletRequest req = (HttpServletRequest) request;
+        HttpServletResponse resp = (HttpServletResponse) response;
+        // 在请求之前和处理之后 进行日志的打印
+        String requestURI = req.getRequestURI();
+        String time = sdf.format(new Date());
+        System.out.println( requestURI + " : " + time );
+
+        long start = System.currentTimeMillis();
+        // 让请求被Servlet处理
+        chain.doFilter(request, response);
+        long end = System.currentTimeMillis();
+        System.out.println( requestURI + " : " + (end - start) );
+
+    }
+}

+ 24 - 0
tomcat-demo/src/main/java/com/sf/tomcatdemo/session/SessionServlet1.java

@@ -0,0 +1,24 @@
+package com.sf.tomcatdemo.session;
+
+import jakarta.servlet.ServletException;
+import jakarta.servlet.annotation.WebServlet;
+import jakarta.servlet.http.HttpServlet;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
+import jakarta.servlet.http.HttpSession;
+
+import java.io.IOException;
+
+@WebServlet("/session/servlet1")
+public class SessionServlet1 extends HttpServlet {
+
+    @Override
+    protected void service(HttpServletRequest req, HttpServletResponse resp)
+            throws ServletException, IOException {
+
+        // JSEESIONID 就是创建session对象时 放入到cookie中的
+        HttpSession session = req.getSession();
+        String sessionId = session.getId();
+        System.out.println(sessionId);
+    }
+}

+ 24 - 0
tomcat-demo/src/main/java/com/sf/tomcatdemo/session/SessionServlet2.java

@@ -0,0 +1,24 @@
+package com.sf.tomcatdemo.session;
+
+import jakarta.servlet.ServletException;
+import jakarta.servlet.annotation.WebServlet;
+import jakarta.servlet.http.HttpServlet;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
+import jakarta.servlet.http.HttpSession;
+
+import java.io.IOException;
+
+@WebServlet("/session/servlet2")
+public class SessionServlet2 extends HttpServlet {
+
+    @Override
+    protected void service(HttpServletRequest req, HttpServletResponse resp)
+            throws ServletException, IOException {
+        HttpSession session = req.getSession();
+        // 设置session的闲置时间
+        session.setMaxInactiveInterval(60);
+        // 设置为无效
+        session.invalidate();
+    }
+}

+ 8 - 0
tomcat-demo/src/main/webapp/WEB-INF/web.xml

@@ -90,4 +90,12 @@
         <url-pattern>/servlet3</url-pattern>
     </servlet-mapping>
 
+    <filter>
+        <filter-name>loggingFilter</filter-name>
+        <filter-class>com.sf.tomcatdemo.filter.LoggingFilter</filter-class>
+    </filter>
+    <filter-mapping>
+        <filter-name>loggingFilter</filter-name>
+        <url-pattern>/filter/servlet</url-pattern>
+    </filter-mapping>
 </web-app>