2013-06-07 31 views
5


Provo a configurare il controller semplice.

ho:
in 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> 

in MVC-dispatcher-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" /> 

ecco il mio 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; 
}} 

Eseguo su Tomcat 6 e in questa configurazione (/index.jsp) funziona perfettamente!

Ma se cambio url-pattern come questo

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

restituisce 404 accedendo /index.jsp

vedo "È qui" in console, significa url-pattern funziona bene, ma ModelAndView doesn 't ottenere inizializzato

cosa strana è che sembra che egli tenta di accedere a risorse vuota (Chrome me dysplays 'HTTP Stato 404 -')

per favore, aiutatemi a capire cosa sta succedendo .. Può essere Ho perso qualcosa nel modello di URL specifico AZIONE?

UPD:
Grazie a Pavel Horal, la soluzione è stata trovata.
Ho appena sostituito il mio url-pattern in web.xml con

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

E ora risponde /test/index.jsp

+0

Si prega di dare un'occhiata a questa discussione. Dovrebbe aiutare http://stackoverflow.com/questions/15385596/servlet-mapping-web-xml – smwikipedia

risposta

2

primavera sta lavorando con le informazioni di come viene definita la mappatura servlet. Se si utilizza il mapping del suffisso (*.something), Spring utilizza solo la prima parte (senza il suffisso). Ciò significa che la mappa deve essere solo /index nel modello di URL (senza il suffisso).

JavaDoc nella primavera del UrlPathHelper#getPathWithinServletMapping dà una descrizione migliore ciò che viene utilizzato nel processo di mappatura:

ritorno il percorso all'interno della mappatura servlet per la richiesta di data, vale a dire la parte dell'URL del richiesta di là della parte che ha chiamato servlet, o "" se l'intero URL è stato utilizzato per identificare il servlet.

Rileva include URL richiesta se chiamato all'interno di un RequestDispatcher include.

E.g .: mappatura servlet = "/ test/*"; richiesta URI = "/ test/a" -> "/ a".

E.g .: mappatura servlet = "/ test"; richiesta URI = "/ test" -> "".

E.g .: mappatura servlet = "/*.test"; richiesta URI = "/a.test" -> "".

+0

Grazie, ora è chiaro! Prometto, la prossima volta leggerò JavaDoc con più attenzione :) –

+1

Bene, questo particolare JavaDoc non è facile da trovare. Questa è la classe di primavera interna. Comunque ciò che amo di Spring è che anche le classi interne sono ben definite e documentate (a differenza di molti altri framework). –

+0

@PavelHoral Potresti aiutarmi con questa domanda? Grazie. http://stackoverflow.com/questions/33522888/how-does-the-getservletmapping-affects-the-url-in-spring-webmvc – smwikipedia