问题
最近开发时,在用JSP页面中有如下代码:
<%
request.setAttribute("contextPath",request.getContextPath());
%>
<script>
var Global={};
Global.contextPath='${contextPath}';
</script>
按照正常的执行结果,Global.contextPath应该被赋值为request对象的contextPath属性值,也就是当前项目的上下文路径,但是当我使用console.log(Global.contextPath)
进行输出时,却只显示${contextPath}
,也就是说没有取到contextPath属性的值,只是把${contextPath}当初字符串输出了。
这个问题让我有些郁闷,明明之前的项目中一模一样的代码都没问题,为啥到我这就不行了呢?在查阅了很多资料,反复测试了很久之后我才终于找到了问题的所在。
解决方案
造成上述代码赋值失败的原因其实并不在于代码逻辑上的错误,而其实是一个很容易被忽略的问题:web.xml的web-app元素声明的版本号太低,必须是2.4以上的版本才能够在js中解析request属性并赋值给js变量。
于是我又检查了一下我的web.xml文件,果然版本是2.3,低于2.4,这是IDEA中maven web工程默认生成的版本,也算是一个大坑了。
<!DOCTYPE web-app PUBLIC
"