Browse Source

1208 过滤器

Demi 5 months ago
parent
commit
065d60c008

+ 34 - 0
lesson/src/com/sf/leetcode/Solution_7.java

@@ -0,0 +1,34 @@
+package com.sf.leetcode;
+
+public class Solution_7 {
+
+    public static void main(String[] args) {
+        System.out.println(Long.MAX_VALUE);
+        System.out.println(Float.MAX_VALUE);
+        System.out.println(Double.MAX_VALUE);
+    }
+
+    // 字符串解法
+    public int reverse(int x) {
+        // 处理负数
+        if (x < 0) {
+            if (x <= Integer.MIN_VALUE) return 0;
+            // x -> 正数 -x -> 负数的返回
+            return -reverse(-x);
+        }
+        // 数字转字符串
+        String str = String.valueOf(x);
+        // 字符数组
+        char[] charArray = str.toCharArray();
+        for (int i = 0; i < charArray.length / 2; i++) {
+            char temp = charArray[i];
+            charArray[i] = charArray[charArray.length - i - 1];
+            charArray[charArray.length - i - 1] = temp;
+        }
+        // 当前的字符串是一个有效的数字 只是超出了int的范围
+        // 所有表示数值的类型 谁的范围最大 byte short int long float double
+        String doubleStr = String.copyValueOf(charArray);
+        double doubleNum = Double.parseDouble(doubleStr);
+        return doubleNum > Integer.MAX_VALUE ? 0 : (int) doubleNum;
+    }
+}

+ 49 - 0
tomcat-demo/sql/sys.sql

@@ -0,0 +1,49 @@
+/*
+SQLyog Community v13.3.0 (64 bit)
+MySQL - 8.0.39 : Database - test
+*********************************************************************
+*/
+
+/*!40101 SET NAMES utf8 */;
+
+/*!40101 SET SQL_MODE=''*/;
+
+/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
+/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
+/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
+/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
+CREATE DATABASE /*!32312 IF NOT EXISTS*/`test` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci */ /*!80016 DEFAULT ENCRYPTION='N' */;
+
+USE `test`;
+
+/*Table structure for table `sys_schedule` */
+
+DROP TABLE IF EXISTS `sys_schedule`;
+
+CREATE TABLE `sys_schedule` (
+                                `sid` int NOT NULL AUTO_INCREMENT,
+                                `uid` int DEFAULT NULL,
+                                `title` varchar(20) DEFAULT NULL,
+                                `completed` int DEFAULT NULL,
+                                PRIMARY KEY (`sid`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
+
+/*Data for the table `sys_schedule` */
+
+/*Table structure for table `sys_user` */
+
+DROP TABLE IF EXISTS `sys_user`;
+
+CREATE TABLE `sys_user` (
+                            `uid` int NOT NULL AUTO_INCREMENT COMMENT '用户id',
+                            `username` varchar(20) DEFAULT NULL COMMENT '用户名',
+                            `password` varchar(100) DEFAULT NULL COMMENT '密码',
+                            PRIMARY KEY (`uid`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
+
+/*Data for the table `sys_user` */
+
+/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
+/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
+/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
+/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;

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

@@ -8,7 +8,7 @@ import jakarta.servlet.http.HttpServletResponse;
 
 import java.io.IOException;
 
-@WebServlet("/filter/servlet")
+@WebServlet(value = "/filter/servlet",name = "filterServlet")
 public class FilterServlet extends HttpServlet {
     @Override
     protected void service(HttpServletRequest req, HttpServletResponse resp)

+ 24 - 0
tomcat-demo/src/main/java/com/sf/tomcatdemo/filter/FilterServlet1.java

@@ -0,0 +1,24 @@
+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;
+
+// 使用注解时 如果只声明一个参数的值 那么可以只用字符串 此时对应的key是默认的value
+@WebServlet(value = "/filter/servlet1",name = "filterServletName")
+public class FilterServlet1 extends HttpServlet {
+    @Override
+    protected void service(HttpServletRequest req, HttpServletResponse resp)
+            throws ServletException, IOException {
+        System.out.println("FilterServlet");
+        try {
+            Thread.sleep(10);
+        } catch (InterruptedException e) {
+            throw new RuntimeException(e);
+        }
+    }
+}

+ 36 - 0
tomcat-demo/src/main/java/com/sf/tomcatdemo/filter/LifeCycleFilter.java

@@ -0,0 +1,36 @@
+package com.sf.tomcatdemo.filter;
+
+import jakarta.servlet.*;
+import jakarta.servlet.annotation.WebFilter;
+
+import java.io.IOException;
+
+// 过滤器也可以通过注解的方式配置
+@WebFilter(
+        filterName = "lifeCycleFilter",
+        urlPatterns = "/filter/servlet1",
+        servletNames = "filterServlet"
+)
+public class LifeCycleFilter implements Filter {
+
+    // 测试构造函数 初始化方法 销毁方法等的调用顺序
+    public LifeCycleFilter() {
+        System.out.println("LifeCycle Filter Constructor");
+    }
+
+    @Override
+    public void init(FilterConfig filterConfig) throws ServletException {
+        System.out.println("Initializing LifeCycleFilter");
+    }
+
+    @Override
+    public void destroy() {
+        System.out.println("Destroying LifeCycleFilter");
+    }
+
+    @Override
+    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
+        System.out.println("LifeCycleFilter doFilter");
+        chain.doFilter(request, response);
+    }
+}

+ 20 - 0
tomcat-demo/src/main/java/com/sf/tomcatdemo/filter/chain/Filter1.java

@@ -0,0 +1,20 @@
+package com.sf.tomcatdemo.filter.chain;
+
+import jakarta.servlet.*;
+import jakarta.servlet.annotation.WebFilter;
+
+import java.io.IOException;
+
+@WebFilter(
+        filterName = "filter1",
+        urlPatterns = "/filter/testServlet"
+)
+public class Filter1 implements Filter {
+
+    @Override
+    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
+        System.out.println("filter1 doFilter start");
+        chain.doFilter(request, response);
+        System.out.println("filter1 doFilter end");
+    }
+}

+ 20 - 0
tomcat-demo/src/main/java/com/sf/tomcatdemo/filter/chain/Filter2.java

@@ -0,0 +1,20 @@
+package com.sf.tomcatdemo.filter.chain;
+
+import jakarta.servlet.*;
+import jakarta.servlet.annotation.WebFilter;
+
+import java.io.IOException;
+
+@WebFilter(
+        filterName = "filter2",
+        urlPatterns = "/filter/testServlet"
+)
+public class Filter2 implements Filter {
+
+    @Override
+    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
+        System.out.println("filter2 doFilter start");
+        chain.doFilter(request, response);
+        System.out.println("filter2 doFilter end");
+    }
+}

+ 19 - 0
tomcat-demo/src/main/java/com/sf/tomcatdemo/filter/chain/TestServlet.java

@@ -0,0 +1,19 @@
+package com.sf.tomcatdemo.filter.chain;
+
+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;
+
+// http://localhost:8080/filter/testServlet
+@WebServlet("/filter/testServlet")
+public class TestServlet extends HttpServlet {
+
+    @Override
+    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
+        System.out.println("TestServlet service");
+    }
+}

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

@@ -90,12 +90,36 @@
         <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>
+    <!-- 过滤器的配置 -->
+<!--    <filter>-->
+<!--        <filter-name>loggingFilter</filter-name>-->
+<!--        <filter-class>com.sf.tomcatdemo.filter.LoggingFilter</filter-class>-->
+<!--    </filter>-->
+<!--    <filter-mapping>-->
+<!--        <filter-name>loggingFilter</filter-name>-->
+<!--        &lt;!&ndash;  声明过滤器的生效范围  &ndash;&gt;-->
+<!--        &lt;!&ndash;  可以通过请求路径确定过滤资源   &ndash;&gt;-->
+<!--        <url-pattern>/filter/servlet</url-pattern>-->
+<!--        &lt;!&ndash;  可以通过servlet名字  &ndash;&gt;-->
+<!--        <servlet-name>filterServletName</servlet-name>-->
+<!--    </filter-mapping>-->
+
+<!--    <filter>-->
+<!--        <filter-name>filter1</filter-name>-->
+<!--        <filter-class>com.sf.tomcatdemo.filter.chain.Filter1</filter-class>-->
+<!--    </filter>-->
+<!--    &lt;!&ndash;  当有多个过滤器时 通过filter-mapping的顺序决定先后顺序 &ndash;&gt;-->
+<!--    <filter-mapping>-->
+<!--        <filter-name>filter1</filter-name>-->
+<!--        <url-pattern>/filter/testServlet</url-pattern>-->
+<!--    </filter-mapping>-->
+
+<!--    <filter>-->
+<!--        <filter-name>filter2</filter-name>-->
+<!--        <filter-class>com.sf.tomcatdemo.filter.chain.Filter2</filter-class>-->
+<!--    </filter>-->
+<!--    <filter-mapping>-->
+<!--        <filter-name>filter2</filter-name>-->
+<!--        <url-pattern>/filter/testServlet</url-pattern>-->
+<!--    </filter-mapping>-->
 </web-app>

+ 5 - 5
tomcat-demo/src/main/webapp/login.html

@@ -47,7 +47,7 @@
             // 定义正则表示字符串的规则
             var  usernameReg= /^[a-zA-Z0-9]{5,10}$/
             // 获得用户在页面上输入的信息
-            var usernameInput =document.getElementById("usernameInput")
+            var usernameInput = document.getElementById("usernameInput")
             var username = usernameInput.value
             // 获得格式提示的框
             var usernameMsg =document.getElementById("usernameMsg")
@@ -67,10 +67,10 @@
             // 定义正则表示字符串的规则
             var  userPwdReg= /^[0-9]{6}$/
             // 获得用户在页面上输入的信息
-            var userPwdInput =document.getElementById("userPwdInput")
+            var userPwdInput = document.getElementById("userPwdInput")
             var userPwd = userPwdInput.value
             // 获得格式提示的框
-            var userPwdMsg =document.getElementById("userPwdMsg")
+            var userPwdMsg = document.getElementById("userPwdMsg")
             // 格式有误时,返回false,在页面上提示
             if(!userPwdReg.test(userPwd)){
                 userPwdMsg.innerText="密码必须是6位数字"
@@ -84,8 +84,8 @@
 
         // 表单在提交时,校验用户名和密码格式,格式OK才会提交
         function checkForm(){
-            var flag1 =checkUsername()
-            var flag2 =checkUserPwd()
+            var flag1 = checkUsername()
+            var flag2 = checkUserPwd()
 
             return flag1&&flag2
             // return true