2010-06-10 26 views
9

Tôi đang sử dụng Spring 2.5 MVC và muốn thêm một Servlet của bên thứ ba khác. Vấn đề là, Spring MVC bắt tất cả các yêu cầu, vì vậy Servlet không nhận được bất kỳ yêu cầu nào. Dưới đây là một số câu liên quan web.xml:Làm thế nào để dừng Spring MVC chặn tất cả Servlets khác?

SpringMVC org.springframework.web.servlet.DispatcherServlet

<servlet-mapping> 
    <servlet-name>SpringMVC</servlet-name> 
    <url-pattern>/*</url-pattern> 
</servlet-mapping> 

<servlet> 
    <description>This is the servlet needed for cache.type servlet, returns the packed resources</description> 
    <display-name>PackServlet</display-name> 
    <servlet-name>PackServlet</servlet-name> 
    <servlet-class>net.sf.packtag.servlet.PackServlet</servlet-class> 
</servlet> 

<servlet-mapping> 
    <servlet-name>PackServlet</servlet-name> 
    <url-pattern>*.pack</url-pattern> 
</servlet-mapping> 

Các/* lập bản đồ thực sự cần thiết cho các ứng dụng, một gói: thẻ (các Servlet của bên thứ ba) thực sự cần ánh xạ dựa trên phần mở rộng của tệp. Bất kỳ tài sản nào có thể nói với Spring không xử lý yêu cầu? Cảm ơn và kính trọng.

Trả lời

14

Trên thực tế bạn không cần mùa xuân để làm bất cứ điều gì, container servlet có thể giải quyết việc này cho bạn.

Khi kết hợp với servlet mà yêu cầu được gửi phụ thuộc vào các quy tắc phù hợp được xác định bởi mẫu url. Không có 2 servlet có thể có cùng một mẫu, nhưng chúng có thể có các mẫu chồng lên nhau. Sau đó, 4 quy tắc áp dụng:

1) kết hợp chính xác được ưu tiên hơn wildcard phù hợp 2) mô hình con đường còn phải ưu tiên hơn mẫu ngắn trận 3) đường dẫn đã ưu tiên hơn filetype phù hợp 4)/phù hợp với bất cứ điều gì chưa phù hợp

<servlet-mapping> 
    <servlet-name>PackServlet</servlet-name> 
    <url-pattern>*.pack</url-pattern> 
</servlet-mapping> 
<servlet-mapping> 
    <servlet-name>SpringMVC</servlet-name> 
    <url-pattern>/</url-pattern> 
</servlet-mapping> 

Nếu bạn sử dụng/* cho SpringMVC, nó có thể khớp với đường dẫn dài nhất. Bằng cách xóa *, bạn chắc chắn tuân theo đặc tả servlet cho servlet mặc định và nằm trong quy tắc 4.

Here you can find some more details.

+0

kết thúc bằng cả, hãy thử sửa những người này tìm thấy những thứ hữu ích này có khả năng sao chép đoạn mã này – Lombo

+0

@Lombo: Xin cảm ơn, Điểm tốt. –

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