2011-11-24 93 views
8

是否有可能將URL映射到servlet的(也許具體使用Tomcat的東西),所以這兩個以下的網址({ID}的存在變量從代碼檢索),servlet映射使用變量(Tomcat的7.0)

/users/{id}/a 

/users/{id}/b 

映射到兩個不同的servlet,或者我將不得不實現我自己的某種過濾器映射到一個servlet映射到/users/*

更清楚的是,任何帶有/users/*/a模式的URL都應該映射到同一個servlet。 /users/*/b也是如此。

+0

你想將兩個不同的id映射到兩個不同的servlet ..? –

+0

更清楚的是,任何帶有/ users/*/a模式的URL都應該映射到同一個servlet。/users/*/b也是如此。 – irwinb

+0

那麼,'/ user/*'呢? –

回答

5

您可以映射它/users/*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 
     // ... 
    } 

} 

(上數組大小明顯驗證)

0

我不認爲這是可能的。無論是使用UrlRewriteFilter或如Spring-MVC一些框架,能夠映射更復雜的URL

5

看起來這可能是一個很好的候選人JAX-RS。我不確定你的servlet目前執行什麼業務邏輯,但是這個選項解決了你的servlet映射問題,可能是合適的。

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

}