[JavaWeb debe saber] Comience con Servlet y le muestre las rutinas de arquitectura y diseño de marcos

Creo que todo el mundo está familiarizado con el siguiente código, lo escribí cuando estudié Java Web en la universidad.

imagen

Desde el primer contacto con Servlet hasta mucho tiempo después, ¿no entendí qué es Servlet?

¿Por qué hay un servlet?

¿Por qué debería haber un contenedor Servlet?

¿Qué es contenedor web, servidor HTTP?

Hoy, echemos un vistazo a la arquitectura y las rutinas de diseño del marco.

Después de leerlo, es posible que tenga una mejor comprensión de las interfaces y abstracciones.

¡Ven, sube al auto!

texto

Primero, el navegador inicia una solicitud HTTP. Como en los primeros días, solo solicitaba algunos recursos estáticos . En este momento, se necesita un servidor para procesar la solicitud HTTP y devolver los recursos estáticos correspondientes.

Este servidor se llama servidor HTTP.

En pocas palabras, es analizar la solicitud y luego saber qué archivo estático en qué carpeta del servidor se necesita, buscar y regresar.

imagen

Con el desarrollo de Internet, la interacción se ha vuelto cada vez más importante y los archivos estáticos simples no pueden satisfacer la demanda.

Los negocios se han vuelto complicados y necesitamos escribir código para manejar muchos negocios.

Necesitamos llamar a una lógica comercial diferente para responder de acuerdo con la solicitud HTTP , pero nuestro código comercial no se puede emparejar con el servidor HTTP.

¿No puede juzgar qué clase de negocios debe llamarse en la implementación específica del servidor HTTP?

Esto se correlaciona fuertemente no comercial y comercial.

Por lo tanto, se necesita una capa de abstracción para aislar el análisis HTTP de servicios específicos .

imagen

El requisito esencial es encontrar la clase de implementación empresarial correspondiente de acuerdo con la solicitud HTTP y ejecutar la lógica antes de regresar.

Hay miles de empresas , por lo que es necesario especificar una interfaz, por lo que todas las clases de empresas implementan esta interfaz para que puedan conectarse.

Este es el significado de la interfaz, al igual que USB.

Esta interfaz es Servlet, por supuesto, esta es la interpretación más limitada.

Servlet es en realidad Server Applet, su nombre completo es Java Servlet, que se refiere al programa de servidor escrito en Java.

De hecho, se refiere a aquellas clases de negocios que implementan la interfaz Servlet.

Este es el origen de Servlet.

El contenedor de Servlet se utiliza en realidad para administrar y cargar estas clases de Servlet Encontrar la clase de Servlet correspondiente de acuerdo con la solicitud HTTP es lo que hace el contenedor de Servlet.

Al ver esto, ¿crees que puedes dibujar otra capa? ¿Porque parece no tener nada que ver con la concreción empresarial específica?

Sí, hay una capa más.

No es necesario acoplar lo que hace el contenedor Servlet con el negocio específico, el negocio se puede implementar de todos modos de acuerdo con la interfaz del Servlet, de modo que el contenedor Servlet pueda cargarlo y administrarlo.

imagen

La relación correspondiente entre la solicitud y qué Servlet también se abstrae, es decir, web.xml , podemos decirle al contenedor de Servlet la relación correspondiente en la configuración.

La implementación empresarial en mi imagen corresponde en realidad a nuestro  paquete de guerra habitual , que es el desacoplamiento de la empresa y el contenedor Servlet.

Es de suponer que también ha oído hablar de la especificación de Servlet. De hecho, la interfaz de Servlet y el contenedor de Servlet, incluido el nombre del directorio, se denominan especificación de Servlet .

Todo el middleware relevante se implementa de acuerdo con la especificación de Servlet, y también implementamos el código comercial de acuerdo con la especificación de Servlet, de modo que podemos elegir diferentes middleware web en diferentes escenarios.

De todos modos, el propósito de la especificación es facilitar el acoplamiento y reducir los costos de acoplamiento.

Hasta ahora, el servidor HTTP, el Servlet y el contenedor de Servlet deben estar limpios.

El contenedor web es en realidad un servidor HTTP + contenedor Servlet , porque el contenedor Servlet por sí solo no analiza las solicitudes HTTP, la comunicación y otras funciones relacionadas.

Por lo que la realización de Tomcat, Jetty, etc. incluye las funciones de servidor HTTP y contenedor Servlet, que se denomina contenedor Web .

De nuestro análisis capa por capa, capa por capa de abstracción, creo que tiene una mejor comprensión de la Web, dibujaré un diagrama de análisis de Tomcat, debería ser muy claro.

imagen

Se puede ver en el análisis paso a paso anterior: de hecho, el diseño de la arquitectura es una serie de abstracciones relacionadas.

Primero, el servicio HTTP se extrae para análisis de protocolos y comunicaciones .

Debido a la complejidad del negocio, se abstrae otra capa de Servlet para no acoplarse con los servicios HTTP.

El Servlet carga y administra el Servlet para controlar el reenvío de la solicitud a la clase de implementación de Servlet especificada .

Entonces podremos desarrollar negocios con tranquilidad.

Debido a su abstracción, es flexible y fácil de ampliar. Por ejemplo, el servicio HTTP 1.1 actual se puede reemplazar con HTTP 2.

Ahora Tomcat se usa como contenedor de servlets, o puede reemplazarse por Jetty.

Ahora use el Servlet de implementación nativa para hacer negocios, también puede cambiar a SpringMVC.

Cambie a voluntad, ya que todos están abstraídos, es fácil de reemplazar, siempre que siga la implementación de la interfaz acordada.

Una rutina de diseño de marcos

Después de leer las rutinas de diseño del marco, hablemos de las rutinas del marco.

Interfaz y clase abstracta.

Todo el diseño de middleware debe usar rutinas, por supuesto, nuestro propio código también se usará de esta manera.

Primero defina una interfaz para acordar algunas acciones, qué se puede hacer.

Luego defina una clase abstracta para implementar esta interfaz, utilizada para implementar alguna lógica general , para lograr la reutilización del código .

Luego haga que algunas clases de implementación de uso común hereden clases abstractas para conveniencia de los desarrolladores.

El resto se deja a los desarrolladores para que se expandan por sí mismos.

Luego, la clase abstracta usará el método de plantilla , que es para definir el proceso de ejecución , y la lógica de implementación específica es implementada por la propia subclase.

Esta es la rutina necesaria.

Las restricciones de interfaz, la reutilización de códigos de clases abstractas, las clases de implementación comunes son fáciles de usar y el resto se expande automáticamente .

Tome Servlet como ejemplo, primero defina la interfaz de Servlet .

public interface Servlet {
    void init(ServletConfig config) throws ServletException;
    ServletConfig getServletConfig();
    void service(ServletRequest req, ServletResponse res)throws ServletException, IOException;
    String getServletInfo();
    void destroy();
}

Luego hice una clase abstracta genérica GenericServlet , pero esta lógica de clase abstracta es relativamente simple.

public abstract class GenericServlet implements Servlet, ServletConfig,
        java.io.Serializable {
  ................省略一些.............
   @Override
    public ServletConfig getServletConfig() {
        return config;
    }
    @Override
    public ServletContext getServletContext() {
        return getServletConfig().getServletContext();
    }
    @Override
    public void init(ServletConfig config) throws ServletException {
        this.config = config;
        this.init();
    }
................省略一些.....................
}

Luego hizo un GenericServlet heredado de HttpServlet de uso común.

public abstract class HttpServlet extends GenericServlet {

    private static final long serialVersionUID = 1L;

    private static final String METHOD_DELETE = "DELETE";
    private static final String METHOD_HEAD = "HEAD";
    private static final String METHOD_GET = "GET";
  ....................
}

La rutina es una rutina así. Después de que el entrevistador le haga preguntas sobre interfaces y tipos abstractos, creo que usted también puede responderlas.

Al final

Todos deberían haber llegado a la rutina GET.

Todo el mundo debe haber oído que "todos los problemas de la informática se pueden resolver con una capa indirecta".

Sí, básicamente todos los problemas se pueden resolver a nivel abstracto.

Si una capa no es suficiente, dos.

Original: https://mp.weixin.qq.com/s/om7CLDqF2Yjgr8ZUBJxTAw

● La optimización de rendimiento de Tomcat8 más sólida de la historia

¿Por qué Alibaba puede resistir 10 mil millones en 90 segundos? - La evolución de la arquitectura distribuida de alta concurrencia del lado del servidor

Plataforma de comercio electrónico B2B: función de pago electrónico ChinaPay UnionPay

Aprenda el candado distribuido de Zookeeper, deje que los entrevistadores lo miren con admiración

Solución de bloqueo distribuido de Redisson con microservicio de pico de comercio electrónico de SpringCloud

Vea más artículos buenos, ingrese a la cuenta oficial, por favor, excelente en el pasado

Una cuenta pública profunda y conmovedora 0.0

Supongo que te gusta

Origin blog.csdn.net/a1036645146/article/details/110918273
Recomendado
Clasificación