天天看点

Servlet-jsp进阶之EL与JSTLServlet-jsp进阶之EL与JSTL

文章目录

  • Servlet-jsp进阶之EL与JSTL
    • 1 base标签
      • 1.1 作用
      • 1.2 用法
    • 2 MVC分层结构
      • 2.1 概述
      • 2.2 作用
    • 3 EL表达式
      • 3.1 作用
      • 3.2 jsp文件位置的影响
      • 3.3 语法
      • 3.4 取值的顺序
      • 3.5 EL获取集合和对象的数据
    • 4 JSTL
      • 4.1 作用
      • 4.2 流程
        • 4.2.1 在Maven中引入依赖
        • 4.2.2 页面头部加上相关标签
      • 4.3 条件渲染
      • 4.4 循环渲染
      • 4.5 数据格式化
      • 4.6 相关函数

Servlet-jsp进阶之EL与JSTL

1 base标签

1.1 作用

给url加上统一的前缀,不用每次都重复写前缀

主要用于相对路径

1.2 用法

<%
String baseUrl = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + request.getContextPath()+"/";
%>
<base href="<%=baseUrl%>" target="_blank" rel="external nofollow"  />
<a href="stu" target="_blank" rel="external nofollow" >跳转</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(变量,被包含的字符串)}