Configuración de servlet y despliegue eficiente

El objetivo principal de crear un backend de página web es desarrollar un backend de sitio web basado en la programación de tomcat, lo que definitivamente requiere una serie de operaciones en el protocolo http. Afortunadamente, tomcat ya ha encapsulado estas operaciones subyacentes relacionadas con http (puerto de monitoreo, conexión de recepción , lectura de solicitudes de búsqueda, análisis de solicitudes, construcción de objetos de solicitud, etc.), simplemente llame a la API proporcionada por Tomcat para nosotros. Servlet es la API nativa proporcionada por Tomcat a Java para el desarrollo web. Por supuesto, Servlet rara vez se usa en empresas Ver usted, pero las API de desarrollo web eficientes como Spring MVC también están encapsuladas en base a Servlets. Las tecnologías emergen sin cesar. Solo dominando el marco más básico podemos responder a los cambios sin cambios. ¿Qué es un Servlet
?

Servlet es una tecnología para implementar páginas dinámicas, es un conjunto de APIs proporcionadas por Tomcta a los programadores, y es una API web que ayuda a los programadores a desarrollar de manera simple y eficiente.

Páginas estáticas vs páginas dinámicas

  • Página estática : es una página cuyo contenido siempre es fijo. Incluso si los usuarios son diferentes/el tiempo es diferente/los parámetros de entrada son diferentes , el contenido de la página no cambiará.
  • Páginas dinámicas : el contenido de la página cambiará dependiendo del usuario/tiempo/parámetros de entrada .

Por ejemplo:

La página de inicio de Tomcat es una página estática.

imagen-20230413144257055

La página de inicio de la estación B es una página dinámica.

imagen-20230424104712354

Hay muchas tecnologías para construir páginas dinámicas, y cada idioma tendrá algunas bibliotecas/marcos relacionados para hacer esto.

Servlet es un conjunto de API proporcionado por Tomcat, el servidor HTTP, a Java para completar la tarea de crear páginas dinámicas, sin tener que prestar atención a detalles técnicos como Socket, formato de protocolo Http, concurrencia de subprocesos múltiples, etc., que reduce el umbral para el desarrollo de aplicaciones web y mejora la eficiencia del desarrollo.

Trabajo principal del servlet

  • Permite a los programadores registrar una clase y ejecutar algún código en esta clase cuando Tomcat recibe una solicitud HTTP específica.
  • Ayude a los programadores a analizar las solicitudes HTTP, analice las solicitudes HTTP de una cadena en un objeto HttpRequest
  • Para ayudar a los programadores a construir respuestas Http, los programadores solo necesitan completar algunos campos de atributos para el objeto HttpResponse especificado, y el Servlet construirá automáticamente una cadena de respuesta Http de acuerdo con el protocolo Http y la escribirá de vuelta al cliente a través del Socket.

El primer programa servlet

El primer paso es escribir un programa de servlet, implementarlo en Tomcat, acceder a él a través del servidor y obtener la cadena hello world. Este hola mundo puede llamarse el hola mundo más difícil de la historia.

Hay siete pasos en total, excepto escribir el código de hola mundo, el resto de los pasos son fijos.

  1. crear proyecto
  2. Introducir dependencias
  3. Crear estructura de directorio
  4. Escribir código
  5. empaquetador
  6. programa de despliegue
  7. verificar

1. Crea un proyecto

Aquí queremos crear un proyecto maven, maven es una herramienta de "gestión de proyectos".

Las funciones principales son:

  1. Estandarizar la estructura de directorios
  2. Administrar dependencias (qué bibliotecas de terceros se usan, todo bien manejado)
  3. Construir
  4. Embalar
  5. prueba

imagen-20230405163516003

Simplemente elija de acuerdo con la imagen de arriba ~~

Si usa maven por primera vez, después de crear el proyecto, algunas dependencias de maven se cargarán desde el almacén central, y debe estar conectado a Internet y esperar pacientemente. Esto solo sucederá la primera vez y posteriores la creación será conveniente.

Aunque maven es un proyecto independiente, no es necesario descargarlo por separado, porque IDEA ya lo incluye.

Tenga en cuenta el directorio del proyecto creado:

imagen-20230405164234160

2. Introducir dependencias

La dependencia del paquete jar del servlet

[Maven仓库]( Repositorio Maven: Buscar/Examinar/Explorar (mvnrepository.com) )

Servlet de búsqueda

imagen-20230405164628386

Correspondiente al número de versión de Tomcat 8, necesitamos descargar 3.1.0

imagen-20230405164752119

Simplemente pegue el código a continuación en pom.xml.

imagen-20230405164847451

Sugerencias: aquí no se trata de pegar a la ligera, sino de crear una subetiqueta y pegarla en la subetiqueta.

imagen-20230405165125246

Si usa la dependencia por primera vez, puede ser roja (rojo significa que la descarga no se ha completado). Generalmente, siempre que la pegue, el experto en ideas la descargará automáticamente al almacén de expertos. Esto la configuración es equivalente a las coordenadas de la dependencia en el almacén maven.


3. Crea un directorio

  1. En el directorio principal (similar a java, recursos), cree un directorio de aplicaciones web.
  2. Cree un directorio WEB-INF en webapp
  3. Cree un archivo web.xml en el directorio WEB-INF

imagen-20230405165650188

Consejos: El directorio y la estructura creados aquí no pueden estar equivocados en absoluto.

Escriba algo de código en web.xml

<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
<display-name>Archetype Created Web Application</display-name>
</web-app>

No es necesario memorizar el código anterior. En comparación con el código escrito en el pasado, el programa servlet actual tiene una diferencia muy grande, es decir, no hay un método principal. El método principal puede considerarse como el motor del automóvil. . Solo con el motor puede funcionar. Pero el vehículo actual no tiene motor, para hacer que el auto funcione, puede colgar un frente y dejar que el frente se arrastre y funcione. El programa servlet que escribimos es el carro, y tomcat es el frente. Ponemos el programa de servlet escrito en el directorio webapps, que es equivalente a colgar el carro. Después de llegar al frente del auto, WEB-INF/web.xml es para decirle a tomcat qué autos (archivos) necesitan ser tirado

4. Escribir código

Cree un archivo .java en el directorio java para escribir código

imagen-20230405170745598

La clase preparada que se proporciona en la API del servlet necesita heredar HttpServlet para escribir el código del servlet. El propósito principal de la herencia aquí es extender la función de HttpServlet a través de la reescritura de métodos.

public class HelloServlet extends HttpServlet 

Anule el método doGet, ya existe doGet en la clase principal, aquí esperamos reemplazar la clase principal con la versión de la subclase.

@Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    
    
//        super.doGet(req, resp);这段代码一定要去掉,父类只会返回一个错误页面

    }

El método doGet que escribimos no necesita llamarse manualmente, pero Tomcat lo llama. Cuando Tomcat recibe la solicitud de obtención, activará el método doGet. Tomcat construirá dos parámetros, req (solicitud) y resp (respuesta).

  • req: la cadena leída del socket TCP, el objeto analizado de acuerdo con el protocolo HTTP y los atributos en el objeto corresponden al formato del mensaje de solicitud HTTP.
  • resp: es un objeto vacío (no nulo, solo un nuevo objeto, las diversas propiedades internas no están configuradas), los programadores deben construir un objeto resp de acuerdo con el requerimiento en doGet, combinado con su propia lógica comercial . es calcular la respuesta de acuerdo con la solicitud , y el parámetro resp es esencialmente un "parámetro de salida". Después de que el parámetro se construye en el método, la persona que llama escribe el resultado en el TCP Socket y lo envía de vuelta al navegador.

Escribir código:

//        这个仅仅是在服务器的控制台打印
        System.out.println("hello world");
//        要想把 hello world 返回到客户端 , 需要以下代码
//        getWriter 会得到一个 writer 对象
        resp.getWriter().write("hello world");

El objeto Writer aquí está subordinado al objeto resp. La operación de escritura es en realidad escribir en la parte del cuerpo del resp. Después de construir el objeto resp, Tomcat convertirá uniformemente el número de respuesta en http y luego lo escribirá en el socket. .

Finalmente, preste atención a agregar anotaciones a la parte más externa de la clase.

@WebServlet("/hello")

La función de la anotación es proporcionar una "explicación" adicional para una clase/método, dando a la clase/método funciones/significados adicionales.

La anotación @WebServlet aquí se usa para asociar la clase actual con una ruta de solicitud http.

doGet se llama cuando Tomcat recibe una solicitud Get. La llamada a doGet depende de la ruta de la solicitud Get actual. Diferentes rutas pueden desencadenar diferentes códigos (asociados con diferentes clases). En un programa Servlet, puede haber muchas clases Servlet, y cada clase de Servlet se puede asociar con diferentes rutas (correspondientes a diferentes recursos), por lo que múltiples Servlets pueden implementar diferentes funciones.

Ejemplo: voy a un restaurante por un wrap de pollo

Inicio una solicitud: jefe, ven aquí. Rollitos de pollo~~http://ip:port/rollitos de pollo? Cebollas verdes = poner más

Después de que el jefe reciba la solicitud, cocinará de acuerdo con el proceso de "hacer rollos de pollo" (calcule la respuesta según la solicitud)

Si tengo dos solicitudes más:

5. Empaquetador

Después de compilar el programa (obtenga algunos archivos .class), empaque estos archivos .class en un paquete comprimido

jar es un tipo de paquete comprimido compuesto por .class, pero aquí está el paquete war, jar es solo un programa java común y war es un programa específico de tomcat que se usa para describir una aplicación web, una guerra es una aplicación web.

Haga clic en el paquete con maven

imagen-20230406090336409

En este momento, el paquete es solo un paquete jar y debe empaquetarse como un paquete war si se va a implementar en tomcat.

<packaging>war</packaging>

Es necesario agregar un complemento para hacer un paquete war, de lo contrario se informará un error. No es necesario agregar un paquete jar, y finalName es para cambiar el nombre del paquete war.

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <version>3.3.1</version>
            </plugin>
        </plugins>
        <finalName>hello_servlet</finalName>
    </build>

Después de que el empaquetado sea exitoso, habrá un paquete de guerra más en el directorio de destino.

imagen-20230406091318610

El IDE obviamente puede ejecutarse directamente, ¿por qué tenemos que pasar por un paquete tan problemático?

Debido a que el IDE se ejecuta directamente localmente, el entorno de desarrollo (la computadora donde escribe su propio código) y el entorno de ejecución (otro servidor) pueden no ser el mismo entorno durante el trabajo.

6. Despliegue

Copie la guerra empaquetada en el directorio de aplicaciones web de tomcat y luego inicie tomcat.

imagen-20230406091659601

7. Verificar

Abra el navegador, ingrese la url y acceda al código escrito.

Sugerencias: el nombre de la ruta debe ser correcto.

imagen-20230406092240957

resumen:

Ingrese la URL en la barra de direcciones del navegador, y el navegador construirá una solicitud http Get correspondiente y la enviará a Tomcat. Tomcat determinará la aplicación web específica de acuerdo con la ruta de primer nivel. De acuerdo con la ruta de segundo nivel, determine a qué clase se llama, y ​​finalmente determinar qué método (doGet, doPost...) llamar a HelloServlet a través del método Get/Post

en breve:

El servidor Http también es un servidor basado en TCP, crea un puerto de enlace de socket de servidor TCP, acepta recibir la solicitud, después de recibir la solicitud, lee la solicitud del socket, construye la solicitud recibida en un objeto HttpServletRquest y luego clasifica según a la URL en la ruta de solicitud, para determinar una clase de servlet (un hash construido de antemano en el servidor Http para guardar la ruta y la clase), crear una instancia de servlet correspondiente, determinar el método de la clase de servlet de acuerdo con el método http , obtenga el objeto HttpServletResponse después de ejecutar el método y construya HTTP de acuerdo con la respuesta del protocolo http (obtenga la cadena), simplemente escriba de nuevo en el socket.


Implementación eficiente de complementos de Tomcat:

Algunas de las operaciones anteriores se pueden simplificar, por ejemplo: hay plantillas de proyecto para crear proyectos y complementos fijos para empaquetar e implementar.

Por lo tanto, IDEA proporciona algunas API que permiten a los programadores desarrollar complementos y ampliar las funciones existentes de IDEA.

1. Los complementos comunes para empaquetar e implementar proyectos incluyen Smart Tomcat (más fácil y fácil de usar)

imagen-20230407105330812

2. Después de descargar el complemento, debe configurarlo cuando use SmartTomcat por primera vez, haga clic en Editar configuración

imagen-20230407105558693

3. Añadir añadir SmartTomcat

imagen-20230407105639838

5. Configure la ruta de contexto de Tomcat e ignore el resto.

Sugerencias: no comience la ruta de contexto con una letra mayúscula, ya que el navegador convertirá la ruta de contexto a minúsculas de forma predeterminada, lo que provocará la imposibilidad de acceder a la página correctamente.

Smart Tomcat carga una sola aplicación web para ejecutar, y no es con el tomcat local. La idea llama a tomcat, lo que hará que tomcat cargue el directorio del proyecto actual. La ruta de contexto predeterminada es el nombre del proyecto. Si el nombre del proyecto comienza con una letra mayúscula, puede modificarlo. Este proceso no incluye un paquete de guerra. No hay proceso de copia y descompresión, pero parte del contenido de las aplicaciones web (visite 127.0.0.1:8080 para mostrar la página de bienvenida) ya no está.

imagen-20230407111244936

6. Solo ejecuta Tomcat

7. Como se muestra en la siguiente figura, la operación es exitosa:

Sugerencias: no haga clic en el enlace de la idea, debe ser 404, porque la ruta del servlet no está incluida.

imagen-20230407111201952

8. Visita la página web

imagen-20230407111142810

Errores comunes:

Aparece un 404:
  1. camino equivocado
  2. la aplicación web no está implementada correctamente
  3. web.xml está mal escrito
  4. Escribir menos ruta de servlet
  5. La ruta del servlet no coincide con la URL
405 aparece

Sugerencias: asegúrese de comentar el método super.doGet de la clase principal, ya que la clase principal devuelve una página de error 405 de forma predeterminada.

protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    
    
        String protocol = req.getProtocol();
        String msg = lStrings.getString("http.method_get_not_supported");
        if (protocol.endsWith("1.1")) {
    
    
            resp.sendError(405, msg);
        } else {
    
    
            resp.sendError(400, msg);
        }

    }
500 aparece:

En esencia, el código informa un error y el registro le indicará claramente qué línea de código en la pila de llamadas de excepción es incorrecta.

Aparece una "página en blanco":

resp.getWriter.write() no está escrito en el código

Aparece "No se puede acceder a este sitio web"

Tomcat no se inicia, verifique si Tomcat se inició correctamente, verifique el directorio en busca de anomalías, generalmente conflictos de puertos.


Supongo que te gusta

Origin blog.csdn.net/liu_xuixui/article/details/130337893
Recomendado
Clasificación