10
votes

Spring MVC: Comment résoudre le chemin d'accès aux sous-répertoires du dossier root 'JSP' dans une application Web

Qu'est-ce qu'un moyen simple de résoudre le chemin d'accès à un fichier JSP qui n'est pas situé dans le répertoire Root JSP d'une application Web à l'aide de SpringMVCS Viewresolvers? Par exemple, supposons que nous ayons la structure d'application Web suivante:

<bean id="urlFilenameViewController" class="org.springframework.web.servlet.mvc.UrlFilenameViewController">
</bean>


1 commentaires

Note non liée, mais vous n'avez pas besoin de spécifier jstlView comme référence ci-dessus .


7 Réponses :


0
votes

Vous devez définir la propriété comme suit:

<property name="prefix" value="/WEB-INF/jsp/"/>


2 commentaires

Désolé que le préfixe était une faute de frappe, je l'ai corrigée maintenant. Cependant, si je dois sécuriser / admin1.jsp (ou Secure / Admin1.htm), cela va résoudre les yeux sur /web-inf/jsp/admin1.jsp et n'incluez pas le dossier sécurisé car cela ne fait pas partie du préfixe (Je blesse)


J'utilise 2.5.6.Sec01. Je l'ai essayé, mais le problème semble être dans la manière dont les mappages dans le SingleLhandlerMermerming sont spécifiés dans mon exemple. Toute demande à / Secure / ** entraînera le ressort en attendant que le fichier JSP réside dans / web-inf / jsp /, lorsque le fichier réel est situé dans / web-inf / jsp / sécurisé /. J'ai découvert une solution de contournement appropriée qui dessert mes objectifs, mais cela a ses limites. Je vais continuer à poster que aussi.



1
votes

Vous pouvez essayer de donner des noms des vues du contrôleur comme xxx

ayant préfixe et suffixe mappé comme ci-dessous xxx

Ceci finira par mapper pour /web-inf/jsp/secure/admin.jsp et /web-inf/jsp/secure/admin2.jsp


3 commentaires

Je ne sais pas que je comprends comment les propriétés Formview et Supplyview s'appliquent ici lorsque je souhaite utiliser l'URLFILENameViewController.


Formview and SupplyView sont les noms de vue que vous pouvez injecter dans vos contrôleurs, si vous souhaitez des vues configurables. Ceci 2 sont par défaut à votre disposition au cas où vous utilisez SimpleFormController.


Non, cela n'a rien à voir avec les formes, ce ne sont que des pages JSP avec peu de contenu, et bien qu'il y ait deux pages dans l'exemple que j'ai donné, il n'est pas limité à deux. Je n'utilise même pas un contrôleur formulaire et je pense que cela abuserait des propriétés de formulaires et de successionsView si je devais tenter de l'utiliser de la manière dont vous suggérez. Pas même sûr comment cela fonctionnerait de toute façon.



1
votes

Vous devez définir la propriété toujours utilisée dans le gestionnaire sur le répertoire: xxx

Cela obligera le gestionnaire à utiliser la partie "/ sécuriser /" de l'URI, puis le résolveur Inclure-le lorsque vous recherchez un JSP dans Web-Inf / JSP.


1 commentaires

Pas de chance avec ça. Enchanté toujours dans le dossier Root JSP.



2
votes

Je n'ai pas pu découvrir la solution exacte à la question que j'ai posée, mais j'ai une solution de contournement qui convient à mes exigences particulières. Le problème semble mentir dans la cartographie du handeur. Si spécifié comme dans l'exemple de l'article, toutes les demandes aux pages du dossier sécurisé résultent dans une tentative infructueuse de localiser le fichier JSP réel dans le dossier / web-inf / jsp / lorsque bien sûr le dossier Le fichier actuel est situé dans / web-inf / jsp / sécurisé / .

Cependant, si spécifié, si spécifié, comme: xxx

, toutes les pages sont résolues correctement. Une requête à /login.html accédera à un contrôleur de formulaire spécifique mais demande à toutes les autres pages, que ce soit dans le répertoire JSP racine ou un répertoire sous-répertoire. Pour moi, c'est bien parce que ce que je cherchais vraiment était un moyen d'éviter de spécifier un contrôleur pour chaque page de l'application (HMMM ... Peut-être auriez peut-être que ceci est clair dans le premier post - et peut-être peut-être de meilleures façons de fais-le quand même (?))). Le ** / *. HTM agit comme un cas de capture et toutes les pages que je veux géré par un autre contrôleur peut être spécifié explicitement au-dessus de cette propriété, comme illustré par /login.htm .


0 commentaires

2
votes

Essayez avec urlfileNameViewController ou retour Nouveau modèleandview ("Secure / Connexion");


0 commentaires

1
votes

On dirait que cela devrait fonctionner, selon les documents:

http: //static.springsource.org/spring/docs/3.0.x/apr/org/springframework/web/servlet/mvc/urlfilenameViewController.html

Les configurations que vous avez montrées semblent correspondre aux exemples de la doc. Si votre servlet Spring MVC Dispatcher est mappé sur "/" alors demande à "{contexte} /secure/whatever.jsp" devrait être traduit en vue Nom "Secure / Whats". Peut-être que cela a quelque chose à voir avec le "**" Wildcard? Ou peut-être que certaines de vos autres configtions ne sont pas correctes? Pouvez-vous inclure la partie de votre web.xml où vous configurez votre servlet Dispatcher Spring et incluez également les chemins complets que vous demandez dans votre navigateur?

Une autre façon de trouver le problème serait de télécharger le code source Spring MVC et de l'inclure dans votre application, puis utilisez un débogueur pour voir exactement ce qui se passe dans les haricots SIMPERLHANDLERMERMERFERMERS et URLFILENAMEVIEWNATEVIEWVIEWVIEWSTROLLER pour essayer de classer l'erreur. . Vous devriez être capable de déterminer assez rapidement où les choses vont mal comme ça.


0 commentaires

0
votes

Tous les sous-dossiers sont accessibles à l'aide de la carte wild dans le préfixe

du contrôleur Vous pouvez simplement retourner le nom JSP en tant que chaîne et le JSP sera affiché même s'il est sous Sous-dossiers de / Web-INF / JSP / similaire / Web-INF / JSP / ABC


0 commentaires