2010-05-31 40 views
6

Xuất phát từ các khung công tác web khác, tôi được sử dụng để có thể ánh xạ các phần của URL thành các tham số phương thức. Tôi biết rằng web.xml cung cấp một cách để ánh xạ toàn bộ một URL tới một Servlet nhưng có cách nào để có được nhiều tính năng hơn trong số này, chẳng hạn như ánh xạ các phần của URL tới các tham số phương thức?Định tuyến URL trong Java

Trả lời

6

Sử dụng Spring (MVC) là quá mức cần thiết cho việc này. Nếu bạn không cần tiêm phụ thuộc, bạn sẽ hài lòng với redirect filter.

1

Bạn có thể làm những việc như vậy với Spring web MVC. API điều khiển của họ có thể ánh xạ các phần của URL đến các cuộc gọi cụ thể ở mặt sau.

4

Thực ra, hầu hết các khung MVC đều hỗ trợ các hành động RESTful (ví dụ: cho phép ánh xạ URL trên các phương thức hành động): Spring MVC, Stripes, Struts 2 với REST plugin.

Nếu bạn không sử dụng bất kỳ thiết bị nào trong số đó, bạn có thể đạt được điều này bằng cách viết lại URL. Các UrlRewriteFilter là khá nổi tiếng và cho phép để thực hiện những điều như vậy. Từ tài liệu về Method Invocation:

Ánh xạ servlet tiêu chuẩn là được thực hiện qua web.xml là khá hạn chế. Chỉ .xxx hoặc/xxxx/, không vi phạm đến có bất kỳ loại kết hợp thông minh nào. Sử dụng UrlRewriteFilter bất kỳ quy tắc nào khi kết hợp có thể được đặt để chạy (các) phương thức trên lớp .

Gọi một servlet trực tiếp

<rule> 
<from>^/products/purchase$</from> 
<run class="com.blah.web.MyServlet" method="doGet" /> 
</rule> 

này sẽ gọi doGet (HttpServletRequest yêu cầu, HttpServletResponse phản ứng) khi "từ" được kết hợp trên một yêu cầu. (hãy nhớ phương pháp này cần phải được công cộng!)

Sử dụng nó để ủy sạch để phương pháp của bạn

<rule> 
    <from>^/pref-editor/addresses$</from> 
    <run class="com.blah.web.PrefsServlet" method="runAddresses" /> 
</rule> 
<rule> 
    <from>^/pref-editor/phone-nums$</from> 
    <run class="com.blah.web.PrefsServlet" method="runPhoneNums" /> 
</rule> 
2

Tôi đã viết một thư viện gọi jurlmap mà trong số những thứ khác làm những gì bạn đang yêu cầu cho.

+0

Thật thú vị khi sử dụng! Cảm ơn cho lib này! – dajood

+0

Ah, máy chủ của bạn bị hỏng. Nó là tốt hơn để chia sẻ các dự án trên Github. –

+0

Tôi có nó trên github: https://github.com/mtomis/jurlmap, nhưng tôi không chắc nó hữu ích như thế nào. – mtomis

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