wordpress数据库设置,苏州seo推广优化,陕西外贸英文网站建设,东营做网站tt0546板块二 JSP和JSTL#xff1a;第四节 EL表达式 一、什么是表达式语言二、表达式取值#xff08;1#xff09;访问JSP四大作用域#xff08;2#xff09;访问List和Map#xff08;3#xff09;访问JavaBean 三、 EL的各种运算符#xff08;1#xff09;.和[ ]运算符第四节 EL表达式 一、什么是表达式语言二、表达式取值1访问JSP四大作用域2访问List和Map3访问JavaBean 三、 EL的各种运算符1.和[ ]运算符2算数运算符3比较运算符4逻辑运算符5条件运算符和empty运算符 在上一节中我们学习了JSP的四大域对象可是既然这四个域对象在Servlet中可以起到一模一样的作用为什么我们还要在JSP里书写冗长的代码呢其实JSP还有秘密武器表达式语言Expression Language简称EL它可以大幅度的减少JSP里的Java代码这样来操作域对象就会变得格外优雅 一、什么是表达式语言
EL原本是JSTL 1.0为方便存储数据所自定义的语言如今以及成了JSP标准的一部分是一项成熟、标准的技术 由于JSP在整个Web程序中处于表示层主要用于显示页面内容在开发领域页面的设计会由专业的前端工作者完成通常这些设计人员对Java编程不甚了解所用的工具是HTML因此在JSP中嵌入大量的Java源代码不利于开发的效率。为了解决这个问题JSTL标记库应运而生而EL就是JSTL的基础 EL的语法结构非常简单举个栗子观察下面代码
User user (User)session.getAttribute(user);
String sex user.getSex();
out.print(sex);其作用就是从Session中得到User对象然后在网页上印user中的sex属性 如果使用EL要实现同样的逻辑进行表达就会变成这样
${sessiomScope.user.sex}它的意思是从Session作用域中取得user对象的sex属性然后在网页上打印出来怎么样是不是非常简便 其实EL的基本语法结构就是
${expression}有几点重要注意事项
EL表达式一般操作的都是域对象中的数据操作不了局部变量还记得上一节总结的四大鱼对象吗EL表达式在取域对象中的数据时范围是page-request-session-application从小到大取的一旦有同名变量就取走了如果EL表达式获取对象的值为空默认显示空字符串
二、表达式取值
1访问JSP四大作用域
EL表达式取四个作用域里的值有对应的名称
作用域名称PagepageScopeRequestrequestScopeSessionsessionScopeApplicationapplicationScope
实例在hello.jsp中写入测试代码分别在Session和Application作用域中存取数据
% page contentTypetext/html;charsetUTF-8 languagejava %
htmlbody%session.setAttribute(sessMsg,这里是session作用域);application.setAttribute(appMsg,这里是application作用域);%${sessionScope.sessMsg} br${applicationScope.appMsg}/body
/html启动服务器在浏览器中访问hello.jsp可得
2访问List和Map
在表达式中可以用${list[num]}来直接访问List中的某位元素list是数组的自定义名字 实例在hello.jsp中写入
% page importjava.util.List %
% page importjava.util.ArrayList %
% page contentTypetext/html;charsetUTF-8 languagejava %
htmlbody%// ListListString list new ArrayList();list.add(aaa);list.add(bbb);list.add(ccc);request.setAttribute(list, list);%// list是数组的名字获取List的size:${list.size()}br获取List的指定下标的值:${list[1]}br/body
/html启动服务器在浏览器中访问hello.jsp可得 同样可以用${map.}、${map[]}来直接访问Map中的某对键值对map是数组的自定义名字 实例在hello.jsp中写入
% page importjava.util.HashMap %
% page importjava.util.Map %
% page contentTypetext/html;charsetUTF-8 languagejava %
htmlbody%// MapMap map new HashMap();map.put(aaa,111);map.put(bbb,222);map.put(ccc,33);request.setAttribute(map,map);%获取Map的某对键值对${map.aaa} br获取Map的某对键值对${map[bbb]}/body
/html启动服务器在浏览器中访问hello.jsp可得
在代码中我们发现实际上List和Map是存在Request作用域中的但在用表达式取值时居然没有写requestScope.前缀也能拿到其实此时表达式访问List和Map是在四个作用域中由从小到大的范围寻找的所以也可以省略作用域前缀如果加上前缀就是只在指定作用域中寻找
3访问JavaBean
JavaBean一般由Servlet实例化由JSP显示其中的内容 什么你问我什么是JavaBean?举个栗子你肯定见过简单来说就是一个public修饰的Java类里面定义了几个private属性并且提供了属性相应的get/set方法(如果boolean 则get可以替换成is)它就是JavaBean 实例 在com.caijiyuan包下新建一个User类写入两个属性并且altins生成两个属性的get/set方法 再添上一个User类的带参构造函数总体代码如下
package www.caijiyuan;public class User {private Integer userId;private String uname;public User(Integer userId, String uname) {this.userId userId;this.uname uname;}public Integer getUserId() {return userId;}public void setUserId(Integer userId) {this.userId userId;}public String getUname() {return uname;}public void setUname(String uname) {this.uname uname;}
}
在hello.jsp中new一个user实例并且传参别忘了把实例放在Request作用域里
% page importwww.caijiyuan.User %
% page contentTypetext/html;charsetUTF-8 languagejava %
htmlbody%// UserUser user new User(1959,Toomynike);request.setAttribute(user,user);%获取User的名字${user.uname} br获取User的ID${user.userId}/body
/html启动服务器在浏览器中访问hello.jsp可得
三、 EL的各种运算符
1.和[ ]运算符
EL 提供.和[]两种运算符来存取数据。当要存取的属性名称中包含一些特殊字符就只能使用 []例如这样书写是错误的
${user.My-Name}必须写成
${user[My-Name] }如果要动态取值时也必须用[]来做.无法做到动态取值例如data是一个变量时
${sessionScope.user[data]}2算数运算符
它们也是直接写在${}中会直接将运算结果打印出来
算数运算符说明实例打印的结果加${102}12-减${10-2}8*乘${10*2}20/或div除${10/4}或${10div2}2.5%或mod取模${10%4}或${10mod2}2
3比较运算符
比较运算符返回bool类型
算数运算符说明实例打印的结果或eq等于${102}或${10 eq 2}false! 或 ne不等于${10!2} 或 ${10 ne 2}true或lt小于${102}或${10 lt 2}false或gt大于${102}或${10 gt 2}true或le小于等于${102}或${10 le 2}false 或ge大于等于${10 2}或${10 ge 2}true
4逻辑运算符
逻辑运算符也是返回bool类型
算数运算符说明实例打印的结果或and逻辑与${true false}或者{ture and false}false丨丨或or逻辑或${fasle 丨丨 true}或者{false or true}true!或not逻辑非${!true}或${not ture}false
5条件运算符和empty运算符
条件运算符 A为真则返回B否则返回C
${A?B:C}empty运算符
A为null\空字符串\空数组返回true否则返回false
${empty A}以上就是此小节的全部内容学会了EL让我们的JSP格外优雅下一节开始我们将学习JSTL让JSP既优雅又强大