JSP
JSP是 sun 推出的一个 web 页面展示技术、用来替代 html。
JSP是基于Java语言的一门技术、并且是服务器语言,需要通过tomcat等服务器运行
JSP本质上是Servlet, 是Servlet的页面表现形式、Servlet是jsp的底层实现
jsp 最终会被 tomcat 服务器解析成 servlet
JSP 脚本指令 (了解、不需要掌握)
<%= %> : 输出脚本
<% %> : 定义代码片段
<%! %> : 定义成员属性和内部类和方法
JSP page指令
page指令主要设置一些和页面相关的全局配置,比较常用的是编码的配置
<%@page pageEncoding="UTF-8" contentType="text/html;charset=UTF-8"%>
- pageEncoding : 设置页面编码方式,主要解决jsp页面中中文字符乱码
- contentType : 设置页面编码方式,主要解决jsp中 后端返回的动态数据
- import : 导入使用的类、和Java中类的 import 用法一样
- isELIgnored : 是否忽略 EL 表达式 ,默认是 false, 通常不需要修改
- errorPage : 用来指定错误的页面,如果 jsp页面产生异常,则会跳转到 errorPage指定的页面
- isErrorPage: 用来标记当前jsp页面是否是一个错误页面,如果被标记,可以使用内置变量 exception
EL 表达式
是 JSP 页面中特有的表达式,主要的职责是用来输出数据,用来替代
<%= %>
基本语法: ${key}
${key} 本质是使用 pageContext 调用 findAttribute(key) 依次从四大作用域中查找数据、并返回与之对应的数据
EL 表达式如果 获取到的值 是 null, 那么在网页中进行输出的时候, 不会显示任何内容
key是作用域中存放的键,默认会从pageContext, request, session, application中查找对应的key
JSP 的四大作用域
作用域都拥有三个方法, setAttribute(key, value) , getAttribute(key), removeAttribute(key)
- pageContext : 是一个基于页面级别的作用域,是JSP特有的,存储在该作用域中的数据,只能在当前 jsp 中使用
pageContext 拥有一个特殊的方法 findAttribute(key) , 该方法会依次从 pageContext, request, session, application 中查找对应的key
如果 找到 了 key, 就返回 key 对应的 value , 否则返回 null 。
- request
- session
- application
使用 EL 从四大作用域中获取值
- pageContext : ${pageScope.key}
- request : ${requestScope.key}
- session : ${sessionScope.key}
- application : ${applicationScope.key}
EL 表达式 获取 对象中的属性值
${obj.property}
obj 代表 作用域中存储的对象, property 代表对象中的getter属性
EL 表达式 获取 Map对象中的 键
${map.key}
${map[key]}
map代表作用域中存储的Map容器,key代表map中对应的键的名字, map.key 中的key必须满足标识符命规范,而map[key]中的key可以任意字符串即可
EL 表达式 获取 数组/Collection 中的数据
${array[index]}
${list[index]}
index代表索引,从0开始
使用EL表达式获取三大作用域
- request
${pageContext.request}
获取项目名称: ${pageContext.request.contextPath}
- session
${pageContext.request.session}
${pageContext.session}
- application
${pageContext.request.session.servletContext}
${pageContext.servletContext}
EL表达式获取请求参数
${param.key}
${param} 用来获取请求参数,如果一个键对应多值,只能获取传入的第一个值, 返回一个 Map<String, String>
${paramValues}
${paramValues} 用来获取请求参数,返回一个 Map<String, String[]>
获取请求头信息
${header} : 返回一个 Map<String,String>
${headerValues} : 返回一个 Map<String,String[]>
获取Cookie信息
${cookie}
JSTL 标签库
在形式上,更类似于网页,但本质上是 Java代码
和 EL表达式 进行配合
jstl库是一个第三方库、需要单独导入
- C 标签库
- fn 标签库
- fmt 标签库
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
C 标签库
在 JSP 页面,使用 taglib 指令 引入 C 标签库
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
- c:set 将数据通过 c:set 存储到指定的作用域中
<c:set var="" value="" scope="page"></c:set>
var : 用来设置存储的数据的键、用来获取值的时候使用,会自动存储到scope设置的作用域中
scope: 默认是 page, 代表数据存储的作用域
value : 用来设置 值 ,可以是一个字面量 ,也可以是从 EL表达式中获取
- c:out 将数据输出到浏览器中, 相比与 EL表达式的输出, c:out 支持 字符串的转义处理、防止恶意攻击。
<c:out value="${username}" escapeXml="false" default="admin" />
value : 用来设置要输出的内容
escapeXml : 是否对字符串中包含的标签进行转义处理,默认是 true
default : 用来设置默认值,当 value的值为 null的时候,可以显示默认值
- c:if 用来做判断的标签
<c:if test="" var="" scope="" />
test(掌握) : 支持 EL 表达式 , 支持 关系运算符, 逻辑运算符 , 支持 empty(空) , not empty(非空)
var : 定义一个变量名、用来存储 test表达式返回的结果
scope : 将 test表达式的结果 var 对应的变量存储到哪一个作用域中
关系运算符 : > , >= , < , <= , != , ==
EL 中同时支持 gt(大于) , ge(大于等于), lt (小于) , le (小于等于) , ne (不等于) , eq (等于)
逻辑运算符 : && , || , !
EL 中同时支持 and , or , not
- c:forEach 用来做数据循环的标签
- 数字遍历
<c:forEach var="" begin="1" end="9" step="1">
....
</c:forEach>
var : 用来设置循环的 计数器的变量类,类似于 fori循环中 i , 并且变量会被自动放到 pageContext 中
begin : 值是一个数字,支持 EL 表达式, 代表从 几开始
end : 值是一个数字、支持 EL表达式 ,代表到 几 结束
step : 设置每次增加的频率,步长,默认是 1 , 值不能为负数
- 数组/Collection 遍历
<c:forEach var="" items="" varStatus="vs">
</c:forEach>
var : 用来表示集合/数组中的元素对应的变量, 类似与增强 for 循环
items : 用来设置 要遍历的 集合/数组 对象
varStatus: 值可以随意设置,满足标识符命名即可, varStatus 对应了几个比较重要的属性
- index : 数据对应的索引,从0开始
- count : 数据对应的位置,从1开始,和 index 永远差 1
- first : 是否是第一条数据
- last : 是否是最后一条数据
- c:choose 实现多分支条件判断
<c:choose>
<c:when test="">
</c:when>
<c:when test="">
</c:when>
<c:when test="">
</c:when>
...
<c:otherwise>
</c:otherwise>
<c:choose>
- c:forTokens 按照某种规则拆分字符串,并进行遍历
<c:forTokens items="" delims="" varStatus="" var="" ></c:forTokens>
items : 要遍历的目标字符串
delims : 设置要拆分的字符串的分隔符
var 和 varStatus用法参考 c:forEach
- c:url 用来定义网址的一个标签,会自动在网址的前面添加一个 工程名,替换 ${pageContext.request.contextPath}
fn (function)标签库
在页面进行数据展示的时候,可能有些数据需要进行一个处理、尤其是字符串,例如手机号中间四位隐藏、身份证号脱敏等等操作
fn 标签库的职责是 对 要展示的 字符串 进行 特殊处理的 标签库
fn 主要应该在 EL 表达式
引入方式
<%@taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
- fn:length 获取 Collection集合 / 字符串 的长度
${fn:length(users)}
- fn:contains 判断字符串中是否包含指定的 子串
${fn:contains('hello' , 'he')}
-
fn:containsIgnoreCase 不区分大小写判断字符串中是否包含 指定的子串,用法和 fn:contains 相同
-
fn:indexOf 获取某个子串在字符串中第一次出现的索引位置
-
fn:lastIndexOf 获取某个子串在字符串中最后一次出现的索引位置
${fn:indexOf('hello' , 'e')} ---> 1
- fn:startsWith 获取字符串是否以指定的子串开始
- fn.endsWith 获取字符串是否以指定的子串结尾
${fn:endsWith('D:/xxx.jpg', '.png')} ---> false
- fn:substring 截取字符串
${fn:substring('hello' , 2 , -1)} ---> llo
-
fn:toLowerCase 将字符串以全小写的形式返回
-
fn:toUpperCase 将字符串以全大写的形式返回
-
fn:trim 去除字符串前后的空格
-
fn:replace 将字符串中指定的内容进行替换
${fn:replace('hello' , 'o' , 'y')} ---> helly
fmt 格式化标签库
主要是对数据进行格式化的一个标签库, 数字的格式化, 日期的格式化
引入方式
<%@taglib prefix="fmt uri="http://java.sun.com/jsp/jstl/fmt" %>
- fmt:formatNumber
<fmt:formatNumber value="3.1415926" pattern="#.##" />
#.## 保留两位小数 , # 代表 保留整数 , 有四舍五入的效果
- fmt:formatDate
<fmt:formatDate value="${now}" pattern="yyyy-MM-dd HH:mm:ss" />
只支持 java.util.Date日期类,不支持JDK新版日期类
JSP 包含 include 指令
<%@include file="" %>
include 指令是 JSP中的 静态包含技术,将被包含的页面直接引入到 当前页面中,作为当前页面的一份子、形成一个大的页面,最终进行统一编译
可以通过 包含 将 网页中 相同的结构和内容 进行 剥离、抽取成一个单独的内容,在进行include 引入
JSP 动态包含
<jsp:include page=“”>
<jsp:param name=“key” value=“” />
jsp:include 是 jsp中的 动态包含技术,将被包含的页面编译后的结果 引入到当前页面中,形成一个大的页面
动态包含 可以通过 jsp:param 给 被包含的页面传递数据 , 在被包含的页面可以通过 ${param.key} 获取对应的数据
JSP 九大内置对象
九大内置对象在 java脚本指令中可以直接使用的对象
- pageContext , page
- request , response
- session
- application
- config : 是 ServletConfig
- out : 是 response.getWrite的返回值
- exception
am name=“key” value=“” />
jsp:include 是 jsp中的 动态包含技术,将被包含的页面编译后的结果 引入到当前页面中,形成一个大的页面
动态包含 可以通过 jsp:param 给 被包含的页面传递数据 , 在被包含的页面可以通过 ${param.key} 获取对应的数据
JSP 九大内置对象
九大内置对象在 java脚本指令中可以直接使用的对象
- pageContext , page
- request , response
- session
- application
- config : 是 ServletConfig
- out : 是 response.getWrite的返回值
- exception