解决${xxx}赋值给js变量时取不到值的问题

问题

最近开发时,在用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
        "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
        "http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>

把它改成3.0版本之后问题终于解决了。

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xmlns="http://java.sun.com/xml/ns/javaee"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
         id="WebApp_ID" version="3.0">
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 概要 64学时 3.5学分 章节安排 电子商务网站概况 HTML5+CSS3 JavaScript Node 电子...
    阿啊阿吖丁阅读 9,974评论 0 3
  • 前端开发面试题 面试题目: 根据你的等级和职位的变化,入门级到专家级,广度和深度都会有所增加。 题目类型: 理论知...
    怡宝丶阅读 2,710评论 0 7
  • 朝阳初升 晨间漫步 面带微笑 迎接美好生活 夕阳西下 邀三两好友 廊下浅酌 笑看人生百态 暮色四合 仰卧屋顶 共赏...
    独孤白晴阅读 274评论 0 0
  • 亲爱的妹妹,我是上个世纪九七年生人,也是大家口中的正宗的九五后。 我们这一代人,生于世纪之末,长于新世纪之初,我想...
    调动阅读 455评论 0 1
  • 蝶舞花丛 秀一场春的妩媚 留不住四时的轮回 蝉鸣高树 热闹了整个盛夏 穿不透苍茫如幕的光阴 落叶归根 话尽秋的肃穆...
    诵安阅读 398评论 0 1

友情链接更多精彩内容