目录
一、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 |
request | requestScope |
session | sessionScope |
application | applicationScope |
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>
你要尽全力保护你的梦想。那些嘲笑你梦想的人,他们注定失败,他们想把你变成和他们一样。我坚信,只要心中有梦想,我就会与众不同。你也是。