2011-11-24 22 views
8

Có thể để ánh xạ các URL để servlets (có thể một cái gì đó cụ thể với Tomcat) vì vậy mà hai URL sau (với {id} 's biến con người có thể phục hồi từ mã),Servlet Mappings với Biến (Tomcat 7.0)

/users/{id}/a 

/users/{id}/b 

ánh xạ tới hai servlet khác nhau, hoặc tôi sẽ phải triển khai một số loại bộ lọc của riêng mình cho một servlet được ánh xạ tới /users/*?

Để rõ ràng hơn, bất kỳ URL nào có mẫu /users/*/a sẽ ánh xạ tới cùng một servlet. Cũng vậy với /users/*/b.

+0

Bạn muốn ánh xạ hai id khác nhau thành hai servlet khác nhau ..? –

+0

Để rõ ràng hơn, bất kỳ URL nào có mẫu/người dùng/*/a sẽ ánh xạ tới cùng một servlet. Cũng vậy với/users/*/b. – irwinb

+0

Vì vậy, điều gì về '/ user/*'? –

Trả lời

5

Bạn có thể lập bản đồ nó trên /users/* và trích xuất thông tin từ 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 
     // ... 
    } 

} 

(xác nhận rõ ràng về kích thước mảng bỏ qua)

0

Tôi không nghĩ điều đó là có thể. Hoặc sử dụng UrlRewriteFilter hoặc một số khuôn khổ như mùa xuân-MVC có khả năng lập bản đồ URL phức tạp hơn

5

Có vẻ như đây có thể là ứng cử viên tốt cho JAX-RS. Tôi không chắc chắn về logic nghiệp vụ mà servlet của bạn hiện đang thực hiện, nhưng tùy chọn này giải quyết câu hỏi lập bản đồ servlet của bạn và có thể thích hợp.

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

} 
Các vấn đề liên quan