2012-11-27 87 views
0

我有一个Spring MVC应用程序,每当我请求资源时,我都会收到405错误。405错误获取资源

我在我servlet.xml文件如下:

<context:component-scan base-package="com.xetius"/> 

<mvc:annotation-driven/> 

<mvc:resources mapping="/images/**" location="classpath:/images/"/> 
<mvc:resources mapping="/thumbs/**" location="classpath:/thumbs/"/> 
<mvc:resources mapping="/gallery/**" location="classpath:/gallery/"/> 
<mvc:resources mapping="/style/**" location="classpath:/style/"/> 
<mvc:resources mapping="/script/**" location="classpath:/script/"/> 
<mvc:resources mapping="/downloads/**" location="classpath:/downloads/"/> 

<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping" /> 

<bean id="viewResolver" 
     class="org.springframework.web.servlet.view.UrlBasedViewResolver"> 
    <property name="viewClass"> 
     <value>org.springframework.web.servlet.view.tiles2.TilesView</value> 
    </property> 
</bean> 

<bean class="org.springframework.web.servlet.view.tiles2.TilesConfigurer"> 
    <property name="definitions"> 
     <list> 
      <value>/WEB-INF/views/**/views.xml</value> 
     </list> 
    </property> 
</bean> 

,在我回到Home.jsp文件我有以下几点:

<img class="about" src="/images/about.jpg" alt="about" /> 

当我运行这个使用Tomcat7所有里面的IntelliJ资源正在返回405方法不允许。下面是该请求的HAR

{ 
    "startedDateTime": "2012-11-27T08:38:32.453Z", 
    "time": 8, 
    "request": { 
    "method": "GET", 
    "url": "http://localhost:8080/images/about.jpg", 
    "httpVersion": "HTTP/1.1", 
    "headers": [ 
     { 
     "name": "Accept-Encoding", 
     "value": "gzip,deflate,sdch" 
     }, 
     { 
     "name": "Accept-Language", 
     "value": "en-GB,en-US;q=0.8,en;q=0.6" 
     }, 
     { 
     "name": "Cookie", 
     "value": "JSESSIONID=0A0475B4404B037CD2FDD8876A02285A" 
     }, 
     { 
     "name": "Connection", 
     "value": "keep-alive" 
     }, 
     { 
     "name": "Accept-Charset", 
     "value": "ISO-8859-1,utf-8;q=0.7,*;q=0.3" 
     }, 
     { 
     "name": "Host", 
     "value": "localhost:8080" 
     }, 
     { 
     "name": "User-Agent", 
     "value": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11" 
     }, 
     { 
     "name": "Accept", 
     "value": "*/*" 
     }, 
     { 
     "name": "Referer", 
     "value": "http://localhost:8080/" 
     } 
    ], 
    "queryString": [], 
    "cookies": [ 
     { 
     "name": "JSESSIONID", 
     "value": "0A0475B4404B037CD2FDD8876A02285A", 
     "expires": null, 
     "httpOnly": false, 
     "secure": false 
     } 
    ], 
    "headersSize": 426, 
    "bodySize": 0 
    }, 
    "response": { 
    "status": 405, 
    "statusText": "Method Not Allowed", 
    "httpVersion": "HTTP/1.1", 
    "headers": [ 
     { 
     "name": "Date", 
     "value": "Tue, 27 Nov 2012 08:38:32 GMT" 
     }, 
     { 
     "name": "Content-Length", 
     "value": "1045" 
     }, 
     { 
     "name": "Server", 
     "value": "Apache-Coyote/1.1" 
     }, 
     { 
     "name": "Allow", 
     "value": "POST" 
     }, 
     { 
     "name": "Content-Type", 
     "value": "text/html;charset=utf-8" 
     } 
    ], 
    "cookies": [], 
    "content": { 
     "size": 1045, 
     "mimeType": "text/html", 
     "compression": 0 
    }, 
    "redirectURL": "", 
    "headersSize": 173, 
    "bodySize": 1045 
    }, 
    "cache": {}, 
    "timings": { 
    "blocked": 0, 
    "dns": -1, 
    "connect": -1, 
    "send": 1, 
    "wait": 6, 
    "receive": 0, 
    "ssl": -1 
    }, 
    "pageref": "page_1" 
} 

当我检查WAR文件时,具体文件位于WEB-INF/classes/images内。

我一定错过了一些东西,但是这让我疯狂。有人有主意吗?

编辑 -

我已经包括了我在这里的web.xml文件:

<?xml version="1.0" encoding="UTF-8"?> 
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> 
    <display-name>a-Form Catering</display-name> 
    <description>a-Form Catering Web Site</description> 

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

    <servlet-mapping> 
     <servlet-name>a-form</servlet-name> 
     <url-pattern>/</url-pattern> 
    </servlet-mapping> 

</web-app> 

我的servlet文件实际上是一个外形servlet.xml中

+0

请启用日志记录并检查访问指定资源时打印在控制台中的内容。一个效率较低但仍然有效的方法是在DispatcherServlet本身中设置一个断点。 –

回答

1

这可能是你错过了您在url中的应用背景

<img class="about" src="/WEBAPP_CONTEXT/images/about.jpg" alt="about" /> 

如果您没有任何明确的上下文配置,那么我认为它是没有.war扩展名的WAR文件的名称。

您也可以在JSP中使用JSTL核心URL标记来引用资源。

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 
    .......................... 

<img class="about" src="<c:url value="/images/about.jpg"/>" alt="about" /> 

在这种情况下,您不需要指定上下文。

1

您的web.xml有没有可疑的产品?如果不是,我有一个预感,它可能是UrlBasedViewResolver劫持你的图像。你可以尝试添加viewNames属性来限制它解决,如:

<bean id="viewResolver" class="....UrlBasedViewResolver"> 
    ... 
    <property name="viewNames" value=".jspwhatever" /> 
</bean> 

(或重合prefix和/或suffix属性)。

希望有所帮助。

干杯,

0

我敢肯定,这已得到修复,但如果其他人有同样的问题。我通过更改<url-pattern>以*结尾来解决类似问题。这应该将DispatcherServlet映射到每个路径。如下所示:

<?xml version="1.0" encoding="UTF-8"?> 
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> 
    <display-name>a-Form Catering</display-name> 
    <description>a-Form Catering Web Site</description> 

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

    <servlet-mapping> 
     <servlet-name>a-form</servlet-name> 
     <url-pattern>/*</url-pattern> 
    </servlet-mapping> 

</web-app>