2012-11-27 7 views
0

J'ai une application Spring MVC dans laquelle j'obtiens une erreur 405 chaque fois que je demande des ressources.Erreur 405 Obtenir des ressources

je suit dans mon fichier 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> 

et dans mon fichier home.jsp je les suivantes:

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

Quand je lance ceci à l'intérieur IntelliJ en utilisant tous tomcat7 les ressources sont renvoyées en tant que méthode 405 non autorisée. Ci-dessous le HAR pour cette demande

{ 
    "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" 
} 

Quand je vérifie le fichier WAR, le fichier spécifique est situé dans WEB-INF/classes/images.

Je dois manquer quelque chose, mais cela me rend fou. Quelqu'un a des idées?

Modifier-

J'ai inclus mon dossier web.xml ici:

<?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> 

mon fichier servlet est en fait une forme servlet.xml

+0

Veuillez activer la journalisation et vérifier ce qui est imprimé dans la console lorsque vous accédez à la ressource spécifiée. Une méthode moins efficace mais néanmoins productive consiste à définir un point de rupture dans le DispatcherServlet lui-même. –

Répondre

1

Il pourrait vous manquer le contexte de votre application dans l'url

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

Si vous n'avez aucune configuration de contexte explicite, je suppose que c'est un nom de votre fichier WAR sans l'extension .war.

Vous pouvez également utiliser l'étiquette d'URL de base JSTL dans les pages JSP pour référencer des ressources.

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

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

Dans ce cas, vous n'avez pas besoin de spécifier le contexte.

1

Pourrait-il y avoir quelque chose de suspect dans votre web.xml? Sinon, j'ai le pressentiment que c'est peut-être le UrlBasedViewResolver qui détourne vos images. Pourriez-vous essayer d'ajouter une propriété viewNames pour limiter ce qu'il résout, par exemple .:

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

(ou congruente prefix et/ou suffix propriétés).

Espérons que cela aide.

Cheers,

0

Je suis sûr que cela a été corrigé, mais dans d'autres cas, ont le même problème. J'ai corrigé un problème similaire en changeant le <url-pattern> pour terminer par un *. Cela doit mapper le DispatcherServlet à chaque chemin. Voir ci-dessous:

<?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>