EL和JSTL
55,1
EL和JSTL
01.实现了一个简易的Tomcat
02.搭建了web环境和初识JSP
03.JSP的内置对象(request response session application)
04.数据源和分层开发(查询新闻列表,新增新闻,删除新闻)
JNDI和连接池
三层架构:
表现层(迎宾/前台):接收来自客户端的请求,并对请求作出响应。
业务逻辑层(厨师):处理客户端的业务逻辑(登录,删除新闻)
数据访问层(采购):用于和数据库进行直接交互(DAO模式)
05.第三方控件(commons-fileupload和富文本编辑器)
06.分页技术
(改造了项目:首页分页,管理员页面-列表分页)
07.分页功能完善和页面拆分
1.掌握EL表达式优化JSP页面显示
1.1 EL的概述
<%
object obj = request.getAttribute("categoryList");
//想使用集合
if(obj != null){}
List<Category> categoryList = (List<Category>)obj;
}
%>
//取出来信息
User user = (User)session.getAttribute("loginUser");
//假设不为空:取用户的数据
user.getUserName();
user.getUserPassword();
%>
//${loginUser}
//${loginUser.userName}
//${loginUser.userPassword}
**EL(Expression Language)?*它是JSP中专门用于四大作用域中 取数据的一种表达式语言。
四大作用域
**page:**存储的数据只能在当前JSP页面使用
**request:**存储的数据只能在同一次请求中有效(请求转发可以保证请求不会重新发起)
**session:**存储的数据只能在同一个会话中有效(只要浏览器不会完全关闭 都属于一个会话,其他它利用的cookie技术)
**application:**存储的数据可以在整个应用中都有效(服务器开启则可以使用 关闭则自动销毁)
1.2 EL的基本语法
从作用域中取出变量数据
${作用域中的变量名}
例如:request.setAttribute("username","赵经理");
取数据:${username}
//EL在取数据时,如果查找不到,则默认不显示,不像之前的getAttribute()系列返回null
//其实最完整的语法应该如下:从作用域中取数据 应该添加上作用域的前缀
${pageScope.键名}
${requestScope.键名}
${sessionScope.键名}
${applicationScope.键名}
//当采用上方的简写形式时,它会默认从page->request->session->application依次查找数据(范围小 ->范围大>
1.3 EL操作各类型数据
EL操作数组
例如:${nameArr[索引]}
EL操作对象
可以使用.来获取对象的属性 也可以使用【】,它们实质上调用的还是getter方法
用户名:${loginUser.username}<br/>
用户类型:${loginUser.userType}<br/>
用户名:${loginUser["usernamef "]}
EL操作集合
List 临时存储数组
Map 临时存储 对象操作
1.4 EL操作运算符
EL内支持各种运算符 算术运算符 关系运算符 逻辑运算符和三元运算符
另外它还有一个特别的关键字:empty
用于判断一个字符串(null 空字符串),集合(null 空集合)等内容是否为空。
判断不为空:not empty
1.5 EL隐式对象
pageScope
requestScope
sessionScope
application
pageContext:用于获取其他的的作用域对象
param:等价于request.getParameter(name)
paramValus:等价于request.getParameterValues(name)
header:获取请求头信息
headerValue:获取多个请求头信息
initParams:获取web.xml中配置的初始化参数信息
cookie:获取cookie信息
2.掌握JSTL优化JSP页面显示
**JSTL:(Java Server Pages **Standard Tag Library)
<%
for(){
}
%>
它需要结合EL表达式来使用!用于在JSP页面进行一些数据处理操作,选择结构,循环结构。
JSTL默认没有集成在Java EE中,想使用必须先下载并导入。
使用步骤:
1.下载jstl 1.2
并导入工程
2.通过tablib声明引入到JSP页面
<%@taglib uri = “http://java.sun.com/jsp/jstl/core” prefix=“c”%>
2.1 JSTL输出
<c:out></c:out>
<!--
out标签是用来向页面输出内容 它通常输出的是EL表达式的内容
value:表达式
default:默认值
escapexml:默认为true 表示 忽略XML(不解析)
如果改为false则重新解析
-->
<%
// request.setAttribute("uname,"赵经理");
%>
<%--<c:out value="${uname}"></c:out>--%>
<%--<c:out value="${uname}"default="未知用户"></c:out>
--%>
<c:out value="<a href=''>点我跳转百度</a>"escapeXml="false"></c:out>
2.2 JSTL设置
<!--
set标签可以用于向作用域中存储数据
var:键名
value:值/也可以写EL
scope:作用域名
-->
<%
//request.setAttribute("uname","陈经理");
User user = new User();
user.setUsername("路里国");
request.setAttribute("loginUser",user);
%>
${uname}<br/>
<%--<c:set var="uname" value="陈经理"
scope="request"></c:set>--%>
<!--
target:EL表达式 对象
property:给某个对象的某个属性赋值
value:要赋的值
-->
<c:set target="${loginUser}" property="userType"
value="1"></c:set>
用户名:${loginUser.username}<br/>
用户类型:${loginUser.userType}
target:EL表达式 对象
property:给某个对象的某个属性赋值
value:赋值
2.3 JSTL移除
<c:remove var = “uname” scope=“page”/> 从指定作用域移除内容
2.4 条件语句-选择结构
<c:if test=""></c:if>
<c:choose>
<c:when test=""></c:when>
<c:otherwish></c:otherwise>
</c:choose>
c:set var ="userType" value="2"></c:set>
当前用户类型为:
<%--<c:if test="${userType == 1}">经理</c:if>
<c:if test="${userType == 0}">普通员工</c:if>--%>
<!--类似于多重if 不要在此标签内写注释等其他标签-->
<c:choose>
<c:when test="${userType == 1}">经理</c:when>
<c:when test="${userType == 2}">老板</c:when>
<c:otherwise>普通员工</c:otherwise >
</c:choose>
2.5 循环语句-循环结构
<c:forEach items ="" var="" varStatus="" begin="" end="" step=""></c:forEach>
<%
User user1 = new User("薛东明",2);
User user2 = new User("李嘉诚",0);
User user3 = new User("赵经理",2);
List<User>userList =
Arrays.asList(user1,user2,user3);
request.setAttribute("userList",userList);
%>
<!--
items:要遍历的集合(EL来获取)
var:遍历出来的每一个元素
varStatus:遍历出来的元素的状态信息(对象信息)
index:索引
count:当前是遍历的第几个(循环次数)
-->
<%--<c:forEach items="${userList}" var="user" varStatus="status">
${status.count}-->${user.username}<br/>
</c:forEach>--%>
<!--
begin:从,,第几个开始
end:到第几个结束
step:步进
-->
<%--<c:forEach begin ="1" end="10" step="2" var="num">
${num}<br/>
</c:forEach>--%>
<!--遍历集合-->
<%
Map<String,Object>map = new HashMap<>();
map.put("username","天老板");
map.put("abc","冯老板");
map.put("123","高老板");
request.setAttribute("map",map);
%>
<c:forEach items="${map}" var = "entry">
${entry.key}-->${entry.value}<br/>
</c:forEach>