我目前正在尝试学习JSP。我的问题是,目前我曾经使用以下方式包含页面的页眉和页脚:
<%@include file="includes/header.jsp" %>
和
<%@include file="includes/footer.jsp" %>
但是现在,我也将页面内容分开了。因此,如果用户点击页面,比如产品,则必须加载位于以下位置的JSP文件:includes/pages/products.jsp
因此,指向用户的链接如下:<a href="index.jsp?p=products">Products</a>
。
所以,我必须得到p值并根据它显示页面。
以下是我到目前为止所做的工作。
<%
if(request.getParameter("p")!=null)
{
String p = request.getParameter("p");
%>
<%@include file="includes/page_name.jsp" %>
<%
}
%>
那么,如何将变量“p”的值放在“page_name”的位置?
或者,还有其他方法可供我使用吗?
在PHP中,我们可以使用include()
或include_once()
。我有点陷入这个JSP。 :(
答案 0 :(得分:220)
你正在做的是静态包含。静态包含在编译时被解析,因此可能不使用参数值,该参数值仅在执行时已知。
您需要的是动态包括:
<jsp:include page="..." />
请注意,您应该使用JSP EL而不是scriptlet。您似乎正在使用index.jsp实现中央控制器。您应该使用servlet来代替,并从此servlet调度到适当的JSP。或者更好,使用现有的MVC框架,如Stripes或Spring MVC。
答案 1 :(得分:22)
你可以使用那样的参数
<jsp:include page='about.jsp'>
<jsp:param name="articleId" value=""/>
</jsp:include>
和
在about.jsp中你可以拿参数<%String leftAds = request.getParameter("articleId");%>
答案 2 :(得分:16)
您可以使用包含指令
<%
if(request.getParameter("p")!=null)
{
String p = request.getParameter("p");
%>
<%@include file="<%="includes/" + p +".jsp"%>"%>
<%
}
%>
或 JSP包含操作
<%
if(request.getParameter("p")!=null)
{
String p = request.getParameter("p");
%>
<jsp:include page="<%="includes/"+p+".jsp"%>"/>
<%
}
%>
不同的是include指令在翻译阶段包含一个文件。 而JSP Include Action在请求页面时包含一个文件
我建议使用Spring MVC Framework作为操作系统的控制器。 使用url模式而不是参数。
示例:
www.yourwebsite.com/products
而不是
www.yourwebsite.com/?p=products
观看此视频Spring MVC Framework
答案 3 :(得分:7)
在页面转换时,include指令中给出的文件内容按原样“粘贴”,在使用JSP include指令的位置。然后将源JSP页面转换为java servlet类。包含的文件可以是静态资源或JSP页面。通常,JSP include指令用于包含页眉横幅和页脚。
包含jsp文件的语法:
<%@ include file="relative url">
实施例
<%@include file="page_name.jsp" %>
答案 4 :(得分:5)
1. <a href="index.jsp?p=products">Products</a>
当用户点击“产品”链接时,您可以直接调用products.jsp。
我的意思是你可以保持JSP文件的名称与参数值相同。
<%
if(request.getParameter("p")!=null)
{
String contextPath="includes/";
String p = request.getParameter("p");
p=p+".jsp";
p=contextPath+p;
%>
<%@include file="<%=p%>" %>
<%
}
%>
或
2.您可以使用键,值对维护外部资源文件。 如下所示
products : products.jsp
customer : customers.jsp
您可以以编程方式从属性文件中检索JSP文件的名称。
通过这种方式,您可以轻松更改JSP文件的名称答案 5 :(得分:0)
由于我不了解的原因,在<%@include file="includes/footer.jsp" %>
中使用index.jsp
之后,在register.jsp
之类的其他jsp文件中,我不得不使用<%@ include file="footer.jsp"%>
。如您所见,不再需要使用完整路径,STS已存储了我的初始路径。