当我使用“\ *”作为DispatcherServlet的url-pattern时设置Web应用程序

时间:2012-07-18 11:58:29

标签: spring servlets spring-mvc

我已将DispatcherServlet映射如下

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

  <servlet-mapping>
    <servlet-name>ems</servlet-name>
    <url-pattern>/*</url-pattern>
  </servlet-mapping>

因此,根据网址,它会为每个请求提供服务。但是,当我像这样映射ViewResolver时

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>      
        <property name="prefix" value="/WEB-INF/jsps/"/>
        <property name="suffix" value=".jsp"></property>
    </bean>

并且当控制器返回&#34; home&#34;作为视图名称。然后我得到了

[PageNotFound] No mapping found for HTTP request with URI [/ems/WEB-INF/jsps/home.jsp] in DispatcherServlet with name 'ems'

当这个InternalResourceViewResolver使用RequestDispacher时,它将成为另一个请求,并再次由DispatcherServlet处理该请求。

我们如何解决这个问题?当我们使用<url-pattern>/*</url-pattern>时,定义项目结构的最佳方法是什么。可能是一个愚蠢的问题,但是当我使用<url-pattern>/*</url-pattern>时,我总是对定义我的项目结构感到困惑。

1 个答案:

答案 0 :(得分:1)

使用“/ *”表示URL映射意味着绝对每个发送到该应用程序的请求都必须通过DispatcherServlet,因此您需要为所有这些请求进行映射。

如果这是不可接受的,找到一种方法来创建一个应该通过DispatcherSerlet的子集,让其余部分由HTTP服务器处理。