복붙노트

[SPRING] 봄 : mvc : resources에서 POST 요청을 받아들이지 않습니까? 그 문제를 해결하는 방법

SPRING

봄 : mvc : resources에서 POST 요청을 받아들이지 않습니까? 그 문제를 해결하는 방법

내 프로젝트에서 스프링 프레임 워크를 사용하고 있는데,

다음은 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/" />

하지만 내 로그에서 많은 오류가 발생했는데 다음과 같은 요청이 있습니다.

그들은 내 서버에 존재하지 않았으므로 "/system/404.html"을 호출하지만 mvc : resources는 POST 메서드를 허용하지 않으므로 500 오류를 반환합니다.

그것을 고치는 방법? 또는 주위에 작동합니까?

감사

해결법

  1. ==============================

    1.우선 : POST 요청에 사용하려고 할 때 ResourceHttpRequestHandler를 악용하는 것 같습니다. - 그리고이 핸들러가 POST 요청을 처리하도록 만들면 모든 것이 올바르게 작동하는지 확신 할 수 없습니다.

    우선 : POST 요청에 사용하려고 할 때 ResourceHttpRequestHandler를 악용하는 것 같습니다. - 그리고이 핸들러가 POST 요청을 처리하도록 만들면 모든 것이 올바르게 작동하는지 확신 할 수 없습니다.

    는 org.springframework.web.servlet.resource.ResourceHttpRequestHandler 클래스의 인스턴스를 설정합니다. 이 클래스에는 WebContentGenerator 수퍼 클래스가 있으며이 수퍼 클래스에는 Set supportedMethods 속성이 있습니다.

    그래서 당신이해야 할 일은 모두 :

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

    불행하게도 이렇게하려면 를 사용하는 대신 ResourceHttpRequestHandler를 손으로 구성해야합니다.

    <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가 작성한 것으로부터 작성했습니다.

  2. from https://stackoverflow.com/questions/15588001/spring-not-accept-post-request-under-mvcresources-how-to-fix-that by cc-by-sa and MIT license