2012-03-19 10 views
5

Duplicar posibles:
Servlet mapping/vs /*differenct entre/y/* en el servlet patrón coincide con la URL

¿Cuál es la diferencia de '/' y '/ *' en la correlación de servlet url?

Desde que estoy leyendo el libro de primavera en la acción, y me encontré con estas palabras:

A continuación debemos indicar qué URL serán manejados por el DispatcherServlet. Es común encontrar DispatcherServlet asignado a los patrones de URL , como .htm,/ o/app. Pero estos patrones de URL tienen unos problemas :

  • El patrón * .htm implica que la respuesta será siempre en el formulario HTML (que, como vamos a aprender en el capítulo 11, no es necesariamente el caso )
  • Asignarlo a/* no implica ningún tipo específico de respuesta, pero indica que DispatcherServlet atenderá todas las solicitudes. Eso hace que sirva contenido estático como imágenes y hojas de estilo más difícil de lo necesario.
  • El patrón/app (o algo similar) nos ayuda a distinguir el contenido servido por Servlet Dispatcher de otros tipos de contenido. Pero luego tenemos un detalle de implementación (específicamente, la ruta/app) expuesto en nuestras URL. Esto lleva a complicadas tácticas de reescritura de URL para ocultar la ruta/app.

En lugar de utilizar cualquiera de estos esquemas servlet-mapping defectuosos, prefiero mapeo DispatcherServlet así:

<servlet-mapping> 
    <servlet-name>spitter</servlet-name> 
    <url-pattern>/</url-pattern> 
</servlet-mapping> 

Por DispatcherServlet del mapa a /, estoy diciendo que es el valor por defecto servlet y que será responsable de manejar todas las solicitudes, incluyendo solicitudes de contenido estático.

De acuerdo con las palabras anteriores, parece que tanto '/' como '/ *' atenderán toda la solicitud.

¿Cuál es la diferencia?

Respuesta

3

Una cadena que contiene solo el carácter/indica el servlet "predeterminado" de la aplicación. En este caso, la ruta del servlet es el URI de solicitud menos la ruta de contexto y la información de ruta es nula. &

Una secuencia que comienza con *. el prefijo se usa como un mapeo de extensión.

El patrón/* obligará a todo a través de su Servlet.

El patrón/hará que su Servlet sea el Servlet predeterminado para la aplicación, significa que recogerá cada patrón que no tenga otra coincidencia exacta .

+0

¿Cuál es exactamente la diferencia entre el servlet predeterminado ('/') y el todo '/ *'? – hguser

Cuestiones relacionadas