使用不想写死URL,动态生成URL的解决方法

使用<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/