¿Qué significa la siguiente especificación de servlet3.0?
Requisitos de la versión 1.1
jdk1.6
tomcate7.0
1.2 Contenido agregado: Ver especificación
1.2.1 Agregar soporte para anotaciones
@WebServlet: después de que la clase se declara como un servlet, el contenedor procesará la anotación durante la implementación y la agregará de acuerdo con la configuración de atributos específicos. La clase apropiada se implementa como un servlet.
Las anotaciones tienen algunos atributos comunes que se muestran en la siguiente tabla (todos los atributos siguientes son opcionales, pero los patrones vlaue o urlPatterns generalmente son necesarios y ninguno puede estar presente) si se agrega soporte de anotación
, que se puede utilizar para declarar una clase como Servlet. nombre-servlet;. Si no se especifica explícitamente, el servlet utilizará el nombre completo de la clase.
value String[]
Esta propiedad es equivalente a la propiedad urlPatterns. Estas dos propiedades no se pueden utilizar al mismo tiempo.
urlPatterns String[] Especifica un conjunto de patrones de coincidencia de URL para el servlet. Es equivalente a la etiqueta
loadOnStartup int especifica el orden en el que se cargan los Servlets, equivalente a la etiqueta
initParams WebInitParam[] especifica el conjunto de parámetros de inicialización del servlet, equivalente a la etiqueta lt;init-paramgt;
asyncSupported
booleano declara si el servlet admite el modo de operación asíncrono, equivalente a la etiqueta
cadena de descripción Descripción del servlet, equivalente a lt; etiqueta de descripción.
displayName cadena El nombre para mostrar del servlet, generalmente utilizado junto con herramientas, equivalente a la etiqueta
Aquí hay un ejemplo simple:
@WebServlet(urlPatterns = {"/simple"}, asyncSupported = true,
loadOnStartup = -1, nombre = "SimpleServlet", displayName = "ss". displayName = "ss",
initParams = {@WebInitParam(nombre = "nombre de usuario", valor = "tom")}
)
)
La clase pública SimpleServlet extiende HttpServlet{ ...}
Con esta configuración, no necesita configurar el servlet correspondiente en web.xml; y
Su formulario de configuración web.xml equivalente es el siguiente:
lt;Servletgt;
lt;display-namegt;sslt;/display-namegt;
lt;servlet-namegt.SimpleServletlt;/servlet-namegt;
lt;servlet-classgt;footmark.servlet.SimpleServletlt;/servlet-classgt;
lt;load-on-startupgt;-1lt;/load-on-startupgt;
lt;async-supportedgt;truelt;/async-supportedgt;
lt;init-paramgt ;
lt;param-namegt;usernamelt;/param-namegt;
lt;param-valuegt;tomlt;/param-valuegt;
lt; /init-paramgt;
lt.;/servletgt;
lt;servlet-mappinggt;
lt;servlet-namegt;SimpleServletlt;/servlet-namegt ;
lt;url-patterngt./simplelt;/url-patterngt;
lt;/servlet-mappinggt;
@WebInitParam
Esta anotación generalmente no se usa sola, sino con @WebServlet o @WebFilter. Su propósito es especificar los parámetros de inicialización de un Servlet o filtro, equivalente a la subetiqueta init-paramgt; de lt;servletgt;
y lt;filtergt; La siguiente tabla proporciona algunos atributos comunes de @WebInitParam:
Tabla 2. Atributos comunes de @WebInitParam
Tipo de nombre de atributo
Es una descripción opcional
p>cadena de nombre
No especifica el nombre del parámetro, equivalente a lt;param-namegt;.
cadena de valor
No especifica el valor del parámetro, equivalente a lt;param-valuegt;.
la cadena de descripción es una descripción del parámetro, equivalente a lt;descriptiongt;.
@WebFilter
@WebFilter se utiliza para declarar una clase como filtro. El contenedor la procesará durante la implementación. El contenedor implementará la clase apropiada según la configuración de propiedades específicas. . para el filtro. La anotación tiene los siguientes atributos
usados habitualmente
(todos los siguientes atributos son opcionales, pero value, urlPatterns y servletNames deben contener al menos uno de ellos, value y urlPatterns no pueden** * existe, si ambos atributos se especifican al mismo tiempo, serán
comúnmente ignorados):
@WebFilter se usa para declarar una clase como filtro y el contenedor Procese este filtro.
El siguiente es un ejemplo sencillo:
@WebFilter(servletNames = {"SimpleServlet"}, filterName="SimpleFilter")
la clase pública LessThanSixFilter implementa el filtro {...}
Equivalente a los siguientes archivos en web.xml:
lt;filtergt
lt;filter-namegt;SimpleFilterlt;/filter; -namegt;
lt; filtro-clasegt.xxxlt;/filtro-clasegt;
lt;/filtergt;
lt;filtro-mappinggt; p>
lt;filtro-mappinggt;
lt;p>
lt;filtro-nombregt;SimpleFilterlt;/filtro-nombregt; ;SimpleServletlt;/servlet-namegt;
lt;/filter-mappinggt;
@WebListener
Esta anotación se utiliza para declarar una clase como oyente. La clase marcada por @WebListener debe implementar al menos una de las siguientes interfaces: ServletContextListener ServletContextAttributeListener ServletRequestListener ServletRequestAttributeListener HttpSessionListener HttpSessionAttributeListener
Tabla 4. Atributos comúnmente utilizados de @WebListener
Tipo de nombre de atributo
Ya sea descripción opcional
cadena de valor
Sí Descripción del oyente.
Ejemplo:
@WebListener("Esto es solo un oyente de demostración")
la clase pública SimpleListener implementa ServletContextListener{...}
Equivalente:
lt;listenergt;
lt;listener-classgt;footmark.servlet.SimpleListenerlt;/listener-classgt
lt;/listenergt;
@MultipartConfig
Esta anotación está diseñada para complementar el soporte de carga de archivos proporcionado por HttpServletRequest en Servlet 3.0. Esta anotación
está marcada en el servlet para indicar que el tipo MIME de la solicitud que el servlet desea manejar es multiparte/form-data.
Además, esta anotación proporciona una serie de propiedades para simplificar el manejo de los archivos cargados. Los detalles son los siguientes:
Tabla 5. Atributos comúnmente utilizados de @MultipartConfig
Tipo de nombre de atributo
Si la descripción es opcional
fileSizeThreshold
int es cuando la cantidad de datos es mayor que este valor, el contenido se escribirá en el archivo.
cadena de ubicación Sí La dirección donde se guarda el archivo generado.
maxFileSize long es el tamaño máximo de archivo que se permite cargar. El valor predeterminado es -1, lo que significa que no hay límite.
maxRequestSize
long es el número máximo de solicitudes para esta solicitud de datos de formulario/arte múltiple. El valor predeterminado es -1, lo que significa que no hay límite.
1.2.2 Agregar soporte para carga y descarga de archivos: agregue la clase Part, que en realidad es un contenedor de la clase fileUpload
@WebServlet(urlPatterns = {"/servletDemo1"}, asyncSupported = verdadero,
loadOnStartup = -1, nombre = "SimpleServlet", displayName = "ss"
)
@MultipartConfig
público la clase ServletDemo1 extiende HttpServlet {
privado estático final serialVersionUID = 1L;
doGet vacío protegido (solicitud HttpServletRequest, respuesta HttpServletResponse) lanza ServletException, IOException {
/ /response.lastIndexOf("\") 1, nombre.longitud()-1);
part.write(nombre de archivo);
}
lt ;form action="${pageContext.request.contextPath}/servletDemo1" método="post" enctype="multipart/form-data"gt;lt;! --formulario recuerda agregar en...--gt;
lt; input type="text" name="input" /gt; ; tipo de entrada="archivo" nombre="archivo"gt;lt;brgt;
lt;tipo de entrada="enviar" valor="enviar"gt;
lt;/ formgt ;
1.2.3 Agregar la inicialización de servlets y filtros a través de servletContext
Para aprender
1.2. Soporte para servlets y filtros 4 Agregar soporte de procesamiento asincrónico (temporalmente) inútil, utilice Ajax)
1.2.5 Capacidad de conexión agregada:
Con esta característica, ahora podemos usar aplicaciones web existentes sin modificar Para ampliar nuevas funciones en el caso de un programa, sólo necesita colocar el paquete JAR en un formato específico en el directorio WEB-INF/lib, sin ninguna configuración adicional. Servlet 3.0 introdujo un archivo descriptor de implementación web-fragment.xml llamado "Fragmento de descriptor de implementación del módulo web", que debe almacenarse en el directorio META-INF del archivo JAR y puede contener cualquier cosa definida en web.xml. Los paquetes JAR normalmente se colocan en el directorio WEB-INF/lib.
De lo contrario, todos los recursos utilizados por el módulo, incluidos archivos de clase, archivos de configuración, etc., deben colocarse en una ruta que el cargador de clases del contenedor pueda cargar en cadena, como el directorio de clases.
Ahora, hay tres formas de agregar la configuración de Servlet a una aplicación web (filtros, oyentes y configuraciones de Servlet son todas equivalentes, por lo que aquí tomamos la configuración de Servlet como ejemplo, filtro y oyente Las características son muy similares ): Escriba una clase que herede de HttpServlet y coloque la clase en la sección correspondiente del directorio de clases. Coloque la clase en el directorio de clases de la estructura de paquete adecuada y modifique web.xml para agregar la declaración de Servlet. Este es el método más primitivo; escriba una clase que herede de HttpServlet, declare la clase como un Servlet usando la anotación @WebServlet en la clase y luego colóquela en la estructura del paquete correspondiente en el directorio de clases sin modificar el documento web.xml. Escriba una clase que herede de HttpServlet, empaquete la clase como un JAR y coloque un archivo web-fragment.xml en el directorio META-INF del JAR que declara la configuración de Servlet correspondiente. Archivo web-fragment.xml
A continuación se muestra un ejemplo de un archivo web-fragment.xml. Un ejemplo de archivo fragment.xml es el siguiente:
lt;?xml version="1.0" encoding="UTF-8"?
lt;web-fragment
xmlns=/xml/ns/javaee
xmlns:xsi="/xml/ns/javaee
/xml/ns/javaee/web-fragment_3_0. xsd"< / p>
metadata-complete="true"gt;
lt;servletgt;
lt;servlet-namegt;fragmentlt;/servlet -namegt;
lt;servlet-classgt;footmark.servlet.FragmentServletlt;/servlet-classgt;
lt;/servletgt;
lt;servlet- mapeogt;
lt;servlet-mappinggt;
lt; p>
lt;servlet-namelt;fragmentlt;/servlet-namegt;
lt ;url-patternngt;/fragmentlt;/url-patternngt;
lt;/servlet -mappinggt
lt;/web-fragmentgt;
1.2.51 Problema de orden de carga
Varios web-fragment.xml en una sola declaración de aplicación web, junto con un solo archivo web.xml, el problema de orden de carga se convierte en un problema que debe enfrentarse.
web-fragment.xml contiene dos etiquetas opcionales de nivel superior: lt;namegt; y lt;orderinggt;, que normalmente se utilizan si desea especificar un orden de carga explícito para el archivo actual.
lt;namegt; se usa principalmente para identificar el archivo actual, mientras que lt;orderinggt; se usa para especificar el orden de prioridad.
Un ejemplo sencillo es el siguiente:
lt;web-fragment...gt;
lt;namegt;FragmentAlt;/namegt;
lt;orderinggt ;
lt;aftergt;
lt;namegt;FragmentBlt;/namegt;
lt;namegt;FragmentClt;/namegt; p> p>
lt;/aftergt;
lt;antes;
lt;otros/gt;
lt;/antes p>
lt;/orderinggt;
...
lt;/web-fragmentgt;
lt;/orderinggt;
.