标签:jsp页面 获取数据 算术 常量 javaee 开发人员 磁盘 use 方法
一。标签技术
1. 标签技术概述
在jsp页面中有HTML语句和java语句相互嵌套,如果java的逻辑代码和页面的HTML组成代码都十分复杂,两者有掺杂在一起,页面的可读性和可维护性都将降低。为了解决这个问题,产生了标签技术。用它来替换页面中的java语句,这样页面中只会出现HTML代码,整体的可读性和可维护性都会提升。
2. 常用的JSP标签技术
jsp标签
sun公司提供的标签技术 - 目前用的比较少
el表达式
便捷易用 - 使用非常广泛 - 但只是表达式无法实现复杂功能
jstl标签库
提供了大量强大的标签支持,是目前应用最广泛的标签库
自定义标签
sun提供的标签库开发接口,允许开发人员自己来开发特定功能的标签 - 通常用在框架级别的开发中,普通开发人员很少使用
其他第三方标签
二。EL表达式
1. EL表达式概述
EL Expression Language 表达式语言
在jsp页面内的<%= JSP脚本表达式%> 都可以使用EL表达式来替换。
EL具有获取数据、执行运算、获取常用开发对象、调用java方法这四方面的功能
在javaee5及其以上版本中,都已经默认包含了el表达式的相关开发包,无需手动导入。
2. 使用方式
语法:${ el表达式 }
可以获取常量、变量、数组、列表、映射、javabean等中的数据
3. EL特点:
EL表达式不能设置值,只能获取值
EL表达式只能获取域中的属性
EL表达式不能遍历
在jsp脚本表达式中使用p.getXxx()方法获取的数据,在el表达式中都可以使用${p.xxx}的方式来获取。详情往下面看
获取常量
<hr><h1>EL获取常量</h1> <%= 123 %> ${123 } <%= 123.321 %> ${123.321 } <%= "abc" %> ${"abc" } <%= true %> ${true } <%= false %> ${false }
获取变量
a.获取指定域中的属性
<h3>el表达式获取域中的变量</h3> <% pageContext.setAttribute("name", "朴大胖", PageContext.APPLICATION_SCOPE); //设置Application域的变量 pageContext.setAttribute("name", "曹二胖", PageContext.SESSION_SCOPE); pageContext.setAttribute("name", "李三瘦", PageContext.REQUEST_SCOPE); pageContext.setAttribute("name", "丽丽", PageContext.PAGE_SCOPE); %> <%=pageContext.getAttribute("name") %> //获取pageContext域中的属性 <%=request.getAttribute("name") %> <%=session.getAttribute("name") %> <%=application.getAttribute("name") %> ${pageScope.name} ${requestScope.name} ${sessionScope.name } ${applicationScope.name }
el表达式中的四大作用域-----分别对应jsp表达式中scope对域的区分
el表达式 |
jsp脚本表达式(pageContext设置域属性的时候用到) |
pageScope |
PAGE_SCOPE |
requestScope |
REQUEST_SCOPE |
sessionScope |
SESSION_SCOPE |
applicationScope |
APPLICATION_SCOPE |
c. 获取变量 - 自动搜寻域
当通过el获取变量时,el会自动在四大作用域中按照由小到大的顺序搜寻指定名称的域属性,一旦获取直接返回,如果四大作用域中都没有找到,则返回一个空字符串
<h3>自动搜寻域</h3> <%=pageContext.findAttribute("name") %> ${name}
d.获取数组中的数据
<h3>获取数组中数据</h3> <% String[] names ={"殷天正","谢逊","韦一笑","黛绮丝"}; pageContext.setAttribute("names", names); //el只能读取域中的元素 %> ${names[0]} //殷天正 ${names[1]} //谢逊 ${names } //数组地址值
e.获取链表中的数据
<h3>获取链表中的数据</h3> <% List<String> list = new LinkedList<String>(); list.add("aaa"); list.add("bbb"); list.add("ccc"); pageContext.setAttribute("l", list); %> ${l[0]} //aaa ${l} //["aaa","bbb","ccc"]
f.获取映射中的数据
<h3>获取映射中的数据</h3> <% Map<String,String> map = new HashMap<String,String>(); map.put("name", "曹洋"); map.put("age", "18"); map.put("wife","丽丽"); map.put("addr", "安徽"); request.setAttribute("map", map); request.setAttribute("w", "wife"); %> ${map} //{wife=丽丽, age=18, name=曹洋, addr=安徽} ${map.name} //曹洋 ${map["wife"] } //丽丽 [wife]: ${map[w]} // [wife]: 丽丽
g. 获取javabean中的数据
在一个类中,如果存在私有化属性,这些属性包含get或set任意一个方法,则这些私有化的属性就可以称之为javabean属性,类中存在这些属性,这个类就是javabean的类。 javabean会自动实现序列化接口 Serializable ,实现序列化接口就可以向磁盘上写入东西了
<h3>获取javabean中的数据</h3> <% Person p = new Person("曹洋",18,"女"); pageContext.setAttribute("p",p); %> <%=p.getName() %> ${p.name} //此处的name式getName() 去掉get N小写 去掉方法括号
i. 在jsp脚本表达式中使用p.getXxx()方法获取的数据,在el表达式中都可以使用${p.xxx}的方式来获取。
ii. 如果javabean中的getXxx()方法发生了修改,则el表达式也要随之修改。
例如:
getName() ${p.name}
getNamex() ${p.namex}
6. 获取执行运算的结果
a. 算术运算
<h4>算术运算</h4>
${3+2} <!-- 5 --> ${3-2} <!-- 1 --> ${3/2 } <!-- 1.5 --> ${3*2 } <!-- 6 --> ${3%2 } <!--1 --> ${3+"2"} <!-- 5 --> ${3-"2" } <!-- 1 --> <!-- ${3+"a" } 运算报错 -->
能运算就运算,数值型不能和字母型的加减乘除
b. 关系运算
<h4>关系运算</h4>
${3>2 }
${3<2 }
${3==2 }
${3!=2 }
${3>=2 }
${3<=2 }
c. 逻辑运算
<h4>逻辑关系</h4>
${true && false }
${true and false }
${true || false }
${true or false }
${!true }
${not true }
d. empty运算
empty运算用于判断当前域中属性是否为空。
Empty运算规则:如果对象为null 字符串为空 集合、数组、映射没有任何元素 empty操作都会返回true,否则false
<h4>empty运算</h4> <% String str = null; pageContext.setAttribute("str", str); String s =""; pageContext.setAttribute("s", s); String[] names = {}; pageContext.setAttribute("names", names); List list = new LinkedList(); pageContext.setAttribute("list", list); Map<String,String> map = new HashMap(); pageContext.setAttribute("mapx", map); List listx = new LinkedList(); listx.add("abc"); pageContext.setAttribute("listx", listx); %> ${empty str } true ${empty s } true ${empty names} true ${empty list } true ${empty mapx } true ${empty listx } false
e. 三元表达式运算
<h4>三元表达式</h4> <% Map<String,String> mapx = new HashMap(); mapx.put("name", ""); pageContext.setAttribute("mapx", mapx); %> ${empty mapx.name?"曹洋":mapx.name} //曹洋
5. EL获取常用开发对象 - 11个内置对象
EL内置了11个内置对象,不需要提前存入域就可以直接在EL中使用。注意这和jsp的9打隐式对象没有任何关系。
a. 代表作用域的EL内置对象
pageScope |
代表PageContext域 |
requestScope |
代表Request域 |
sessionScope |
代表Session域 |
ApplicationScope |
代表ServletContext域 |
b. 代表请求参数的内置对象
param |
代表当前请求中全体请求参数组成的Map<String,String> |
paramValues |
代表当前请求中全体请求参数组成的Map<String,String[]> |
request.getParameter("username")
${param.username}
c. 代表web应用的初始化参数的EL内置对象
initParam |
代表当前web应用初始化参数的内置对象 |
就是ServletContext对象的getInitParameter(String attr),在jsp中就是application.getInitParameter(String attr),如果用el表达式就是${initParam.attr} 获取的是全局配置信息
initParam.url
d. 代表请求头的EL内置对象
header |
代表请求中所有请求头组成的Map<String,String>的内置对象 |
headerValues |
代表请求中所有请求头组成的Map<String,String[]>的内置对象 |
request.getHeader("host")
${header.host}
e. 代表请求中所有cookie组成的Map的内置对象
cookie |
代表请求中所有cookie组成的Map<String,Cookie> |
cookie.JSESSIONID.name
cookie.JSESSIONID.value
f. 代表当前页面的PageContext对象
pageContext |
代表当前页面的PageContext对象,通过它可以获取所有jsp9大隐式对象 |
<%=request.getContextPath()%> 这里获取到的request不是request域对象,requestScope才是,这里的只是request对象
${pageContext.request.contextPath}
标签:jsp页面 获取数据 算术 常量 javaee 开发人员 磁盘 use 方法
原文地址:https://www.cnblogs.com/xuwangqi/p/11370189.html