2011-11-24 13 views
8

¿Es posible mapear URLs a los servlets (tal vez algo específico con Tomcat) de manera que las dos direcciones URL siguientes (con {ID} 's variables que son recuperables a partir del código),Servlet Asignaciones con variables (Tomcat 7.0)

/users/{id}/a 

/users/{id}/b 

¿asignar a dos servlets diferentes, o tendré que implementar algún tipo de filtro propio para un servlet mapeado a /users/*?

Para ser más claros, cualquier URL con el patrón /users/*/a debe asignarse al mismo servlet. Lo mismo vale para /users/*/b.

+0

¿Desea asignar dos identificadores diferentes a dos servlets diferentes ..? –

+0

Para ser más claros, cualquier URL con el patrón/users/*/a debe correlacionarse con el mismo servlet. Lo mismo vale para/users/*/b. – irwinb

+0

Entonces, ¿qué pasa con '/ user/*'? –

Respuesta

5

Se puede mapear en /users/* y extraer información de HttpServletRequest#getPathInfo():

@WebServlet("https://stackoverflow.com/users/*") 
public class UsersController extends HttpServlet { 

    @Override 
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
     String[] pathInfo = request.getPathInfo().split("/"); 
     String id = pathInfo[1]; // {id} 
     String command = pathInfo[2]; // a or b 
     // ... 
    } 

} 

(validación obvio en tamaño de la matriz omite)

0

No creo que sea posible. O bien utilizar el UrlRewriteFilter o algún framework como Primavera-MVC que es capaz de mapear URLs más complejas

5

Parece que es un buen candidato para el JAX-RS. No estoy seguro de qué lógica comercial utilizan actualmente sus servlets, pero esta opción aborda su pregunta de mapeo de servlet y puede ser adecuada.

@Path("https://stackoverflow.com/users/{id}") 
public class User { 

    @Path("a") 
    public String doA(@PathParam("id") final int id) { ... } 

    @Path("b") 
    public String doB(@PathParam("id") final int id) { ... } 

} 
Cuestiones relacionadas