JSP: no incluyen ser llamado en la página de reenvío utilizando doPost RequestDispatcher
-
30-09-2019 - |
Pregunta
Actualmente estoy escribiendo una aplicación web en la que tienes que entrar en, usando nombre de usuario y contraseña. El siguiente paso en el proceso es seleccionar un proyecto en el que el usuario conectado está involucrado.
Una vez seleccionado el proyecto y el botón de enviar se ha hecho clic, un servlet está llamado a preparar el proyecto seleccionado y crear un requestDispatcher
y .forward
el req y resp a mi MainPage.
El diseño de la MainPage:
La cabecera div:
<div><jsp:include page="header.do" flush="true"/></div>
El cuerpo div:
<div> code that is present in the mainpage.jsp </div>
El div pie de página:
<div><jsp:include page="footer.do" flush="true"/></div>
Le dicen que estos 3 divs conforman el MainPage.
Después de reenvío de la página con el requestDispatcher
consigo ver el contenido de la MainPage. Sin embargo los de <jsp:include>
no están cargados (las de DIV se dejan vacíos). Sólo cuando actualice la página (doGet
, supongo) incluye la va a cargar correctamente.
¿Hay alguna forma para que la incluye carga en una ejecución doPost requestDispatch?
** Nota: La sintaxis de los requestDispatchers es exactamente el mismo en los métodos y doPost
doGet
.
Si se necesita más aclaraciones, o código adicional. Por favor, hágamelo saber.
Editar
contenedor de servlets utilizado: 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>
Pero lo que sería la correlación de servlet tiene que ver con la doGet
y doPost
?
Saludos cordiales,
B.
Solución
Como se ha mencionado en los comentarios, parecía que el servlet que está escuchando en header.do
y footer.do
se limita a las solicitudes GET
solamente. Es necesario asegurarse de que se va a ejecutar en las solicitudes POST
también.
En cuanto a la nueva pregunta en el comentario:
¿Por qué es el método
doPost()
llamada cuando un<jsp:include>
se llama desde otra página JSP?
Debido a que el método de la solicitud HTTP como despedido por las cuentas de los clientes. El RequestDispatcher
no se dispara una nueva petición HTTP marca más o menos (que es sólo el sendRedirect()
que está haciendo eso). El RequestDispatcher
simplemente reutilizaciones la petición inicial de los recursos incluidos / reenviados. El método de la petición no será cambiada y permanece en este caso POST
en los recursos incluidos / reenviados.
Dicho esto, lo que probablemente como para rediseñar / refactor todos los servlets *.do
a un único servlet controlador central que tiene la lógica necesaria implementado en el método service()
Para evitar duplicados / desorden repetitivo. O mejor aún, adoptar un marco MVC como JSF, Struts (2), Spring-MVC, etc. Para más detalle, Cheque esta respuesta .