2013-06-07 14 views
5


Próbuję skonfigurować prosty kontroler.

mam:
w web.xml
Spring MVC configure 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> 

w MVC-dyspozytor-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" /> 

tutaj jest mój Controller:

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; 
}} 

Uruchomiłem Tomcat 6 iw tej konfiguracji to (/index.jsp) działa idealnie!

Ale jeśli zmienię URL wzór podobny do tego

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

to powraca 404 dostępie /index.jsp

widzę "To tu" w konsoli, to znaczy url-pattern działa dobrze, ale nie robi ModelAndView „t get zainicjowany

Dziwne jest to, że wygląda na to, że próbuje uzyskać dostęp do zasobu pusty (Chrome dysplays mnie«Stan HTTP 404 -»)

Proszę, pomóż mi zrozumieć, co się dzieje .. Może być Tęskniłem za czymś zależnym od adresu URL acja?

UPD:
Dzięki Pavel Horal rozwiązanie zostało znalezione.
po prostu zastąpić mój wzorzec URL w web.xml z

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

A teraz reaguje /test/index.jsp

+0

Proszę spojrzeć na ten wątek. To powinno pomóc. http://stackoverflow.com/questions/15385596/servlet-mapping-web-xml – smwikipedia

Odpowiedz

2

wiosny pracuje z informacją, w jaki sposób mapowania aplet jest zdefiniowana. Jeśli używasz mapowania sufiksów (*.something), Spring używa tylko pierwszej części (bez przyrostka). Oznacza to, że shuold map tylko /index w swoim wzorcu adresu URL (bez przyrostka).

JavaDoc w sprężyny UrlPathHelper#getPathWithinServletMapping daje lepszy opis tego, co jest wykorzystywane w procesie mapowania:

Powrotna droga w mapowania serwletu dla danego żądania, tj część adresu URL żądanie poza zakresem opisanym w części który wywołał serwlet, lub "" jeśli cały adres URL został wykorzystany do zidentyfikowania serwletu.

Wykryto adres URL żądania, jeśli został wywołany w ramach requestDispatcher .

Np .: mapowanie serwletów = "/ test/*"; Żądanie URI = "/ test/a" -> "/ a".

Np .: mapowanie serwletów = "/ test"; Żądanie URI = "/ test" -> "".

Np .: mapowanie serwletów = "/*.test"; request URI = "/a.test" -> "".

+0

Dziękuję, teraz to jasne! Obiecuję, następnym razem będę uważniej czytał JavaDoc :) –

+1

Ta konkretna JavaDoc nie jest łatwa do znalezienia. To jest wewnętrzna klasa wiosenna. Jednak uwielbiam wiosnę, że nawet klasy wewnętrzne są dobrze zdefiniowane i udokumentowane (w przeciwieństwie do wielu innych frameworków). –

+0

@PavelHoral Czy możesz mi pomóc w tym pytaniu? Dzięki. http://stackoverflow.com/questions/33522888/how-does-the-getservletmapping-affects-the-url-in-spring-webmvc – smwikipedia