当前位置:   article > 正文

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为例,代码如下 : 

  1. <%--
  2. User : Cyan_RA9
  3. Version : 21.0
  4. --%>
  5. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
  6. <html>
  7. <head>
  8. <title>EL expression</title>
  9. </head>
  10. <body>
  11. <%
  12. request.setAttribute("color", "pink");
  13. %>
  14. <%--
  15. PS : 若attribute为null,取出数据时,JSP方式返回"null",而EL表达式返回"".
  16. --%>
  17. <h1>传统JSP取出数据———</h1>
  18. color : <%= request.getAttribute("color") %> <br/>
  19. author : <%= request.getAttribute("author") %> <br><hr> <%--可使用三元运算符优化--%>
  20. <h1>采用EL表达式取出数据———</h1>
  21. color : ${color} <br/>
  22. author : ${author}
  23. </body>
  24. </html>

                运行结果 : 

        2.常用输出形式 : 

            2.1 创建JavaBean类

                Movie类代码如下 : 

  1. package el;
  2. import java.util.List;
  3. import java.util.Map;
  4. /**
  5. * @author : Cyan_RA9
  6. * @version : 21.0
  7. * @what : 标准JavaBean类
  8. */
  9. public class Movie {
  10. private String name;
  11. private int length;
  12. private List<String> platforms;
  13. private Map<String, String> comments;
  14. public Movie() {
  15. }
  16. public Movie(String name, int length, List<String> platforms, Map<String, String> comments) {
  17. this.name = name;
  18. this.length = length;
  19. this.platforms = platforms;
  20. this.comments = comments;
  21. }
  22. public String getName() {
  23. return name;
  24. }
  25. public void setName(String name) {
  26. this.name = name;
  27. }
  28. public int getLength() {
  29. return length;
  30. }
  31. public void setLength(int length) {
  32. this.length = length;
  33. }
  34. public List<String> getPlatforms() {
  35. return platforms;
  36. }
  37. public void setPlatforms(List<String> platforms) {
  38. this.platforms = platforms;
  39. }
  40. public Map<String, String> getComments() {
  41. return comments;
  42. }
  43. public void setComments(Map<String, String> comments) {
  44. this.comments = comments;
  45. }
  46. @Override
  47. public String toString() {
  48. return "Movie{" +
  49. "name='" + name + '\'' +
  50. ", length=" + length +
  51. ", platforms=" + platforms +
  52. ", comments=" + comments +
  53. '}';
  54. }
  55. }

            2.2 创建JSP文件

                output.jsp文件代码如下 : 

  1. <%@ page import="el.Movie" %>
  2. <%@ page import="java.util.ArrayList" %>
  3. <%@ page import="java.util.HashMap" %><%--
  4. User : Cyan_RA9
  5. Version : 21.0
  6. --%>
  7. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
  8. <html>
  9. <head>
  10. <title>EL output</title>
  11. </head>
  12. <body>
  13. <h1>输出Movie对象的信息</h1>
  14. <%
  15. Movie movie = new Movie();
  16. movie.setName("Matrix");
  17. movie.setLength(150);
  18. ArrayList<String> platforms = new ArrayList<>();
  19. platforms.add("Bilibili");
  20. platforms.add("YouTube");
  21. platforms.add("Youku");
  22. movie.setPlatforms(platforms);
  23. HashMap<String, String> comments = new HashMap<>();
  24. comments.put("Cyan", "It's a so nice film!");
  25. comments.put("Rain", "I like it!");
  26. comments.put("Ice", "Pretty good!");
  27. movie.setComments(comments);
  28. //将movie对象放入request域对象中
  29. request.setAttribute("movie", movie);
  30. %>
  31. <%-- 取出数据 --%>
  32. Movie.name = ${movie.name} <br/>
  33. Movie.length = ${movie.length} <br/>
  34. Movie.platforms = ${movie.platforms} <br/>
  35. Movie.platforms[2] = ${movie.platforms[2]} <br/>
  36. Movie.platforms[2] = ${movie.platforms.get(2)} <br/>
  37. Movie.comments = ${movie.comments} <br/>
  38. Movie.comments_Cyan = ${movie.comments.get("Cyan")} <br/>
  39. Movie.comments_Rain = ${movie.comments["Rain"]} <br/>
  40. </body>
  41. </html>

                运行结果 : 

        3.empty运算符 : 

            3.1 介绍

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

        2° 以下几种情况为空——
          
● value = null
          ● value = ""
          ● value = new Object[] {} (长度为0的Object数组)
          ● 元素个数为0 的List集合
          ● 元素个数为0 的Map集合

            3.2 实例

                empty.jsp代码如下 : 

  1. <%@ page import="java.util.ArrayList" %>
  2. <%@ page import="java.util.HashMap" %><%--
  3. User : Cyan_RA9
  4. Version : 21.0
  5. --%>
  6. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
  7. <html>
  8. <head>
  9. <title>empty expression</title>
  10. </head>
  11. <body>
  12. <%
  13. request.setAttribute("key1", null);
  14. request.setAttribute("key2", "");
  15. request.setAttribute("key3", new Object[]{});
  16. request.setAttribute("key4", new ArrayList<>());
  17. request.setAttribute("key5", new HashMap<>());
  18. %>
  19. <%-- 判断是否为空 --%>
  20. key1是否为空: ${empty key1} <br/>
  21. key2是否为空: ${empty key2} <br/>
  22. key3是否为空: ${empty key3} <br/>
  23. key4是否为空: ${empty key4} <br/>
  24. key5是否为空: ${empty key5}
  25. </body>
  26. </html>

                运行结果 : 

        4.EL对象 : 

            4.1 EL11个内置对象

                如下表格所示 : 

变量类型说明
pageContextPageContextImpl获取JSP中的九大内置对象
pageScopeMap<String, Object>获取pageContext域中的数据
requestScopeMap<String, Object>获取request域中的数据
sessionScopeMap<String, Object>获取Session域中的数据
applicationScopeMap<String, Object>获取ServletContext域中的对象
paramMap<String, String>获取请求参数的值
paramValuesMap<String, String[]>获取多个值
headerMap<String, String>获取请求头的信息
headerValuesMap<String, String[]>获取请求头的多个信息
cookieMap<String, Cookie>获取当前请求的Cookie信息
initParamMap<String, String>获取在web.xml中配置的<context-param>上下文参数

            4.2 域对象演示

                elScope.jsp代码如下 : 

  1. <%--
  2. User : Cyan_RA9
  3. Version : 21.0
  4. --%>
  5. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
  6. <html>
  7. <head>
  8. <title>EL scope</title>
  9. </head>
  10. <body>
  11. <%
  12. pageContext.setAttribute("color", "cyan");
  13. request.setAttribute("color", "pink");
  14. session.setAttribute("color", "cornflower_blue");
  15. application.setAttribute("color", "lightyellow");
  16. %>
  17. pageContext域_color = ${pageScope.color} <br/>
  18. request域_color = ${requestScope.color} <br/>
  19. session域_color = ${sessionScope.color} <br/>
  20. ServletContext域_color = ${applicationScope.color}
  21. </body>
  22. </html>

                运行结果 : 

            4.3获取HTTP信息

                http.jsp代码如下 : 

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

                运行结果 : 


二、JSTL标签库

        1.基本介绍 : 

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

        EL 表达式是为了替换JSP中的表达式脚本<%=%>, JSTL 是为了替换JSP中的代码脚本<%%>
        JSTL 由五个标签库组成——
功能范围URI前缀
核心标签库http://java.sun.com/jsp/jstl/corec
格式化http://java.sun.com/jsp/jstl/fmtfmt
函数http://java.sun.com/jsp/jstl/functionsfn
数据库(不使用http://java.sun.com/jsp/jstl/sqlsql
XML(不使用http://java.sun.com/jsp/jstl/xmlx

        使用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----------------------------------------------------------------------------------------------------------------------");

本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/天景科技苑/article/detail/805016
推荐阅读
相关标签