EL与JSTL
EL与JSTL的作用:
简化JSP问价上java代码开发步骤
二。jsp主要开发作用
将域对象中数据读取并写入到响应体
三。在jsp文件上使用java命令,将域对象中数据读取并写入到响应体开发步骤
<% String value = (String)request.getAttribute("key"); out.write(value); %> //或<%=value%>
1.从域对象读取数据
2.对得到的数据进行类型转换
3.将最终结果写入到响应体
四。EL工具包
1.是一个由java开发的工具包
2.专门用于从域对象读取数据并写入到响应体开发任务
3.语法格式:
4.EL工具包自动存在Tomcat中lib(el-api.jar),开发时,可直接使用不需要额外导包
五。EL的标准格式:
${域对象别名 . 关键字}:到指定域对象读取相对应关键字的内容,并自动将内容写入到响应体
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <% request.setAttribute("name", "wwww2"); %> ${requestScope.name}
六。jsp文件中域对象
- application:全局作用域对象
- session : 会话作用域对象
- request:请求作用域对象
- pageContext : 当前页作用域对象
七。EL表达式域对象别名
JSP EL
application applicationScope
session sessionScope
request requestScope
pageContext pageScope
八。EL表达式将高级对象属性写入到响应体
${ 域对象别名.关键字.属性名}
EL表达式使用反射机制,通过调用当前属性对应的get方法读取属性内容
九。EL表达式简化版
${关键字}:可以省略域对象别名
[简化版工作原理]:
首先到[pageContext]定位关键字,如果有读取输出并结束执行
如果[pageContext]没有找到关键字,到[request]定位关键字如果有读取输出并结束执行
如果[request]没有找到关键字,到[session]定位关键字如果有读取输出并结束执行
如果[session]没有找到关键字,到[application]定位关键字如果有读取输出并结束执行
如果[application]没有找到关键字,返回nu11
[弊端]:
1.增加运行时间。
比如数据存放applicaiton。使用$ {key}
执行轨迹
pageContext---request---session---application
2.定位错误
【使用场景】:专门为pageContext读取数据并写入响应体做准备
十。EL表达式支持的运算
1.数学运算
2.关系运算 > >= < <= == !=
gt ge lt le eq !=
3.逻辑运算 && || !
十一。EL表达式其它内置对象
1.param:
【使用】:${param.请求参数名}
【作用】:读取请求协议包参数内容
【代替】:String value = request.getParameter("请求参数名");
out.write(value);
【例子】:
<!-- http://localhost:8080/Test03/test02.jsp?uname=zs&password=123 -->
//访问地址时在地址栏写入参数
姓名:${param.uname} 密码:${param.password}
2. paramValues:
[作用]:读取请求协议包中关联多个值的请求参数,
将参数内容保存到数组
[使用] :$ {paramValues.请求参数名}
[代替] :
String array[]= request. getParameterValues ("ck") ;
【例子】:
<!-- http://localhost:8080/Test03/test02.jsp?empno=23&empno=22 --> 编号1:${paramValues.empno[0]} 编号2:${paramValues.empno[1]}
3. initParam :
[代替]:
String value = application . getInitParameter ("driver") ;
out. write (value) ;
[使用] :
${initParam.共享数据名}
//先在web.xml中准备如下参数 <?xml version="1.0" encoding="UTF-8"?> <web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> <context-param> <param-name>driver</param-name> <param-value>jdbc.util.driver</param-value> </context-param> </web-app>
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> ${initParam.driver}
4.pageContext:
通过当前页作用域对象定位JSP中其他内置对象的属性,并把属性写入响应体
$ {pageContext . request . contextPath}
<% pageContext.setAttribute("age", 23); %> ${age}
十二。相对路径与绝对路径
1.相对路径与绝对路径区别
1)相对路径:以当前文件位置为起点,定位其他的资源文件
2)绝对路径:以网站根目录为起点,定位其他的资源文件
2.实际开发过程中,建议使用[绝对路径],不建议使用相对路径
3.如何禁止相对路径,如何简化绝对路径写法
<base href: ="/根目录/">
4.如何动态获得网站运行时根目录
<%
string root = request . getContextPath() ; // /myWeb
%>
<base href="<%=root %>/">
十三。EL表达式的缺陷
1.只能读取域对象数据,不能向域对象中写入数据更改数据
2.不支持控制语句 if判断 while循环
**************如果单独使用EL表达式,无法确保jsp文件中所有的java命令都被替换****************
JSTL标签工具类
一 【介绍】:
1.jsp Standrad Tag Lib :JSP中标准的标签工具类
2.是sun公司提供
3.组成:
1)核心标签:java在jsp上基本功能进行封装 if while
2) sql标签:JDBC在jsp上使用功能 (不常用)
3) xml标签:DOM4J在jsp上的使用功能
4)Format标签:JSP文件格式转换
二。配置:
1.导入jar包: jstl.jar standrad.jar (放入WEB-INF下的lib文件夹)
2.在jsp文件引入jstl中core包依赖约束
<%@ taglib uri = "http://java.sun.com/jsp/jstl/core" prefix="c" %>
三。标签的使用介绍
1.<c:set>:
【作用】:在jsp文件上设置域对象中共享数据
【使用】:<c:set scope="session" var="key" value="10"/>
【代替】:<%
session.setAttribute("key","10");
%>
【属性】:scope:指定操作的域对象别名
scope=“application/session/request/page”
var:声明域对象中关键字
value:存入的共享数据
2. <c:if> :
[作用]:在JSP文件. 上控制哪些内容可以写入到响应体
[使用]:< Kc:if test=" 通过EL表达式进行判断">
内容
</c:if>
[例子]:
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <% pageContext.setAttribute("age",23);%> <c:if test="${age>18 }" var="rs">成年</c:if> <c:if test="${!rs }">未成年</c:if>
3. <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:set scope="session" var="grade" value="90"/> <c:choose> <c:when test="${sessionScope.grade<60 }">不及格</c:when> <c:when test="${sessionScope.grade<80 }">中等</c:when> <c:when test="${sessionScope.grade<100 }">优秀</c:when> <c:otherwise>满分</c:otherwise> </c:choose>
4. <c: forEach>:
[作用]:循环遍历.
[第一种使用方式] <c:forEach
var="声明循环变量名称".
begin="初始化循环变量"
end="循环变量可以接收的最大值"
step="循环变量递增值或则递减值"
>
***step属性可以不写,默认每次递增加一
****循环变量被保存在[pageContext]
</c: forEach>
<select> <c:forEach var="i" begin="1" end="5" step="1"> <option>第${i }页</option> </c:forEach> </select>
[第二种使用方式]: <c:forEach
items="通过EL表达式获得域对象集合"
var="声明循环变量"
>
${循环变量.对象属性名}
</c: forEach>
//假如事先有一个Employee类,有name,gender属性
<%@page import="com.Employee"%> <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <% Employee emp1 = new Employee("zs","man"); Employee emp2 = new Employee("mike","woman"); Employee emp3 = new Employee("wwww2","man"); List<Employee> list = new ArrayList<Employee>(); list.add(emp1); list.add(emp2); list.add(emp3); pageContext.setAttribute("list", list); %> <c:forEach items="${list }" var="emp" > 姓名:${emp.name } 性别:${emp.gender }<br> </c:forEach>
<!--
遍历map: 集合时,每次从map集合得到一一个 [键值对]
[键值对]交给循环变量
循环变量.key获得[键值对J中关键字名字班级名称
循环变量.value获得 [键值对]中内容stu对象
-->.(这个以后再写)