JSP中EL表达式的使用

感谢原文作者:Mr_J316
原文链接:https://www.jianshu.com/p/52764edd1713

EL(Expression Language)表达式并不是通用的程序设计语言,仅是一种数据访问语言,可以在JSP中方便地访问Java数据。

示例:${expression}

EL隐式对象列表

类别 标识符 描述
JSP pageContext 当前页面
作用域 pageScope 页面作用域
- requestScope 请求作用域
- sessionScope 会话作用域
- applicationScope 应用程序作用域
请求参数 param 存储请求参数
- paramValues 将请求参数的所有值作为 String 数组存储
请求头 header 按名称存储请求头
- headerValues 将请求头的所有值作为 String 数组存储
Cookie cookie 按名称存储请求附带的 cookie
初始化参数 initParam 按名称存储 Web 应用程序上下文初始化参数

EL数据访问

作用域对象

applicationScope:用来取得application范围属性值。

sessionScope:用来取得session范围属性值。

requestScope:用来取得request范围属性值。

pageScope:用来取得page范围属性值。

这些隐式对象对应于JSP中的pageContext,request,session,application,只用来读取属性值。

//创建对象,分别放进不同作用域
User myUser = new User("0001", "张三", 20);
pageContext.setAttribute("currentUser", myUser);
request.setAttribute("currentUser", myUser);
session.setAttribute("currentUser", myUser);
application.setAttribute("currentUser", myUser);

//读取不同范围的值
page范围:${pageScope.currentUser.name}<br />
request范围:${requestScope.currentUser.name}<br />
session范围:${sessionScope.currentUser.name}<br />
application范围:${applicationScope.currentUser.name}<br />
不指定范围:${currentUser.name}
如果不指定范围,默认会从page范围内找,如果找不到,再依次到request、session、application范围中找。如果没有找到就返回null。

读取集合或map

//存入集合
ArrayList<User> lists = new ArrayList<User>();
lists.add(new User("0001", "张三", 20));
lists.add(new User("0002","李四",30));
session.setAttribute("userList", lists);   

//存入map
Map<String,User> map = new HashMap<String,User>();
map.put("user1", new User("0001","张三",20));
session.setAttribute("currentUser", map);

// 读取集合
${userList[0].name}<br />
${userList[1].name}<br />
    
// 读取map
${currentUser.user1.name}<br />  

请求参数对象

//在EL之前使用如下代码取得请求参数
request.getParameter(name);
request.getParameterValues(name);

//在EL中使用如下隐式对象取得请求参数
param:接收的参数只有一个值。
paramValues:接受的参数有多个值。

示例:

<form method="post" action="buyMessage.jsp">    
      <p>
         请选择您要购买的商品:
      </p> 
      <p>
         <input type="checkbox" name="goods" value="手机"/>手机
      </p>   
      <p>
         <input type="checkbox" name="goods" value="电脑"/>电脑
      </p>
      <p>
         <input type="checkbox" name="goods" value="空调"/>空调
      </p>
      <p>
         请输入收货地址:<input type="text" name="address" />
      </p>
      <input type="submit" value="确定" />
</form>

<!--获取前一页面请求中的值 -->
<body>
  <%
     request.setCharacterEncoding("utf-8");
  %>
    您选择的商品是:
  <p></p>
  ${paramValues.goods[0]}<p></p>
  ${paramValues.goods[1]}<p></p>
  ${paramValues.goods[2]}<p></p>
   您的收货地址是:
  <p></p>
  ${param.address}
  <p></p>
  <input type="button" value="下一步" />
  <input type="button" value="返回上一步" />
</body>

Cookie对象

// 颁发Cookie
Cookie c = new Cookie("username", "admin");
response.addCookie(c);
// 获取cookie
${cookie.username.value }

EL运算符

算术运算符

算术运算符 说明 示例 结果
+ ${1 + 1} 2
- ${1 - 1} 0
* ${1 * 2} 2
/或div ${3 / 2} 1.5
%或mod 取余 ${3 % 2} 1

关系运算符

关系运算符 说明 示例 结果
= = 或 eq 等于 在这里插入图片描述 {1 eq 1} true
!= 或ne 不等于 在这里插入图片描述 {1 ne 1} false
< 或 lt 小于 在这里插入图片描述{1 lt 1} true
> 或 gt 大于 在这里插入图片描述 {1 gt 1} false
<= 或 le 小于或者等于 在这里插入图片描述{1 le 1} true
>= 或 ge 大于或者等于 在这里插入图片描述 {1 ge 1} false

逻辑运算符

逻辑运算符 说明 示例 结果
&& 或 and 交集 在这里插入图片描述{A and B} 当A和B都为true时为true,其他情况为false
|| 或 or 并集 在这里插入图片描述 {A or B} 当A和B都为false时为false,其他情况为true
! 或 not 在这里插入图片描述{not A} 当A为true时,为false 当A为false时,为true

条件运算符

${表达式1 ? 表达式2 : 表达式3} // 与java用法相同
${currentUser.name=="admin"?"管理员":"普通用户"}

验证运算符

${empty 表达式}

返回布尔值判断表达式是否为"空"值,null值、无元素的集合或数组、长度为零的String被认为是空值。

在JS中使用EL

在本页面中使用EL

<%
   session.setAttribute("username", "admin");
%>

<script>
    alert("${username}");
</script>

在外链JS文件中引用EL

必须在当前页面的JS脚本中定义变量存放EL表达式,然后在外部JS文件中引用该变量。

<%
   session.setAttribute("username", "admin");
%>

<script src="js/function.js"></script>
<script>
   var username="${username}";
   myFun();
</script>

//外联js文件
function myFun(){
    alert(username);
}

补充
https://www.runoob.com/jsp/jsp-expression-language.html
https://www.jb51.net/article/107468.htm
https://www.jb51.net/article/105314.htm
https://www.jb51.net/article/111703.htm

posted @ 2020-04-06 15:44  超级小白龙  阅读(326)  评论(0编辑  收藏  举报