2013-06-07 50 views
5


Tôi cố định cấu hình Bộ điều khiển đơn giản.

tôi có:
trong web.xml
Spring MVC định cấu hình url-pattern

<servlet> 
    <servlet-name>mvc-dispatcher</servlet-name> 
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
    <load-on-startup>1</load-on-startup> 
</servlet> 
<servlet-mapping> 
    <servlet-name>mvc-dispatcher</servlet-name> 
    <url-pattern>/index.jsp</url-pattern> 
</servlet-mapping> 

trong MVC-phối-servlet.xml

<bean id="viewResolver" 
     class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
    <property name="prefix"> 
     <value>/jsp/</value> 
    </property> 
    <property name="suffix"> 
     <value>.jsp</value> 
    </property> 
</bean> 

<bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> 
    <property name="urlMap"> 
     <map> 
      <entry key="/index.jsp"> 
       <ref bean="mainPage"/> 
      </entry> 
     </map> 
    </property> 
</bean> 

<bean name="mainPage" class="ru.mypack.TBController" /> 

ở đây là tôi khiển:

public class TBController extends AbstractController { 

@Override 
protected ModelAndView handleRequestInternal(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception { 
    System.out.println("It is here"); 
    ModelAndView model = new ModelAndView("index"); 
    return model; 
}} 

Tôi chạy trên Tomcat 6 và trong cấu hình này nó (/index.jsp) hoạt động hoàn hảo!

Nhưng nếu tôi thay đổi url-pattern như thế này

<servlet-mapping> 
    <servlet-name>mvc-dispatcher</servlet-name> 
    <url-pattern>*.jsp</url-pattern> 
</servlet-mapping> 

nó trả 404 truy cập /index.jsp

tôi thấy "Nó là ở đây" trong giao diện điều khiển, nó có nghĩa là url-pattern hoạt động tốt nhưng ModelAndView doesn 't được khởi tạo

lạ một điều là nó trông giống như ông cố gắng để truy cập vào tài nguyên trống (Chrome dysplays tôi 'HTTP Status 404 -')

Xin vui lòng, giúp tôi hiểu những gì đang xảy ra .. có thể Tôi đã bỏ lỡ điều gì đó trong mẫu url cụ thể ation?

UPD:
Nhờ Pavel Horal, giải pháp đã được tìm thấy.
Tôi chỉ thay thế tôi url-pattern trong web.xml với

<url-pattern>/test/*</url-pattern> 

Và bây giờ nó phản ứng bằng cách /test/index.jsp

+0

Hãy xem chủ đề này. Nó sẽ giúp. http://stackoverflow.com/questions/15385596/servlet-mapping-web-xml – smwikipedia

Trả lời

2

Xuân đang phối hợp với các thông tin như thế nào ánh xạ servlet được định nghĩa. Nếu bạn đang sử dụng ánh xạ hậu tố (*.something), thì Spring chỉ sử dụng phần đầu tiên (không có hậu tố). Điều này có nghĩa là bạn chỉ bản đồ shuold chỉ /index trong mẫu url của bạn (không có hậu tố).

javadoc trong Spring UrlPathHelper#getPathWithinServletMapping đưa ra một mô tả rõ hơn những gì đang được sử dụng trong quá trình lập bản đồ:

Return con đường trong bản đồ servlet cho yêu cầu nhất định, ví dụ: một phần của URL của yêu cầu vượt quá một phần được gọi là servlet, hoặc "" nếu toàn bộ URL đã được sử dụng để nhận dạng servlet.

Phát hiện bao gồm URL yêu cầu nếu được gọi trong một RequestDispatcher bao gồm.

Ví dụ: servlet mapping = "/ test/*"; yêu cầu URI = "/ test/a" -> "/ a".

Ví dụ: servlet mapping = "/ test"; yêu cầu URI = "/ test" -> "".

Ví dụ: servlet mapping = "/*.test"; yêu cầu URI = "/a.test" -> "".

+0

Cảm ơn bạn, giờ đã rõ! Tôi hứa, lần sau tôi sẽ đọc JavaDoc cẩn thận hơn :) –

+1

Vâng, JavaDoc cụ thể này không dễ tìm. Đây là lớp Spring bên trong. Tuy nhiên những gì tôi yêu thích về mùa xuân là, ngay cả các lớp bên trong cũng được xác định và ghi lại (không giống như trong nhiều khung công tác khác). –

+0

@PavelHoral Bạn có thể giúp tôi với câu hỏi này không? Cảm ơn. http://stackoverflow.com/questions/33522888/how-does-the-getservletmapping-affects-the-url-in-spring-webmvc – smwikipedia

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