Question

Je suis en train d'écrire une application web où vous devez vous connecter, en utilisant le nom d'utilisateur et mot de passe. L'étape suivante du processus consiste à sélectionner un projet dans lequel l'utilisateur connecté est impliqué.

Une fois que le projet est sélectionné et le bouton d'envoi a été cliqué, un servlet est appelé à préparer le projet sélectionné et créer un requestDispatcher et .forward req et respectivement à mon mainpage.

La mise en page du mainpage:
L'en-tête div:

<div><jsp:include page="header.do" flush="true"/></div>

Le corps div:

<div>   code that is present in the mainpage.jsp </div>

Le pied de page div:

<div><jsp:include page="footer.do" flush="true"/></div>

Disons que ces 3 divs constituent le mainpage.

Après la transmission la page avec le requestDispatcher que je peux voir le contenu du mainpage. Cependant les années de <jsp:include> ne sont pas chargés (les années DIV sont laissés vides). Seulement quand j'actualisez la page (doGet, je suppose) includes va charger correctement.

Y at-il de toute façon de laisser la charge comprend une exécution doPost requestDispatch?

** Note: La syntaxe des requestDispatchers est exactement la même dans les méthodes de doPost et doGet.

Si plus de précisions est nécessaire, ou un code supplémentaire. S'il vous plaît laissez-moi savoir.


EDIT

conteneur Servlet utilisé: Tomcat 6.0

Web.xml:

<!--- Servlet Mapping for Project Selection Servlet-->
<servlet>
    <servlet-name>ProjectSelect</servlet-name>
    <servlet-class>MyProject.Login.ProjectSelect</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>ProjectSelect</servlet-name>
    <url-pattern>/ProjectSelect.do</url-pattern>
</servlet-mapping>

Mais qu'est-ce que le mappage de servlet ont à voir avec le doGet et doPost?


Cordialement,

B.

Était-ce utile?

La solution

Comme mentionné dans les commentaires, il semblait que le servlet qui écoute sur header.do et footer.do est limitée aux demandes de GET seulement. Vous devez vous assurer qu'il doit être exécuté sur les demandes de POST ainsi.

Quant à la nouvelle question dans le commentaire:

  

Pourquoi la méthode doPost() appelée lorsqu'un <jsp:include> est appelé à partir d'une autre page jsp?

Parce que la méthode de la requête HTTP, tiré par les comptes clients. Le RequestDispatcher ne se déclenche pas une demande de nouveau HTTP ou alors (il est seulement le sendRedirect() qui fait cela). Le RequestDispatcher juste réutilisations la demande initiale pour les ressources incluses / transmises. La méthode de demande ne sera pas modifiée et reste dans ce POST cas dans les ressources inclus / transmises.


Cela dit, vous auriez probablement comme de redessiner / refactor tous vos *.do servlets à un seul servlet contrôleur frontal central qui a la logique nécessaire mis en œuvre dans la méthode de service() afin d'éviter dupliqués / encombrement boilerplate. Ou encore mieux, adopter un framework MVC comme JSF, Struts (2), Spring MVC, etc. Pour plus de détails, vérifier cette réponse .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top