EL和JSTL

目录

EL和JSTL的作用:

JSP主要开发任务:

EL工具包:

EL的标准格式:

JSP文件中域对象:

El表达式域对象别名:

EL表达式将高级对象属性写入到响应体

El表达式简化版

【简化版工作原理】:

【弊端】

【使用场景】

EL表达式支持的运算

EL表达式其他内置对象

param:

paramValues:

initParam

相对路径和绝对路径

El表达式缺陷:

JSTL标签工具类

【介绍】

【配置】:

【标签使用】:

 

​ 遍历Map


EL和JSTL的作用:

简化JSP文件上JAVA代码开发步骤

JSP主要开发任务:

  • 将域对象中数据读取并写到响应体
  • 在JSP文件上使用Java命令,将域对象中数据读取并写入到响应体开发步骤:
<%
    String value =(String)request.getAttribute("key");
    out.wirte(value);
%>
<%=value%>
  1. 从域对象读取数据
  2. 对得到得数据进行类型转换
  3. 将最终结果写入到响应体

EL工具包:

  1. 是一个由Java开发工具包
  2. 专门用于从域对象读取数据并写入到响应体开发任务
  3. 语法格式:路径格式. 类似于jQuery中选择器和过滤器语法
  4. EL工具包自动存在Tomcat中lib(el-api.jar),开发时,可以直接使用不需要额外倒包

EL的标准格式:

${域对象别名.关键字}:到指定域对象读取对应关键字的内容,并自动将内容写入到响应体

JSP文件中域对象:

  • application:全局作用域对象
  • session:会话作用域对象
  • request:请求作用域对象
  • pageContext:当前页作用域对象

El表达式域对象别名:

JSP

EL

applicationapplicationScope
sessionsessionScope
requestrequestScope
pageContextpageScope
<%
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

【弊端】

  1. 增加运行时间,比如数据存放在application中,使用简化版会执行相对较长的时间
  2. 定位错误

【使用场景】

专门为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标签工具类

【介绍】

  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
  2. 在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

 

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值