JavaWeb16.域对象&EL表达式&JSTL标签

目录

一、jsp域对象

二、EL表达式

使用EL表达式

EL运算符

三、JSTL标签

JSTL基本标签

使用set、out、remove标签

使用if标签判断用户登录情况

使用迭代标签 forEach  完成商品的遍历展示


一、jsp域对象

在JSP中,存在四大域对象,它们如下所示

  • pageContext  页面容器
  • request  请求
  • session  服务器存储
  • application  公共存储

其中他们的存储范围大小排序是:application>session>request>pageContext

pageContext:范围仅在当前页面,只能得到当前页面发送的内容

request:作用范围是在同一请求中(仅对转发有效)

session:作用范围是一次会话,当客户端向服务器发起一次请求到关闭期间

application:范围是当前web应用(范围最大)

二、EL表达式

EL(Expression Language 表达式语言),其目的是为了替换jsp页面中复杂的代码,相当于替换<%%>,语法结构为${},在{}中编写代码,这相比较在jsp中嵌入java代码,EL替换更为简单易读,但需要注意的是EL表达式必须从域对象中取值,并不能完全替代<%=%>的取值方法

使用EL表达式

在域对象中存入值(前者为key,后者为value)
application.setAttribute("a", "aaa");
session.setAttribute("b", "bbb");
request.setAttribute("req", "ccc");
pageContext.setAttribute("pag", "ddd");

使用EL表达式取值
application:${a}
<br>
session: ${b }
<br>
request:${req}
<br>
pageContext: ${pag }

当域对象中存入的属性名相同时,那么最终取值会取最小域对象的值

application.setAttribute("h", "aaa");
session.setAttribute("h", "bbb");
request.setAttribute("h", "ccc");
pageContext.setAttribute("h", "ddd");

application:${h}
<br>
session: ${h }
<br>
request:${h}
<br>
pageContext: ${h }

 最终取值为:

 如果需要取到其他域对象的值时需要使用他们作用域这个方法

属性范围EL中的名称
page

pageScope,例如${pageScope.aa}表示在page范围内查找aa变量

,如果没找到这个变量即返回null

requestrequestScope
sessionsessionScope
applicationapplicationScope
application:${applicationScope.h}
<br>
session: ${sessionScope.h }
<br>
request:${requestScope.h}
<br>
pageContext: ${h }

注:由于是在当前页面取值,pageContext是页面容器,可以直接使用存入时的属性名来取值

使用它们在EL中的名称来取值就会取到自己的值

域对象中不仅可以存入属性值,还可以存对象,集合等等

如果向对象中存入对象,当取用的时候可以不调用get方法,直接得到他的属性如下

User user=new User("sa","sa123");

pageContext.setAttribute("user",user);

用户对象: ${user}
用户名: ${user.name}  <%--直接得到--%>
用户名: ${user.getName()} <%--调用方法--%>

EL运算符

在使用EL表达式取值时,可以在${ }中对取到的值进行一些运算符操作

request:  ${requestScope.msg==null}
<br>
request:  ${requestScope.msg==null?"x":"y"}
<br>
${user.name.equals("sa")?"yes":"no"}

存入集合判断是否为空:

List<User> list = new ArrayList<>();
pageContext.setAttribute("list",list);

<%--方法1--%>
${list.size==0}

<%--方法2--%>
${empty list}

<%--方法3--%>
-${not empty list}

三、JSTL标签

JSTL基本标签

  • 通用标签:set、out、remove
  • 条件标签:if
  • 迭代标签:forEach

在使用JSTL标签时需要导入标签库至当前项目中(导入方法和到数据库连接jar包方法一致)

导入后需要在页面上进行引用 

<%--tag标签,lib库,导入一个标签库 prefix是标签库的名字--%>
<%@taglib prefix="a" uri="http://java.sun.com/jsp/jstl/core"%>

使用set、out、remove标签

<%--pageContext.setAttribute("a",1)等价于下面代码--%>
<c:set scope="page" value="1" var="a"></c:scope>

<%--pageContext.getAttribute("a")等价于下面代码--%>
<c:out value="${a}"></c:scope>

<%--pageContext.removeAttribute("a")等价于下面代码--%>
<c:remove var="a" scope="page"></c:remove>

使用if标签判断用户登录情况

<c:if test="${yy!=null}">
    <h1>欢迎使用该系统</h1>
</c:if>
<c:if test="${yy==null}">
    <h1>你现在还没有登录,请点击下面的按钮</h1>
    <button>请进行登录</button>
</c:if>

使用迭代标签 forEach  完成商品的遍历展示

<%--这里已经将list存入了pageContext中--%>
<c:forEach items="${list}" var="goods">
    <tr>
        <th>${goods.goodsId}</th>
        <th>${goods.goodsName}</th>
        <th>${goods.goodsType}</th>
        <th>${goods.goodsPrice}</th>
    </tr>
</c:forEach>

你要尽全力保护你的梦想。那些嘲笑你梦想的人,他们注定失败,他们想把你变成和他们一样。我坚信,只要心中有梦想,我就会与众不同。你也是。

  • 6
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值