2011-11-24 104 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) { ... } 

}