welcome servlet example create agregar servlets get web.xml path-parameter

servlets - example - xml servlet java



Servlet y parámetros de ruta como/xyz/{value}/test, cómo mapear en web.xml? (6)

Como otros han indicado, la especificación del servlet no permite tales patrones; sin embargo, puede considerar JAX-RS que permite tales patrones, si esto es apropiado para su caso de uso.

@Path("/xyz/{value}/test") public class User { public String doSomething(@PathParam("value") final String value) { ... } }

O:

@Path("/xyz/{value}") public class User { @Path("test") public String doTest(@PathParam("value") final String value) { ... } }

(Relacionado con: https://stackoverflow.com/a/8303767/843093 .)

¿El servlet admite las URL de la siguiente manera?

/xyz/{value}/test

donde el valor puede ser reemplazado por texto o número.

¿Cómo mapear eso en el web.xml?


Como se indicó anteriormente, los servlets base no admiten patrones como los especificados en su pregunta. Spring MVC no admite patrones. Here hay un enlace a la sección pertinente en el Documento de referencia de primavera .


La API de Servlet no admite que tenga el comodín de patrón de URL * en medio de la asignación. Solo permite el comodín * al final de la asignación como so /prefix/* o al inicio de la asignación como so *.suffix .

Con la sintaxis de patrón de URL permitida estándar, su mejor HttpServletRequest#getPathInfo() en /xyz/* y extraer la información de ruta usando HttpServletRequest#getPathInfo() .

Entonces, dado un <url-pattern>/xyz/*</url-pattern> , aquí hay un ejemplo básico de kickoff sobre cómo extraer la información de ruta, las comprobaciones nulas y las pruebas de índice fuera de límites omitidas:

String pathInfo = request.getPathInfo(); // /{value}/test String[] pathParts = pathInfo.split("/"); String part1 = pathParts[1]; // {value} String part2 = pathParts[2]; // test // ...

Si desea un control más detallado como sea posible con mod_rewrite Apache HTTPD, entonces podría ver el filtro de reescritura de URL de Tuckey.


No deberías estar haciendo eso en web.xml sino que puedes dirigir cada solicitud a tu filtro (Patternfilter) y puedes buscar URL

package com.inventwheel.filter; import java.io.IOException; import java.util.regex.Matcher; import java.util.regex.Pattern; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.annotation.WebFilter; import javax.servlet.http.HttpServletRequest; /** * Servlet Filter implementation class PatternFilter */ @WebFilter("/*") public class PatternFilter implements Filter { /** * Default constructor. */ public PatternFilter() { // TODO Auto-generated constructor stub } /** * @see Filter#destroy() */ public void destroy() { // TODO Auto-generated method stub } /** * @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain) */ public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { String servletPath = ((HttpServletRequest)request).getServletPath(); String requestURI = ((HttpServletRequest)request).getRequestURI(); Pattern pattern = Pattern.compile(".*"+servletPath+"/(.*)"); Matcher matcher = pattern.matcher(requestURI); if (matcher.matches()) { String param = matcher.group(1); // do stuff with param here.. } chain.doFilter(request, response); } /** * @see Filter#init(FilterConfig) */ public void init(FilterConfig fConfig) throws ServletException { // TODO Auto-generated method stub } }



Sí admite el mapeo de esa url; pero no ofrece ninguna validación.

En tu web xml, podrías hacer esto ...

/xyz/*

Pero eso no garantizará que la test final esté presente y que sea el último elemento. Si buscas algo más sofisticado, debes probar urlrewritefilter.

http://code.google.com/p/urlrewritefilter/