包含另一个 JSP 文件

我目前正在尝试学习 JSP。我的问题是,目前我通常使用以下方式来包含页面的页眉和页脚:

<%@include file="includes/header.jsp" %>

还有

<%@include file="includes/footer.jsp" %>

但是现在,我把页面内容也分开了。因此,如果用户点击一个页面,比如说产品,它必须加载位于: includes/pages/products.jsp中的 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()

519263 次浏览

1. 当用户单击 Products 链接时,可以直接调用 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%>" %>


<%
}
%>

或者

可以使用键、值对维护外部资源文件。 比如下面

products : products.jsp

customer : customers.jsp

可以通过编程方式从属性文件检索 JSP 文件的名称。

通过这种方式,您可以轻松地更改 JSP 文件的名称

您正在做的是一个静态包含。静态包含是在编译时解析的,因此可能不使用参数值,而参数值只有在执行时才知道。

您需要的是一个动态的包含:

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

注意,应该使用 JSPEL 而不是 scriptlet。您似乎还在用 index.jsp 实现一个中央控制器。您应该使用一个 servlet 来完成这项工作,然后从这个 servlet 调度到适当的 JSP。或者更好的方法是使用现有的 MVC 框架,如 Stripes 或 Spring MVC。

你可以使用 包括指令

<%
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"%>"/>


<%
}
%>

不同的是,头文件在翻译阶段包含一个文件。 而 JSP 包含操作在请求页面时包含一个文件

我推荐使用 SpringMVC 框架作为控制器来操作事物。 使用 url 模式代替参数。

例如:

www.yourwebsite.com/products

而不是

www.yourwebsite.com/?p=products

观看这个视频 Spring MVC 框架

在翻译页面的时候,头文件中给出的文件内容已经“粘贴”到了使用 JSP 头文件的位置。然后,将源 JSP 页面转换为 java servlet 类。包含的文件可以是静态资源或 JSP 页面。一般来说,JSP 头文件包括页眉横幅和页脚。

用于包含 jsp 文件的语法:

<%@ include file="relative url">

例子

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

您可以使用这样的参数

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

还有

在 about. jsp 中,您可以获取参数

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

由于一个我还不明白的原因,在我在我的 index.jsp中使用了 <%@include file="includes/footer.jsp" %>之后,在其他的 jsp 文件中,比如 register.jsp,我不得不使用 <%@ include file="footer.jsp"%>。正如你所看到的,没有更多的需要使用完整的路径,STS 已经存储了我的初始路径。