jsp------JAVA服务器页面

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

猜你喜欢

转载自blog.csdn.net/weixin_52953038/article/details/126984948