Spring MVC Cartographie des ressources

J'ai pu en tester une demande de cartographie de Spring MVC, et je suis tombé sur une drôle de situation dans mon application. J'ai décidé de créer un simple cenario de sorte que vous pouvez comprendre mon problème. Je vais d'abord vous montrer les détails de mon projet (la source), et puis je vais arriver à ma question.

J'ai la structure de répertoire suivante dans mon projet:

+webapp
  +WEB-INF
    +recursos
      +estilos
        test.css
    +spring
      fronte-beans.xml
    +views
      +testes
        page1.jsp
        page2.jsp
  web.xml

Mon Tomcat descripteur de déploiement:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:web="http://xmlns.jcp.org/xml/ns/javaee"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd http://xmlns.jcp.org/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
    id="WebApp_ID" version="2.4">

    <display-name>Archetype Created Web Application</display-name>

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

    <servlet-mapping>
        <servlet-name>fronte</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

</web-app>

Mon contexte de l'application pour DispatcherServlet:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>

<beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:mvc="http://www.springframework.org/schema/mvc"
        xmlns:context="http://www.springframework.org/schema/context"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="
            http://www.springframework.org/schema/beans
            http://www.springframework.org/schema/beans/spring-beans.xsd
            http://www.springframework.org/schema/mvc
            http://www.springframework.org/schema/mvc/spring-mvc.xsd
            http://www.springframework.org/schema/context
            http://www.springframework.org/schema/context/spring-context.xsd ">

    <mvc:annotation-driven />

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

    <context:component-scan base-package="com.regra7.minhaapp.contro" />

    <bean id="handlerMapping"
        class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
    </bean>

    <bean id="viewResolver"
        class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/views/" />
        <property name="suffix" value=".jsp" />
    </bean>

</beans>

Ma classe de contrôleur pour la page1.jsp:

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
@RequestMapping(value="/path")
public class TestController 
{
    @RequestMapping(value="/to/something")
    public String getPage()
    {
        return "testes/page2";
    }
}

Ma page1.jsp:

<!DOCTYPE html>

<%@ page 
    language="java" 
    contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>

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

<html lang="pt-BR">

    <!-- ############################################### -->
    <!--                                          HEADER -->
    <!-- ############################################### -->

    <head>
        <title>Test Page</title>
        <meta name="author"                 content="RDS"       />
        <meta name="description"            content="? ? ?" />

        <meta charset="UTF-8" />

        <link rel="stylesheet" type="text/css" href="recursos/estilos/test.css" media="all" />
    </head>

    <!-- ############################################### -->
    <!--                                            BODY -->
    <!-- ############################################### -->

    <body>

        <h1>PAGE 1</h1>
        <p>This is a test, p1.</p>
        <p>This is a test, p2.</p>
        <p>This is a test, p3.</p>

        <a href="${pageContext.request.contextPath}/path/to/something">CLICK TO PAGE 2</a>

    </body>

</html>

Je peux accéder à la page1.jsp et page2.jsp en douceur, mais le fichier CSS de page2.jsp finit par ne pas être trouvé. Le texte suivant est imprimé sur ma console:

dez 29, 2014 8:16:22 PM org.springframework.web.servlet.PageNotFound noHandlerFound
WARNING: No mapping found for HTTP request with URI [/testeSpringMvc/path/to/recursos/estilos/test.css] in DispatcherServlet with name 'fronte'

Pour quelle raison "/path/to" est inclus dans le résultat de ce chemin? Si j'essaie d'ajouter différentes combinaisons de cartographie, à la fois classe ou de la méthode de niveau, la même chose arrive. Cependant, si je carte le lien d'une chaîne de requête de l'URL (), comme suit, le fichier est trouvé sans problèmes...

page1.jsp:

<a href="${pageContext.request.contextPath}/?cd=page2">CLICK TO PAGE 2</a>

Contrôleur:

@Controller
@RequestMapping(value="/")
public class TestController
...
@RequestMapping(params="cd=page2")
public String getPage()

Ce qui se passe? Comment puis-je définir un chemin d'accès je veux donc que mes pages à utiliser et à trouver les ressources nécessaires? Je suis en train de séparer les pages en différents chemins pour que je puisse appliquer les fonctions de sécurité de Tomcat (contraintes de sécurité).

NOTE: j'ai essayé d'utiliser contextPath pour m'aider dans l'établissement de la CSS chemin d'accès au fichier, mais rien n'a fonctionné. En fait, la situation s'est aggravée en raison de Page1.jsp est également avéré ne pas avoir de stylisation:

<link rel="stylesheet" type="text/css" href="${pageContext.request.contextPath}recursos/estilos/test.css" media="all" />

Comme toujours, je vous remercie de votre attention et de temps.

OriginalL'auteur Loa | 2014-12-30