文章目录
Servlet-jsp进阶之EL与JSTL
1 base标签
1.1 作用
给url加上统一的前缀,不用每次都重复写前缀
主要用于相对路径
1.2 用法
<%
String baseUrl = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + request.getContextPath()+"/";
%>
<base href="<%=baseUrl%>" />
<a href="stu">跳转</a>
2 MVC分层结构
2.1 概述
将一个Web应用分为三层
M : model(模型层),和数据库进行交互
V : view(视图层),用户所看到的界面
C : controller(控制层),根据不同的请求进行不同的响应
2.2 作用
降低了耦合度,更易于维护项目
3 EL表达式
3.1 作用
方便我们在jsp中获取在域里的数据
3.2 jsp文件位置的影响
jsp文件直接放在webApp下,是可以直接访问到的
jsp文件放在WEB-INF下,就代表这是一个被保护的资源,需要通过servlet转发过去
当jsp需要编写一些业务逻辑的时候,或者获取一些数据的时候,也会通过servlet进行转发,其目的是将业务逻辑和视图分开
3.3 语法
${}可以直接取得放在域里的数据
注意: 在{}中是可以进行四则运算,逻辑运算的
3.4 取值的顺序
按照域的范围从小到大取
pageContext -> pageScope
request -> requestScope
session -> sessionScope
application ->applicationScope
3.5 EL获取集合和对象的数据
对象: ${变量名.属性名}
集合: ${变量名[索引]}
注意: 可以通过${pageScope.request.contextPath}获取域名后的项目文件名
4 JSTL
4.1 作用
方便进行界面渲染,可以让不用写java代码即可以实现条件渲染和循环渲染和数据格式化
提供了一些函数方便进行操作
4.2 流程
4.2.1 在Maven中引入依赖
<!-- https://mvnrepository.com/artifact/javax.servlet/jstl -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
4.2.2 页面头部加上相关标签
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>条件渲染和循环渲染需引入
<%@taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>数据格式化需引入
<%@taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>使用函数需引入
4.3 条件渲染
C:if
<c:if test="${isLogin}">
<div>这是这个用户的昵称</div>
</c:if>
<c:if test="${!isLogin}">
<button>登录按钮</button>
</c:if>
c:choose
<c:choose>
<c:when test="${age < 18}">未成年</c:when>
<c:when test="${age < 30}">青年</c:when>
<c:when test="${age < 50}">中年</c:when>
<c:otherwise>老年</c:otherwise>
</c:choose>
4.4 循环渲染
c:forEach
items 渲染的列表
var 没一项的变量名
begin 开始循环渲染的索引
end 结束循环渲染的索引
step 每次跳过的个数
varStatus 当前的循环的状态,通过这个属性可以获取当前这一项的索引
<ul>
<c:forEach items="${list}" var="item" begin="0" end="2" step="2" varStatus="status">
<li>${item.name}----${item.age}---${status.index}</li>
</c:forEach>
</ul>
4.5 数据格式化
<div>
<fmt:formatNumber value="${num}" pattern="###,###.##" />
</div>
<div>
<fmt:formatNumber value="${num}" pattern="###,###.00" />
</div>
<div>
<fmt:formatNumber value="${per}" type="percent" minFractionDigits="2" maxFractionDigits="2" />
</div>
4.6 相关函数
${fn:length(变量)}
${fn:contains(变量,被包含的字符串)}
${fn:startsWith(变量,被包含的字符串)}
${fn:endsWith(变量,被包含的字符串)}