目录
EL和JSTL的作用:
简化JSP文件上JAVA代码开发步骤
JSP主要开发任务:
- 将域对象中数据读取并写到响应体
- 在JSP文件上使用Java命令,将域对象中数据读取并写入到响应体开发步骤:
<%
String value =(String)request.getAttribute("key");
out.wirte(value);
%>
<%=value%>
- 从域对象读取数据
- 对得到得数据进行类型转换
- 将最终结果写入到响应体
EL工具包:
- 是一个由Java开发工具包
- 专门用于从域对象读取数据并写入到响应体开发任务
- 语法格式:路径格式. 类似于jQuery中选择器和过滤器语法
- EL工具包自动存在Tomcat中lib(el-api.jar),开发时,可以直接使用不需要额外倒包
EL的标准格式:
${域对象别名.关键字}:到指定域对象读取对应关键字的内容,并自动将内容写入到响应体
JSP文件中域对象:
- application:全局作用域对象
- session:会话作用域对象
- request:请求作用域对象
- pageContext:当前页作用域对象
El表达式域对象别名:
JSP | EL |
application | applicationScope |
session | sessionScope |
request | requestScope |
pageContext | pageScope |
<%
application.setAttribute("sid",10);
session.setAttribute("sname",mike);
request.setAttribute("sex",man);
pageContext.setAttribute("home",BJ);
%>
学院编号:${applicationScope.sid}<br/>
学院姓名:${sessionSope.sname}<br/>
学员性别:${requestScope.sex}<br/>
学员籍贯:${pageSope.home}
EL表达式将高级对象属性写入到响应体
${域对象别名.关键字.属性名}
EL表达式使用反射机制,通过调用当前属性对应的get方法读取属性的内容,如果不写get会报错
public calss Student{
private Integer sid;
public void getsid(){
return sid;
}
public String getSname(){
return sname;
}
public Student(Integer sid){
this.sid =sid
}
}
<%
Student stu = new Student(20);
session.setAttribute("stukey",stu);
%>
学院编号:${sessionScope.stuKey.sid}
El表达式简化版
${关键字}:可以省略域对象别名
【简化版工作原理】:
首先到【pageContext】定位关键字,如果有读取输出并结束执行,
如果【pageContext】没有找到关键字,到【request】定位关键字如果有读取输出并结束执行
如果【request】没有找到关键字,到【session】定位关键字如果有读取输出并结束执行
如果【session】没有找到关键字,到【application】定位关键字如果有读取输出并结束执行
如果【application】没有找到关键字,返回null
【弊端】
- 增加运行时间,比如数据存放在application中,使用简化版会执行相对较长的时间
- 定位错误
【使用场景】
专门为pageContext读取数据并写入响应体做准备
EL表达式支持的运算
- 数学运算
- 关系运算
- gt、ge、lt、le、eq、!=
- 逻辑运算 && || !
数学运算:
<!--制造测试数据-->
<%
pageContext.setAttribute("key1","100");
pageContext.setAttribute("key2","200")
%>
<!--Java-->
<%
String num1 =(String)pageContext.getAttribute("key1");
String num2 =(String)pageContext.getAttribute("key2");
int sum = Integer.valueOf(num1)+Integer.valueOf(num2);
%>
Java命令运算结果:<%=sum%>
<!--El表达式运算结果-->
EL表达式运算结果:${key1+key2}
关系表达式:
EL表达式不能用if,可以用三元表达式
${age>=18?"欢迎光临":"谢绝入内"}
EL表达式其他内置对象
param:
【使用】:${param.请求参数名}
【作用】:读取请求协议包参数内容
【代替】:
String value =request.getParamter("请求参数名");
out.write(value);
【应用】:
//http://localhost:8080/myWeb/index_7.jsp?uname=smith&password=123
//读取并写入到响应体中
登录名:${param.uname}<br/>
密码:${param.password}
paramValues:
【作用】:读取请求协议包中关联多个值的请求参数,将参数内容保存到数组
【使用】:${paramValues.请求参数名}
【替代】:
Sting array[] =request.getParameterValues("ck");
//http://localhost:8080/myWeb/index_7.jsp?empNo=10&empNo=20
//读取并写入到响应体中
第一个职员编号:${paramValue.empNo[0]}<br/>
第二个职员编号:${paramValues.empNo[1]}
initParam
【代替】:
String value = application.getInitParamter("driver");
out.write(value);
【使用】
来自于web.xml中共享数据:${initParam.driver}
相对路径和绝对路径
1.相对路径和绝对路径区别:
相对路径:以当前文件位置为起点,定位其他的资源文件
绝对路径:以网站根目录为期间,定位其他的资源文件
2.在实际开发中,建议使用【绝对路径】,不建议使用相对路径
3.如何禁止相对路径,如何简化绝对路径写法
<base href="/根目录/">
El表达式缺陷:
- 只能读取域对象数据,不能向域对象中写入数据更改数据
- 不支持控制语句,if判断,while循环
- 如果单独使用El表达式,无法确保JSP文件中所有的Java命令都被替换
JSTL标签工具类
【介绍】
- JSP Standrad Tag Lib:JSP中标准的标签工具类库
- 是SUN公司提供
- 组成:
- 核心标签:Java在jsp上基本功能进行封装 if while
- sql标签:JDBC在JSP上使用功能
- xml标签:DOM4J在JSP使用功能
- Format标签:JSP文件格式转换
【配置】:
- 导入依赖jar:jstl.jar standrad.jar
- 在JSP文件引入JSTL中core包依赖约束
<%@ taglib uri="http://java.sum.com/jsp/jst1/core" prefix="c"%>
【标签使用】:
<c:set>
【作用】:在JSP文件上设置域对象中共享数据
【使用】:<c:set scope="session" var="key" value="10"
【代替】:
<%
session.setAttribute("key","10");
%>
属性:
scope:指定操作的域对象别名
scope="application/session/request/page"
var:声明域对象中关键字
value:存入的共享数据
<% taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<C:set scope="application" var="sid" value="10"></c:set>
<C:set scope="session" var="sname" value="mike"/>
<C:set scope="request" var="age" value="24"/>
<C:set scope="page" var="home" value="上海"/>
学员编号:${applicationScope.sid}<br/>
学员姓名:${sessionScope.sname}<br/>
学员年龄:${requestScope.age}<br/>
学员籍贯:${pageScope.home}
<c:if>
【作用】:在JSP文件上控制哪些内容可以写入到响应体
【使用】:
<c:if test="通过EL表达式进行判断">
内容
</c:if>
<c:choose>
【作用】:在JSP文件上实现多分支选择判断,决定哪一个内容能写入到响应体
【使用】:
<c:choose>
<c:when test="EL表达式进行判断">内容1</c:when>
<c:when test="EL表达式进行判断">内容2</c:when>
<c:otherwise>内容3</c:otherwise>
</c:choose>
<c:forEach>
【作用】:循环遍历
【第一种使用方式】:
<c:forEach
var="声明循环变量名称"
begin="初始化循环变量"
end="循环变量可以接受的最大值"
step="循环变量递增值或者递减值"
>
</c:forEach>
//step属性可以不写,默认每次递增加一
//循环变量被保存在【pageContext]
【第二种使用方式】
<c:forEach
items="通过EL表达式获得域对象集合"
var="声明循环变量"
>
${循环变量.对象属性名}
</c:forEach>
遍历Map