¿Cuánto conoce la tecnología de servlet de programación web Java?
1. Conceptos básicos de servlet <Br /> Para el desarrollo de tecnología de servlet, Sun Company proporciona algunas interfaces y clases de columna, la más importante de las cuales es la interfaz javax.servlet.servlet. Los dos paquetes importantes son Javax.Servlet y Javax.servlet.http. Servlet es una clase que implementa la interfaz Servlet. Es llamado y creado por un contenedor web (Tomcat/Jetty, etc.) para recibir y responder a las solicitudes de los usuarios. 5 Los métodos abstractos se definen en la interfaz Servlet:
La estructura de clase de nivel superior del servlet es la siguiente:
2. El primer programa de servlet
Cree un nuevo proyecto web de Java y luego cree una nueva clase de Hello. El código fuente Hello.Java es el siguiente:
paquete zzz; import java.io.ioException; import java.io.printwriter; import javax.servlet.http.httpservlet; import javax.servlet.http.httpservletRequest; import javax.servlet.http.httpServletResponse; public class Hello ExtendsServlet; doget (httpservletRequest solicitud, respuesta httpservletreSponse) lanza IOException {// establecer la respuesta de codificación de mensajes de respuesta.setContentType ("text/html; charset = utf-8"); PrintWriter out = Response.getWriter (); out.println ("hola mundo"); } @Override public void dopost (solicitud httpservletRequest, respuesta httpservletResponse) lanza ioexception {this.doget (solicitud, respuesta); }}El archivo de configuración web.xml es el siguiente:
<? xml versión = "1.0" encoding = "utf-8"?> <web-app xmlns: xsi = "http://www.w3.org/2001/xmlschema-instance" xmlns = "http://xmlns.jcp.org/xml/ns/Javaee" xsi: schemalocation = "http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3" id = "WebApp_id" Version = "3.1"> <Splay-Name> ZZZ </splay-Name> <Servlet> <!-Registro de registro Servlet-> <Servlet-name> hola </servlet-name> <!-especifique el nombre de servlet-> <servlet-class> zzz.hello </servlet-class> <!-Especifique el nombre de la clase completa -> <Servlet-name> Hello </Servlet-Name> <!-Especifique el nombre de servlet-> <url-pattern>/hola </url-pattern> <!-Especifique la ruta virtual para acceder al servlet-> </servlet-mapping> </web-app>
Comenzar y ejecutar el navegador se muestra de la siguiente manera:
3. Ciclo de vida de servlet
El ciclo de vida del servlet se divide aproximadamente en 3 etapas, la etapa de inicialización, la etapa de operación y la etapa de destrucción . Las siguientes son descripciones detalladas de cada etapa:
Fase de inicialización: cuando el cliente solicita al contenedor de servlet para acceder al servlet, el contenedor primero analiza la solicitud para verificar si el objeto Servlet está en la memoria y si se usa directamente; De lo contrario, cree el objeto Servlet y luego llame al método init (). Tenga en cuenta que init () solo se llamará una vez durante todo el ciclo de declaración del servlet.
Etapa de carrera: esta es la etapa más importante del servlet. En esta etapa, el contenedor construirá un objeto ServLetRequest y ServLetResponse como parámetros y lo pasará al método Servlet Service (). Para cada acceso de un servlet, el contenedor de servlet llamará al método Servicio () una vez. El método Service () se llamará varias veces durante todo el ciclo de vida del servlet
Etapa de destrucción: cuando el servidor está cerrado o se elimina la aplicación web del contenedor, se ingresará esta etapa. En este momento, se llamará al método Destro (). Durante todo el ciclo de vida, el método Destroy () solo se llamará una vez. Cuando el cliente accede por primera vez al servlet, el contenedor creará el objeto Servlet, pero a veces se espera que el objeto Servlet se inicie tan pronto como se inicie Tomcat. ¿Cómo lidiar con esto? En este momento, solo necesita usar el elemento <LOAD-ONSTARTUP> en Web.xml. La configuración de ejemplo es la siguiente:
<Servlet> <Servlet-name> hola </servlet-name> <ervlet-class> zzz.hello </servlet-class> <!-Carga automática del programa de servlet-> <carga-on-startup> 1 </load-on-startup> </servlet> <ervlet-mapping> <servlet-name> hola </servlet-name> <uRl-pattern>/hello <sl-pattert> </servlet-mapping>
4. ServletConfig y ServletContext
Durante la interfaz ServletConfig , si se necesita información auxiliar, como la codificación de archivos, las empresas que usan servlets, etc., esta información se puede configurar utilizando el elemento <Init-Param> en Web.xml. Cuando TomCat inicializa un servlet, la información de configuración de servlet se encapsulará en un objeto ServletConfig y se pasará al servlet a través de init (config de servletconfig). ServletConfig define una serie de métodos para obtener información de configuración:
A continuación, tome getInitParameter () como ejemplo para explicar el uso de este método:
El archivo de configuración web.xml es el siguiente:
<? xml versión = "1.0" encoding = "utf-8"?> <web-app xmlns: xsi = "http://www.w3.org/2001/xmlschema-instance" xmlns = "http://xmlns.jcp.org/xml/ns/Javaee" xsi: schemalocation = "http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3" id = "WebApp_id" Version = "3.1"> <Spant-Name> Zzz </splay-name> <Servlet> <Servlet-name> hola </servlet-name> <ervlet-class> zzz.hello </servlet-class> <init-param> <amamamname> compañía </param-name-name> <amarralue> dahua </param-value> </inicial> </servlet> <Servlet-mapping> <Servlet-name> Hola </servlet-name> <url-pattern>/hello </url-pattern> </servlet-mapping> </seb-app>
Hello.java El archivo es el siguiente:
paquete zzz; import java.io.ioException; import java.io.printwriter; import javax.servlet.servletConfig; import javax.servlet.http.httpservlet; import javax.servlet.http.htttpservletRequest; import javax.servlet.http.htpSesserveSponsessperserSponsesserveSponse; Httpservlet {@Override public void doget (httpservletRequest solicitud, respuesta httpservletResponse) lanza ioexception {// establece la respuesta de codificación de mensajes de respuesta.setContentType ("text/html; charset = utf-8"); PrintWriter out = Response.getWriter (); ServletConfig config = this.getServletConfig (); Cadena param = config.getInitParameter ("Company"); out.println ("Company:" + Param); } @Override public void dopost (solicitud httpservletRequest, respuesta httpservletResponse) lanza ioexception {this.doget (solicitud, respuesta); }} Interfaz de servletcontext
Cuando se inicia el contenedor de servlet, se crea un objeto ServletContext único para que cada aplicación web represente la aplicación web actual. Este objeto no solo encapsula toda la información de la aplicación web, sino que también implementa el intercambio de datos entre múltiples objetos de servlet. En Web.xml, no solo puede configurar la información de inicialización del servlet, sino también configurar la información de inicialización de toda la aplicación web. El método de configuración es el siguiente:
<cuentute-param> <amamname> name </param-name> <amam-value> luoxn28 </amam-value> </textual-param> <context-param> <amamname> Company </param-name> <amam-value> dahua </param-value> </text-param>
NOTA: Solo puede haber una <amamname> y <amam-value> en un elemento <text-param>, y la configuración anterior se configura en <Beb-App> en Web.xml. Hello.java El archivo es el siguiente:
paquete zzz; import java.io.ioException; import java.io.printwriter; import java.util.enumeration; import javax.servlet.servletcontex javax.servlet.http.httpServletResponse; public class Hello extiende httpServlet {@Override public void doget (httpservletRequest request, httpServletResponse Response) lanza ioexception {// Establecer mensajes de respuesta encodpode respuesta.setContentType ("Texto/html; caracteres de caracteres; PrintWriter out = Response.getWriter (); ServletContext context = this.getServletContext (); Enumeración <String> paramNames = context.getInitParamEnternames (); while (paramNames.hasmoreElements ()) {String name = paramNames.NextElement (); Valor de cadena = context.getInitParameter (nombre); out.println (nombre + ":" + valor + "<br/>"); }} @Override public void dopost (solicitud httpservletRequest, respuesta httpservletResponse) lanza ioexception {this.doget (solicitud, respuesta); }}Dado que todos los servlets en una aplicación web comparten un objeto ServletContext, todos los servlets pueden acceder a las propiedades de dominio del objeto ServletContext en la aplicación web. En la interfaz ServletContext, cuatro métodos se definen para agregar, eliminar y establecer propiedades del dominio de servletContext:
A través del método anterior, puede realizar el intercambio de datos entre múltiples servlets. Este ejemplo específico no se publicará con el código. Hay muchas información a la que se puede hacer referencia en línea, como hacer clic:
Resumen de desarrollo de Servlet de Javaweb (ii)
Lo anterior se trata de este artículo, y espero que sea útil para todos comprender la tecnología Servlet de Java Web.
Referencias
1. "Introducción al desarrollo del programa web Java" Capítulo de tecnología de servlet