40 votes

Comment puis-je définir la page de bienvenue dans une action struts ?

J'ai une application web basée sur struts, et je voudrais que la page de "bienvenue" par défaut soit une action. Les seules solutions que j'ai trouvées à ce sujet semblent être des variations pour faire de la page de bienvenue un JSP qui contient une redirection vers l'action. Par exemple, dans web.xml :

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

y en index.jsp :

<% 
  response.sendRedirect("/myproject/MyAction.action");
%> 

Il y a sûrement un meilleur moyen !

23voto

Martin McNulty Points 1404

Personnellement, je garderais la même configuration que vous avez maintenant, mais je changerais la redirection pour un forward. Cela évite de renvoyer un en-tête au client et de lui faire faire une nouvelle demande.

Donc, en particulier, je remplacerais les

<% 
  response.sendRedirect("/myproject/MyAction.action");
%>

dans index.jsp avec

<jsp:forward page="/MyAction.action" />

L'autre effet de ce changement est que l'utilisateur ne verra pas l'URL dans la barre d'adresse passer de " http://server/myproject " à " http://server/myproject/index.jsp ", car le transfert se fait en interne sur le serveur.

17voto

Srikanth Points 685

Il s'agit d'un fil de discussion assez ancien mais le sujet abordé, je pense, est toujours d'actualité. J'utilise un tag struts - s:action pour réaliser ceci. J'ai créé un index.jsp dans lequel j'ai écrit ceci...

<s:action name="loadHomePage" namespace="/load" executeResult="true" />

11voto

Craig Wohlfeil Points 328

Depuis la version 2.4 de la spécification Servlet, vous êtes autorisé à avoir une servlet dans la liste des fichiers de bienvenue. Notez qu'il ne peut s'agir d'une URL (telle que /monprojet/MonAction.action). Il doit s'agir d'une servlet nommée et vous ne pouvez pas lui passer une chaîne de requête. Votre servlet de contrôleur doit avoir une action par défaut.

<servlet>
  <servlet-name>MyController</servlet-name>
  <servlet-class>com.example.MyControllerServlet</servlet-class>
</servlet>
<servlet-mapping>
  <servlet-name>MyController</servlet-name>
  <url-pattern>*.action</url-pattern>
</servlet-mapping>
<welcome-file-list>
  <welcome-file>MyController</welcome-file>
</welcome-file-list>

6voto

Damien B Points 1608

"Il y a sûrement un meilleur moyen !"

Il n'y en a pas. Les spécifications des servlets (Java Servlet Specification 2.4, "SRV.9.10 Welcome Files" par exemple) indiquent :

L'objectif de ce mécanisme est de permettre au déployeur de spécifier une commande d'URIs partiels que le conteneur doit utiliser pour ajouter aux URIs lorsqu'il y a une erreur d'encodage. demande d'un URI correspondant à une entrée de répertoire dans le WAR qui n'est pas mappé à un composant Web.

Vous ne pouvez pas mapper Struts sur '/', car Struts a besoin de travailler avec une extension de fichier. Il vous reste donc à utiliser un composant mappé implicitement, comme un JSP ou un fichier statique. Toutes les autres solutions ne sont que des bidouillages. Gardez donc votre solution, elle est parfaitement lisible et maintenable, ne cherchez pas plus loin.

6voto

Nischal Points 454

Une chose que je fais est de mettre un fichier vide du même nom que votre action struts et de tromper le conteneur pour appeler l'action struts.

Ex. Si votre action Struts est welcome.do, créez un fichier vide nommé welcome.do. Cela devrait inciter le conteneur à appeler l'action Struts.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X