Notas de estudio de JAVA 18-Tomcat, Servlet

Gato

software de servidor web

1. Operación básica

1.1 Configuración

Cómo implementar el proyecto:
1. Simplemente coloque el proyecto en el directorio webapps para
simplificar la implementación: marque el proyecto en un paquete war y luego coloque el paquete war en webapps
2. Configure el archivo conf / server.xml
en la etiqueta Host body
<Context doBase = "Ruta de almacenamiento del proyecto" path = "Directorio virtual" />
3. Cree un archivo xml de cualquier nombre en conf \ Catalina \ localhost. Escriba en el archivo
<Context doBase = "Ruta de almacenamiento del proyecto">
directorio virtual incluso si el nombre del archivo xml

Proyectos estáticos y proyectos dinámicos:
la estructura de directorios de los proyectos dinámicos de Java:
directorio raíz del proyecto -> directorio
WEB-INF ->
web.xml:
directorio de clases del archivo de configuración del núcleo del proyecto web : el directorio donde se
colocan los archivos de bytecode directorio lib: jar dependiente del lugar paquetes

Tomcat integrado en IDEA:

Servlet

1. Conceptos básicos

Server Applet, un pequeño programa que se ejecuta en el lado del servidor. En esencia, Servlet es una interfaz que define las reglas para que el navegador acceda a las clases de Java (reconocimiento de Tomcat)

2. Inicio rápido

Configurar Servlet en web.xml

    <!--配置Servlet-->
    <servlet>
        <servlet-name>demo1</servlet-name>
        <servlet-class>demo01.ServletDemo1</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>demo1</servlet-name>
        <url-pattern>/demo1</url-pattern>
    </servlet-mapping>

Use anotaciones para configurar:
@WebServlet ("/ demo")

Implementar la interfaz Servlet

    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
    
    
        System.out.println("Hello World");
    }

3. Principio de ejecución del servlet

1. Cuando el servidor recibe la solicitud del navegador del cliente, analizará la ruta de la URL de la solicitud para obtener la ruta del recurso para acceder al Servlet
2. Busque el archivo web.xml, si hay un cuerpo de etiqueta <url-pattern> correspondiente contenido
3. Si es así Está buscando el nombre de clase completo de la <servlet-class> correspondiente
4. Tomcat cargará el archivo de código de bytes en la memoria y creará su objeto
5. Llamará a su método

4. Ciclo de vida de los servlets

4.1 Crear

Por defecto, el servlet se crea cuando se accede a él por primera vez
public void init (ServletConfig servletConfig): método de inicialización. Se ejecuta cuando se crea el servlet, solo se ejecutará una vez
. Creado cuando se accede a él por primera vez: <load-on-startup> es un número negativo
. Creado cuando se inicia el servidor: <load-on-startup> es 0 o un número negativo.

4.2 Servicio


Servicio public void (ServletRequest ServletRequest, ServletResponse ServletResponse) se llama cada vez que se accede al método servlet: Proporciona el método de servicio, ejecuta cada vez que se acceda al servlet, y ejecuta varias veces

4.3 Destrucción

Se ejecuta cuando se destruye el servlet. Cuando el servidor se apaga, el servlet se destruye. El método de destrucción se ejecuta solo cuando el servidor se apaga normalmente. El método de destrucción se ejecuta antes de que se destruya el servlet, y generalmente se utiliza para liberar recursos.
Public void destroy (): el método de destrucción se ejecuta una vez cuando el servidor se apaga normalmente

4.4 Otro

public ServletConfig getServletConfig (): Obtiene el objeto ServletConfig
public String getServletInfo (): Obtiene información, versión, autor, etc. del Servlet

5. Arquitectura

5.1 Interfaz

Servlet-interface
GenericServlet-abstract class
Los otros métodos en la interfaz Servlet se implementan vacíos y solo service () se usa como abstracto
. Cuando la clase Servlet se defina en el futuro, GenericServlet se puede heredar y el método service () se puede implementado.

@WebServlet("/demo2")
public class ServletDemo02 extends GenericServlet {
    
    
    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
    
    
        System.out.println("demo2");
    }
}

Se
recomienda la clase HttpServlet-abstract para usar
la encapsulación del protocolo http para simplificar la operación
1. Definir la clase para heredar HttpServlet
2. Reescribir doGet / doPost

@WebServlet("/demo3")
public class ServletDemo03 extends HttpServlet {
    
    
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    
    
        System.out.println("doGet");
    }

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

HTTP

1. Conceptos básicos

Protocolo de transferencia de hipertexto
: define el modo de transmisión cuando el cliente y el servidor se comunican.
Características:
1. Protocolo avanzado basado en TCP / IP
2. Número de puerto predeterminado 80
3. Basado en el modelo de solicitud / respuesta: Una solicitud corresponde Una sola vez respuesta
4. Sin estado: cada solicitud es independiente entre sí y no puede intercambiar datos

2. Formato de datos

2.1 Solicitar formato de datos del mensaje

Línea de petición
método Request URL de solicitud de protocolo / versión
Consigue
1. Los parámetros de solicitud están en la línea de petición, después de la url
2. La longitud de la URL solicitada se limita
3. No es muy seguro
del anuncio
1. El método de la petición está en el cuerpo de la petición
2 . La URL solicitada No hay límite para la longitud
. 3. Encabezado de
solicitud relativamente seguro .
Nombre del encabezado de solicitud: valor del encabezado de
solicitud Solicitud de línea en blanco
como un parámetro de
solicitud de cuerpo de
solicitud independiente

3. Solicitud

3.1 Principios de solicitud y respuesta

1. El servidor Tomcat creará el objeto ServletDemo correspondiente de acuerdo con la ruta del recurso en el año de solicitud 2. El
servidor Tomcat creará los objetos Solicitud y Respuesta, y los datos de la solicitud y el mensaje
se encapsularán en el objeto Solicitud 3. Tomcat pasar los objetos Solicitud y Respuesta al Método de servicio y llamar a
4. Los programadores pueden obtener los datos del mensaje de solicitud a través del objeto Solicitud y establecer los datos del mensaje de respuesta a través del objeto Respuesta

3.2 Obtener mensaje de solicitud

3.2.1 Obtener datos de la fila de solicitud

Obtener el método de solicitud: String getMethod ()
Obtener el directorio virtual: String getContextPath ()
Obtener la ruta del servlet: getServletPath ()
Obtener obtener el parámetro de solicitud del método: String getQueryString ()
Obtener la solicitud uri: String getRequestURI ()
Obtener el protocolo y la versión: String getProtocol ()
Obtenga la dirección IP del cliente: String getRemoteAddr ()

3.2.2 Obtener datos del encabezado de la solicitud

String getHeader (String name): obtiene el valor del encabezado de la solicitud de acuerdo con el nombre del encabezado de la solicitud
Enumeración <String> getHeaderNames (): Obtiene todos los nombres del encabezado de la solicitud

3.2.3 Obtener datos del cuerpo de la solicitud

Obtener el objeto de flujo, obtener datos del objeto de flujo

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
    
        //获取请求消息体
        //获取字符流
        BufferedReader br = request.getReader();
        //读取数据
        String line=null;
        while ((line=br.readLine())!=null){
    
    
            System.out.println(line);
        }
    }

3.3 Otras funciones

3.3.1 Forma general de obtener parámetros de solicitud

String getParameter (String name): obtiene el valor del parámetro según el nombre del parámetro
String [] getParameter (String name): obtiene la matriz del valor del parámetro según el nombre del parámetro
Enumeration <String> getParameterNames (): obtiene todos los parámetros solicitados names
Map <String, String []> getParameterMap (): Obtiene la colección Map de todos los parámetros

3.3.2 Reenvío de solicitudes

Un método de salto de recursos dentro del servidor.
Pasos:
1. Obtener el objeto reenviador de solicitudes a través del objeto Solicitud.
2. Usar el objeto para reenviar

@WebServlet("/requestDemo2")
public class RequestDemo2 extends HttpServlet {
    
    
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
    
        System.out.println("Hello Servlet demo2");
        //转发到RequestDemo3
        request.getRequestDispatcher("/requestDemo3").forward(request,response);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
    
        this.doPost(request,response);
    }
}

Características:
1. La ruta de la barra de direcciones del navegador no cambiará
2. Solo se puede reenviar a los recursos internos del servidor actual
3. El reenvío es una solicitud

3.3.3 Compartir datos

Objeto de dominio: un objeto con un alcance que puede compartir datos dentro del alcance de
solicitud dominio: el alcance de una solicitud, generalmente utilizado para compartir datos entre múltiples recursos que solicitan reenvío
setAttribute (String name, Object obj): almacenar datos
getAttribute (String name ): obtener valor por clave
removeAttribute (nombre de cadena): eliminar par clave-valor por clave

@WebServlet("/requestDemo2")
public class RequestDemo2 extends HttpServlet {
    
    
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
    
        System.out.println("Hello Servlet demo2");
        //存储数据到request域中
        request.setAttribute("msg","hello");
        //转发到RequestDemo3
        request.getRequestDispatcher("/requestDemo3").forward(request,response);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
    
        this.doPost(request,response);
    }
}
@WebServlet("/requestDemo3")
public class RequestDemo3 extends HttpServlet {
    
    
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
    
        //获取数据
        Object msg = request.getAttribute("msg");
        System.out.println(msg);
        System.out.println("Hello Servlet demo3");
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
    
        this.doPost(request,response);
    }
}

3.3.4 Obtener ServletContext

getServleContext ()

4. Respuesta

4.1 Formato de datos del mensaje de respuesta

1.
Composición de la línea de respuesta : protocolo / versión código de respuesta estado descripción
del estado Código de estado de respuesta: el servidor le dice al navegador del cliente el estado de esta solicitud y respuesta
2. Encabezado de respuesta
3. Línea en blanco de
respuesta 4. Cuerpo de respuesta

4.2 Función

4.2.1 Establecer línea de respuesta

Formato: HTTP / 1.1 200 ok
Establecer código de estado: setStatus (int sc)

4.2.2 Establecer encabezado de respuesta

setHeader (nombre de cadena, valor de cadena)

//完成重定向
@WebServlet("/responseDemo1")
public class ResponseDemo1 extends HttpServlet {
    
    
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
    
        System.out.println("demo1");
/*        //访问这个资源会自动跳转到Demo2
        //设置状态吗为302
        response.setStatus(302);
        //设置响应头为location
        response.setHeader("location","/Day20/responseDemo2");*/
        response.sendRedirect("/Day20/responseDemo2");
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
    
        this.doPost(request,response);
    }
}

Funciones de redirección:
1. La barra de direcciones cambia.
2. La redirección puede acceder a recursos de otros sitios.
3. La redirección son dos solicitudes. No se puede usar el objeto de solicitud para compartir datos

Características del reenvío:
1. La ruta de la barra de reenvío permanece sin cambios
2. El reenvío solo puede acceder a los recursos del servidor actual
3. El reenvío es una solicitud. Puede utilizar el objeto de solicitud para compartir datos

Obtenga dinámicamente el directorio virtual:
request.contextPath ()
Establezca el código:
response.setContentType ("text / html; charset = utf-8")

4.2.3 Establecer cuerpo de respuesta

Siga los pasos:
1. Obtenga el flujo de salida
2. Utilice el flujo de salida para enviar datos al navegador

5. ServeletContext

5.1 Conceptos básicos

Representa toda la aplicación web y puede comunicarse con el contenedor del programa.

5.2 Obtener objetos

Obtenido mediante solicitud: getServletContext (); Obtenido
mediante HttpServlet: getServletContext ();

5.3 Función

1. Obtener tipo MIME
String getMimeType (archivo de cadena)
2. Objeto de dominio: datos compartidos
setAttribute (nombre de cadena, valor de objeto)
getAttribute (nombre de cadena)
removeAttribute (nombre de cadena)
Alcance del objeto ServletContext: todos los datos solicitados por todos los usuarios
3. Obtener archivo La ruta real
getRealPath (nombre de la cadena)

Supongo que te gusta

Origin blog.csdn.net/qq_44708714/article/details/107434728
Recomendado
Clasificación