JSP、EL表达式、JSTL

JSP <% %>

概念:Java Server Pages,java 服务器端页面。一种动态网页技术标准。

  • 可以理解为:一个特殊的页面,其中既可以指定定义 html 标签,又可以定义 java 代码。html 域 java 共处一个页面。
  • 用于简化 Servlet 开发。

原理:JSP 本质上就是一个继承了 Servlet 的实现类

  • 实现过程:浏览器访问.jsp资源;服务器解析请求消息,找到是否有.jsp资源;若有,会将.jsp文件转换为.java文件;编译java文件生成.class字节码文件;由该字节码文件给客户端提供响应。所以 JSP 本质上就是一个 Servlet。

  • JSP的脚本:JSP 页面定义 Java 代码的方式 <% %>

    • <% 代码 %>:该定义的java代码,在 jsp 转换为 java 类后变成service方法中的内容。service方法中可以定义什么,该脚本中就可以定义什么。

    • <%! 代码 %>:该定义的 java 代码,在 jsp 转换 java 类后放在成员位置。即可以用来定义成员变量和成员方法等。

    • <%= 代码 %>:该定义的 java 代码,会输出到浏览器页面上。输出语句中可以定义什么,该脚本中就可以定义什么。

  • jsp注释:
    <%-- --%>:可以注释所有。 html 注释 <!-- --> 只能注释html代码片段

JSP 指令

  • 作用:用于配置JSP页面,导入资源文件

    • 格式:
      <%@ 指令名称 属性名1=属性值1 属性名2=属性值2 ... %>
      
  • 三种指令pagetaglibinclude

    page: 配置 JSP 页面的信息。如:

    <%@ page contentType="text/html; charset=UTF-8" language="java" %>
    
    • contentType:等同于response.setContentType()
      • 设置响应体的MIME类型以及字符集
      • 设置当前jsp页面的编码(只能是高级的IDE才能生效,如果使用低级工具,则需要设置pageEncoding属性设置当前页面的字符集)
    • import:导入 java 包。
    • errorPage:当前页面发生异常后,会自动跳转到指定的错误页面
    • isErrorPage:标识当前也是是否是错误页面。
      • true:是,可以使用内置对象exception
      • false:否。默认值。不可以使用内置对象exception

    include: 包含其他 jsp 页面的,即导入 jsp 页面的资源文件。如:

    <%@ include file="top.jsp"%>
    

    taglib:导入 jstl 标签库资源。如:

    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    
    • prefix:前缀,自定义的

JSP的内置对象

在jsp页面中不需要获取和创建,可以直接使用的对象。因为这些代码最终放到 service 方法中使用,而 service 方法中对这些对象已经声明了。

jsp一共有9个内置对象

变量名真实类型作用
pageContextPageContext当前页面共享数据,还可以获取其他八个内置对象
requestHttpServletRequest一次请求访问的多个资源(转发)
sessionHttpSession一次会话的多个请求间
applicationServletContext所有用户间共享数据
responseHttpServletResponse响应对象
pageObject当前页面(Servlet)的对象 this
outJspWriter输出对象,数据输出到页面上
configServletConfigServlet的配置对象
exceptionThrowable异常对象

out:字符输出流对象。可以将数据输出到浏览器页面上。和 response.getWriter()类似。

response.getWriter() 和 out.write() 的区别:在tomcat服务器真正给客户端做出响应之前,会先找response缓冲区数据,再找out缓冲区数据。即 response.getWriter() 数据输出永远在 out.write() 之前。


EL表达式 ${ }

概念:Expression Language 表达式语言

作用:替换和简化 jsp 页面中 java 代码的编写,将结果显示在浏览器页面上。 简单来说EL表达式就是让程序员,简化了代码的书写量。在学EL表达式之前我们必须通过<%= %>来取出域中的数据,但这种方式过于繁琐,所以就诞生了EL表达式。

语法:${表达式}

  • 注意:jsp 默认支持 EL 表达式的。如果要忽略 EL 表达式

    1、设置 jsp 中page指令中:isELIgnored=“true” 忽略当前jsp页面中所有的el表达式
    2、\${表达式} :忽略当前这个el表达式。

使用:

  • 运算:

    • 运算符:

      1、算数运算符: + - * /(div) %(mod)
      2、 比较运算符: > < >= <= == !=
      3、逻辑运算符: &&(and) 、||(or)、 !(not)
      4、空运算符: empty

    • 空运算符 empty 功能:用于判断字符串、集合、数组对象是否为null或者长度是否为0如:

      ${empty list}:判断字符串、集合、数组对象是否为null或者长度为0
      ${not empty str}:表示判断字符串、集合、数组对象是否不为null 并且长度>0

  • 获取值:
    EL表达式只能从域对象中获取值,jsp中有四个域对象。
    语法:
    1、${域名称.键名}:从指定域中获取指定键的值,四个域对象名称:

    1、pageScope --> pageContext 域对象
    2、requestScope --> request 域对象
    3、sessionScope --> session 域对象
    4、applicationScope --> application(ServletContext)域对象

    举例:从 request 域中存储 name = 张三

    ${requestScope.name}
    

    2、${键名}:表示依次从最小的域中查找是否有该键对应的值,直到找到为止。

    3、获取对象、List集合、Map集合的值

    • 获取对象:${域名称.键名.属性名},本质上会去调用对象的getter方法
    • 获取List集合:${域名称.键名[索引]}
    • 获取Map集合:${域名称.键名.key名称} 或 ${域名称.键名[“key名称”]}
  • 隐式对象:
    EL 表达式中有11个隐式对象

    • pageContext:获取jsp其他八个内置对象,如:
      ${pageContext.request.contextPath}:动态获取虚拟目录
      

JSTL <C:标签名>

概念:JavaServer Pages Tag Library,JSP 标准标签库。是由Apache组织提供的开源的免费的jsp标签。

作用:用于简化和替换jsp页面上的java代码,将 Java 代码换成标签。jstl出现的目的同 el 一样也是要代替 jsp 页面中的脚本代码。JSTL 标准标签库有5个子库,但随着发展,目前常使用的是他的核心库。

JSTL五大子库:

Core(核心库) 标签库的URI:http://java.sun.com/jsp/jstl/core 常用前缀:c
I18N(国际化) 标签库的URI:http://java.sun.com/jsp/jstl/fmt 常用前缀:fmt
SQL 标签库的URI:http://java.sun.com/jsp/jstl/sql 常用前缀:sql
XML 标签库的URI:http://java.sun.com/jsp/jstl/xml 常用前缀:x
Functions 标签库的URI:http://java.sun.com/jsp/jstl/functions 常用前缀:fn

使用步骤:

  1. 导入jstl相关jar包
  2. 引入标签库:使用taglib指令:<%@ taglib %>
  3. 使用标签

常用的JSTL标签

  • if 标签:相当于 java 代码的 if 语句
    属性:

    • test 必须属性,接受boolean表达式的值。一般情况下,test属性值会结合el表达式一起使用,如果表达式为true,则显示if标签体内容,如果为false,则不显示标签体内容。
      <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
      <c:if test="${not empty str}">不为空</c:if>
      

    注意:

    • c:if 标签没有else情况,想要else情况,则可以在定义一个c:if标签

  • choose 标签:相当于 java 代码的 switch 语句

    • 使用 choose 标签声明, 相当于 switch 声明;

    • 使用 when 标签做判断, 相当于 case;

    • 使用 otherwise 标签做其他情况的声明, 相当于 default。

      如:

      <C:choose>
      	<c:when test="${number == 1}">星期一</c:when>
          <c:when test="${number == 2}">星期二</c:when>
          <c:when test="${number == 3}">星期三</c:when>
          <c:when test="${number == 4}">星期四</c:when>
          <c:when test="${number == 5}">星期五</c:when>
          <c:when test="${number == 6}">星期六</c:when>
      	<c:when test="${number == 7}">星期天</c:when>
      	<c:otherwise>数字输入有误</c:otherwise>
      </c:choose>
      
  • foreach 标签:相当于 java 代码的 for 语句

    • 完成重复的操作

      属性:

      • begin:开始值
      • end:结束值
      • var:临时变量
      • step:步长
      • varStatus :循环状态对象
        • index:容器中元素的索引,从o开始
        • count:循环次数,从1开始

      如:

      <c:forEach begin="1"  end="10"  var="i"  step="1">
      	${i}<br>
      </c:forEach>
      
    • 遍历容器

      属性:

      • items:容器对象
      • var:容器中元素的临时变量
      • varStatus :循环状态对象
        • index:容器中元素的索引,从o开始
        • count:循环次数,从1开始

      如:

      <c:forEach items="${list}"  var="str" varStatus="s">
      	${s.index} ${s.count} ${str}<br>
      </c:forEach>
      

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值