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

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/

上一篇:面试官问:JS的this指向


下一篇:面试常问的Java虚拟机内存模型,看这篇就够了!