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/