2011-11-24 15 views
8

è possibile mappare gli URL per i servlet (forse qualcosa di specifico con Tomcat) in modo che i due seguenti URL (con {id} variabili essere 's recuperabili dal codice),Servlet Mapping con variabili (Tomcat 7.0)

/users/{id}/a 

/users/{id}/b 

mappa a due diversi servlet o dovrò implementare un qualche tipo di filtro per un servlet mappato a /users/*?

Per essere più chiari, qualsiasi URL con il modello /users/*/a deve essere associato allo stesso servlet. Lo stesso vale per /users/*/b.

+0

Si desidera mappare due diversi ID a due diversi servlet ..? –

+0

Per essere più chiari, qualsiasi URL con il pattern/users/*/a deve essere associato allo stesso servlet. Lo stesso vale per/users/*/b. – irwinb

+0

Quindi, che dire '/ user/*'? –

risposta

5

Si potrebbe mappare su /users/* ed estrarre informazioni da 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 
     // ... 
    } 

} 

(convalida evidente sulla dimensione della matrice omesso

0

Non credo sia possibile. Utilizzare il UrlRewriteFilter o qualche framework come Primavera-MVC che è in grado di rilevare gli URL più complessi

5

Sembra che potrebbe essere un buon candidato per JAX-RS. Non sono sicuro della logica di business attualmente eseguita dai servlet, ma questa opzione risolve la domanda di mappatura servlet e potrebbe essere appropriata.

@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) { ... } 

} 
Problemi correlati