JSP: Include pas appelé à la page de renvoi à l'aide doPost RequestDispatcher
-
30-09-2019 - |
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.
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 .