1.JSP标签技术
在jsp页面中写入大量的java代码会导致html和java代码混杂在一起,造成页面的混乱,难于维护
sun公司提出了jsp标签技术,推荐使用jsp标签技术代替java代码,并推荐在jsp页面中不要出现任何一行java代码
1.1.EL表达式
EL表达式用来代替jsp表达式
EL表达式用来获取数据,结构:${ 表达式 }
获取数据:
根据属性的key获取value
在获取属性时,如果该属性不存在,则不会显示任何东西
注意:EL表达式获取数据时,只能从四大域中获取
获取顺序为:pageContext->request->session->ServletContext
运算:
empty:判断属性是否为空,返回值为boolean
EL表达式内置了11个对象,可以拿来直接使用
内置对象 | 说明 |
pageContext | 可以获取其他八大隐式对象 |
pageScope | 获取pageContext域属性,相当于pageContext.getAttribute("xxx") |
header | 对应请求头,它是一个Map,其中key表示头名称,value是单个头值,适用于单值的请求头,相当于request.getHeader("xxx") |
headerValues | 对应请求头,它是一个Map,其中key表示头名称,value是多个头值,适用于多值的请求头,相当于request.getHeaders("xxx") |
requestScope | 获取request域属性,相当于request.getAttribute("xxx") |
sessionScope | 获取session域属性,相当于session.getAttribute("xxx") |
applicationScope | 获取application域属性,相当于application.getAttribute("xxx") |
initParam | 获取web.xml中<context-param>内的参数,${ initParam.xxx},xxx就是<param-name>标签内的值,进而得到<param-value>中的值 |
paramValues | 对应参数,她是一个Map,其中key是参数,value是多个参数值,适用于多值的参数,相当于request.getParameterValues("xxx") |
param | 所有的请求参数组成的map:获取请求参数:${param.username} |
cookie | 所有请求中的cookie组成的map,key为cookie的name,value为cookie对象本身 如:${cookie.time.value} |
//示例一:jsp中的代码示例,定义了字符串str,str2
String str1 = "域属性1";
String str2 = "域属性2";
//2.存入域对象
session.setAttribute("str",str1);
//key 重复,按照优先级取值
request.setAttribute("str",str2);
//如果,设置值时,设置的名称相同,则
//应该按照四大域的优先级获取,如下代码优先获取request的str2
${str}
//输出信息是:域属性2
//
//示例二
<%--指定域获取数据,不会再按照优先级去取了,如下已经指定是在session 中取--%>
${sessionScope.str}
//输出的信息是:域属性1
1.2.JSTL标签库
JSTL标签库是用来代替jsp脚本片段
JSTL标签库有很多字库:
- 核心标签
- 格式化标签
- SQL 标签
- XML 标签
- JSTL 函数
导入核心标签库步骤:
导入jar包:将jstl相关jar包拷贝到web/WEB-INF/lib目录下,然后add as library…
添加taglib指令
<%@taglib uri="http://java.sun.com/jsp/jstl/core"prefix="c"%>
常用标签:
<c:set>:向指定域中存入数据
<c:if>:条件标签
<c:forEach>:遍历
${param.username}
<%--JSTL 标签库--%>
<c:set var="phone" value="13325654587" scope="request"></c:set>
${phone}
<c:if test="${3>2}">大于</c:if>
<c:if test="${!(3>2)}">小于</c:if>
<c:if test="${empty user}"> 请登陆 </c:if>
<c:if test="${!(empty user)}"> 欢迎${user.username}回来 </c:if>
<c:forEach items="${strs}" var="name">
${name}<br/>
</c:forEach>