JakartaEE servlet

本文详细介绍了JakartaEE中Servlet的使用,包括注解和XML方式创建Servlet,响应用户数据,获取网络、请求行和请求头信息,Servlet生命周期,ServletConfig和ServletContext的应用,请求转发和重定向,以及Session、Cookie、Filter和Listener的使用。同时,还涵盖了Servlet接收和处理各种类型的数据,如表单、JSON和文件上传。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简介

JakartaEE是JavaEE的继承者,Oracle公司将JavaEE的API定义,文档,参考实现,测试TCK和套件都转移给Eclipse开源组织。

JavaSE为J2EE提供了库和语法,J2EE使用Java的库和语法应用在WEB上。这是概念性的区别。

  • Java SE:标准版Java SE(Java Platform,Standard Edition)。JavaSE以前称为J2SE。

    它为开发和部署在桌面,服务器,嵌入式环境和实时环境中使用Java应用程序。

    JavaSE包含了支持JavaWeb服务的开发的类,并为Java Platform,Enterprise Edition(Java EE)提供了基础。

  • 企业版Java EE(Java Platform,Enterprise Edition)。这个版本以前称为J2EE。

    企业版本帮助开发和部署可移植,健壮,可伸缩切安全的服务器端Java应用程序。

构建 java Enterprise项目

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.lihaozhe</groupId>
    <artifactId>servlet</artifactId>
    <version>1.0-SNAPSHOT</version>
    <name>servlet</name>
    <packaging>war</packaging>

    <properties>
        <jdk.version>17</jdk.version>
        <maven.compiler.source>17</maven.compiler.source>
        <maven.compiler.target>17</maven.compiler.target>
        <maven.compiler.compilerVersion>17</maven.compiler.compilerVersion>
        <maven.compiler.encoding>utf-8</maven.compiler.encoding>
        <project.build.sourceEncoding>utf-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <maven.test.failure.ignore>true</maven.test.failure.ignore>
        <maven.test.skip>true</maven.test.skip>
        <junit.version>5.8.2</junit.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>jakarta.servlet</groupId>
            <artifactId>jakarta.servlet-api</artifactId>
            <version>5.0.0</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-api</artifactId>
            <version>${junit.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-engine</artifactId>
            <version>${junit.version}</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <!--项目打包文件名-->
        <finalName>servlet</finalName>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <version>3.3.2</version>
            </plugin>
            <!-- 编译级别 -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>
                <configuration>
                    <!-- 设置编译字符编码 -->
                    <encoding>UTF-8</encoding>
                    <!-- 设置编译jdk版本 -->
                    <source>${jdk.version}</source>
                    <target>${jdk.version}</target>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-clean-plugin</artifactId>
                <version>3.2.0</version>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-resources-plugin</artifactId>
                <version>3.2.0</version>
            </plugin>
            <!-- 打包的时候跳过测试junit begin -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.22.2</version>
                <configuration>
                    <skip>true</skip>
                </configuration>
            </plugin>
            <!-- tomcat7插件 -->
            <plugin>
                <groupId>org.apache.tomcat.maven</groupId>
                <artifactId>tomcat7-maven-plugin</artifactId>
                <version>2.2</version>
                <configuration>
                    <port>6633</port>
                    <path>/lhz</path>
                    <uriEncoding>UTF-8</uriEncoding>
                    <!-- tomcat热部署 -->
                    <username>admin</username>
                    <password>admin</password>
                    <url>http://192.168.18.65:8080/manager/text</url>
                </configuration>
            </plugin>
            <!-- jetty插件 -->
            <plugin>
                <groupId>org.eclipse.jetty</groupId>
                <artifactId>jetty-maven-plugin</artifactId>
                <version>11.0.9</version>
                <configuration>
                    <webApp>
                        <contextPath>/lhz</contextPath>
                        <defaultsDescriptor>${basedir}/src/main/resources/webdefault.xml</defaultsDescriptor>
                    </webApp>
                    <httpConnector>
                        <port>6633</port>
                    </httpConnector>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>
运行项目在这里插入图片描述

在这里插入图片描述

访问主页

http://localhost:6633/lhz/
在这里插入图片描述访问Servlet在这里插入图片描述

访问REST接口

http://localhost:6633/lhz/api/hello-world在这里插入图片描述

远程热部署

修改tomca/conf/tomcat-users.xml

<?xml version="1.0" encoding="UTF-8"?>
<!--
  Licensed to the Apache Software Foundation (ASF) under one or more
  contributor license agreements.  See the NOTICE file distributed with
  this work for additional information regarding copyright ownership.
  The ASF licenses this file to You under the Apache License, Version 2.0
  (the "License"); you may not use this file except in compliance with
  the License.  You may obtain a copy of the License at

      http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.
-->
<tomcat-users xmlns="http://tomcat.apache.org/xml"
              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
              xsi:schemaLocation="http://tomcat.apache.org/xml tomcat-users.xsd"
              version="1.0">
<!--
  NOTE:  By default, no user is included in the "manager-gui" role required
  to operate the "/manager/html" web application.  If you wish to use this app,
  you must define such a user - the username and password are arbitrary. It is
  strongly recommended that you do NOT use one of the users in the commented out
  section below since they are intended for use with the examples web
  application.
-->
<!--
  NOTE:  The sample user and role entries below are intended for use with the
  examples web application. They are wrapped in a comment and thus are ignored
  when reading this file. If you wish to configure these users for use with the
  examples web application, do not forget to remove the <!.. ..> that surrounds
  them. You will also need to set the passwords to something appropriate.
-->
<!--
  <role rolename="tomcat"/>
  <role rolename="role1"/>
  <user username="tomcat" password="<must-be-changed>" roles="tomcat"/>
  <user username="both" password="<must-be-changed>" roles="tomcat,role1"/>
  <user username="role1" password="<must-be-changed>" roles="role1"/>
-->
<role rolename="manager-gui"/>
<role rolename="manager-script"/>
<role rolename="manager-jmx"/>
<role rolename="manager-status"/>
<role rolename="admin-gui"/>
<role rolename="admin-script"/>
<user username="admin" password="admin" roles="manager-gui,manager-script,manager-jmx,manager-status,admin-gui,admin-script"/>
</tomcat-users>

修改webapps/manager/META-INF/context.xml和webapps/host-manager/META-INF/context.xml

<?xml version="1.0" encoding="UTF-8"?>
<!--
  Licensed to the Apache Software Foundation (ASF) under one or more
  contributor license agreements.  See the NOTICE file distributed with
  this work for additional information regarding copyright ownership.
  The ASF licenses this file to You under the Apache License, Version 2.0
  (the "License"); you may not use this file except in compliance with
  the License.  You may obtain a copy of the License at

      http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.
-->
<Context antiResourceLocking="false" privileged="true" >
  <CookieProcessor className="org.apache.tomcat.util.http.Rfc6265CookieProcessor"
                   sameSiteCookies="strict" />
  <Valve className="org.apache.catalina.valves.RemoteAddrValve"
         allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />
  <Manager sessionAttributeValueClassNameFilter="java\.lang\.(?:Boolean|Integer|Long|Number|String)|org\.apache\.catalina\.filters\.CsrfPreventionFilter\$LruCache(?:\$1)?|java\.util\.(?:Linked)?HashMap"/>
</Context>

修改后

<?xml version="1.0" encoding="UTF-8"?>
<!--
  Licensed to the Apache Software Foundation (ASF) under one or more
  contributor license agreements.  See the NOTICE file distributed with
  this work for additional information regarding copyright ownership.
  The ASF licenses this file to You under the Apache License, Version 2.0
  (the "License"); you may not use this file except in compliance with
  the License.  You may obtain a copy of the License at

      http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.
-->
<Context antiResourceLocking="false" privileged="true" >
  <CookieProcessor className="org.apache.tomcat.util.http.Rfc6265CookieProcessor"
                   sameSiteCookies="strict" />
  <Manager sessionAttributeValueClassNameFilter="java\.lang\.(?:Boolean|Integer|Long|Number|String)|org\.apache\.catalina\.filters\.CsrfPreventionFilter\$LruCache(?:\$1)?|java\.util\.(?:Linked)?HashMap"/>
</Context>
新建Servlet
新建Servlet(注解方式)在这里插入图片描述

在这里插入图片描述

package com.jdyxk.controller;
/**
 * @author 李昊哲
 * @Description
 * @version 1.0
 * @createTime 2021/8/31 上午10:45
 */

import jakarta.servlet.*;
import jakarta.servlet.http.*;
import jakarta.servlet.annotation.*;

import java.io.IOException;

//@WebServlet(name = "Servlet01", value = "/Servlet01")
@WebServlet(name = "Servlet01", urlPatterns = {"servlet01.action", "servlet01.do"})
public class Servlet01 extends HttpServlet {
    private static final long serialVersionUID = 5946742088318622256L;

    /**
     * @param request  接收用户请求数据
     * @param response 向用户发送响应数据
     * @throws ServletException Servlet异常
     * @throws IOException      IO异常
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // HttpServletRequest 接收用户请求数据
        // HttpServletResponse 向用户发送响应数据
        System.out.println("注解方式启动");
    }
}

在这里插入图片描述
在这里插入图片描述

访问注解方式编写的Servlet

http://localhost:6633/lhz/servlet01.action

http://localhost:6633/lhz/servlet01.do

新建Servlet(xml方式)在这里插入图片描述
package com.jdyxk.controller;
/**
 * @author 李昊哲
 * @Description
 * @version 1.0
 * @createTime 2021/8/31 上午10:58
 */

import jakarta.servlet.*;
import jakarta.servlet.http.*;

import java.io.IOException;

public class Servlet02 extends HttpServlet {
    private static final long serialVersionUID = 2878265913197286928L;

    /**
     * @param request  接收用户请求数据
     * @param response 向用户发送响应数据
     * @throws ServletException Servlet异常
     * @throws IOException      IO异常
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // HttpServletRequest 接收用户请求数据
        // HttpServletResponse 向用户发送响应数据
        System.out.println("web.xml方式访问");
    }
}
编写web.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="https://jakarta.ee/xml/ns/jakartaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_5_0.xsd"
         version="5.0">
    <servlet>
        <servlet-name>Servlet02</servlet-name>
        <servlet-class>com.jdyxk.controller.Servlet02</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>Servlet02</servlet-name>
        <url-pattern>/Servlet02</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>Servlet02</servlet-name>
        <url-pattern>/servlet02.action</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>Servlet02</servlet-name>
        <url-pattern>/servlet02.do</url-pattern>
    </servlet-mapping>
</web-app>

在这里插入图片描述
在这里插入图片描述

访问xml方式编写的Servlet

http://localhost:6633/lhz/servlet02.action

http://localhost:6633/lhz/servlet02.do

Servlet响应用户数据在这里插入图片描述
package com.jdyxk.controller;
/**
 * @author 李昊哲
 * @Description
 * @version 1.0
 * @createTime 2021/8/31 上午11:03
 */

import jakarta.servlet.*;
import jakarta.servlet.http.*;
import jakarta.servlet.annotation.*;

import java.io.IOException;
import java.io.PrintWriter;

@WebServlet(name = "Servlet03", value = "/Servlet03")
public class Servlet03 extends HttpServlet {
    private static final long serialVersionUID = -4783247332404478078L;

    /**
     * @param request  接收用户请求数据
     * @param response 向用户发送响应数据
     * @throws ServletException Servlet异常
     * @throws IOException      IO异常
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("love love love");
        // 处理请求数据中文乱码
        // 处理post请求的中文乱码
        request.setCharacterEncoding("utf-8");
        // 处理响应的字符集中文乱码
        response.setCharacterEncoding("utf-8");
        // response.setHeader("Content-Type","text/html;charset=utf-8");
        response.setContentType("text/html;charset=utf-8");
        PrintWriter writer = response.getWriter();
        writer.println("love and peace");
        writer.println("<br>");
        writer.println("我爱你中国,亲爱的母亲");
        writer.flush();
        writer.close();
    }

}

访问Servlet响应数据

http://localhost:6633/lhz/servlet03

获取网络信息

http://192.168.18.65:6633/lhz/NetworkInfo

NetworkInfo.ajva

package com.jdyxk.http;
/**
 * @author 李昊哲
 * @Description
 * @version 1.0
 * @createTime 2021/8/31 上午11:42
 */

import com.jdyxk.commons.localdatetime.BaseLocalDateTime;
import jakarta.servlet.*;
import jakarta.servlet.http.*;
import jakarta.servlet.annotation.*;

import java.io.IOException;

@WebServlet(name = "NetworkInfo", value = "/NetworkInfo")
public class NetworkInfo extends HttpServlet {
    private static final long serialVersionUID = 3482094487102418998L;

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 客户端(远程机器)
        // System.out.println("客户端IP地址 >>> " + request.getRemoteAddr());
        // System.out.println("客户端IP地址 >>> " + request.getRemoteHost());
        // System.out.println("客户端口号 >>> " + request.getRemotePort());

        // 服务器端(本地机器)
        // System.out.println("服务器IP地址 >>> " + request.getLocalAddr());
        // System.out.println("服务器端口号 >>> " + request.getLocalPort());
        // System.out.println("请求的URL >>> " + request.getRequestURL());

        System.out.println(BaseLocalDateTime.nowString() + "\t客户端:"  + request.getRemoteAddr() + ":" + request.getRemotePort() + "\t请求的URL:" + request.getRequestURL());
    }
}
获取请求行信息

http://192.168.18.65:6633/lhz/RequestLine.jsp

在webapp目录新建页面文件RequestLine.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>查询字符串</title>
</head>
<body>
<form action="${pageContext.request.contextPath}/RequestLine" method="GET">
    <input type="text" name="account" value="" id="account" autocomplete="off" placeholder="请输入账户">
    <input type="password" name="password" value="" id="auth_text" autocomplete="off" placeholder="请输入密码">
    <input type="submit" value="登录">
</form>
</body>
</html>

RequestLine.java

package com.jdyxk.http;
/**
 * @author 李昊哲
 * @Description
 * @version 1.0
 * @createTime 2021/8/31 上午11:51
 */

import com.jdyxk.commons.string.StringUtil;
import jakarta.servlet.*;
import jakarta.servlet.http.*;
import jakarta.servlet.annotation.*;

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

@WebServlet(name = "RequestLine", value = "/RequestLine")
public class RequestLine extends HttpServlet {
    private static final long serialVersionUID = -1462573233106677460L;

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 获取请求方式
        System.out.println("请求方式:" + request.getMethod());
        // 获取路径(URL、URI)
        System.out.println("请求的URL:" + request.getRequestURL());
        System.out.println("请求的URI:" + request.getRequestURI());

        // 获取协议
        System.out.println("协议:"  + request.getProtocol());

        // 上下文路径
        System.out.println("请求的上下文路径:" + request.getContextPath());
        // jsp中 ${pageContext.request.contextPath}

        // 获取查询字符串
        System.out.println("请求的查询字符串:" + request.getQueryString());
        Map<String, String> map = parseQueryString(request.getQueryString());
        map.forEach((key, value) -> System.out.println("name = " + key + "\tvalue = " + value));
        // 回到原页面
        response.sendRedirect("RequestLine.jsp");
    }

    /**
     * 解析查询字符串
     *
     * @param queryString
     * @return
     */
    public Map<String, String> parseQueryString(String queryString) {
        Map<String, String> map = new HashMap<>();
        if (StringUtil.isBlank(queryString)) {
            return map;
        }
        String[] split = queryString.split("&");
        for (String param : split) {
            // account=admin
            // auth_text=123456
            String[] strings = param.split("=");
            map.put(strings[0], strings[1]);
        }
        return map;
    }
}
获取请求头信息

http://192.168.18.65:6633/lhz/RequestHeader

RequestHeader.java

package com.jdyxk.http;
/**
 * @author 李昊哲
 * @Description
 * @version 1.0
 * @createTime 2021/8/31 下午12:10
 */

import cn.hutool.http.useragent.UserAgent;
import cn.hutool.http.useragent.UserAgentParser;
import jakarta.servlet.*;
import jakarta.servlet.http.*;
import jakarta.servlet.annotation.*;

import java.io.IOException;
import java.util.Enumeration;

@WebServlet(name = "RequestHeader", value = "/RequestHeader")
public class RequestHeader extends HttpServlet {
    private static final long serialVersionUID = 1349423243847607898L;

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // System.out.println(request.getHeader("User-Agent"));
        System.out.println("++++++++++++++++++++++++++++++++++++++++++++++++++++++");
        Enumeration<String> headerNames = request.getHeaderNames();
        while (headerNames.hasMoreElements()){
            String name = headerNames.nextElement();
            System.out.println(name + ":" + request.getHeader(name));
        }
        System.out.println("++++++++++++++++++++++++++++++++++++++++++++++++++++++");
        String userAgentString = request.getHeader("User-Agent");
        UserAgent ua = UserAgentParser.parse(userAgentString);
        System.out.println("浏览器 >>> " + ua.getBrowser().toString());
        System.out.println("浏览器版本号 >>> " + ua.getVersion().toString());
        System.out.println("浏览器内核 >>> " + ua.getEngine().toString());
        System.out.println("浏览器内核版本号 >>> " + ua.getEngineVersion().toString());
        System.out.println("操作系统 >>> " + ua.getOs().toString());
        System.out.println("操作系统 >>> " + ua.getPlatform().toString());
        if (ua.isMobile()){
            System.out.println("移动端");
        } else {
            System.out.println("PC端");
        }
    }

}
Servlet生命周期在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

注解方式验证
package com.jdyxk.lifecycle;

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;

/**
 * @author 李昊哲
 * @version 1.0
 * @Description
 * @createTime 2021/9/1 上午8:47
 */
@WebServlet(urlPatterns = {"ServletLifeCycle01"})
public class ServletLifeCycle01 extends HttpServlet {
    private static final long serialVersionUID = 4267392516924911501L;

    public ServletLifeCycle01() {
        System.out.println("ServletLifeCycle01实例化 ServletLifeCycle01()");
    }

    @Override
    public void init() throws ServletException {
        System.out.println("ServletLifeCycle01初始化 init()");
    }

    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("ServletLifeCycle01执行代码 service()");
    }

    @Override
    public void destroy() {
        System.out.println("ServletLifeCycle01销毁 destroy()");
    }

}

验证地址:http://localhost:6633/lhz/ServletLifeCycle01

ServletLifeCycle01实例化 ServletLifeCycle01()
ServletLifeCycle01初始化 init()
ServletLifeCycle01执行代码 service()
ServletLifeCycle01执行代码 service()
ServletLifeCycle01执行代码 service()
[INFO] Stopped Server@65383667{STOPPING}[11.0.6,sto=0]
[INFO] Stopped ServerConnector@27dc335a{HTTP/1.1, (http/1.1)}{0.0.0.0:6633}
ServletLifeCycle01销毁 destroy()
xml方式验证
package com.jdyxk.lifecycle;

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;

/**
 * @author 李昊哲
 * @version 1.0
 * @Description
 * @createTime 2021/9/1 上午8:47
 */
public class ServletLifeCycle02 extends HttpServlet {
    private static final long serialVersionUID = 8775396186318641340L;

    public ServletLifeCycle02() {
        System.out.println("ServletLifeCycle02实例化 ServletLifeCycle02()");
    }

    @Override
    public void init() throws ServletException {
        System.out.println("ServletLifeCycle02初始化 init()");
    }

    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("ServletLifeCycle02执行代码 service()");
    }

    @Override
    public void destroy() {
        System.out.println("ServletLifeCycle02销毁 destroy()");
    }

}
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="https://jakarta.ee/xml/ns/jakartaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_5_0.xsd"
         version="5.0">
    <!--com.jdyxk.lifecycle.ServletLifeCycle02-->
    <servlet>
        <servlet-name>ServletLifeCycle02</servlet-name>
        <servlet-class>com.jdyxk.lifecycle.ServletLifeCycle02</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>ServletLifeCycle02</servlet-name>
        <url-pattern>/ServletLifeCycle02</url-pattern>
    </servlet-mapping>
</web-app>

验证地址:http://localhost:6633/lhz/ServletLifeCycle02

ServletLifeCycle02实例化 ServletLifeCycle02()
ServletLifeCycle02初始化 init()
ServletLifeCycle02执行代码 service()
ServletLifeCycle02执行代码 service()
ServletLifeCycle02执行代码 service()
[INFO] Stopped Server@6f65a203{STOPPING}[11.0.6,sto=0]
[INFO] Stopped ServerConnector@5b3c11ce{HTTP/1.1, (http/1.1)}{0.0.0.0:6633}
ServletLifeCycle02销毁 destroy()
Servlet自动初始化
package com.jdyxk.lifecycle;

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;

/**
 * @author 李昊哲
 * @version 1.0
 * @Description
 * @createTime 2021/9/1 上午8:47
 */
@WebServlet(urlPatterns = {"ServletLifeCycle01"},loadOnStartup = 6)
public class ServletLifeCycle01 extends HttpServlet {
    private static final long serialVersionUID = 4267392516924911501L;

    public ServletLifeCycle01() {
        System.out.println("ServletLifeCycle01实例化 ServletLifeCycle01()");
    }

    @Override
    public void init() throws ServletException {
        System.out.println("ServletLifeCycle01初始化 init()");
    }

    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("ServletLifeCycle01执行代码 service()");
    }

    @Override
    public void destroy() {
        System.out.println("ServletLifeCycle01销毁 destroy()");
    }

}
package com.jdyxk.lifecycle;

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;

/**
 * @author 李昊哲
 * @version 1.0
 * @Description
 * @createTime 2021/9/1 上午8:47
 */
public class ServletLifeCycle02 extends HttpServlet {
    private static final long serialVersionUID = 8775396186318641340L;

    public ServletLifeCycle02() {
        System.out.println("ServletLifeCycle02实例化 ServletLifeCycle02()");
    }

    @Override
    public void init() throws ServletException {
        System.out.println("ServletLifeCycle02初始化 init()");
    }

    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("ServletLifeCycle02执行代码 service()");
    }

    @Override
    public void destroy() {
        System.out.println("ServletLifeCycle02销毁 destroy()");
    }

}
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="https://jakarta.ee/xml/ns/jakartaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_5_0.xsd"
         version="5.0">
    <servlet-mapping>
        <servlet-name>Servlet02</servlet-name>
        <url-pattern>/servlet02.do</url-pattern>
    </servlet-mapping>
    <!--com.jdyxk.lifecycle.ServletLifeCycle02-->
    <servlet>
        <servlet-name>ServletLifeCycle02</servlet-name>
        <servlet-class>com.jdyxk.lifecycle.ServletLifeCycle02</servlet-class>
        <!--服务启动时是实例化Servlet类 注意 load-on-startup必须配在配置行的最末行 数值越小优先级越高-->
        <load-on-startup>3</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>ServletLifeCycle02</servlet-name>
        <url-pattern>/ServletLifeCycle02</url-pattern>
    </servlet-mapping>
</web-app>
ServletConfig
注解方式
package com.jdyxk.config;

import jakarta.servlet.ServletConfig;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebInitParam;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

import java.io.IOException;

/**
 * @author 李昊哲
 * @version 1.0
 * @Description
 * @createTime 2021/9/1 上午10:07
 */
@WebServlet(urlPatterns = {"/ServletConfig01"},initParams = @WebInitParam(name = "lihaozhe",value = "handsome"))
public class ServletConfig01 extends HttpServlet {
    private static final long serialVersionUID = 616347046035683261L;
    private ServletConfig config;

    public ServletConfig01() {
        System.out.println("ServletConfig01 ServletConfig01()");
    }

    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("ServletConfig01执行 service()");
        String lihaozhe = config.getInitParameter("lihaozhe");
        System.out.println("ServletConfig01 service() 获取参数 " + lihaozhe);
    }

    @Override
    public void init(ServletConfig config) throws ServletException {
        this.config = config;
        System.out.println("ServletConfig01初始化 init(config)");
        String lihaozhe = config.getInitParameter("lihaozhe");
        System.out.println("ServletConfig01 init(config) 获取参数 " + lihaozhe);
    }

    @Override
    public void init() throws ServletException {
        System.out.println("ServletConfig01初始化 init()");
    }
}
package com.jdyxk.config;

import jakarta.servlet.ServletConfig;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebInitParam;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

import java.io.IOException;

/**
 * @author 李昊哲
 * @version 1.0
 * @Description
 * @createTime 2021/9/1 上午10:07
 */
@WebServlet(urlPatterns = {"/ServletConfig02"},initParams = @WebInitParam(name = "lihaozhe",value = "handsome"))
public class ServletConfig02 extends HttpServlet {
    private static final long serialVersionUID = 4023441902892365525L;

    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("ServletConfig02执行 service()");
        ServletConfig config = this.getServletConfig();
        String lihaozhe = config.getInitParameter("lihaozhe");
        System.out.println("ServletConfig02 service() 获取参数 " + lihaozhe);
    }
}
xml方式
package com.jdyxk.config;
/**
 * @author 李昊哲
 * @Description
 * @version 1.0
 * @createTime 2021/9/1 上午9:48
 */

import jakarta.servlet.ServletConfig;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebInitParam;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

import java.io.IOException;

public class ServletConfig03 extends HttpServlet {
    private static final long serialVersionUID = -6570685422847622901L;

    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        ServletConfig config = this.getServletConfig();
        String parameter = config.getInitParameter("lihaozhe");
        System.out.println("ServletConfig03 service 获取参数 " + parameter);
    }

}
package com.jdyxk.config;

import jakarta.servlet.ServletConfig;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebInitParam;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

import java.io.IOException;
import java.util.Enumeration;

/**
 * @author 李昊哲
 * @version 1.0
 * @Description
 * @createTime 2021/9/1 上午10:07
 */
public class ServletConfig03 extends HttpServlet {
    private static final long serialVersionUID = -8134635066626325088L;

    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("ServletConfig03执行 service()");
        ServletConfig config = this.getServletConfig();
        Enumeration<String> names = config.getInitParameterNames();
        while (names.hasMoreElements()){
            String name = names.nextElement();
            System.out.println(name + "\t" + config.getInitParameter(name));
        }
    }
}
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="https://jakarta.ee/xml/ns/jakartaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_5_0.xsd"
         version="5.0">
    <!--com.jdyxk.config.ServletConfig03-->
    <servlet>
        <servlet-name>ServletConfig03</servlet-name>
        <servlet-class>com.jdyxk.config.ServletConfig03</servlet-class>
        <init-param>
            <param-name>lihaozhe</param-name>
            <param-value>handsome</param-value>
        </init-param>
        <init-param>
            <param-name>xuxiaoyu</param-name>
            <param-value>beautiful</param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>ServletConfig03</servlet-name>
        <url-pattern>/ServletConfig03</url-pattern>
    </servlet-mapping>
</web-app>
package com.jdyxk.config;

import jakarta.servlet.ServletConfig;
import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

import java.io.IOException;
import java.util.Enumeration;

/**
 * @author 李昊哲
 * @version 1.0
 * @Description
 * @createTime 2021/9/1 上午10:07
 */
public class ServletConfig04 extends HttpServlet {
    private static final long serialVersionUID = 1049431340339892316L;

    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("ServletConfig04执行 service()");
        Enumeration<String> names = this.getInitParameterNames();
        while (names.hasMoreElements()){
            String name = names.nextElement();
            System.out.println(name + "\t" + this.getInitParameter(name));
        }
    }
}
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="https://jakarta.ee/xml/ns/jakartaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_5_0.xsd"
         version="5.0">
    <!--com.jdyxk.config.ServletConfig04-->
    <servlet>
        <servlet-name>ServletConfig04</servlet-name>
        <servlet-class>com.jdyxk.config.ServletConfig04</servlet-class>
        <init-param>
            <param-name>liahozhe</param-name>
            <param-value>handsome</param-value>
        </init-param>
        <init-param>
            <param-name>xuxiaoyu</param-name>
            <param-value>beautiful</param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>ServletConfig04</servlet-name>
        <url-pattern>/ServletConfig04</url-pattern>
    </servlet-mapping>
</web-app>
ServletContext

全局对象 存储在服务器中

但是安全性能不高 简单来说1给2传值 3也能拿到

package com.jdyxk.context;
/**
 * @author 李昊哲
 * @Description
 * @version 1.0
 * @createTime 2021/9/1 上午10:53
 */

import jakarta.servlet.*;
import jakarta.servlet.http.*;
import jakarta.servlet.annotation.*;

import java.io.IOException;

@WebServlet(name = "ServletContext01", value = "/ServletContext01")
public class ServletContext01 extends HttpServlet {
    private static final long serialVersionUID = -6117866338716178476L;

    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        ServletContext context = this.getServletContext();
        // getContextPath() 获取上下文路径
        System.out.println(context.getContextPath());
        System.out.println(request.getContextPath());
        // getRealPath("/") 获取项目在操作系统的绝对路径
        // /home/lhz/Documents/code/j357/jakataee/servlet/src/main/webapp
        System.out.println(context.getRealPath("/"));
        System.out.println(request.getRealPath("/"));
    }
}
package com.jdyxk.context;
/**
 * @author 李昊哲
 * @Description
 * @version 1.0
 * @createTime 2021/9/1 上午10:53
 */

import jakarta.servlet.ServletContext;
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;
import java.util.Enumeration;

@WebServlet(name = "ServletContext02", value = "/ServletContext02")
public class ServletContext02 extends HttpServlet {
    private static final long serialVersionUID = -948857269339059516L;

    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        ServletContext context = this.getServletContext();
        Enumeration<String> names = context.getInitParameterNames();
        while (names.hasMoreElements()){
            String name = names.nextElement();
            System.out.println(name + "\t" + context.getInitParameter(name));
        }
    }
}
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="https://jakarta.ee/xml/ns/jakartaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_5_0.xsd"
         version="5.0">
    <context-param>
        <param-name>dirver</param-name>
        <param-value>com.mysql.cj.jdbc.Driver</param-value>
    </context-param>
    <context-param>
        <param-name>url</param-name>
        <param-value>jdbc:mysql:///homemall</param-value>
    </context-param>
    <context-param>
        <param-name>username</param-name>
        <param-value>lhz</param-value>
    </context-param>
    <context-param>
        <param-name>password</param-name>
        <param-value>123456</param-value>
    </context-param>
</web-app>
请求转发
  • 请求转发地址栏不发生改变
  • 用户一次请求
  • 请求转发过程中参数不会丢失
  • 请求转发无法跳转到服务器以外的资源
  • 请求转发可以跳转WEB-INF目录内的站点
  • 访问成功返回状态码200在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
package com.jdyxk.forword;
/**
 * @author 李昊哲
 * @Description
 * @version 1.0
 * @createTime 2021/9/1 上午11:41
 */

import jakarta.servlet.*;
import jakarta.servlet.http.*;
import jakarta.servlet.annotation.*;

import java.io.IOException;

@WebServlet(name = "Forword01", value = "/Forword01")
public class Forword01 extends HttpServlet {
    private static final long serialVersionUID = 6978583746561118257L;

    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("我是forword01");
        // 向request域中存储数据	与request绑定
        request.setAttribute("slogan" ,"桃李不言下自成蹊");
        // 请求转发
        request.getRequestDispatcher("/Forword02").forward(request,response);
    }
}
package com.jdyxk.forword;
/**
 * @author 李昊哲
 * @Description
 * @version 1.0
 * @createTime 2021/9/1 上午11:41
 */

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(name = "Forword02", value = "/Forword02")
public class Forword02 extends HttpServlet {
    private static final long serialVersionUID = -1050644142179657244L;

    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("我是forword02");
        request.getRequestDispatcher("/Forword03").forward(request,response);
    }
}
package com.jdyxk.forword;
/**
 * @author 李昊哲
 * @Description
 * @version 1.0
 * @createTime 2021/9/1 上午11:41
 */

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(name = "Forword03", value = "/Forword03")
public class Forword03 extends HttpServlet {
    private static final long serialVersionUID = -192406355044584986L;

    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("我是forword03");
        String slogan = (String) request.getAttribute("slogan");
        System.out.println(slogan);
    }
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-h55AbpDX-1655279418183)(img/image-20210902082935387.png)]

package com.jdyxk.forword;
/**
 * @author 李昊哲
 * @Description
 * @version 1.0
 * @createTime 2021/9/1 下午12:01
 */

import jakarta.servlet.*;
import jakarta.servlet.http.*;
import jakarta.servlet.annotation.*;

import java.io.IOException;

@WebServlet(name = "ForwordOuter", value = "/ForwordOuter")
public class ForwordOuter extends HttpServlet {
    private static final long serialVersionUID = 2656067227663651696L;

    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("forwordouter");
        request.getRequestDispatcher("https://space.bilibili.com/480308139").forward(request,response);
    }
}
package com.jdyxk.forword;
/**
 * @author 李昊哲
 * @Description
 * @version 1.0
 * @createTime 2021/9/1 上午11:58
 */

import jakarta.servlet.*;
import jakarta.servlet.http.*;
import jakarta.servlet.annotation.*;

import java.io.IOException;

@WebServlet(name = "ForwordInner01", value = "/ForwordInner01")
public class ForwordInner01 extends HttpServlet {
    private static final long serialVersionUID = 7693742060373507733L;

    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("forwordinner01");
        request.getRequestDispatcher("/forword.jsp").forward(request,response);
    }
}
package com.jdyxk.forword;
/**
 * @author 李昊哲
 * @Description
 * @version 1.0
 * @createTime 2021/9/1 上午11:58
 */

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(name = "ForwordInner02", value = "/ForwordInner02")
public class ForwordInner02 extends HttpServlet {
    private static final long serialVersionUID = -7383129303014444891L;

    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("forwordinner02");
        request.getRequestDispatcher("/forword/forword.jsp").forward(request,response);
    }
}
package com.jdyxk.forword;
/**
 * @author 李昊哲
 * @Description
 * @version 1.0
 * @createTime 2021/9/1 上午11:58
 */

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(name = "ForwordInner03", value = "/ForwordInner03")
public class ForwordInner03 extends HttpServlet {
    private static final long serialVersionUID = 7668261444275226491L;

    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("forwordinner03");
        request.getRequestDispatcher("/WEB-INF/forword.jsp").forward(request,response);
    }
}
网页重定向
  • 重定向地址栏发生改变
  • 重定向需要进行二次跳转
  • 重定向过程中参数会丢失
  • 重定向可以跳转到服务器以外的资源
  • 重定向无法跳转WEB-INF目录内的站点
  • 重定向一次跳转后返回302码及location在这里插入图片描述
    在这里插入图片描述
package com.jdyxk.redirect;

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;

/**
 * @author 李昊哲
 * @version 1.0
 * @Description
 * @createTime 2021/9/2 上午8:35
 */
@WebServlet(urlPatterns = {"/Redirect01"})
public class Redirect01 extends HttpServlet {
    private static final long serialVersionUID = -4429793855706807307L;

    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("redirect01");
        request.setAttribute("slogan", "桃李不言下自成蹊");
        // 网页重定向
        response.sendRedirect(request.getContextPath() + "/Redirect02");
    }
}
package com.jdyxk.redirect;

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;

/**
 * @author 李昊哲
 * @version 1.0
 * @Description
 * @createTime 2021/9/2 上午8:35
 */
@WebServlet(urlPatterns = {"/Redirect02"})
public class Redirect02 extends HttpServlet {
    private static final long serialVersionUID = 6897126759201935135L;

    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("redirect02");
        // 网页重定向
        response.sendRedirect(request.getContextPath() + "/Redirect03");
    }
}
package com.jdyxk.redirect;

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;

/**
 * @author 李昊哲
 * @version 1.0
 * @Description
 * @createTime 2021/9/2 上午8:35
 */
@WebServlet(urlPatterns = {"/Redirect03"})
public class Redirect03 extends HttpServlet {
    private static final long serialVersionUID = 6897126759201935135L;

    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("redirect03");
        String slogan = (String) request.getAttribute("slogan");
        System.out.println("slgoan >>> " + slogan);
    }
}
```![在这里插入图片描述](https://img-blog.csdnimg.cn/ed8bc6c04cef4cc1998d2af23ab45259.png)
```java
package com.jdyxk.redirect;

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;

/**
 * @author 李昊哲
 * @version 1.0
 * @Description
 * @createTime 2021/9/2 上午8:54
 */
@WebServlet(urlPatterns = {"RedirectOuter"})
public class RedirectOuter extends HttpServlet {
    private static final long serialVersionUID = 7572392243207020364L;

    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("redirectouter");
        // 网页重定向
        response.sendRedirect("https://space.bilibili.com/480308139");
    }
}
package com.jdyxk.redirect;

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;

/**
 * @author 李昊哲
 * @version 1.0
 * @Description
 * @createTime 2021/9/2 上午8:54
 */
@WebServlet(urlPatterns = {"RedirectInner01"})
public class RedirectInner01 extends HttpServlet {
    private static final long serialVersionUID = -8141687757325453922L;

    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("RedirectInner01");
        // 网页重定向
        response.sendRedirect(request.getContextPath() + "/redirect.jsp");
    }
}
package com.jdyxk.redirect;

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;

/**
 * @author 李昊哲
 * @version 1.0
 * @Description
 * @createTime 2021/9/2 上午8:54
 */
@WebServlet(urlPatterns = {"RedirectInner02"})
public class RedirectInner02 extends HttpServlet {
    private static final long serialVersionUID = 6082252871128776769L;

    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("RedirectInner02");
        // 网页重定向
        response.sendRedirect(request.getContextPath() + "/redirect/redirect.jsp");
    }
}
package com.jdyxk.redirect;

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;

/**
 * @author 李昊哲
 * @version 1.0
 * @Description
 * @createTime 2021/9/2 上午8:54
 */
@WebServlet(urlPatterns = {"RedirectInner03"})
public class RedirectInner03 extends HttpServlet {
    private static final long serialVersionUID = 6973258402946855091L;

    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("RedirectInner03");
        // 网页重定向
        response.sendRedirect(request.getContextPath() + "/WEB-INF/redirect.jsp");
    }
}
ServletContext
package com.jdyxk.context;

import jakarta.servlet.ServletContext;
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;

/**
 * @author 李昊哲
 * @version 1.0
 * @Description
 * @createTime 2021/9/2 上午9:08
 */
@WebServlet(urlPatterns = {"/Context01"})
public class Context01 extends HttpServlet {
    private static final long serialVersionUID = 4549529219489276230L;

    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("Context01");
        ServletContext context = this.getServletContext();
        context.setAttribute("slogan","桃李不言下自成蹊");
        response.sendRedirect(request.getContextPath() + "/Context02");
    }
}
package com.jdyxk.context;

import jakarta.servlet.ServletContext;
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;

/**
 * @author 李昊哲
 * @version 1.0
 * @Description
 * @createTime 2021/9/2 上午9:08
 */
@WebServlet(urlPatterns = {"/Context02"})
public class Context02 extends HttpServlet {
    private static final long serialVersionUID = -5078724701850932819L;

    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("Context02");
        response.sendRedirect(request.getContextPath() + "/Context03");
    }
}
package com.jdyxk.context;

import jakarta.servlet.ServletContext;
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;

/**
 * @author 李昊哲
 * @version 1.0
 * @Description
 * @createTime 2021/9/2 上午9:08
 */
@WebServlet(urlPatterns = {"/Context03"})
public class Context03 extends HttpServlet {
    private static final long serialVersionUID = -4245219764441904390L;

    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("Context03");
        ServletContext context = this.getServletContext();
        String slogan = (String) context.getAttribute("slogan");
        System.out.println("slogan >>> " +  slogan);
    }
}
package com.jdyxk.context;

import jakarta.servlet.ServletContext;
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;

/**
 * @author 李昊哲
 * @version 1.0
 * @Description
 * @createTime 2021/9/2 上午9:08
 */
@WebServlet(urlPatterns = {"/Context04"})
public class Context04 extends HttpServlet {
    private static final long serialVersionUID = -6872707157929519069L;

    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("Context04");
        ServletContext context = this.getServletContext();
        String slogan = (String) context.getAttribute("slogan");
        System.out.println("slogan >>> " +  slogan);
    }
}
Session
概述
		表示一次会话(浏览器打开到浏览器关闭)。Session存储在服务器的内存中。
		为什么有Session	
			1、解决HttpServlet协议的无状态
			2、存储系统信息(为了程序提高用户体验性)
		重点(应用)
			1、获取Session对象
				HttpSession session = request对象.getSession();
			2、设置Session的值
				session对象.setAttribute("名",值);
			3、读取Session的值
				Session对象.getAttribute("名");
			4、移除Session的属性值
				Session对象.removeAttribute("名");
			5、设置过期时间
				session对象.setMaxInactiveInterval()
			6、session失效
				session对象.invalidate();

		session的特点
			1、session无法删除
package com.jdyxk.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;

/**
 * @author 李昊哲
 * @version 1.0
 * @Description
 * @createTime 2021/9/2 上午9:34
 */
@WebServlet(urlPatterns = {"Session01"})
public class Session01 extends HttpServlet {
    private static final long serialVersionUID = 1004677335679074751L;

    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("Session01");
        HttpSession session = request.getSession();
        session.setAttribute("slogan","桃李不言下自成蹊");
        // HttpSession有效期 单位 秒
        session.setMaxInactiveInterval(60);
        response.sendRedirect(request.getContextPath() + "/Session02");
    }
}
package com.jdyxk.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;

/**
 * @author 李昊哲
 * @version 1.0
 * @Description
 * @createTime 2021/9/2 上午9:34
 */
@WebServlet(urlPatterns = {"Session02"})
public class Session02 extends HttpServlet {
    private static final long serialVersionUID = -4624950894915168443L;

    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("Session02");
        HttpSession session = request.getSession();
        // HttpSession失效
        session.invalidate();
        response.sendRedirect(request.getContextPath() + "/Session03");
    }
}
package com.jdyxk.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;

/**
 * @author 李昊哲
 * @version 1.0
 * @Description
 * @createTime 2021/9/2 上午9:34
 */
@WebServlet(urlPatterns = {"Session03"})
public class Session03 extends HttpServlet {
    private static final long serialVersionUID = -7734482962928026417L;

    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("Session03");
        HttpSession session = request.getSession();
        String slogan = (String) session.getAttribute("slogan");
        System.out.println("slogan >>> " + slogan);
    }
}
package com.jdyxk.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;

/**
 * @author 李昊哲
 * @version 1.0
 * @Description
 * @createTime 2021/9/2 上午9:34
 */
@WebServlet(urlPatterns = {"Session04"})
public class Session04 extends HttpServlet {
    private static final long serialVersionUID = 7278968222261677970L;

    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("Session04");
        HttpSession session = request.getSession();
        String slogan = (String) session.getAttribute("slogan");
        System.out.println("slogan >>> " + slogan);
    }
}
Cookie
概述
		一般由服务器端进行创建,保存在客户端(内存|硬盘——物理文件)
		为什么有Cookie
			1、解决Http协议的无状态
				http协议:请求响应
						 建立TCP连接
						 发送请求
						 服务器响应
						 断开连接
			2、存储系统信息(为了程序提高用户体验性)

		为什么有的Cookie浏览器重新打开后就消失了?
			Cookie可以分为:内存中的Cookie和文件中的Cookie
		缺点
			1、安全性较低
			2、可以被禁用

		重点(应用)
			1、Cookie的创建及读取
			2、设置过期时间及访问路径
package com.jdyxk.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;
import java.net.URLEncoder;
import java.util.HashMap;

/**
 * @author 李昊哲
 * @version 1.0
 * @Description
 * @createTime 2021/9/2 上午10:03
 */
@WebServlet(urlPatterns = {"WriteCookie"})
public class WriteCookie extends HttpServlet {
    private static final long serialVersionUID = 2744238813730708499L;

    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // Cookie为key-value结构
        // 一般由服务器端创建 存储在客户端
        // 1、服务器创建cookie
        Cookie c1 = new Cookie("c1", "phoenix");
        Cookie c2 = new Cookie("c2", "lihaozhe");
        // RFC6265 Cookie values characters restricted to US-ASCII
        // Cookie author = new Cookie("author", "李昊哲");
        // Cookie slogan = new Cookie("slogan", "桃李不言下自成蹊");
        // URLEncode和URLDecode用于完成普通字符串和 application/x-www-from-urlencoded
        // MIME字符串之间的相互转化
        // 如果传递的字符串中包含非西欧字符的字符串,会被转化成%XX%XX XX为十六进制的数
        Cookie author = new Cookie("author", URLEncoder.encode("李昊哲","utf-8"));
        Cookie slogan = new Cookie("slogan", URLEncoder.encode("桃李不言下自成蹊","utf-8"));
        // 2、设置Cookie过期时间 单位秒
        c2.setMaxAge(60 * 60 * 24 * 7);
        author.setMaxAge(60 * 60 * 24 * 7);
        slogan.setMaxAge(60 * 60 * 24 * 7);
        // 3、设置访问路径及客户端js是否可以操作cookie
        response.addCookie(c1);
        response.addCookie(c2);
        response.addCookie(author);
        response.addCookie(slogan);
        // request.getRequestDispatcher("/cookie.jsp").forward(request,response);
        response.sendRedirect(request.getContextPath() + "/cookie.jsp");
    }
}
package com.jdyxk.cookie;
/**
 * @author 李昊哲
 * @Description
 * @version 1.0
 * @createTime 2021/9/2 上午10:43
 */

import jakarta.servlet.*;
import jakarta.servlet.http.*;
import jakarta.servlet.annotation.*;

import java.io.IOException;
import java.net.URLDecoder;

@WebServlet(urlPatterns = {"ReadCookie"})
public class ReadCookie extends HttpServlet {
    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        Cookie[] cookies = request.getCookies();
        for (Cookie cookie : cookies) {
            if ("author".equalsIgnoreCase(cookie.getName()) || "slogan".equalsIgnoreCase(cookie.getName())){
                System.out.println(cookie.getName() + " >>> " + URLDecoder.decode(cookie.getValue(),"utf-8"));
            }else {
                System.out.println(cookie.getName() + " >>> " + cookie.getValue());
            }
        }
        request.getRequestDispatcher("/cookie.jsp").forward(request,response);
    }
}
Cookie与Session区别
		1、Session存储在服务器端;Cookie存储在客户端
		2、Session存储在内存中;Cookie存储在硬盘中
		3、Session的安全性较高;Cookie的安全性较低
		4、Session可以存储较大的数据;Cookie存储的数据量较小(10K)
		5、Session的读取效率较高;Cookie的读取效率较低
Filter

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jAhN9Keg-1655279532062)(img/image-20210901122719171.png)]

package com.jdyxk.filter;
/**
 * @author 李昊哲
 * @Description
 * @version 1.0
 * @createTime 2021/9/2 上午10:54
 */

import cn.hutool.http.server.HttpServerRequest;
import jakarta.servlet.*;
import jakarta.servlet.annotation.*;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

import java.io.IOException;

@WebFilter(filterName = "Lifecycle01",urlPatterns = {"*.do","*.action","*.html"})
public class Lifecycle01 implements Filter {
    public Lifecycle01() {
        System.out.println("石猴出世");
    }

    public void init(FilterConfig config) throws ServletException {
        System.out.println("拜师学艺");
    }

    public void destroy() {
        System.out.println("五指山下");
    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws ServletException, IOException {
        System.out.println("大闹天宫");
        HttpServletRequest req  = (HttpServletRequest) request;
        HttpServletResponse resp  = (HttpServletResponse) response;
        String uri = req.getRequestURI();
        if (uri.contains("html")){
            resp.sendRedirect(req.getContextPath() + "/index.jsp");
            return;
        }
        chain.doFilter(request, response);
    }
}
package com.jdyxk.filter;
/**
 * @author 李昊哲
 * @Description
 * @version 1.0
 * @createTime 2021/9/2 上午10:54
 */

import jakarta.servlet.*;
import jakarta.servlet.annotation.WebFilter;

import java.io.IOException;

public class Lifecycle02 implements Filter {
    public Lifecycle02() {
        System.out.println("创世纪");
    }

    public void init(FilterConfig config) throws ServletException {
        System.out.println("进入伊甸园");
    }

    public void destroy() {
        System.out.println("逐出伊甸园");
    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws ServletException, IOException {
        System.out.println("偷食禁果");
        chain.doFilter(request, response);
    }
}
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="https://jakarta.ee/xml/ns/jakartaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_5_0.xsd"
         version="5.0">
    <!--filter-->
    <filter>
        <filter-name>Lifecycle02</filter-name>
        <filter-class>com.jdyxk.filter.Lifecycle02</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>Lifecycle02</filter-name>
        <url-pattern>*.action</url-pattern>
    </filter-mapping>
    <filter-mapping>
        <filter-name>Lifecycle02</filter-name>
        <url-pattern>*.lhz</url-pattern>
    </filter-mapping>
</web-app>
package com.jdyxk.filter;

import jakarta.servlet.*;
import jakarta.servlet.annotation.WebFilter;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

import java.io.File;
import java.io.IOException;

/**
 * @author 李昊哲
 * @version 1.0
 * @Description
 * @createTime 2021/9/2 上午11:20
 */

@WebFilter(filterName = "EncodingFilte",urlPatterns = {"*.do","*.action"})
public class EncodingFilte implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        Filter.super.init(filterConfig);
    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        HttpServletRequest req = (HttpServletRequest) request;
        HttpServletResponse resp = (HttpServletResponse) response;
        // 处理中文乱码
        // 处理post请求的中文乱码
        req.setCharacterEncoding("utf-8");
        // 处理响应的字符集中文乱码
        resp.setCharacterEncoding("utf-8");
        // 处理浏览器字符集中文乱码
        // response.setHeader("Content-Type","text/html;charset=utf-8");
        resp.setContentType("text/html;charset=utf-8");
        chain.doFilter(request,response);
    }

    @Override
    public void destroy() {
        Filter.super.destroy();
    }
}
Listener在这里插入图片描述
package com.jdyxk.listener;

import com.jdyxk.commons.localdatetime.BaseLocalDateTime;
import com.jdyxk.commons.string.StringUtil;
import jakarta.servlet.*;
import jakarta.servlet.annotation.WebListener;
import jakarta.servlet.http.*;

/**
 * @author 李昊哲
 * @version 1.0
 * @Description
 * @createTime 2021/9/2 上午11:42
 */
//@WebListener
public class RequestListener implements ServletContextListener, HttpSessionListener, HttpSessionAttributeListener, ServletRequestListener {
    public RequestListener() {
        System.out.println("举头三尺有神明");
    }

    @Override
    public void contextInitialized(ServletContextEvent sce) {
    }

    @Override
    public void contextDestroyed(ServletContextEvent sce) {
    }

    @Override
    public void requestDestroyed(ServletRequestEvent sre) {
    }

    @Override
    public void requestInitialized(ServletRequestEvent sre) {
        HttpServletRequest request = (HttpServletRequest) sre.getServletRequest();
        String remoteAddr = request.getRemoteAddr();
        String time = BaseLocalDateTime.nowString();
        String requestURL = request.getRequestURL().toString();
        String queryString = request.getQueryString();
        if (StringUtil.isBlank(queryString)){
            System.out.println(time + "\t" + remoteAddr + "\t" + requestURL);
        }else {
            System.out.println(time + "\t" + remoteAddr + "\t" + requestURL + "?" + queryString);
        }
    }

    @Override
    public void attributeAdded(HttpSessionBindingEvent event) {
    }

    @Override
    public void attributeRemoved(HttpSessionBindingEvent event) {
    }

    @Override
    public void attributeReplaced(HttpSessionBindingEvent event) {
    }

    @Override
    public void sessionCreated(HttpSessionEvent se) {
        HttpSessionListener.super.sessionCreated(se);
    }

    @Override
    public void sessionDestroyed(HttpSessionEvent se) {
    }
}
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="https://jakarta.ee/xml/ns/jakartaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_5_0.xsd"
         version="5.0">
    <!--listener-->
    <listener>
        <listener-class>com.jdyxk.listener.RequestListener</listener-class>
    </listener>
</web-app>
完整web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="https://jakarta.ee/xml/ns/jakartaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_5_0.xsd"
         version="5.0">
    <context-param>
        <param-name>dirver</param-name>
        <param-value>com.mysql.cj.jdbc.Driver</param-value>
    </context-param>
    <context-param>
        <param-name>url</param-name>
        <param-value>jdbc:mysql:///homemall</param-value>
    </context-param>
    <context-param>
        <param-name>username</param-name>
        <param-value>lhz</param-value>
    </context-param>
    <context-param>
        <param-name>password</param-name>
        <param-value>123456</param-value>
    </context-param>
    <!--com.jdyxk.controller.Servlet02-->
    <servlet>
        <servlet-name>Servlet02</servlet-name>
        <servlet-class>com.jdyxk.controller.Servlet02</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>Servlet02</servlet-name>
        <url-pattern>/Servlet02</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>Servlet02</servlet-name>
        <url-pattern>/servlet02.action</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>Servlet02</servlet-name>
        <url-pattern>/servlet02.do</url-pattern>
    </servlet-mapping>

    <!--com.jdyxk.lifecycle.ServletLifeCycle02-->
    <servlet>
        <servlet-name>ServletLifeCycle02</servlet-name>
        <servlet-class>com.jdyxk.lifecycle.ServletLifeCycle02</servlet-class>
        <!--服务启动时是实例化Servlet类 注意 load-on-startup必须配在配置行的最末行 数值越小优先级越高-->
        <load-on-startup>3</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>ServletLifeCycle02</servlet-name>
        <url-pattern>/ServletLifeCycle02</url-pattern>
    </servlet-mapping>

    <!--com.jdyxk.config.ServletConfig03-->
    <servlet>
        <servlet-name>ServletConfig03</servlet-name>
        <servlet-class>com.jdyxk.config.ServletConfig03</servlet-class>
        <init-param>
            <param-name>liahozhe</param-name>
            <param-value>handsome</param-value>
        </init-param>
        <init-param>
            <param-name>xuxiaoyu</param-name>
            <param-value>beautiful</param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>ServletConfig03</servlet-name>
        <url-pattern>/ServletConfig03</url-pattern>
    </servlet-mapping>

    <!--com.jdyxk.config.ServletConfig04-->
    <servlet>
        <servlet-name>ServletConfig04</servlet-name>
        <servlet-class>com.jdyxk.config.ServletConfig04</servlet-class>
        <init-param>
            <param-name>liahozhe</param-name>
            <param-value>handsome</param-value>
        </init-param>
        <init-param>
            <param-name>xuxiaoyu</param-name>
            <param-value>beautiful</param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>ServletConfig04</servlet-name>
        <url-pattern>/ServletConfig04</url-pattern>
    </servlet-mapping>

    <!--filter-->
    <filter>
        <filter-name>Lifecycle02</filter-name>
        <filter-class>com.jdyxk.filter.Lifecycle02</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>Lifecycle02</filter-name>
        <url-pattern>*.action</url-pattern>
    </filter-mapping>
    <filter-mapping>
        <filter-name>Lifecycle02</filter-name>
        <url-pattern>*.lhz</url-pattern>
    </filter-mapping>

    <!--listener-->
    <listener>
        <listener-class>com.jdyxk.listener.RequestListener</listener-class>
    </listener>
</web-app>
Servlet接受页面传值在这里插入图片描述在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Servlet接收表单传值
<%--
  Created by IntelliJ IDEA.
  User: lhz
  Date: 2021/9/3
  Time: 上午8:27
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>表单get方式传值</title>
</head>
<body>
<fieldset id="get_code">
    <legend>GET方式提交表单</legend>
    <form action="${pageContext.request.contextPath}/form.action" method="get">
        <input type="text" id="account" name="account" value="" autocomplete="off" placeholder="账号" />
        <input type="password" id="password" name="password" value="" autocomplete="off" placeholder="密码" />
        <br>
        性别:&nbsp;&nbsp;
        <label for="male">男</label>&nbsp;&nbsp;
        <input type="radio" name="gender" value="1" id="male">
        &nbsp;&nbsp;&nbsp;&nbsp;
        <label for="female">女</label>&nbsp;&nbsp;
        <input type="radio" name="gender" value="0" id="female">
        <br>
        爱好:&nbsp;&nbsp;
        <label for="swimming">游泳</label>&nbsp;&nbsp;
        <input type="checkbox" name="hobby" id="swimming" value="swimming" />
        &nbsp;&nbsp;&nbsp;&nbsp;
        <label for="running">跑步</label>&nbsp;&nbsp;
        <input type="checkbox" name="hobby" id="running" value="running" />
        &nbsp;&nbsp;&nbsp;&nbsp;
        <label for="skiing">滑雪</label>&nbsp;&nbsp;
        <input type="checkbox" name="hobby" id="skiing" value="skiing" />
        <br>
        籍贯:&nbsp;&nbsp;
        <select name="hometown" id="hometown">
            <option value="22">吉林</option>
            <option value="11">北京</option>
            <option value="00">大海</option>
        </select>
        <br>
        水果:&nbsp;&nbsp;
        <br>
        <select name="fruits" multiple="multiple">
            <option value="banana">香蕉</option>
            <option value="apple">苹果</option>
            <option value="pear">梨</option>
        </select>
        <br>
        <input type="submit" id="get_btn" value="GET方式提交" />
    </form>
</fieldset>
</body>
</html>
<%--
  Created by IntelliJ IDEA.
  User: lhz
  Date: 2021/9/3
  Time: 上午8:27
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>表单post方式传值</title>
</head>
<body>
<fieldset id="post_code">
    <legend>POST方式提交表单</legend>
    <form action="${pageContext.request.contextPath}/form.action" method="post">
        <input type="text" id="account" name="account" value="" autocomplete="off" placeholder="账号" />
        <input type="password" id="password" name="password" value="" autocomplete="off" placeholder="密码" />
        <br>
        性别:&nbsp;&nbsp;
        <label for="male">男</label>&nbsp;&nbsp;
        <input type="radio" name="gender" value="1" id="male">
        &nbsp;&nbsp;&nbsp;&nbsp;
        <label for="female">女</label>&nbsp;&nbsp;
        <input type="radio" name="gender" value="0" id="female">
        <br>
        爱好:&nbsp;&nbsp;
        <label for="swimming">游泳</label>&nbsp;&nbsp;
        <input type="checkbox" name="hobby" id="swimming" value="swimming" />
        &nbsp;&nbsp;&nbsp;&nbsp;
        <label for="running">跑步</label>&nbsp;&nbsp;
        <input type="checkbox" name="hobby" id="running" value="running" />
        &nbsp;&nbsp;&nbsp;&nbsp;
        <label for="skiing">滑雪</label>&nbsp;&nbsp;
        <input type="checkbox" name="hobby" id="skiing" value="skiing" />
        <br>
        籍贯:&nbsp;&nbsp;
        <select name="hometown" id="hometown">
            <option value="22">吉林</option>
            <option value="11">北京</option>
            <option value="00">大海</option>
        </select>
        <br>
        水果:&nbsp;&nbsp;
        <br>
        <select name="fruits" multiple="multiple">
            <option value="banana">香蕉</option>
            <option value="apple">苹果</option>
            <option value="pear">梨</option>
        </select>
        <br>
        <input type="submit" id="post_btn" value="POST方式提交" />
    </form>
</fieldset>
</body>
</html>
package com.jdyxk.controller;

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;

/**
 * @author 李昊哲
 * @version 1.0
 * @Description
 * @createTime 2021/9/3 上午8:59
 */
@WebServlet(urlPatterns = {"form.action"})
public class Form extends HttpServlet {
    private static final long serialVersionUID = 2983620998083405790L;

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("get");
        String account = request.getParameter("account");
        String password = request.getParameter("password");
        String gender = request.getParameter("gender");
        String[] hobbies = request.getParameterValues("hobby");
        String hometown = request.getParameter("hometown");
        String[] fruits = request.getParameterValues("fruits");
        System.out.println("account >>> " + account);
        System.out.println("password >>> " + password);
        System.out.println("gender >>> " + gender);
        for (String hobby : hobbies) {
            System.out.println("hobby >>> " + hobby);
        }
        System.out.println("hometown >>> " + hometown);
        for (String fruit : fruits) {
            System.out.println("fruit >>> " + fruit);
        }
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("post");
        String account = request.getParameter("account");
        String password = request.getParameter("password");
        String gender = request.getParameter("gender");
        String[] hobbies = request.getParameterValues("hobby");
        String hometown = request.getParameter("hometown");
        String[] fruits = request.getParameterValues("fruits");
        System.out.println("account >>> " + account);
        System.out.println("password >>> " + password);
        System.out.println("gender >>> " + gender);
        for (String hobby : hobbies) {
            System.out.println("hobby >>> " + hobby);
        }
        System.out.println("hometown >>> " + hometown);
        for (String fruit : fruits) {
            System.out.println("fruit >>> " + fruit);
        }
    }
}

在这里插入图片描述
在这里插入图片描述

Servlet返回JSON
package com.jdyxk.entity;

import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;

import java.util.List;

/**
 * @author 李昊哲
 * @version 1.0
 * @Description
 * @createTime 2021/9/3 上午9:31
 */
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
public class User {
    private String account;
    private String password;
    private Integer gender;
    private List<String> hobbies;
    private String hometown;
    private List<String> fruits;
}
package com.jdyxk.controller;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.jdyxk.entity.User;
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;
import java.io.PrintWriter;
import java.util.Arrays;

/**
 * @author 李昊哲
 * @version 1.0
 * @Description
 * @createTime 2021/9/3 上午8:59
 */
@WebServlet(urlPatterns = {"form.action"})
public class Form extends HttpServlet {
    private static final long serialVersionUID = 2983620998083405790L;

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("get");
        String account = request.getParameter("account");
        String password = request.getParameter("password");
        String gender = request.getParameter("gender");
        String[] hobbies = request.getParameterValues("hobby");
        String hometown = request.getParameter("hometown");
        String[] fruits = request.getParameterValues("fruits");
        System.out.println("account >>> " + account);
        System.out.println("password >>> " + password);
        System.out.println("gender >>> " + gender);
        for (String hobby : hobbies) {
            System.out.println("hobby >>> " + hobby);
        }
        System.out.println("hometown >>> " + hometown);
        for (String fruit : fruits) {
            System.out.println("fruit >>> " + fruit);
        }
        User user = new User(account, password, Integer.parseInt(gender), Arrays.asList(hobbies), hometown, Arrays.asList(fruits));
        ObjectMapper objectMapper = new ObjectMapper();
        response.setContentType("application/json;charset=utf-8");
        PrintWriter writer = response.getWriter();
        writer.print(objectMapper.writeValueAsString(user));
        writer.flush();
        writer.close();
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("post");
        String account = request.getParameter("account");
        String password = request.getParameter("password");
        String gender = request.getParameter("gender");
        String[] hobbies = request.getParameterValues("hobby");
        String hometown = request.getParameter("hometown");
        String[] fruits = request.getParameterValues("fruits");
        System.out.println("account >>> " + account);
        System.out.println("password >>> " + password);
        System.out.println("gender >>> " + gender);
        for (String hobby : hobbies) {
            System.out.println("hobby >>> " + hobby);
        }
        System.out.println("hometown >>> " + hometown);
        for (String fruit : fruits) {
            System.out.println("fruit >>> " + fruit);
        }
        User user = new User(account, password, Integer.parseInt(gender), Arrays.asList(hobbies), hometown, Arrays.asList(fruits));
        ObjectMapper objectMapper = new ObjectMapper();
        response.setContentType("application/json;charset=utf-8");
        PrintWriter writer = response.getWriter();
        writer.print(objectMapper.writeValueAsString(user));
        writer.flush();
        writer.close();
    }
}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Servlet接收文件上传
<%--
  Created by IntelliJ IDEA.
  User: lhz
  Date: 2021/9/3
  Time: 上午10:17
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>文件上传</title>
</head>
<body>
<form action="ServletPart" method="post" enctype="multipart/form-data">
    头像:<input type="file" name="headSculpture" value="">
    <input type="submit" value="ServletPart">
</form>
<form action="ServletCommonsFile" method="post" enctype="multipart/form-data">
    头像:<input type="file" name="headSculpture" value="">
    <input type="submit" value="ServletCommonsFile">
</form>
<form action="api/upload/single" method="post" enctype="multipart/form-data">
    头像:<input type="file" name="headSculpture" value="">
    <input type="submit" value="single">
</form>
</body>
</html>
package com.jdyxk.upload;

import cn.hutool.core.util.IdUtil;
import com.jdyxk.commons.localdatetime.BaseLocalDateTime;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.MultipartConfig;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.servlet.http.Part;
import org.apache.commons.io.FilenameUtils;

import java.io.File;
import java.io.IOException;

/**
 * @author 李昊哲
 * @version 1.0
 * @Description
 * @createTime 2021/9/3 上午10:50
 */
@MultipartConfig
@WebServlet(urlPatterns = {"ServletPart"})
public class ServletPart extends HttpServlet {
    private static final long serialVersionUID = 7755467677622542254L;

    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println(request.getContentType());
        if (request.getContentType().contains("multipart/form-data")) {
            // 如果是否Multipart类型表单获取表单中上传的文件
            // 获取Part对象
            Part part = request.getPart("headSculpture");
            //调用获取文件名的方法
            String fileName = part.getSubmittedFileName();
            System.out.println("源文件名>>>" + fileName);
            // 获取文件后缀名
            String extension = FilenameUtils.getExtension(fileName);
            // 获取项目的绝对路径
            String realPath = this.getServletContext().getRealPath("/");
            // 上次文件默认目录
            String upload = "static/upload";
            String timePath = BaseLocalDateTime.nowString("yyyy/MM/dd/HH/mm");
            // 上传目录
            String upPath = realPath + File.separator + upload + File.separator + timePath;
            File file = new File(upPath);
            if (!file.exists()) {
                file.mkdirs();
            }
            // 新文件名字
            String partFileName = IdUtil.fastSimpleUUID() + "." + extension;
            // Part 保存文件
            part.write(upPath + File.separator + partFileName);
            String protocol = "http://";
            String localAddr = request.getLocalAddr();
            int localPort = request.getLocalPort();
            String contextPath = request.getContextPath();
            String url = protocol + localAddr + ":" + localPort + contextPath;
            System.out.println("Part 方式保存文件 >>> " + upPath + File.separator + partFileName);
            System.out.println("Part 方式保存文件 >>> " + url + "/" + upload + "/" + timePath + "/" + partFileName);
        } else {
            System.out.println("表单应该配置multiple enctype=\"multipart/form-data\"");
        }
    }
}
package com.jdyxk.upload;

import cn.hutool.core.util.IdUtil;
import com.jdyxk.commons.localdatetime.BaseLocalDateTime;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.MultipartConfig;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.servlet.http.Part;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.FilenameUtils;

import java.io.File;
import java.io.IOException;

/**
 * @author 李昊哲
 * @version 1.0
 * @Description
 * @createTime 2021/9/3 上午10:50
 */
@MultipartConfig
@WebServlet(urlPatterns = {"ServletUpload"})
public class ServletUpload extends HttpServlet {
    private static final long serialVersionUID = 5452207376273707456L;

    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println(request.getContentType());
        if (request.getContentType().contains("multipart/form-data")) {
            // 如果是否Multipart类型表单获取表单中上传的文件
            // 获取Part对象
            Part part = request.getPart("headSculpture");
            //调用获取文件名的方法
            String fileName = part.getSubmittedFileName();
            System.out.println("源文件名>>>" + fileName);
            // 获取文件后缀名
            String extension = FilenameUtils.getExtension(fileName);
            // 获取项目的绝对路径
            String realPath = this.getServletContext().getRealPath("/");
            // 上次文件默认目录
            String upload = "static/upload";
            String timePath = BaseLocalDateTime.nowString("yyyy/MM/dd/HH/mm");
            // 上传目录
            String upPath = realPath + File.separator + upload + File.separator + timePath;
            // 新文件名字
            String partFileName = IdUtil.fastSimpleUUID() + "." + extension;
            // Part 保存文件
            FileUtils.copyToFile(part.getInputStream(),new File(upPath + File.separator + partFileName));
            String protocol = "http://";
            String localAddr = request.getLocalAddr();
            int localPort = request.getLocalPort();
            String contextPath = request.getContextPath();
            String url = protocol + localAddr + ":" + localPort + contextPath;
            System.out.println("Part 方式保存文件 >>> " + upPath + File.separator + partFileName);
            System.out.println("Part 方式保存文件 >>> " + url + "/" + upload + "/" + timePath + "/" + partFileName);
        } else {
            System.out.println("表单应该配置multiple enctype=\"multipart/form-data\"");
        }
    }
}
Servlet接收json传值
package com.jdyxk.controller;

import com.fasterxml.jackson.databind.ObjectMapper;
import jakarta.servlet.ServletException;
import jakarta.servlet.ServletInputStream;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import org.apache.commons.io.IOUtils;

import java.io.*;

/**
 * @author 李昊哲
 * @version 1.0
 * @Description
 * @createTime 2021/9/3 上午10:31
 */
@WebServlet(urlPatterns = {"json.action"})
public class Json extends HttpServlet {
    private static final long serialVersionUID = -7081278172438985849L;

    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        ServletInputStream inputStream = request.getInputStream();
        InputStreamReader inputStreamReader = new InputStreamReader(inputStream,"utf-8");
        BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
        String text = bufferedReader.readLine();
        System.out.println(text);
        response.setContentType("application/json;charset=utf-8");
        PrintWriter writer = response.getWriter();
        writer.print(text);
        writer.flush();
        writer.close();
    }
}
Servlet工具类
package com.jdyxk.commons.servlet;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.jdyxk.commons.string.StringUtil;
import jakarta.servlet.ServletException;
import jakarta.servlet.ServletInputStream;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import lombok.SneakyThrows;
import org.apache.commons.io.IOUtils;

import java.io.IOException;
import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

/**
 * @author 李昊哲
 * @version 1.0
 * @Description
 * @createTime 2021/9/3 下午12:08
 */
public class BaseJakataServlet extends HttpServlet {
    private static final long serialVersionUID = 8428724747085777119L;
    private static final ObjectMapper objectMapper = new ObjectMapper();

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        excute(req, resp);
    }

    @Override
    protected void doHead(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        excute(req, resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        excute(req, resp);
    }

    @Override
    protected void doPut(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    }

    @Override
    protected void doDelete(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        excute(req, resp);
    }

    @Override
    protected void doOptions(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    }

    @Override
    protected void doTrace(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        excute(req, resp);
    }

    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        excute(req, resp);
    }

    /**
     * 执行真实方法
     *
     * @param request  HttpServletRequest
     * @param response HttpServletResponse
     */
    public void excute(HttpServletRequest request, HttpServletResponse response) throws IOException {
        // 处理中文乱码
        // 处理post请求的中文乱码
        request.setCharacterEncoding("utf-8");
        // 处理响应的字符集中文乱码
        response.setCharacterEncoding("utf-8");
        // 处理浏览器字符集中文乱码
        response.setContentType("text/html;charset=utf-8");
        System.out.println("请求方式:" + request.getMethod());
        String methodName = request.getParameter("methodName");
        Class<? extends BaseJakataServlet> clazz = this.getClass();
        String contentType = request.getContentType();
        try {
            if (StringUtil.isBlank(methodName)){
                PrintWriter writer = response.getWriter();
                writer.print("缺少参数");
                return;
            }else {
                if (!StringUtil.isBlank(contentType) && contentType.contains("application/json")) {
                    ServletInputStream inputStream = request.getInputStream();
                    String text = IOUtils.toString(inputStream, "utf-8");
                    Method method = null;

                    method = clazz.getDeclaredMethod(methodName, HttpServletRequest.class, HttpServletResponse.class, String.class);

                    method.setAccessible(true);
                    method.invoke(this, request, response, text);
                } else {
                    Method method = clazz.getDeclaredMethod(methodName, HttpServletRequest.class, HttpServletResponse.class);
                    method.setAccessible(true);
                    method.invoke(this, request, response);
                }
            }
        } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) {
            e.printStackTrace();
        }
    }
    /**
     * 向页面响应字符串
     * @param response  HttpServletResponse
     * @param Text  向页面响应的字符串
     * @throws IOException  IOException
     */
    public static void printText(HttpServletResponse response ,String Text) throws IOException {
        response.setContentType("text/plain;charset=utf-8");
        PrintWriter writer = response.getWriter();
        writer.print(Text);
        writer.flush();
        writer.close();
    }
    /**
     * 向页面响应json字符串
     * @param response  HttpServletResponse
     * @param object  向页面响应的对象
     * @throws IOException  IOException
     */
    public static void printJsonObject(HttpServletResponse response ,Object object) throws IOException {
        response.setContentType("application/json;charset=utf-8");
        PrintWriter writer = response.getWriter();
        writer.print(objectMapper.writeValueAsString(object));
        writer.flush();
        writer.close();
    }

    /**
     *
     * @param request HttpServletRequest
     * @param response HttpServletResponse
     * @param path 请求
     * @throws ServletException
     * @throws IOException
     */
    public static void forword(HttpServletRequest request,HttpServletResponse response,String path) throws ServletException, IOException {
        request.getRequestDispatcher(path).forward(request,response);
    }
    public static void forwordToWEB_INF(HttpServletRequest request,HttpServletResponse response,String path) throws ServletException, IOException {
        forword(request,response,"/WEB-INF/" + path);
    }
    public static void forwordSuffixJSP(HttpServletRequest request,HttpServletResponse response,String path) throws ServletException, IOException {
        forword(request,response,path + ".jsp");
    }
    public static void forwordToWEB_INF_SuffixJSP(HttpServletRequest request,HttpServletResponse response,String path) throws ServletException, IOException {
        forword(request,response,"/WEB-INF/" + path  + ".jsp");
    }

    public static void redirect(HttpServletRequest request,HttpServletResponse response,String path) throws ServletException, IOException {
        response.sendRedirect(request.getContextPath() + "/"+ path);
    }
    public static void redirectSuffixJSP(HttpServletRequest request,HttpServletResponse response,String path) throws ServletException, IOException {
        redirect(request,response,path + ".jsp");
    }

}
package com.jdyxk.controller;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.jdyxk.commons.servlet.BaseServlet;
import com.jdyxk.entity.User;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

import java.io.IOException;

/**
 * @author 李昊哲
 * @version 1.0
 * @Description
 * @createTime 2021/9/3 下午12:11
 */
@WebServlet(urlPatterns = {"/UserController"})
public class UserController extends BaseServlet {
    public void SyncLogin(HttpServletRequest request, HttpServletResponse response) throws IOException {
        String account = request.getParameter("account");
        String password = request.getParameter("password");
        User user = new User();
        user.setAccount(account);
        user.setPassword(password);
        System.out.println("AsyncLogin");
        ObjectMapper objectMapper = new ObjectMapper();
        // response.setContentType("application/json;charset=utf-8");
        // PrintWriter writer = response.getWriter();
        // writer.print(objectMapper.writeValueAsString(user));
        // writer.flush();
        // writer.close();
        printJsonObject(response, user);
    }

    public void AsyncLogin(HttpServletRequest request, HttpServletResponse response, String text) throws IOException {
        ObjectMapper objectMapper = new ObjectMapper();
        User user = objectMapper.readValue(text, User.class);
        System.out.println("SyncLogin");
        System.out.println(user.getAccount());
        System.out.println(user.getPassword());
        // response.setContentType("application/json;charset=utf-8");
        // PrintWriter writer = response.getWriter();
        // writer.print(objectMapper.writeValueAsString(user));
        // writer.flush();
        // writer.close();
        printJsonObject(response, user);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值