2011-01-10 6 views
1

私はglassfish 2.1でhello world springプロジェクトを作成しています。私はSimpleUrlHandlerMappingを使用して/spring/*.htmで終わるものすべてを私のスプリングコントローラにマップしようとしています。ここで私が持っているものです。glassfishとspringとのURLマッピング

のweb.xml:私のディスパッチャ-servlet.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> 

<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がディスパッチ・サーブレットにリクエストを適切に渡しているため正しいことを意味します。私はhttp://localhost:9680/foo/spring/test.htm(またはに/春/ *終了何かを要求すると、私はこの例外を除いて500を得る:

javax.servlet.ServletException:PWC1232:超過最大の深さのネストされた要求ディスパッチ用:20

私は非常に愚かな何かをやっているように私は感じるが、グーグルとのマッピングで遊んで数時間後、私は困惑

+0

は私の問題で私を助けてください、私は私が同様の問題を持っていると思います http://stackoverflow.com/questions/31709601/ glassfish-url-mapping –

答えて

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には大手/はありませんですそれは相対的なものとして解釈されます。したがって、末尾のURLが/foo/spring/test.htmの場合、相対転送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

+0

@Kyle:Bdump-tsh – skaffman

関連する問題