【问题标题】:setting-up the web application when I use "\*" as url-pattern for DispatcherServlet当我使用“\*”作为 DispatcherServlet 的 url 模式时设置 Web 应用程序
【发布时间】:2012-07-18 11:58:28
【问题描述】:

我已经将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>

因此,根据 url,它会处理每个请求。但是,当我像这样映射 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>

控制器返回“home”作为视图名称。然后我得到了

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

由于此 InternalResourceViewResolver 使用 RequestDispacher,它将是另一个请求,并且该请求再次由 DispatcherServlet 处理。

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

【问题讨论】:

    标签: spring servlets spring-mvc


    【解决方案1】:

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

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

    【讨论】:

    • 当我将其更改为“/”时,一切正常。能解释一下原因吗?
    • "/" 是网络上使用的 Unix 斜线; “\”是 Windows 斜杠。我不知道为什么一个可以工作而另一个不行,但第一个是网络上通常使用的。
    猜你喜欢
    • 1970-01-01
    • 2017-09-30
    • 1970-01-01
    • 2011-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-20
    • 2012-11-30
    相关资源
    最近更新 更多