JavaWeb 速通 EL 和 JSTL

简介: JavaWeb——服务器渲染技术 EL + JSTL 内容分享

目录

一、EL表达式

       1.快速入门 :

           1.1 基本介绍

           1.2 入门案例

       2.常用输出形式 :

           2.1 创建JavaBean类

           2.2 创建JSP文件

       3.empty运算符 :

           3.1 介绍

           3.2 实例

       4.EL对象 :

           4.1 EL11个内置对象

           4.2 域对象演示

           4.3获取HTTP信息

二、JSTL标签库

       1.基本介绍 :

       2.core核心库常用标签 :

           2.1

           2.2

           2.3

           2.4 /c:forEach>


一、EL表达式

       1.快速入门 :

           1.1 基本介绍

       EL 表达式全称:Expression Language,是表达式语言

        EL 表达式的主要作用是代替JSP页面的表达式脚本 <% =request.getAttribute("...") %>

       EL 表达式基本语法: ${key},形式上比传统的JSP表达式脚本更简洁。

           1.2 入门案例

               以intro.jsp为例,代码如下 :

<%--
    User : Cyan_RA9
    Version : 21.0
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>EL expression</title>
</head>
<body>
    <%
        request.setAttribute("color", "pink");
    %>
    <%--
        PS : 若attribute为null,取出数据时,JSP方式返回"null",而EL表达式返回"".
     --%>
    <h1>传统JSP取出数据———</h1>
    color : <%= request.getAttribute("color") %> <br/>
    author : <%= request.getAttribute("author") %> <br><hr> <%--可使用三元运算符优化--%>
    <h1>采用EL表达式取出数据———</h1>
    color : ${color} <br/>
    author : ${author}
</body>
</html>

image.gif

               运行结果 :

image.gif编辑

       2.常用输出形式 :

           2.1 创建JavaBean类

               Movie类代码如下 :

package el;
import java.util.List;
import java.util.Map;
/**
 * @author : Cyan_RA9
 * @version : 21.0
 * @what : 标准JavaBean类
 */
public class Movie {
    private String name;
    private int length;
    private List<String> platforms;
    private Map<String, String> comments;
    public Movie() {
    }
    public Movie(String name, int length, List<String> platforms, Map<String, String> comments) {
        this.name = name;
        this.length = length;
        this.platforms = platforms;
        this.comments = comments;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getLength() {
        return length;
    }
    public void setLength(int length) {
        this.length = length;
    }
    public List<String> getPlatforms() {
        return platforms;
    }
    public void setPlatforms(List<String> platforms) {
        this.platforms = platforms;
    }
    public Map<String, String> getComments() {
        return comments;
    }
    public void setComments(Map<String, String> comments) {
        this.comments = comments;
    }
    @Override
    public String toString() {
        return "Movie{" +
                "name='" + name + '\'' +
                ", length=" + length +
                ", platforms=" + platforms +
                ", comments=" + comments +
                '}';
    }
}

image.gif

           2.2 创建JSP文件

               output.jsp文件代码如下 :

<%@ page import="el.Movie" %>
<%@ page import="java.util.ArrayList" %>
<%@ page import="java.util.HashMap" %><%--
    User : Cyan_RA9
    Version : 21.0
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>EL output</title>
</head>
<body>
    <h1>输出Movie对象的信息</h1>
    <%
        Movie movie = new Movie();
        movie.setName("Matrix");
        movie.setLength(150);
        ArrayList<String> platforms = new ArrayList<>();
        platforms.add("Bilibili");
        platforms.add("YouTube");
        platforms.add("Youku");
        movie.setPlatforms(platforms);
        HashMap<String, String> comments = new HashMap<>();
        comments.put("Cyan", "It's a so nice film!");
        comments.put("Rain", "I like it!");
        comments.put("Ice", "Pretty good!");
        movie.setComments(comments);
        //将movie对象放入request域对象中
        request.setAttribute("movie", movie);
    %>
    <%-- 取出数据 --%>
    Movie.name = ${movie.name} <br/>
    Movie.length = ${movie.length} <br/>
    Movie.platforms = ${movie.platforms} <br/>
    Movie.platforms[2] = ${movie.platforms[2]} <br/>
    Movie.platforms[2] = ${movie.platforms.get(2)} <br/>
    Movie.comments = ${movie.comments} <br/>
    Movie.comments_Cyan = ${movie.comments.get("Cyan")} <br/>
    Movie.comments_Rain = ${movie.comments["Rain"]} <br/>
</body>
</html>

image.gif

               运行结果 :

image.gif编辑

       3.empty运算符 :

           3.1 介绍

       empty 运算可以判断一个数据是否为空,如果为空,返回true,否则返回false

       2° 以下几种情况为空——
         
● value = null

         ● value = ""

         ● value = new Object[] {} (长度为0的Object数组)

         ● 元素个数为0 的List集合

         ● 元素个数为0 的Map集合

           3.2 实例

               empty.jsp代码如下 :

<%@ page import="java.util.ArrayList" %>
<%@ page import="java.util.HashMap" %><%--
    User : Cyan_RA9
    Version : 21.0
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>empty expression</title>
</head>
<body>
    <%
        request.setAttribute("key1", null);
        request.setAttribute("key2", "");
        request.setAttribute("key3", new Object[]{});
        request.setAttribute("key4", new ArrayList<>());
        request.setAttribute("key5", new HashMap<>());
    %>
    <%-- 判断是否为空 --%>
    key1是否为空: ${empty key1} <br/>
    key2是否为空: ${empty key2} <br/>
    key3是否为空: ${empty key3} <br/>
    key4是否为空: ${empty key4} <br/>
    key5是否为空: ${empty key5}
</body>
</html>

image.gif

               运行结果 :

image.gif编辑

       4.EL对象 :

           4.1 EL11个内置对象

               如下表格所示 :

变量 类型 说明
pageContext PageContextImpl 获取JSP中的九大内置对象
pageScope Map<String, Object> 获取pageContext域中的数据
requestScope Map<String, Object> 获取request域中的数据
sessionScope Map<String, Object> 获取Session域中的数据
applicationScope Map<String, Object> 获取ServletContext域中的对象
param Map<String, String> 获取请求参数的值
paramValues Map<String, String[]> 获取多个值
header Map<String, String> 获取请求头的信息
headerValues Map<String, String[]> 获取请求头的多个信息
cookie Map<String, Cookie> 获取当前请求的Cookie信息
initParam Map<String, String> 获取在web.xml中配置的<context-param>上下文参数

           4.2 域对象演示

               elScope.jsp代码如下 :

<%--
    User : Cyan_RA9
    Version : 21.0
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>EL scope</title>
</head>
<body>
    <%
        pageContext.setAttribute("color", "cyan");
        request.setAttribute("color", "pink");
        session.setAttribute("color", "cornflower_blue");
        application.setAttribute("color", "lightyellow");
    %>
    pageContext域_color = ${pageScope.color} <br/>
    request域_color = ${requestScope.color} <br/>
    session域_color = ${sessionScope.color} <br/>
    ServletContext域_color = ${applicationScope.color}
</body>
</html>

image.gif

               运行结果 :

image.gif编辑

           4.3获取HTTP信息

               http.jsp代码如下 :

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>pageContext demo</title>
</head>
<body>
<h1>pageContext对象获取HTTP信息</h1>
<hr/>
<%  //简化形式(将request域对象放入pageContext域中)——— JSP
    pageContext.setAttribute("req", request);
%>
协议: ${ pageContext.request.scheme }<br>
协议: ${ req.scheme }<br>
服务器 ip:${ req.serverName }<br>
服务器端口:${ req.serverPort }<br>
工程路径:${ req.contextPath }<br>
请求方法:${ req.method }<br>
客户端 ip 地址:${ req.remoteHost }<br>
会话 id :${ pageContext.session.id }<br>
</body>
</html>

image.gif

               运行结果 :

image.gif编辑


二、JSTL标签库

       1.基本介绍 :

        JSTL标签库是指 JSP Standard Tag Library,即JSP标准标签库。

      EL 表达式是为了替换JSP中的表达式脚本<%=%>,JSTL是为了替换JSP中的代码脚本<%%>

        JSTL 由五个标签库组成——

功能范围 URI 前缀
核心标签库 http://java.sun.com/jsp/jstl/core c
格式化 http://java.sun.com/jsp/jstl/fmt fmt
函数 http://java.sun.com/jsp/jstl/functions fn
数据库(不使用 http://java.sun.com/jsp/jstl/sql sql
XML(不使用 http://java.sun.com/jsp/jstl/xml x

       使用JSTL需要导入jar包(impl 和 spec),PS : Tomcat10版本对jar包的依赖有变化(jakarta)导入jar包后要重新启动Tomcat。下载jar包的网址如下 :

Apache Taglibs - Apache Standard Taglib: JSP[tm] Standard Tag Library (JSTL) implementations

       taglib引入标签,要放在行首

       2.core核心库常用标签 :

           2.1 <c:set></c:set>

       (1) <c:set></c:set> 标签可以向域中保存数据,等价于——域对象.setAttribute(key,value);

       (2)   scope 属性设置保存到哪个域

               page 表示 PageContext 域(默认值)

               request 表示 Request

               session 表示 Session

               application 表示 ServletContext

       (3) var 属性用于设置 key(键)

       (4) value 属性用于设置 value(值)

           2.2 <c:if></c:if>

       (1) <c:if></c:if>标签用来做 if 判断。

       (2) 其中的test 属性表示判断的条件(用 EL 表达式输出)

           2.3 <c:choose> <c:when> <c:otherwise>

       (1) 使用格式如下——

<c:choose>

       <c:when test="${ requestScope.score >= 90 }">

               <h1>牛逼~</h1>

       </c:when>

       <c:when test="${ requestScope.score >= 80 }">

               <h1>还不错~</h1>

       </c:when>

       <c:otherwise>

               <h1>飞舞!</h1>

       </c:otherwise>

</c:choose>

       (2) 如果使用EL表达式取数据时,没有指定域范围,默认是从小到大找。

           2.4 <c : forEach>/c:forEach>

      (1) <c:forEach></c:forEach>标签用来遍历输出,主要有以下四种遍历形式——

               ● 普通遍历输出 i 到 j (前闭后闭)

               ● 遍历数组

               ● 遍历 Map

               ● 遍历 List

       (2) 相关属性——

               1> 普通遍历 :

                       begin 属性设置开始的索引

                       end 属性设置结束的索引

                       step 属性表示遍历的步长值
                       var 属性表示循环的变量(也是当前正在遍历到的数据)

               2> 遍历数组 :

                       items 遍历的集合

                       var 遍历到的数据 (类似于增强for;输出时会自动锁定所在域

                       eg :

                       <%
                               request.setAttribute("books", new String[]{"哈利波特", "指环王"});
                       %>

                       <c:forEach items="${requestScope.books}" var="book">

                               bookName = ${book} <br/>

                       </c:forEach>

               3> 遍历Map集合 :

                       eg :

                       <%
                               Map<String, String> students = new HashMap<>();

                               map.put("Cyan", "425");

                               map.put("Rain", "400");

                               map.put("Ice", "430");

                               request.setAttribute("students", students);
                       %>

                       <c:forEach items="${requestScope.students}" var="student">

                               Student's Info = ${student.key} --- ${student.value} <br/>

                       </c:forEach>

               4> 遍历List集合 :
                       Δ遍历List集合与遍历Map集合时的步骤类似,都像Java 中的增强for循环结构。
                       varStatus 属性表示当前遍历到的数据的状态,可以得到 step,begin,end 等属性值

                       PS :需要对应的JavaBean类提供相应的getXxx方法

       System.out.println("END----------------------------------------------------------------------------------------------------------------------");

目录
相关文章
|
28天前
|
JavaScript Java 大数据
基于JavaWeb的销售管理系统设计系统
本系统基于Java、MySQL、Spring Boot与Vue.js技术,构建高效、可扩展的销售管理平台,实现客户、订单、数据可视化等全流程自动化管理,提升企业运营效率与决策能力。
|
3月前
|
SQL 前端开发 Java
JavaWeb 学习日记案例详解及 javaweb 完整项目案例实战指南
本文介绍了一个基于Spring Boot的JavaWeb企业员工管理系统完整案例,涵盖部门管理、员工管理、登录、异常处理、事务管理及AOP等核心功能实现,结合CSDN相关技术文章,提供详细技术方案与应用实例,适合JavaWeb开发者学习与参考。
144 0
|
9月前
|
前端开发 Java 数据库连接
【潜意识Java】深度解读JavaWeb开发在Java学习中的重要性
深度解读JavaWeb开发在Java学习中的重要性
165 4
|
前端开发 Java 应用服务中间件
Javaweb学习
【10月更文挑战第1天】Javaweb学习
114 2
|
安全 Java Android开发
JavaWeb解压缩漏洞之ZipSlip与Zip炸弹
JavaWeb解压缩漏洞之ZipSlip与Zip炸弹
472 5
|
移动开发 JavaScript 前端开发
Javaweb之Vue路由的详细解析
Vue.js是一款备受欢迎的前端框架,以其简洁的API和组件化开发模式著称。Vue Router作为其官方路由管理器,在构建单页面应用(SPA)时发挥关键作用,通过URL变化管理组件切换,实现无刷新过渡。本文将详细介绍Vue Router的基础概念、主要功能及使用步骤,帮助JavaWeb开发者快速掌握其工作原理及实践应用。
100 1
|
JSON JavaScript 前端开发
Javaweb中Vue指令的详细解析与应用
Vue指令提供了一种高效、声明式的编码方式,使得开发者可以更专注于数据和业务逻辑,而不是DOM操作的细节。通过熟练使用Vue指令,可以极大地提高开发效率和项目的可维护性。
97 3
|
19天前
|
JSON 网络协议 安全
【Java】(10)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
84 1
|
19天前
|
JSON 网络协议 安全
【Java基础】(1)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
72 1
|
1月前
|
数据采集 存储 弹性计算
高并发Java爬虫的瓶颈分析与动态线程优化方案
高并发Java爬虫的瓶颈分析与动态线程优化方案