JSP&EL&JSTL

JSP&EL&JSTL

1. JSP

1.1 Jsp概述

什么是JSP

JSP:Java Server Pages Java服务器端页面。

JSP 就是 HTML + Java代码 + JSP自身东西。

JSP的运行原理

JSP在执行时,会被服务器翻译为Servlet编译执行,JSP就是一个Servlet。

JSP脚本元素

<%! %> :JSP声明 翻译成 Servlet成员部分的内容。声明变量,方法,内部类。

<%= %> :翻译out.print(),在service方法内部。用于生成HTML页面源码。

<% %> :嵌入Java代码 翻译成service方法内部的代码块。声明变量,内部类。

1.2 JSP的注释

HTML的注释

  • 写法:

    • <!--HTML的注释 -->
  • 存在时机

    • 存在JSP的源码中,翻译成Servlet后这个注释也存在,在生成HTML响应到页面的时候这个注释也会存在。

Java代码的注释

  • 写法:

    • <% // 单行注释

    • /* 多行注释 */

    • /**文档注释*/

    • %>

  • 存在时机

    • 存在JSP的源码中,翻译成Servlet后Java代码的注释也会存在,但是生成HTML响应到页面后,这种注释就消失了。

JSP注释

  • 写法:

    • <%-- JSP的注释 --%>
  • 存在时机:

    • 存在JSP的源码中,翻译Servlet后注释就没有了。

注意:Java代码注释的话不要使用HTML的注释!!!

1.3 JSP的指令元素的概述

JSP指令元素作用

  • 用于指示JSP执行的某些步骤

  • 用于指示JSP变现特定行为

JSP指令元素的语法

  • 语法:

    • <%@ 指令名称 属性名称=属性的值 属性名称=属性的值 %>

JSP指令元素的分类

  • page指令:指示JSP的页面设置属性和行为

  • include指令:指示JSP包含哪些其他页面

  • taglib指令:指示JSP页面包含哪些标签库

1.4 JSP的指令-page指令

Page指令简介

  • 写法:

    • <%@ page 属性名=属性值 %>
  • Page指令用来定义JSP文件的全局属性。

  • 这些属性可以单独使用,也可以几个或多个同时使用。

  • 在JSP页面中,只有import属性可以出现多次,其他属性都只能出现一次。

Page指令属性

  • language属性: 声明使用脚本的语言。只能是java。

  • extends属性: 标明JSP编译成Servlet的时候继承的类。默认值:HttpJspBase。

  • session属性: 标明JSP中是否可以直接使用session对象。默认值是true。

  • buffer属性: 标明JSP对客户端输出缓冲区大小。默认值8kb。

  • autoFlush属性: 如果缓冲区大小溢出,是否自动刷出。默认true。

  • import属性: 用于导入Java包或类。

  • contentType属性:标明JSP被浏览器解析和打开的时候采用的默认的字符集。

  • pageEncoding属性:JSP文件及JSP翻译后的Servlet保存到硬盘上采用字符集。

  • isErrorPage属性: 处理JSP页面异常。

  • errorPage属性: 处理JSP页面异常。

  • isELIgnored属性: 通知JSP是否忽略EL表达式。

1.5 JSP的指令-include和taglib指令

Include指令简介

  • 写法:

    • <%@ include 属性名=属性值%>
  • 作用:

    • 在JSP页面中静态包含一个文件,同时由该JSP解析包含的文件内容。

Include指令属性

  • file属性: 指示JSP页面包含页面路径。

Include指令原理(静态包含原理)

1560152560143

  • 注意地方:

    • 应该将被包含的页面的结构去掉。

    • 在被包含的页面中定义变量,在包含的页面中还可以使用。

Taglib指令简介

  • 写法

    • <%@ taglib 属性名=属性值%>
  • 作用:

    • 用于在JSP页面中引入标签库。

Taglib指令属性

  • uri属性: 引入的标签库的路径

  • prefix属性: 引入标签库的别名

1.6 JSP的内置对象

什么是JSP的内置对象

JSP的内置对象:指的是可以直接在JSP页面中使用的对象。

JSP的内置对象有哪些

JSP当中有9大内置对象:

  • request :从客户端向服务器发送的请求对象

  • response :从服务器端向客户端作出响应对象

  • session :服务器为客户端创建会话对象

  • application :代表应用。获得的ServletContext对象。

  • out :向输出流写入内容的对象。

  • page :当前的JSP翻译成Servlet后的对象的引用。

  • pageContext :本JSP的页面的上下文对象。

  • config :本JSP的ServletConfig对象。

  • exception :表示JSP页面运行时产生的异常对象。

JSP的内置对象具体类型

  • request HttpServletRequest

  • response HttpServletResponse

  • session HttpSession

  • application ServletContext

  • config ServletConfig

  • page Object

  • pageContext PageContext

  • out JspWriter

  • exception Throwable

1.7 pageContext对象的概述

pageContext对象简介

pageContext对象直接翻译为”页面上下文”对象,代表的是当前页面运行的一些属性。

它是javax.servlet.jsp.PageContext类的实例对象。

pageContext对象作用

  • 提供了page范围的数据存取的方法:

    • 向page范围中存入数据:

1560152657200

  • 从page范围获取数据

1560152670664

  • 从page范围移除数据

1560152684686

  • 查找属性的方法:

1560152698712

  • 通过这个对象获得其他的8个内置对象:

    • 获得其他8个内置对象的方法

1560152707661

1560152740321

1.8 JSP的四个作用范围

JSP的四个作用范围概述

  • PageScope :页面范围。

    • 页面范围指的是在当前的页面内有效,出了这个页面,用pageContext保存的数据就无效了。
  • RequestScope :请求范围。

    • 从客户端向服务器发送一次请求,服务器对这次请求作出了响应之后,用request保存的数据就无效了。
  • SessionScope :会话范围。

    • 每个浏览器向服务器发送请求(多次请求)。将该会话结束。
  • ApplicationScope :应用范围。

    • 在整个应用中任意的地方都可以获取。

JSP的四个作用范围演示

pageContext对象向四个域范围存取数据

1560152913558

findAttribute方法:

查找属性方法:先根据小范围的名称进行查找,如果找到了就返回,如果没有找到就会去比其大一个域的范围进行查找。

1.9 JSP的动作标签

什么是JSP的动作标签

JSP的动作标签用于在JSP页面中提供业务逻辑功能,避免在JSP页面中直接编写Java代码,造成jsp页面难以维护。

常用的动作标签

  • <jsp:forward/> :请求转发。

  • <jsp:include/>:包含(动态包含)。

  • <jsp:param/>:传递参数。

演示JSP的动作标签

静态包含和动态包含区别

静态包含:在翻译阶段就将代码复制过去了,而动态包含是包含最终的执行结果

动态包含的原理

1560152943493

2. EL

2.1 EL的概述

EL:Expression Language表达式语言。

EL的作用: EL和JSTL一起使用取代JSP页面中嵌入Java代码写法。

EL功能

  • EL获取数据

  • EL执行运算

  • EL获取web开发常用的对象

  • EL调用Java方法

EL语法

  • 语法:

    • ${ EL表达式 }

2.2 EL获取数据

EL如何获取数据

EL表达式语句在执行的时候,会调用pageContext.findAttribute()方法。分别从page、request、session、application范围查找相应对象,找到就会返回相应对象,找不到返回””(不是null,是空的字符串)。EL所获取的数据需要在四个作用范围中。

演示EL获取数据

1560153179088

2.3 EL获取数组和集合中的数据

获取数组的数据

1560153212543

获取List集合的数据

1560153225590

获取Map集合的数据

1560153239967

  • 注意:

    • 如果map的key中包含了特殊字符,不能使用.必须使用[]。

      • .用来获取对象的属性的。

      • []用来获得下标。

1560153268543

2.3 EL执行运算

  1. 执行算数运算

1560153328563

执行关系运算

1560153340123

执行逻辑运算

1560153349545

执行三元运算

1560153359007

empty运算符

1560153369984

2.4 EL获取web开发常用对象

常用对象有哪些

EL表达式定义了11个web开发常用对象。使用这些对象可以很方便获取web开发冲的一些常见对象,并可以读取这些对象中的数据。

  • pageContext :相当于JSP内置对象中pageContext

  • pageScope :获取指定域下的名称的数据

  • requestScope :获取指定域下的名称的数据

  • sessionScope :获取指定域下的名称的数据

  • applicationScope :获取指定域下的名称的数据

  • param :在页面中接收请求参数(接收一个名称对应一个值参数)。

  • paramValues :在页面中接收请求参数(接收一个名称对应多个值参数)。

  • header :在页面上获取请求头(获取一个key对应一个value 头)

  • headerValues :在页面上获取请求头(获取一个key对应多个value 头)

  • cookie :访问cookie的名称和值(${cookie.key.name} ${cookie.key.value})

  • initParam :获取全局初始化参数的值

3. JSTL

什么是JSTL

JSTL:JSP的标准标签库。

为什么学习JSTL

主要和EL来取代传统页面上直接嵌入Java代码写法。提升程序可读性、维护性和方便性。

JSTL的版本

JSTL1.0、JSTL1.1和JSTL1.2版本

  • 1.0版本不支持EL表达式。

  • 1.1和1.2支持了EL表达式。

JSTL的标签库

  • c标签(core标签库)

  • fmt标签(国际化标签库)

  • xml标签

  • sql标签

引入标签库

1560153463551

使用JSTL

1560153471704

JSTL的if标签

if的标签使用

1560153507140

if标签的属性

  • test属性 :条件

  • var属性 :将test中的条件的值赋给一个变量,在var中定义变量

  • scope属性:作用范围

JSTL的foreach标签

1
2
3
4
5
6
7
8
9
<h3>遍历</h3>
<c:forEach var="i" begin="2" end="100" step="1" varStatus="s">
<c:if test="${s.count % 2 == 0}">
<font color="red">${i}</font>
</c:if>
<c:if test="${s.count % 2 != 0}">
<font color="blue">${i}</font>
</c:if>
</c:forEach>

###