web-dev-qa-db-fra.com

Définition de la vue jsp par défaut avec spring mvc

Je souhaite définir l'un des fichiers jsp de mon dossier jsps en tant que vue par défaut pour l'application. Existe-t-il un moyen de préciser dans <welcome-file-list> que abc.jsp doit être défini par défaut et qu'il peut être trouvé dans tel ou tel chemin. De plus, le modèle d'URL est html, donc existe-t-il un moyen de le mapper dans Spring MVC.

Par exemple, lorsqu'un utilisateur tape www.example.com, je souhaite que l'application accède à la page abc.jsp et également lorsque quelqu'un tape www.example.com/something, même dans ce cas, l'application doit accéder à abc.jsp, mais le modèle d'URL ne doit pas être compromis.

17
Walker

Ajouter 

<mvc:view-controller path="/" view-name="abc"/>

dans le fichier de configuration. Ensuite, la racine se résoudra à la vue abc. Puis ajouter

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

dans le fichier de configuration. Cela résoudra l'affichage dans /WEB-INF/view/abc.jsp.

33
Robby Pond

Par exemple - Lorsqu'un utilisateur tape www.example.com, je souhaite que l'application soit dirigée vers la page abc.jsp  

Configurez-le en tant que <welcome-file> dans le web.xml comme suit:

<welcome-file-list>
    <welcome-file>/abc.jsp</welcome-file>
</welcome-file-list>

et aussi lorsque quelqu'un tape www.example.com/quelque chose, même dans ce cas, l'application doit être dirigée vers abc.jsp, mais le motif de l'URL ne doit pas être compromis.

En d'autres termes, vous souhaitez transférer des ressources non existantes (ce qui entraînerait donc une erreur HTTP 404 Page Not Found) dans le même fichier? Puis définissez-le comme un <error-page> dans le web.xml également:

<error-page>
    <error-code>404</error-code>
    <location>/abc.jsp</location>
</error-page>

Mais votre question est en fait un peu ambiguë. Si vous ne vouliez vraiment pas dire ce qui précède et que vous voulez réellement utiliser /abc.jsp comme "contrôleur de page", vous devez le définir en tant que <servlet> dans web.xml à la place:

<servlet>
    <servlet-name>controller</servlet-name>
    <jsp-file>/abc.jsp</jsp-file>
</servlet>
<servlet-mapping>
    <servlet-name>controller</servlet-name>
    <url-pattern>/*</url-pattern>
</servlet-mapping>

(le <welcome-file> et le <error-page> ne sont pas nécessaires ici)

Ceci est cependant une faille dans la conception du MVC (utiliser une vue en tant que contrôleur). Mais si vous le demandez réellement ..

16
BalusC

Résolu -

Un fichier dans la liste de fichiers de bienvenue doit être un fichier réel, donc abc.htm ne fonctionnait pas . Le seul moyen de le faire était de créer un fichier index.jsp et de le rediriger à l'aide de

<jsp:forward page="abc.html" />

également dans yourapplication-servlet.xml, vous devez spécifier le mappage de bean comme

<bean name="/abc.html" class="package.mypack.someController">  
    <property name="commandClass" value="package.mypack..something"/>
    <property name="formView" value="abc"/>
    <property name="successView" value="abc.htm"/>
</bean>  

Un fichier de bienvenue doit être un fichier REAL sur le système de fichiers, il ne fonctionne pas avec les URL mappées. Vous pouvez créer un fichier index.jsp qui redirige vers l'URL mappée, mais il doit s'agir d'un fichier réel. Cela n'a rien à voir avec spring, il est indiqué dans la spécification de servlet qu'il doit en être ainsi, bien que le comportement puisse varier sur différents serveurs d'applications en général, il doit s'agir d'un fichier réel.

J'espère que cela aide quelqu'un

2
Walker

Tout ce comportement peut être résolu en ajoutant 

<mvc:default-servlet-handler>

à votre printemps ../WEB-INF/dispatcher-servlet.xml
Cela arrangera tout pour vous.

0
ylev