2011-01-10 72 views
1

我在玻璃魚2.1上創建一個你好世界的春天項目。我正在嘗試使用SimpleUrlHandlerMapping將以/spring/*.htm結尾的所有內容映射到我的彈簧控制器。以下是我有:用玻璃魚和彈簧的URL映射

的web.xml:

<?xml version="1.0" encoding="ISO-8859-1"?> 
<web-app xmlns="http://java.sun.com/xml/ns/j2ee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" 
    version="2.4"> 
    <display-name>Test MVC Project</display-name> 

    <servlet> 
     <servlet-name>dispatcher</servlet-name> 
     <servlet-class> 
      org.springframework.web.servlet.DispatcherServlet 
     </servlet-class> 
     <load-on-startup>1</load-on-startup> 
    </servlet> 

    <servlet-mapping> 
     <servlet-name>dispatcher</servlet-name> 
     <url-pattern>/spring/*</url-pattern> 
    </servlet-mapping> 

    <welcome-file-list> 
     <welcome-file>index.html</welcome-file> 
    </welcome-file-list> 
</web-app> 
在我的調度員servlet.xml文件

<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
     http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"> 

    <bean id="defaultController" 
     class="org.springframework.web.servlet.mvc.ParameterizableViewController"> 
     <property name="viewName" value="WEB-INF/jsp/springbean-view.jsp" /> 
    </bean> 

    <bean id="urlMapping" 
     class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> 
     <property name="mappings"> 
      <props> 
       <prop key="*.htm">defaultController</prop> 
      </props> 
     </property> 
    </bean> 

</beans> 

我的sun-web.xml文件:

<sun-web-app> 
    <context-root>/foo</context-root> 
    <class-loader delegate="false" /> 
</sun-web-app> 

當我要求http://localhost:9680/foo時,我看到歡迎頁面。當我請求http://localhost:9680/foo/spring/test.htm時,我得到了404。

我已經在servlet.xml文件的urlMapping中嘗試了很多模式的變體。我已經得到了工作的唯一的事情是,如果我這樣做:

<bean id="urlMapping" 
    class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> 
    <property name="mappings"> 
     <props> 
      <prop key="/*">defaultController</prop> 
     </props> 
    </property> 
</bean> 

當我要求http://localhost:9680/foo/spring,它的工作原理。對我來說,這意味着我的web.xml是正確的,因爲它正確地將請求傳遞給調度servlet。當我要求http://localhost:9680/foo/spring/test.htm(或任何在/春天結束/ *,我得到一個500與此異常:

javax.servlet.ServletException:PWC1232:超過最大深度嵌套請求派遣:20

我覺得我做的事情非常愚蠢,但幾個小時google搜索,並與映射玩耍後,我難倒

+0

請幫我看看我的問題,我想我也有類似的問題 http://stackoverflow.com/questions/31709601/ glassfish-url-mapping – 2015-07-30 12:30:19

回答

1

這幾乎是正確的:

<prop key="/*">defaultController</prop> 

但是,這可以簡單一些:

<bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> 
    <property name="defaultHandler" ref="defaultController"/> 
</bean> 

另外,您得到無盡的轉發循環的原因是這樣的:

<bean id="defaultController" class="org.springframework.web.servlet.mvc.ParameterizableViewController"> 
    <property name="viewName" value="WEB-INF/jsp/springbean-view.jsp" /> 
</bean> 

這裏的問題是有一個在viewName沒有領先/ ,所以它被解釋爲相對的。所以,當你去到結尾爲/foo/spring/test.htm的URL時,相應的轉發URI是/foo/spring/WEB-INF/jsp/springbean-view.jsp,而這又被url-patternweb.xml中捕獲,所以它回到DispatcherServlet,它轉發它等等等等。無盡的循環。

簡單的解決辦法:

<property name="viewName" value="/WEB-INF/jsp/springbean-view.jsp" /> 

注意龍頭/

+0

謝謝,viewName開頭的斜槓是我所有問題的根源! – Kyle 2011-01-10 22:03:01