JSP学习——EL表达式和JSTL学习小结

简介: JSP学习——EL表达式和JSTL学习小结



EL表达式

一、EL与JSTL作用:

简化JSP文件上java代码开发步骤。

二、jsp主要的开发任务

将域对象中的数据读取并写入响应体中。

三、在jsp中使用java命令,将域对象中的数据读取并写入到响应体(客户端)

域对象读取的数据都是object类型 需要进行数据转换
eg:
    <%
        String value = (String)request.getAttribute("key");
        //out.write(value);
    %>
    <%=value%>

五、EL的标准格式:

${域对象别名.关键字},他会到指定域对象读取对应关键字内容,并自动将内容写入到响应体中

六、JSP文件中域对象

1.application:  全局作用域对象
2.session:      会话作用域对象
3.request:      请求作用域对象
4.pageContext:  当前页作用域对象(很少使用)

七、EL表达式中域对象的别名

    JSP             EL
application     applicationScope
session         sessionScope
request         requestScope
pageContext     pageScope

八、EL表达式 将 高级对象属性写入到响应体中

${域对象.关键字.属性}
EL表达式使用反射机制,通过调节当前属性对应的get方法 读取属性内容
所以直接.属性即可 不用.get属性()

九、EL表达式简化版

可以省略域对象别名
${关键字}
原理:
    你没有给他作用域对象,人家就猜白
    从 小作用域到 大作用域 去定位关键字,如果有就读取并输出并结束执行
    即pageContext-->request-->session-->application
缺点:
    1.增加运行时间。
    2.导致定位错误 即 获取信息错误
    例如
        你在session和pageContext中同时设置相同关键字,
        你通过${关键字}获取的是pageContext中的值而不是session中的
【适用场景】:专门为pageContext读取数据并写入响应体作准备

十、EL表达式所支持的运算

1.数学运算
    注:
        EL表达式会根据key获取的value的类型自动进行数据类型转换
            <%
                String key1 = (String) pageContext.getAttribute("key1");
                String key2 = (String) pageContext.getAttribute("key2");
            %>
            EL表达式:${key1+key2}  ------ 3
2.关系运算
   正常运算符     >   >=  <   <=  ==  !=
   EL中的别名     gt  ge  lt  le  eq  !=
   EL表达式不支持java中的if else   
   可以使用三元运算符 判断语句 ? 结果1 : 结果2 ;
   ${age ge 18 ?"欢迎光临" : "未满18,禁止入内!"}
3.逻辑运算

十一、 EL表达式 其他内置对象

1.param:
    【作用】:读取请求协议包(request)中参数内容
    【格式】:${param.请求参数名}
    【相当于】:
        String value = (String) request.getParameter("请求参数名")
        out.write(value);
 2.paramValues:
    【作用】:读取请求协议包(request)中关联的多个请求参数,将参数内容保存到数组中
    【格式】:${paramValues.请求参数名}
    【相当于】:
        String array[] = request.getParameterValues("请求参数名")
        (该请求参数中含有多个值)
     注:
        因为单独EL表达式中没有循环,所以每个信息对应值的下标需要自己写 返回的数组[下标]
        所以需要结合jstl去循环
 3.initParam:(基本用不到)
    【作用】:
    【格式】:${initParam.共享数据名}
    【相当于】:
        String value = application.getInitParameter("driver");
        out.write(value);
        eg:
            web.xml文件中
                <context-param>
                    <param-name>driver</param-name>
                    <param-value>com.mysql.jdbc.Driver</param-value>
                </context-param>
            JSP文件中
                来自web.xml中的共享数据:${initParam.driver}
            前端页面
                来自web.xml中的共享数据:com.mysql.jdbc.Driver
 4.

十二、相对路径和绝对路径

1.相对路径与绝对路径区别:
    1、相对路径:以当前文件位置为起点,定位其他的资源文件
    2、绝对路径:以当前网站的根目录,定位其他资源文件
    “./”:代表目前所在的目录。
  “../”:代表上一层目录。
  以”/”开头:代表根目录。

十三、EL表达式的缺陷

1.只能读取域对象数据,不能向域对象中写入数据 或 更改数据
2.不支持控制语句 什么if判断 while循环 单独EL表达式都不能做到
  所以如果单独使用EL表达式,无法确保JSP文件中所有的java命令都被替换

JSTL

1. 介绍

JSTL(JavaServerPages Standard Tag Library)JSP标准标签库
   1.为什么要用JSTL:可以编写没有java代码的jsp页面。
                      使JSP页面很容易被WEB设计人员理解,表达更清晰。减少程序出错,使程序容易维护。
   2.JSTL标准标签库:
        核心标签库:java在jsp上基本功能进行封装,如if,while;
                  常用的是if和forEach
        sql标签库;JDBC在jsp中使用功能(不重要)
        xml标签;DOM4J在jsp上使用(不重要)
        Format标签:JSP文件格式转换(不重要)
   3.说白了,JSTL常实现网页逻辑判断和迭代显示的,
   4.需要引入<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
《掩耳盗铃|披着羊皮的狼 ,本质还是java命令,只不过看着像HTML标签》

2. 配置

1.导入依赖jar:
    <!-- https://mvnrepository.com/artifact/jstl/jstl -->
    <dependency>
        <groupId>jstl</groupId>
        <artifactId>jstl</artifactId>
        <version>1.2</version>
    </dependency>
2.在JSP文件中引入JSTL中core包依赖约束(固定格式,直接复制粘贴)
    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
    uti---
    prefix---前缀名

3. 标签使用

1.<c:set>:
    [作用]:在jsp文件上设置域对象中共享数据
    [使用]:<c:set scope="session",var="key",value="10"/>
    [属性]:
            scope:  指定操作的域对象的别名
                    scope="application/session/request/page"
            var:    声明域对象关键字
            value:  想要存入的共享数据
    [相当于]:
            <%
                session.setAttribute("key","10");
            %>
2.<c:if>
    [作用]:在jsp文件中控制那些内容可以写入到响应体中 就是java的if
    [使用]:<c:if test="EL表达式写的判断">
                内容
           </c:if>
注;
    经常会在jstl中嵌入EL表达式
    eg:
        <c:set scope="request" var="age" value="20"/>
        <c:set scope="request" var="age" value="${requestScope.age+1}"/>
        系统会先执行EL表达式再执行jstl
3.<c:choose>
    [作用]:在jsp文件中实现多分支选择判断,决定哪部分内容可以写入响应体中。就是java中的else if
    [使用]:<c:choose>
                <c:when test="EL表达式写的判断1">内容1 对应if </c:when>
                <c:when test="EL表达式写的判断2">内容2 对应if</c:when>
                <c:otherwise> 内容3 对应else</c:otherwise>
           </c:choose>
4.<c:forEach>
    [作用]:循环遍历
    [用法1]:
        <c:forEach var="声明循环变量名称" begin="初始化循环变量" end="循环变量可以接收到的最大值" step="循环变量递增或递减值"> </c:forEach>
            step属性可以不写 默认递增1
            循环变量会自动放到当前页面作用域(pageContext)中
        eg:
                <c:forEach var="i"  begin="1" end="5" step="1">
                    <option value="">第${i}页</option>
                </c:forEach>
        相当于java中的 for(int i = 1; i <= 5 ; i++){}
    [用法2]:
        <c:forEach item="通过EL表达式获取域对象中的集合 如" var="声明一个循环变量"> </c:forEach>
    eg1:
        <c:forEach items="${studentSet}" var="student">
          学生编号:${student.sid}
          学生姓名:${student.name}
        </c:forEach>
        相当于java中的 for(Student student:StudentSet){}
        用于遍历集合Set/List
    eg2:
        <c:forEach items="${studentMap}" var="key-value">
            <tr>
                <td>${key-value.key}</td>
                <td>${key-value.value.sid}</td>
                <td>${key-value.value.name}</td>
            </tr>
        </c:forEach>
        遍历Map集合的时候每次获得的var 是一个键值对
        通过  循环遍历.key    循环遍历.value 获取对应的键值
相关文章
|
6月前
|
SQL XML Java
JSP 教程 之 JSP 标准标签库(JSTL) 4
**JSP的JSTL是用于简化Web开发的标签库,包括核心、格式化、SQL、XML和函数5个部分。SQL标签库允许与数据库交互,如设定数据源、执行查询和更新,以及处理参数。例如, `&lt;sql:setDataSource&gt;` 定义数据源, `&lt;sql:query&gt;` 执行查询。通过使用JSTL,开发者能更整洁地处理JSP页面。**
55 8
|
6月前
|
XML SQL Java
JSP 教程 之 JSP 标准标签库(JSTL) 1
JSP的JSTL是用于简化页面逻辑的标签库,涵盖核心、格式化、SQL、XML和函数五大类标签。要安装,下载Apache的JSTL包,将jar文件放入WEB-INF/lib,tld文件复制到WEB-INF,并在web.xml中配置相应的taglib信息。JSTL促进了JSP页面的清洁和结构化。
51 5
|
6月前
|
XML SQL Java
JSP 教程 之 JSP 标准标签库(JSTL) 5
JSP的JSTL是用于简化JSP开发的标签库,包括核心、格式化、SQL、XML和函数五大标签集。XML标签库处理XML文档,如`&lt;x:out&gt;`显示XML数据,`&lt;x:parse&gt;`解析XML,`&lt;x:forEach&gt;`遍历节点。使用前需添加XercesImpl.jar和xalan.jar到Tomcat的lib目录。
47 6
|
6月前
|
XML SQL Java
JSP 教程 之 JSP 标准标签库(JSTL) 6
**JSP JSTL 摘要:** JSTL是JSP的标签库,包含核心、格式化、SQL、XML和函数5类标签。它用于执行常见任务,如迭代、条件判断和XML操作。JSTL函数库提供字符串处理函数,如`contains()`, `endsWith()`, `escapeXml()`等,方便XML和HTML处理。通过`&lt;%@ taglib %&gt;`导入,如`fn:trim()`用于去除字符串两端空白。
46 5
|
6月前
|
存储 Java
JSP 教程 之 JSP 表达式语言 8
**JSP EL简化了JavaBean数据访问,支持算术和逻辑表达式,允许使用数字、字符串及布尔值。示例展示如何获取HTTP头信息:`${header[&quot;user-agent&quot;]}`显示&quot;user-agent&quot;头信息。`header`单值,`headerValues`为数组。**
35 0
|
6月前
|
存储 Java
JSP 教程 之 JSP 表达式语言 7
**JSP EL简化了JavaBean数据访问,支持算术和逻辑表达式,允许使用数字、字符串及布尔值。示例展示如何获取请求参数:`${param.order}`或`${param[&quot;order&quot;]}`代表`order`参数,`${param[&quot;username&quot;]}`用于获取`username`。`param`对象返回单个字符串,`paramValues`返回字符串数组。**
39 0
|
6月前
|
存储 Java
JSP 教程 之 JSP 表达式语言 6
**JSP EL简化了JavaBean数据访问,支持算术和逻辑表达式,以及整数、浮点数等类型。隐含对象如pageScope、requestScope等代表不同作用域,便于访问请求参数、HTTP头信息和Cookie等。通过scope对象,如applicationScope,可直接在表达式中访问不同层次的变量,如`applicationScope.box`。**
38 0
|
6月前
|
存储 Java
JSP 教程 之 JSP 表达式语言 5
**JSP EL简化了JavaBean数据访问,支持数学和逻辑表达式,以及类型如整数、浮点数、字符串和布尔值。它有9个隐含对象,包括不同作用域的对象、请求参数、HTTP头、初始化参数和Cookie等。例如,使用`pageContext.request.queryString`可获取请求的查询字符串。**
30 0
|
6月前
|
存储 Java
JSP 教程 之 JSP 表达式语言 4
**JSP EL简化了JavaBean数据访问,支持算术和逻辑表达式,包含整数、浮点数等类型。核心特性是隐含对象,如** `pageScope` **、** `requestScope` **到** `applicationScope` **,以及** `param` **、** `cookie` **和** `pageContext` **等,它们可在表达式中作为变量使用。实例演示有助于深入理解。
32 0
|
6月前
|
存储 Java
JSP 教程 之 JSP 表达式语言 3
**JSP表达式语言(EL)**简化了JavaBean数据访问,支持算术和逻辑表达式,允许使用整数、浮点数、字符串及布尔值。**EL函数**通过命名空间引用,如 `${ns:func(param1, param2)}`,例如`fn:length`用于计算字符串长度。要使用函数,需先在服务器安装相关标签库,并在JSP中用`&lt;taglib&gt;`导入。
27 0