2011-01-25 11 views
7

que tienen éste mapeo¿Es posible usar expresiones regulares para el mapeo de servlet de Jetty?

<servlet-mapping> 
<servlet-name>service</servlet-name> 
<url-pattern>/service/*</url-pattern> 
</servlet-mapping> 

pero también quiero /servicio/maestro para asignar a servlet principal.

<servlet-mapping> 
<servlet-name>master</servlet-name> 
<url-pattern>/service/master</url-pattern> 
</servlet-mapping> 

Creo que hay un conflicto aquí desde que llamar a/service/* activará el servlet de servicio de inmediato. ¿Hay alguna manera de que use algún tipo de exclusión en el mapeo de servlet o puede ser regexp para hacer lo que quiero hacer?

Respuesta

6

Las asignaciones de servlets siempre usan la coincidencia más específica, por lo que la ruta siempre se correlacionará con master.

Ésta es la primera regla de asignaciones del Servlet 3.0 spec:

  1. El contenedor va a tratar de encontrar una coincidencia exacta de la trayectoria de la solicitud a la ruta del servlet. Una coincidencia exitosa selecciona el servlet.
  2. El contenedor tratará de coincidir recursivamente con el prefijo de ruta más largo. Este se realiza al recorrer el árbol de ruta un directorio a la vez, utilizando el carácter '/' como separador de ruta. La coincidencia más larga determina el servlet seleccionado.
  3. Si el último segmento en la ruta URL contiene una extensión (por ejemplo, .jsp), el contenedor servlet intentará para que coincida con un servlet que maneje las solicitudes para la extensión. Una extensión se define como la parte de el último segmento después del último carácter '.' .
  4. Si ninguna de las tres reglas anteriores da como resultado una coincidencia de servlet, el contenedor intentará servir el contenido apropiado para el recurso solicitado. Si un servlet "predeterminado" es definido para la aplicación, se usará . Muchos contenedores proporcionan un servlet predeterminado implícito para servir contenido .
+0

por lo que están diciendo que la asignación que tengo es correcta? bueno, lo he probado y/service/master no se asigna al servlet maestro – denniss

+0

Pruebe con otro contenedor, p. Gato. He visto más que a menudo rarezas como esas con Jetty. – BalusC

+0

Como solución, intente primero hacer el mapeo maestro (no lo he probado, pero supongo que existe la posibilidad de que esto funcione). –

Cuestiones relacionadas