Explicación detallada de la interfaz de servlet en el servidor javaWeb-2-Tomcat

Tabla de contenido

1. Interfaz de servlet

1.1 Sistema de herencia de la interfaz Servlet

2. Interfaz ServletConfig

2.1 Descripción de la interfaz ServletConfig

2.2 Tres funciones de la interfaz ServletConfig

2.3 Demostración de código de la interfaz ServletConfig

2.3.1 Procesador de servlet-HttpServletProcessor

2.3.2 Precauciones para reescribir el método init

2.3.3 Archivo de configuración Servlet processor-web.xml

2.3.4 Solicitud HTTP de interfaz de usuario del procesador de servlet

2.3.5 Resultado del procesamiento de solicitudes HTTP de servidor servidor-backend

3. Interfaz ServletContext

3.1, descripción de la interfaz ServletContext

3.2, el rol del objeto ServletContext

3.3, el papel de la demostración del código objeto de ServletContext

3.3.1 Servlet procesador-ServletContext objeto función test-HttpServletProcessorAuto

3.3.2 Servlet procesador-ServletContext objeto función test-web.xml archivo de configuración

3.3.3 Servlet procesador-ServletContext objeto función test-front-end solicitud HTTP

3.3.4 Servlet procesador-ServletContext objeto función test-backend resultado de procesamiento de solicitud HTTP

3.3.5 Servlet procesador-objeto ServletContext función prueba-demostración del almacenamiento de datos en el objeto ServletContext

3.3.6 Una vez implementado todo el proyecto web en el servidor Tomcat, los recursos dinámicos y estáticos del servidor se almacenarán en el disco

API en línea de java8 : https://www.matools.com/api/java8

1. Interfaz de servlet

1.1 Sistema de herencia de la interfaz Servlet

2. Interfaz ServletConfig

2.1 Descripción de la interfaz ServletConfig

A juzgar por el nombre, sabemos que la interfaz ServletConfig es la información de configuración del programa Servlet:

(1) El programa Servlet y el objeto ServletConfig son creados por Tomcat y utilizados por los programadores.

(2) El programa Servlet se crea cuando se accede por primera vez por defecto (no se crea ningún acceso) .Cuando se crea cada programa Servlet, creará un objeto ServletConfig correspondiente entre sí. Un programa Servlet solo puede obtener el objeto ServletConfig que le corresponde, pero no puede obtener el objeto ServletConfig de otros programas Servlet.

2.2 Tres funciones de la interfaz ServletConfig

(1) Se puede obtener el alias del programa Servlet (es decir, el alias del programa Servlet configurado en web.xml).

(2) Se pueden obtener los parámetros de inicialización configurados en web.xml.

(3) Puede obtener el objeto ServletContext.

2.3 Demostración de código de la interfaz ServletConfig

2.3.1 Procesador de servlet-HttpServletProcessor

package com.wind.servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
 * 演示ServletConfig接口的作用
 */
public class HttpServletProcessor extends HttpServlet {
    private static final long serialVersionUID = -7511536601794982778L;
    public HttpServletProcessor() {
        System.out.println("1.HttpServletProcessor extends HttpServlet 的无参构造器执行了...");
    }

    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
        super.init(servletConfig);
        System.out.println("2.HttpServletProcessor extends HttpServlet 的init方法执行了...");
        //ServletConfig接口的三大作用:
        //(1) 可以获取Servlet程序的别名(即web.xml的的内容)
        System.out.println("Servlet程序的别名:" + servletConfig.getServletName());
        //(2) 可以获取web.xml的初始化参数的值
        System.out.println("Servlet程序的初始化参数1:" + servletConfig.getInitParameter("username"));
        System.out.println("Servlet程序的初始化参数2:" + servletConfig.getInitParameter("password"));
        //(3) 可以获取ServletContext对象
        System.out.println("Servlet程序的ServletContext对象:" + servletConfig.getServletContext());
    }

    @Override
    public ServletConfig getServletConfig() {
        return null;
    }

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("3.HttpServletProcessor extends HttpServlet, doGet done...");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("4.HttpServletProcessor extends HttpServlet, doPost done...");
    }

    @Override
    public String getServletInfo() {
        return null;
    }

    @Override
    public void destroy() {
        System.out.println("5.HttpServletProcessor extends HttpServlet 的destroy方法执行了.");
    }
}

2.3.2 Precauciones para reescribir el método init

Nota: Al reescribir el método init de la interfaz Servlet, debe escribir en el cuerpo de la función: super.init (config); la   razón es: el método init en la clase padre GenericServlet guarda el parámetro config, y la subclase no puede guardarlo si no se llama.

2.3.3 Archivo de configuración Servlet processor-web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">

    <!--1.使用servlet标签给Tomcat配置动态servlet程序-->
    <servlet>
        <!--servlet-name标签:给servlet程序起一个别名(一般就是类名)-->
        <servlet-name>HttpServletProcessor</servlet-name>
        <!--servlet-class标签:servlet程序的全类名-->
        <servlet-class>com.wind.servlet.HttpServletProcessor</servlet-class>
        <!--init-param标签:给Servlet程序传入初始化参数-->
        <init-param>
            <param-name>username</param-name>
            <param-value>root</param-value>
        </init-param>
        <init-param>
            <param-name>password</param-name>
            <param-value>root</param-value>
        </init-param>
    </servlet>

    <!--2.使用servlet-mapping标签给动态servlet程序配置访问地址-->
    <servlet-mapping>
        <!--servlet-name标签:告诉Tomcat服务器,我当前配置的访问地址是给哪个servlet程序使用-->
        <servlet-name>HttpServletProcessor</servlet-name>
        <!--url-pattern标签:配置访问地址.
        (1)/            :斜杠表示,在服务器解析的时候,表示访问地址是:http://ip:port/工程路径
        (2)/httpServlet : 表示访问地址是:http://ip:port/工程路径/httpServlet 比如:http://localhost:8080/javaWeb/httpServlet -->
        <url-pattern>/httpServlet</url-pattern>
    </servlet-mapping>
    <!--3.使用b.html访问-->

</web-app>

2.3.4 Solicitud HTTP de interfaz de usuario del procesador de servlet

2.3.5 Resultado del procesamiento de solicitudes HTTP de servidor servidor-backend

3. Interfaz ServletContext

3.1, descripción de la interfaz ServletContext

(1) La interfaz ServletContext representa el objeto de contexto Servlet.

(2) Un proyecto web tiene solo una instancia de objeto ServletContext.

(3) ServletContext se crea cuando se inicia el proyecto web y se destruye cuando se detiene el proyecto web.

(4) El objeto ServletContext es un objeto de dominio. ¿Qué es un objeto de dominio? El objeto de dominio es: el objeto que accede a los datos como un mapa se denomina objeto de dominio, el dominio se  refiere al alcance operativo de acceso a los datos, y el dominio del ServletContext es el proyecto web completo.

3.2, el rol del objeto ServletContext

(1) Obtenga el valor en la etiqueta de parámetro de contexto configurada en web.xml.

(2) Obtenga la ruta del proyecto actual, formato: / ruta del proyecto, que es el contenido del contexto de la Aplicación en la Implementación en Editar Configuraciones (es decir, el contenido después de 8080 en la dirección, antes de la página abierta específica).

(3) Obtenga la ruta absoluta del proyecto en el disco duro después de la implementación.

(4) Acceda a datos como Mapa.

3.3, el papel de la demostración del código objeto de ServletContext

3.3.1 Servlet procesador-ServletContext objeto función test-HttpServletProcessorAuto

package com.wind.servlet;

import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
 * ServletContext 测试
 */
public class HttpServletProcessorAuto extends HttpServlet {

    private static final long serialVersionUID = 2050438983192725273L;

    @Override
    public void init(ServletConfig config) throws ServletException {
        super.init(config);
    }

    /**
     * 默认执行的是doGet方法,故只重写doGet方法
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        //GenericServlet类中有 public ServletConfig getServletConfig()方法,返回 this.config
        ServletContext servletContext = getServletConfig().getServletContext();

        //ServletContext作用 1.获取web.xml中配置的上下文参数<context-param>标签中的值
        System.out.println("context-param参数的username值是:" + servletContext.getInitParameter("username"));
        /* 运行结果:context-param参数的username值是:username-root */
        System.out.println("context-param参数的password值是:" + servletContext.getInitParameter("password"));
        /* 运行结果:context-param参数的password值是:password-root */

        //ServletContext作用 2.获取当前工程的路径
        System.out.println("当前工程路径:" + servletContext.getContextPath());
        /* 运行结果:当前工程路径:/javaWeb */

        //ServletContext作用 3.获取web工程部署后在硬盘上的绝对路径
        /* /斜杠(默认路径)对应IDEA代码的web目录 */
        System.out.println("工程部署后的绝对路径是:" + servletContext.getRealPath("/"));
        /* 运行结果:工程部署后的绝对路径是:/Users/cmm/codes/spring5-txdemo3-javaWeb/out/artifacts/javaWeb_war_exploded/ */

        //另:在web目录下创建一个css文件夹
        System.out.println("工程下css目录的绝对路径是:" + servletContext.getRealPath("/css"));
        /* 运行结果:工程下css目录的绝对路径是:/Users/cmm/codes/spring5-txdemo3-javaWeb/out/artifacts/javaWeb_war_exploded/css */
        //在web目录下创建一个img文件夹,里面放1.gif文件
        System.out.println("工程下img目录1.jpg的绝对路径是:" + servletContext.getRealPath("/img/1.jpg"));
        /* 输出:工程下img目录1.gif的绝对路径是:/Users/cmm/codes/spring5-txdemo3-javaWeb/out/artifacts/javaWeb_war_exploded/img/1.jpg */
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("3.HttpServletProcessorAuto extends HttpServlet, doGet done...");
    }
}

3.3.2 Servlet procesador-ServletContext objeto función test-web.xml archivo de configuración

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">

    <!--<context-param>标签中是web工程的上下文参数,属于整个web工程-->
    <!--<context-param>标签可以有多个,但是,全部都需要写在第一个<servlet>标签之上!!!-->
    <context-param>
        <param-name>username</param-name>
        <param-value>username-root</param-value>
    </context-param>
    <context-param>
        <param-name>password</param-name>
        <param-value>password-root</param-value>
    </context-param>
    <!--<context-param>标签下方,才能够是servlet类对应的<servlet标签>-->

    <!--1.使用servlet标签给Tomcat配置动态servlet程序-->
    <servlet>
        <servlet-name>HttpServletProcessorAuto</servlet-name>
        <servlet-class>com.wind.servlet.HttpServletProcessorAuto</servlet-class>
    </servlet>

    <!--2.使用servlet-mapping标签给动态servlet程序配置访问地址-->
    <servlet-mapping>
        <servlet-name>HttpServletProcessorAuto</servlet-name>
        <url-pattern>/httpServletAuto</url-pattern>
    </servlet-mapping>
    <!--3.使用b.html访问-->

</web-app>

3.3.3 Servlet procesador-ServletContext objeto función test-front-end solicitud HTTP

3.3.4 Servlet procesador-ServletContext objeto función test-backend resultado de procesamiento de solicitud HTTP

3.3.5 Servlet procesador-objeto ServletContext función prueba-demostración del almacenamiento de datos en el objeto ServletContext

(1) Procesador de servlet-HttpServletProcessorAuto2

public class HttpServletProcessorAuto2 extends HttpServlet {

    private static final long serialVersionUID = -1924341414254477696L;

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        //GenericServlet类中有 public ServletConfig getServletConfig()方法,返回 this.config
        ServletContext servletContext = getServletConfig().getServletContext();

        //向servletContext对象中设置值
        System.out.println("HttpServletProcessorAuto2=servletContext对象,key1=:" + servletContext.getAttribute("key1"));
        System.out.println("HttpServletProcessorAuto2=servletContext对象hashcode=:" + servletContext);
    }
}

(2) Procesador de servlet-HttpServletProcessorAuto

public class HttpServletProcessorAuto extends HttpServlet {

    private static final long serialVersionUID = 2050438983192725273L;

    @Override
    public void init(ServletConfig config) throws ServletException {
        super.init(config);
    }
    /**
     * 默认执行的是doGet方法,故只重写doGet方法
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        //GenericServlet类中有 public ServletConfig getServletConfig()方法,返回 this.config
        ServletContext servletContext = getServletConfig().getServletContext();

        //向servletContext对象中设置值
        System.out.println("HttpServletProcessorAuto=servletContext对象设置值之前,key1=:" + servletContext.getAttribute("key1"));
        servletContext.setAttribute("key1", "value1");
        System.out.println("HttpServletProcessorAuto=servletContext对象设置值之后,key1=:" + servletContext.getAttribute("key1"));
        System.out.println("HttpServletProcessorAuto=servletContext对象hashcode=:" + servletContext);
    }
}

(3) archivo de configuración web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">

    <!--<context-param>标签中是web工程的上下文参数,属于整个web工程-->
    <!--<context-param>标签可以有多个,但是,全部都需要写在第一个<servlet>标签之上!!!-->
    <context-param>
        <param-name>username</param-name>
        <param-value>username-root</param-value>
    </context-param>
    <context-param>
        <param-name>password</param-name>
        <param-value>password-root</param-value>
    </context-param>
    <!--<context-param>标签下方,才能够是servlet类对应的<servlet标签>-->

    <!--1.使用servlet标签给Tomcat配置动态servlet程序-->
    <servlet>
        <servlet-name>HttpServletProcessorAuto</servlet-name>
        <servlet-class>com.wind.servlet.HttpServletProcessorAuto</servlet-class>
    </servlet>
    <servlet>
        <servlet-name>HttpServletProcessorAuto2</servlet-name>
        <servlet-class>com.wind.servlet.HttpServletProcessorAuto2</servlet-class>
    </servlet>

    <!--2.使用servlet-mapping标签给动态servlet程序配置访问地址-->
    <servlet-mapping>
        <servlet-name>HttpServletProcessorAuto</servlet-name>
        <url-pattern>/httpServletAuto</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>HttpServletProcessorAuto2</servlet-name>
        <url-pattern>/httpServletAuto2</url-pattern>
    </servlet-mapping>
    <!--3.使用b.html访问-->
</web-app>

(4) Resultados de la operación

3.3.6 Una vez implementado todo el proyecto web en el servidor Tomcat, los recursos dinámicos y estáticos del servidor se almacenarán en el disco

(1) Una vez implementado todo el proyecto web en el servidor Tomcat, los recursos dinámicos y los recursos estáticos del servidor se almacenarán en el disco, y el directorio es el siguiente.

(2) Y se puede abrir directamente en el navegador para ver varios recursos implementados en él.

(3) Entonces, otros pueden acceder a varios recursos implementados por el desarrollador en el servidor Tomcat en el navegador El proceso de acceso es aproximadamente el siguiente.

 

 

Supongo que te gusta

Origin blog.csdn.net/cmm0401/article/details/111414121
Recomendado
Clasificación