Este artículo presenta las reglas coincidentes de los servlets de Pattern URL y las comparte con usted. Los detalles son los siguientes:
Primero, necesitamos aclarar algunas reglas confusas:
1. Las reglas coincidentes en el contenedor de servlet no son comodines simples ni expresiones regulares, sino reglas específicas. Por lo tanto, no use comodines o reglas de coincidencia de expresión regular para ver el patrón URL de un servlet.
2. A partir de Servlet 2.5, un servlet puede usar múltiples reglas de patrón de url. La etiqueta <Servlet-mapping> declara las reglas de coincidencia correspondientes al servlet, y cada etiqueta <url-pattern> representa 1 regla coincidente;
3. Cuando el contenedor de servlet recibe una solicitud de URL iniciada por el navegador, el contenedor usará la URL para restar la ruta de contexto de la aplicación actual y utilizará la cadena restante como la asignación de servlet. Si la URL es http: // localhost: 8080/appdemo/index.html y su contexto de aplicación es appDemo, el contenedor eliminará http: // localhost: 8080/appdemo y usará la parte restante /index.html para hacer que la mapeo de servlet coincida.
4. El proceso de coincidencia de mapeo de patrón de url tiene prioridad
5. Y cuando un servlet coincida con éxito, los servlets restantes no serán prestados la atención.
1. Cuatro reglas coincidentes
1 partido exacto
Los elementos configurados en <URL-Pattern> deben coincidir exactamente con la URL.
<Servlet-mapping> <Servlet-name> myServlet </servlet-name> <url-pattern> /user/users.html </sl-pattern> <url-pattern> /index.html </url-Pattern> <url-pattern> /user/adduser.action </surl-pattern> </servlet-mapping>
Al ingresar las siguientes URL en el navegador, se combinarán con el servlet
http: // localhost: 8080/appdemo/user/users.html
http: // localhost: 8080/appdemo/index.html
http: // localhost: 8080/appdemo/user/adduser.action
Aviso:
http: // localhost: 8080/appdemo/user/adduser/es una URL ilegal y no se reconocerá como http: // localhost: 8080/appdemo/user/adduser
Además, la URL anterior puede ser seguida por cualquier condición de consulta y se combinará, como
http: // localhost: 8080/appdemo/user/adduser? UserName = Tom & Age = 23 se combinará con el MyServlet.
2 partidos de ruta
Se usa una cadena que comienza con el carácter "/" con "/*"
<Servlet-mapping> <Servlet-name> myServlet </servlet-name> <url-pattern>/user/*</url-Pattern> </servlet-mapping>
La ruta comienza con /user /, y la siguiente ruta puede ser arbitraria. Por ejemplo, las siguientes URL serán emparejadas.
http: // localhost: 8080/appdemo/user/users.html
http: // localhost: 8080/appdemo/user/adduser.action
http: // localhost: 8080/appdemo/user/updateuser.actionl
3 COMPARACIÓN DE LA EXTENSIÓN
Cadenas comenzando con "*." se utilizan para la coincidencia de extensión
<Servlet-mapping> <Servlet-name> myServlet </servlet-name> <url-pattern>*. jsp </sl-pattern> <url-pattern>*. Action </url-Pattern> </servlet-mapping>
Luego, cualquier solicitud de URL con la extensión JSP o acción coincidirá, por ejemplo, la siguiente URL coincidirá con
http: // localhost: 8080/appdemo/user/users.jsp
http: // localhost: 8080/appdemo/tohome.action
4 coincidencia predeterminada
<Servlet-mapping> <Servlet-name> myServlet </servlet-name> <url-pattern>/</url-Pattern> </servlet-mapping>
2. Orden coincidente
1. Match exacta, Servlet-Mapping1: <Url-Pattern> /user/users.html </url-Pattern>, Servlet-mapping2: <url-pattern>/*</url-Pattern>. Cuando una solicitud http: // localhost: 8080/appdemo/user/ussers.html viene, coincidencias de mapeo de servlet1 y ya no coinciden con el mapeo de servlet22
2. Matriota de ruta, primero coincida con la ruta más larga, luego coincida con el mapeo de servlet de ruta más corto1: <url-Pattern>/user/*</url-Pattern>, Servlet-Mapping2: <url-Pattern>/*</ url-Pattern>. Cuando una solicitud http: // localhost: 8080/appdemo/user/ussers.html viene, coincidencias de mapeo de servlet1 y ya no coinciden con el mapeo de servlet22
3. Matriota de extensión, Servlet-Mapping1: <Url-Pattern>/User/*</ url-Pattern>, Servlet-Mapping2: <Rl-Pattern>*. Action </url-Pattern>. Cuando una solicitud http: // localhost: 8080/appdemo/user/adduser.action viene, coincidentes de mapeo de servlet1 y ya no coincide con el mapeo de servlet22
4. La coincidencia predeterminada no se encuentra en el servlet anterior, por lo que usa el servlet predeterminado y configúrala como <URL-Pattern>/</url-Pattern>
Problemas a tener en cuenta
1 coincidencia de ruta y coincidencia de extensión no se puede establecer al mismo tiempo
Solo hay tres métodos de coincidencia, ya sea una coincidencia de ruta (comenzando con el carácter "/" y terminando con el "/*"), la coincidencia de extensión (comenzando con el "*.") O la coincidencia exacta. Los tres métodos de correspondencia no se pueden combinar, así que no lo dé por sentado para usar comodines o reglas regulares.
Por ejemplo, <url-pattern>/user/*. Action </url-Pattern> es ilegal
Tenga en cuenta también: <Url-Pattern>/aa/*/bb </url-Pattern> es una coincidencia exacta y legal. * Aquí no es el significado de Wild Match.
2 "/*" y "/" tienen diferentes significados
TomCat configura el servlet predeterminado en el archivo %catalina_home %/conf/web.xml, y el código de configuración es el siguiente
<servlet> <servlet-name> default </servlet-name> <ervlet-class> org.apache.catalina.servlets.defaultservlet </servlet-class> <ithparam> <amamname> debug </param-name> <amam-value> 0 </param-value> </initparam> <init-param> <amamame> listings </param-value> 0 </param-value> </initparam> <init-param> <amamame> listings </param-value> 0 </param-value> </initparam> <init-param> <amamame> listings </param-value> 0 </param-value> </initparam> <ic-param> <amamname> listings </param-value> 0 </param-value> </initparam> <ic-param> <amam-value> false </param-value> </ init-param> <load-on-shartup> 1 </load-on-startup> </servlet> <ervlet> <servlet-name> jsp </servlet-name> <ervlet-class> org.apache.jasper.servlet.jspspservlet </servlet-class> <init-param> <amamname> <Amam-Value> false </param-value> </init-param> <Init-param> <amamname> xpoweredby </amamname> <amam-value> false </param-value> </ithparam> <load-on-startup> 3 </carga-on-startup> </servlet> <ervlet-mapping> <ervlet-name> predeterminado </servlet> name> name> <Url-Pattern>/</url-Pattern> </servlet-mapping> <!-Las asignaciones para el servlet jsp-> <servlet-mapping> <servlet-name> jsp </servlet-name> <url-pattern>*. jsp </url-pattern> <url-pattern>*. jspx </s url-pattern> </servlet-mapping>
IV. Dar un ejemplo
| URL de mapeo | Servlet correspondiente |
| /Hola | servlet1 |
| /bbs/admin/* | servlet2 |
| /bbs/* | servlet3 |
| *.jsp | servlet4 |
| / | servlet5 |
El resultado de la asignación de solicitudes real
Eliminar las rutas restantes de la ruta de contexto | Servlet que maneja la solicitud |
/Hola | servlet1 |
/bbs/admin/inicio de sesión | servlet2 |
/bbs/admin/index.jsp | servlet2 |
/bbs/pantalla | servlet3 |
/bbs/index.jsp | servlet3 |
/BBS | servlet3 |
/index.jsp | servidor4 |
/hello/index.jsp | servlet4 |
/hello/index.html | servlet5 |
/noticias | servlet5 |
Lo anterior es todo el contenido de este artículo. Espero que sea útil para el aprendizaje de todos y espero que todos apoyen más a Wulin.com.