使用<jsp:include>,不想写死URL,动态生成URL的解决办法

本文介绍了JSP中如何实现动态页面包含,通过示例代码详细解释了如何利用JSP脚本动态生成页面路径,以便根据不同条件包含不同页面。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

JSP中文件包含有2种方式,静态包含和动态包含。静态包含使用<%@ include file="" %>,动态包含使用<jsp:include page="" />。本文不打算介绍这2种方式的区别和使用场景,主要关注page和file属性的路径问题。

如果事先知道被包含页面的url,那么直接写死到page或file属性中即可。这种写死url的方式,没有什么不好,但是非常不灵活,不能满足动态生成url的需求。考虑这种场景,A.jsp访问B.jsp,传递一个id参数值,B.jsp需要根据id的值,包含不同的页面。当然,我们可以通过n多的if-elseif来实现,但这种方式不灵活,有些时候甚至是根本不可能的事。

如果想要实现动态包含,最简单也是最合理的解决方式如下:

<jsp:include page="<%=request.getContextPath()%>/message/<%=request.getParameter("id")%>/.targetjsp"></jsp:include>

但是这种方式不行,容器不会解析page中的jsp脚本。但经过试验,

<jsp:include page="<%=request.getParameter("id")%>"></jsp:include> 这种方式,是能够正常解析参数值的。

于是我们可以得出结论:page属性要么完全是写死的常量URL,要么全是动态的java脚本,2种方式不能混搭

 

<% String urlPath = "/message/plugins/smsplugin_" + request.getParameter("type")+ "/add.jsp";%>
<jsp:include page="<%=urlPath %>"></jsp:include>

像这种方式,能够借助java脚本的灵活性,实现任意复杂的判断逻辑。

 

参考资料:http://dangry.iteye.com/blog/868422/

 

<%-- Created by IntelliJ IDEA. User: vili Date: 2019/8/24 Time: 17:09 To change this template use File | Settings | File Templates. --%> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <%@page isELIgnored="false" %> <!DOCTYPE html> <html> <head> <title>后台管理</title> <link rel="stylesheet" href="css/bootstrap.css"/> </head> <body> <div class="container-fluid"> <jsp:include page="header.jsp"></jsp:include> <br><br> <div class="alert alert-success" role="alert">欢迎进入叮当书城后台管理系统!</div> </div> </body> </html> <%-- Created by IntelliJ IDEA. User: vili Date: 2019/8/23 Time: 13:42 To change this template use File | Settings | File Templates. --%> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@page isELIgnored="false" %> <!--header--> <div class="header"> <div class="container"> <nav class="navbar navbar-default" role="navigation"> <div class="navbar-header"> <button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1"> <span class="sr-only">Toggle navigation</span> <span class="icon-bar"></span> <span class="icon-bar"></span> <span class="icon-bar"></span> </button> <h1 class="navbar-brand"><a href="index.action">叮当书城</a></h1> </div> <!--navbar-header--> <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1"> <ul class="nav navbar-nav"> <li><a href="index.action" <c:if test="${param.flag==1}">class="active"</c:if>>首页</a></li> <li class="dropdown"> <a href="#" class="dropdown-toggle <c:if test="${param.flag==2}">active</c:if>" data-toggle="dropdown">商品分类<b class="caret"></b></a> <ul class="dropdown-menu multi-column columns-2"> <li> <div class="row"> <div class="col-sm-12"> <h4>商品分类</h4> <ul class="multi-column-dropdown"> <li><a class="list" href="booktypes_list.action?pageNumber=1&btid=-1">全部系列</a></li> <c:forEach items="${bookTypes}" var="t"> <li><a class="list" href="booktypes_list.action?pageNumber=1&btid=${t.btid}">${t.btname}</a></li> </c:forEach> </ul> </div> </div> </li> </ul> </li> <li><a href="recommend_books.action?rtype=2&pageNumber=1" <c:if test="${param.flag==3 && t==2}">class="active"</c:if>>热销</a></li> <li><a href="recommend_books.action?rtype=3&pageNumber=1" <c:if test="${param.flag==3 && t==3}">class="active"</c:if>>新品</a></li> <c:choose> <c:when test="${empty user }"> <li><a href="user_register.jsp" <c:if test="${param.flag==10 }">class="active"</c:if>>注册</a></li> <li><a href="user_login.jsp" <c:if test="${param.flag==9 }">class="active"</c:if>>登录</a></li> </c:when> <c:otherwise> <li><a href="order_list.action" <c:if test="${param.flag==5 }">class="active"</c:if>>我的订单</a></li> <li><a href="user_center.jsp" <c:if test="${param.flag==4 }">class="active"</c:if>>个人中心</a></li> <li><a href="logout.action" >退出</a></li> <li><a href="admin/index.jsp" target="_blank"><c:if test="${param.flag==1 }"></c:if>后台管理</a></li> </c:otherwise> </c:choose> </ul> <!--/.navbar-collapse--> </div> <!--//navbar-header--> </nav> <div class="header-info"> <div class="header-right search-box"> <a href="javascript:;"><span class="glyphicon glyphicon-search" aria-hidden="true"></span></a> <div class="search"> <form class="navbar-form" action="search_books.action"> <input type="hidden" name="pageNumber" value="1"/> <input type="text" class="form-control" name="keyword"> <button type="submit" class="btn btn-default <c:if test="${param.flag==7 }">active</c:if>" aria-label="Left Align">搜索</button> </form> </div> </div> <div class="header-right cart"> <a href="book_cart.jsp"> <span class="glyphicon glyphicon-shopping-cart <c:if test="${param.flag==8 }">active</c:if>" aria-hidden="true"><span class="card_num"><c:choose><c:when test="${empty order}">0</c:when><c:otherwise>${order.itemMap.size()}</c:otherwise></c:choose></span></span> </a> </div> <div class="clearfix"> </div> </div> <div class="clearfix"> </div> </div> </div> <!--//header--> 使导航栏上的后台管理与后台管理页面连接,输出相关代码
最新发布
06-21
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值