2

我在我的项目中使用spring框架,

这是我的 web.xml 的一部分:

<servlet>
    <servlet-name>SpringMvcServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>
            /WEB-INF/servlet-context.xml
        </param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>SpringMvcServlet</servlet-name>
    <url-pattern>/*</url-pattern>
</servlet-mapping>
<filter>
    <filter-name>httpMethodFilter</filter-name>
    <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>httpMethodFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

<error-page>
    <error-code>404</error-code>
    <location>/system/404.html</location>
</error-page>
<error-page>
    <error-code>500</error-code>
    <location>/system/500.html</location>
</error-page>

并配置:

<mvc:resources mapping="/system/**" location="/WEB-INF/pages/system/" />

但是我在日志中发现了很多错误,一些请求是这样的:

  • 发布 /index.php
  • 发布 /notexists.html

它们在我的服务器中不存在,因此将调用“/system/404.html”,但 mvc:resources 不接受 POST 方法,因此它将返回 500 错误。

如何解决?或解决?

谢谢

4

1 回答 1

2

首先:我认为您ResourceHttpRequestHandler在尝试将其用于 POST 请求时滥用了 。——如果你让这个处理程序来处理 POST 请求,我不确定每件事是否都能正常工作。


<mvc:resources />配置类的实例org.springframework.web.servlet.resource.ResourceHttpRequestHandler。这有超类WebContentGenerator,这个超类有一个属性Set<String> supportedMethods

所以你需要做的就是:

<property name="supportedMethods">
    <list>
       <value>GET</value>
       <value>HEAD</value>
       <value>POST</value>
    </list>
</property>

不幸的是,这需要您ResourceHttpRequestHandler手动配置而不是使用<mvc:resources />

<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
     <property name="urlMap">
         <map>
              <entry key="/system/**" value="myResourceHandler" />
         </map>
     </property>
     <property name="order" value="100000" />       
</bean>

<bean id="myResourceHandler" name="myResourceHandler"
      class="org.springframework.web.servlet.resource.ResourceHttpRequestHandler">
      <property name="locations" value="/WEB-INF/pages/system/" />
      <property name="supportedMethods">
         <list>
            <value>GET</value>
            <value>HEAD</value>
            <value>POST</value>
         </list>
     </property>
     <!-- cacheSeconds: maybe you should set it to zero because of the posts-->
</bean>

我没有证明这个配置,我只是把它的作用写下来ResourceBeanDefintionParser

于 2013-03-23T16:05:46.540 回答