包括另一个JSP文件


161

我目前正在尝试学习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有点困惑。:(


1
为什么不在那里硬编码页面名称?无论如何,您都在检查P,那么您知道目标页面将是p.jsp,那么有什么复杂的理由吗?
科萨2012年

感谢回复。这是一个例子。实际上,我已将页面分为几部分。例如,如果我在管理区域中具有“产品”页面,则可以添加新产品,编辑产品,搜索产品,查看产品等。它分为多个子页面。因此,对每行进行硬编码看起来很讨厌。说,只显示我的名字10次,我可以选择使用循环打印或写下10行。但是我认为选择循环更好。是不是 我想,这可能是解决方案:stackoverflow.com/questions/482788/...
Akhilesh乙伊尔

Answers:


231

您正在执行的是静态包含。静态包含将在编译时解析,因此可能不使用仅在执行时才知道的参数值。

您需要的是动态包括:

<jsp:include page="..." />

注意,您应该使用JSP EL而不是scriptlet。似乎您正在用index.jsp实现中央控制器。您应该使用servlet代替,并从该servlet调度到适当的JSP。或者,最好使用现有的MVC框架,例如Stripes或Spring MVC。


1
感谢您的建议。:)我尝试使用jsp:include标记。但是在运行时,它给出了文件未找到错误。例外详情:java.io.FileNotFoundException: /includes/&lt;%= p %&gt;.jsp。看起来像<%= p %>在文件路径中一样被使用了!
Akhilesh B Chandran

7
不要使用脚本。使用JSP EL:page =“ / includes / $ {param.p}”。或尝试使用page =“ <%=” / includes /“ + p%>”。
JB Nizet

3
谢谢。我是这样使用的:<jsp:include page="<%= "includes/" + p + ".jsp" %>" />它现在可以工作了:)
Akhilesh B Chandran

2
很好的答案!我已经看到过这种模式(index.jsp中的中央控制器)太多次了,它总是会带来麻烦。
Matthias Hryniszak

那不是翻译时间吗?而且我认为您仍然可以使用参数吗?
Koray Tugay 2014年

26

您可以使用类似的参数

<jsp:include page='about.jsp'>
    <jsp:param name="articleId" value=""/>
</jsp:include>

在about.jsp中,您可以采用参数

<%String leftAds = request.getParameter("articleId");%>

18

您可以使用包含指令

<%
 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作为您操作事物的控制器。使用网址格式代替参数。

例:

www.yourwebsite.com/products

代替

www.yourwebsite.com/?p=products

观看此视频Spring MVC Framework


1
该视频受保护..请分享给公众
AutoMEta 2013年

您可以检查第一个示例是否真的有效吗?我似乎无法正常工作。
Jus12 2013年

8

在页面转换时,在使用JSP include指令的地方,include指令中给出的文件内容按原样“粘贴”。然后将源JSP页面转换为Java servlet类。包含的文件可以是静态资源或JSP页面。通常,JSP include指令用于包含标头横幅和页脚。

包含jsp文件的语法:

<%@ include file="relative url">

<%@include file="page_name.jsp" %>

6

1. <a href="index.jsp?p=products">Products</a>当用户单击“产品”链接时,可以直接调用products.jsp。

我的意思是,您可以将JSP文件的名称与参数Value保持相同。

<%
 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文件的名称


谢谢。我目前正在使用第一件事。实际上,我在执行此操作时遇到了问题!
Akhilesh B Chandran

org.apache.jasper.JasperException: /admin.jsp(239,44) PWC6117: File "/<%=p%>" not found。那对你有用吗?
Akhilesh B Chandran

这是与路径相关的问题,检查文件是否在您的路径中,我想您缺少的上下文路径(应该是include / admin.jsp)。我没有模拟过我的身边
Balaswamy Vaddeman,2012年

1
我尝试回显“ p”的值。是:includes/add.jsp。然后将其用于include导数:中<%@ include file="includes/add.jsp" %>。它显示页面内容。但是,如果我改用此行:<%@ include file="<%=p%>" %>,则显示异常!
Akhilesh B Chandran

嗨,我有同样的问题。出错File "<%=p%>" not found。如果我将使用实际价值,那是可行的。
Reddy SK

0

对于原因,我还不知道,我用了之后<%@include file="includes/footer.jsp" %>index.jsp再在其他jsp文件就像register.jsp我不得不使用<%@ include file="footer.jsp"%>。如您所见,不再需要使用完整路径,STS已存储了我的初始路径。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.