À l'aide de Printemps, de la cartographie à la racine dans web.xml, ressources statiques ne sont pas trouvés
Ce que je suis en train de faire est de faire correspondre les requêtes à la servlet racine (la terminologie correcte?). J'en suis au point où les Url sont mappées à la vue correcte, mais tout le contenu statique - css, javascript, images - qui est la partie de la page ne peut pas être trouvé.
Donc, dans mon web.xml ma servlet balise ressemble à ceci
<servlet-mapping>
<servlet-name>springapp</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
Mon contrôleur ressemble à quelque chose comme ceci:
@RequestMapping("/shop")
public class TheShopController extends MyBaseController {
public static String VIEW = "Tile.Shop";
@Override
@RequestMapping(method = RequestMethod.GET)
protected ModelAndView processRequest(HttpServletRequest req, HttpServletResponse resp) {
ModelAndView mav = new ModelAndView(VIEW);
return mav;
}
}
MyBaseController est très simple. Il ressemble à ceci:
public abstract class MyBaseController extends AbstractController {
protected Logger log = Logger.getLogger(getClass());
@Override
protected ModelAndView handleRequestInternal(HttpServletRequest req, HttpServletResponse resp)
throws Exception {
ModelAndView mav = processRequest(req, resp);
return mav;
}
protected abstract ModelAndView processRequest(HttpServletRequest req, HttpServletResponse resp);
}
Je suis en utilisant des Tuiles de mon point de vue de la couche. Ma configuration est comme suit:
/WEB-INF/tiles-defs.xml
Comme je l'ai mentionné, les points de vue sont trouvés, mais les ressources statiques, qui sont un port de la page ne peut pas être trouvé. Voici quelques exemples de déconnexion de mettre:
2010-01-24 17:25:01,777 DEBUG [http-8080-7] servlet.DispatcherServlet
(DispatcherServlet.java:690) - DispatcherServlet avec le nom "springapp'
le traitement de la requête GET pour [/springapp/static/css/compte.css]
2010-01-24 17:25:01,778 WARN [http-8080-4] servlet.DispatcherServlet
(DispatcherServlet.java:962) - Aucune correspondance trouvée pour la requête HTTP avec
URI [/springapp/static/css/shop.css] dans DispatcherServlet avec nom
'springapp' 2010-01-24 17:25:01,778 DEBUG [http-8080-6]
servlet.FrameworkServlet (FrameworkServlet.java:677) - avec Succès
la demande dûment remplie 2010-01-24 17:25:01,778 WARN [http-8080-5]
servlet.DispatcherServlet (DispatcherServlet.java:962) - Pas de cartographie
trouvé pour la requête HTTP avec l'URI [/springapp/static/css/offre.css] dans
DispatcherServlet avec le nom "springapp' 2010-01-24 17:25:01,778 AVERTIR
[http-8080-3] servlet.DispatcherServlet (DispatcherServlet.java:962) -
Aucune correspondance trouvée pour la requête HTTP avec l'URI
[/springapp/static/css/défilement boutons.css] dans DispatcherServlet
avec le nom de "springapp'
Va
http://localhost:8080/springapp/shop fonctionne très bien mais le css et les images sont manquantes.
Je pense que l'utilisation des Tuiles est en quelque sorte de compliquer les choses, mais je suis réticent à se débarrasser de lui. Je me demande si je dois ajuster mon point de vue la configuration de la résolution doit être tweeked en quelque sorte? Le chaînage de vue des résolveurs peut-être? Je suis juste pas que dans l'accomplissement de cette.
Vous devez vous connecter pour publier un commentaire.
Le problème est que les demandes pour le contenu statique aller à la dispatcherServlet, parce que c'est mappé comme
<url-pattern>/</url-pattern>
. C'est un problème très commun dans les applications avec de "repos" de l'Url (qui est, sans aucun préfixe dans laDispatcherServlet
cartographie).Il y a plusieurs façons de résoudre ce problème:
Depuis Le Printemps 3.x le moyen privilégié pour accéder à des ressources statiques est d'utiliser
<mvc:resources>
:web.xml
:Printemps config:
Voir aussi MVC Simplifications au Printemps 3
1. Utiliser la réécriture d'URL, filtre
Voir
mvc-basic
exemple ici2. Définir un préfixe pour le
default
servlet:Qui est, demande de
/static/images/image.png
sera de retour le fichier nommé/images/image.png
Cependant, cela est incompatible à travers les différents conteneurs de servlet (ne travaille pas de la Jetée), voir les solutions de contournement ici
3. Définir le contenu statique des extensions pour le
default
servlet:4. Ne pas utiliser Reposant Url, utiliser des Url avec le préfixe:
5. Ne pas utiliser Reposant Url, utiliser des Url avec l'extension:
N'importe envisager d'utiliser cela:
Voici le dernier printemps docs sur elle:
http://static.springsource.org/spring/docs/3.1.2.RELEASE/spring-framework-reference/htmlsingle/spring-framework-reference.html#mvc-default-servlet-handler
Comme une alternative à la solution proposée nombre (2 par défaut à la servlet, qui se comporte différemment de conteneur de servlet pour conteneur de servlet), je vous recommande de prendre un coup d'oeil dans le Ressources Servlet (
org.springframework.js.resource.ResourceServlet
) à partir de la Spring Webflow projet.Pour plus de détails, jetez un oeil à Comment gérer le contenu statique dans Spring MVC?
J'ai le même problème, mais au lieu d'utiliser le printemps, je ne mysefl un petit filtre qui redirigent la racine à la page ma page d'accueil comme ça:
C'est peut-être un truc, mais il ressemble à travailler très bien avec un petit code.
Allez ici pour plus d'informations sur les filtres http://www.oracle.com/technetwork/java/filters-137243.html