Actualmente estoy tratando de aprender JSP. Mi pregunta es, en este momento solía incluir el encabezado y pie de página de la página usando:
<%@include file="includes/header.jsp" %>
y
<%@include file="includes/footer.jsp" %>
Pero ahora, también he separado el contenido de la página. Por lo tanto, si el usuario hace clic en una página, dicen productos, tiene que cargar el archivo JSP que se encuentra en: includes/pages/products.jsp
Por lo tanto, el vínculo con el usuario es como: <a href="index.jsp?p=products">Products</a>
.
Entonces, tengo que obtener el valor p y mostrar la página basada en él.
Lo siguiente es lo que he hecho hasta ahora.
<%
if(request.getParameter("p")!=null)
{
String p = request.getParameter("p");
%>
<%@include file="includes/page_name.jsp" %>
<%
}
%>
Entonces, ¿cómo coloco el valor de la variable "p" en la posición de "page_name"?
O, ¿hay algún otro método que pueda usar?
En PHP, podríamos usar el include()
o include_once()
. Estoy un poco atrapado en este JSP. :(
Respuestas:
Lo que estás haciendo es una inclusión estática. Una inclusión estática se resuelve en tiempo de compilación y, por lo tanto, no puede usar un valor de parámetro, que solo se conoce en tiempo de ejecución.
Lo que necesita es una dinámica que incluya:
Tenga en cuenta que debe usar JSP EL en lugar de scriptlets. También parece que está implementando un controlador central con index.jsp. En su lugar, debe usar un servlet para hacerlo y enviarlo al JSP apropiado desde este servlet. O mejor, use un marco MVC existente como Stripes o Spring MVC.
fuente
java.io.FileNotFoundException: /includes/<%= p %>.jsp
. ¡Parece que<%= p %>
se usa como está en la ruta del archivo!<jsp:include page="<%= "includes/" + p + ".jsp" %>" />
y está funcionando ahora :)Puedes usar parámetros como ese
y
en about.jsp puedes tomar el parámetro
fuente
Puede usar las directivas de inclusión
o JSP incluye acción
La diferente directiva include incluye un archivo durante la fase de traducción. mientras JSP Incluir acción incluye un archivo en el momento en que se solicita la página
Recomiendo Spring MVC Framework como su controlador para manipular cosas. use el patrón de URL en lugar del parámetro.
ejemplo:
en vez de
Mire este video Spring MVC Framework
fuente
En el momento de la traducción de la página, el contenido del archivo que figura en la directiva de inclusión se "pega" tal como está, en el lugar donde se utiliza la directiva de inclusión JSP. Luego, la página JSP de origen se convierte en una clase de servlet java. El archivo incluido puede ser un recurso estático o una página JSP. En general, la directiva JSP include se usa para incluir encabezados y pies de página.
Sintaxis para incluir un archivo jsp:
Ejemplo
fuente
1.
<a href="index.jsp?p=products">Products</a>
cuando el usuario hace clic en el enlace Productos, puede llamar directamente a products.jsp.Quiero decir que puedes mantener el nombre del archivo JSP igual que el parámetro Valor.
o
2.Puede mantener un archivo de recursos externo con clave, pares de valores. como abajo
products : products.jsp
customer : customers.jsp
puede recuperar programáticamente el nombre del archivo JSP del archivo de propiedades.
de esta manera puede cambiar fácilmente el nombre del archivo JSP
fuente
org.apache.jasper.JasperException: /admin.jsp(239,44) PWC6117: File "/<%=p%>" not found
. ¿Eso funcionó a tu lado?includes/add.jsp
. Entonces se usa esta en incluir derivado:<%@ include file="includes/add.jsp" %>
. Muestra el contenido de la página. Pero si uso esta línea en su lugar: ¡<%@ include file="<%=p%>" %>
muestra una excepción!File "<%=p%>" not found
. Si voy a utilizar el valor real, está funcionando.Por una razón que aún no entiendo, después de usar
<%@include file="includes/footer.jsp" %>
en miindex.jsp
entonces en los otros archivos jsp comoregister.jsp
tuve que usar<%@ include file="footer.jsp"%>
. Como puede ver, ya no era necesario usar la ruta completa, STS había almacenado mi ruta inicial.fuente