JavaWeb之JSP(下)

前言

1. JSP的指令

(1)Page指令

(2) Include指令

2. JSP出现的状态码

3. EL表达式

(1)什么Expression Language 表达式语言

(2)EL表达式语法

(3)EL中基础操作符

4. JSTL

(1) 什么是JSTL

(2) JSTL的作用和语法格式

(3) 核心标签

(4)格式化标签

1、fmt:formatDate

2、fmt:parseDate

3、fmt:formatNumber


前言

         回顾一下学习并对JavaWeb的学习过程中对笔记总结进行记录,同时进行思考过程中的理解加入其中,方便自己进行后续的学习和回顾

1. JSP的指令

JSP指令用来设置整个JSP页面相关的属性,如网页的编码方式和脚本语言。

语法格式如下:

<%@ directive attribute="value" %>
directive:指令名称  attribute 属性名 value:属性值
指令名称描述
page定义网页依赖属性,比如脚本语言、error页面、缓存需求等等
include包含其他文件
taglib引入标签库的定义

(1)Page指令

Page指令为容器提供当前页面的使用说明一个JSP页面可以包含多个page指令

Page指令的语法格式:

这个使用指向错误页面,导入页面以及编码方式都是比较常用的属性

<%@ page attribute="value" %>
属性名属性值描述
languagejava解释该JSP文件时采用的语言,一般为java语言,默认为java
extends任何类的全名编译该JSP文件时继承哪个类,JSP为Servlet,因此当指明继承普通类时需要实现Servlet的init、destroy等方法
import任何包名、类名引入该JSP中用到的类、包等,import是唯一可以声明多次的page指令属性,一个import可以引用uogelei,中间用英文逗号隔开<%@ page import=包名.类名,包名.类名%>
sessiontrue、false该JSP内是否内置Session对象,如果为true,则内置Session对象,可直接使用,否则反之,默认为true
autoFlushtrue,false是否运行缓存,如果为true,则使用out.println()等方法输出的字符串并不是立刻到达客户端服务器的,而是暂时存到缓存里,缓存满了或者程序行完毕或者执行out.flush()操作时才到客户端,默认为true。
buffernone或者数字KB指定缓存大小,当autoFlush设为true时有效,例如<%@ page buffer=10kb%>
isThreadSafetrue,false是否线程安全,如果为true,则运行多个线程同时运行该jsp程序,否则只运行一个线程,其余线程等待,默认为false
isErrorPagetrue,false指定该页面是否为错误显示页面,如果为true,则该JSP内置有一个Exception对象exception,可直接使用,否则没有,默认为false
errorPage某个JSP页面的相对路径指明一个错误页面,如果该JSP程序抛出一个未捕捉的异常,则转到errorPage指定的页面,errorPage指定的页面通常isErrorPage属性为true,且内置的exception对象为未捕捉的异常
contentType有效的文档类型客户端浏览器根据该属性判断文档类型,例如 HTML格式为text/html、纯文本格式为text/plain、JPG图像为image/jpeg、GIF图像为image/gifWORD文档为application/msword,该属性常跟着charset设置编码一起,作用是通知服务器和浏览器都使用同一个码表
pageEncodingUTF-8,ISO-8859-1等

(2) Include指令

JSP可以通过include指令来包含其他文件。被包含的文件可以是JSP文件、HTML文件或文本文件。包含的文件就好像是该JSP文件的一部分,会被同时编译执行。

Include指令的语法格式如下:

<%@ include file="文件相对 url 地址" %>

include 指令中的文件名实际上是一个相对的 URL 地址。

如果您没有给文件关联一个路径,JSP编译器默认在当前路径下寻找。

(3)Taglib指令

总之这个我不多说,反正用起来很吊,也非常好用

JSP API允许用户自定义标签,一个自定义标签库就是自定义标签的集合。

Taglib指令引入一个自定义标签集合的定义,包括库路径、自定义标签。

<%@ taglib uri="uri" prefix="" %>

uri属性确定标签库的位置,prefix属性指定标签库的前缀(可自定义)。

2. JSP出现的状态码

状态码消息描述
100Continue只有一部分请求被服务器接收,但只要没被服务器拒绝,客户端就会延续这个请求
101Switching Protocols服务器交换机协议
200OK请求被确认
201Created请求时完整的,新的资源被创建
202Accepted请求被接受,但未处理完
300Multiple Choices一个超链接表,用户可以选择一个超链接并访问,最大支持5个超链接
301Moved Permanently被请求的页面已经移动到了新的URL下
302Found被请求的页面暂时性地移动到了新的URL下
303See Other被请求的页面可以在一个不同的URL下找到
400Bad Request服务器无法识别请求
403Forbidden禁止访问所请求的页面
404Not Found服务器无法找到所请求的页面
405Method Not Allowed请求中所指定的方法不被允许
500Internal Server Error请求不完整,服务器遇见了出乎意料的状况
501Not Implemented请求不完整,服务器不提供所需要的功能
502Bad Gateway请求不完整,服务器从上游服务器接受了一个无效的响应
503Service Unavailable请求不完整,服务器暂时重启或关闭
504Gateway Timeout网关超时
505HTTP Version Not Supported服务器不支持所指定的HTTP版本

3. EL表达式

(1)什么Expression Language 表达式语言

最初定义于JSTL1.0部分

在JSP2.0中,EL从JSTL中剥离出来,放置在JSP规范中,称为JSP2.0规范的一部分

在JSP中使用EL表达式,可以简化对象和变量的访问是EL表达式

(2)EL表达式语法

代入这个表达式后,对于页面之间的数据传输,以及代码的编写都有了很多简化,更加方便和节省时间

语法格式:${需要展示信息的名字}

注意:

当表达式没有指定变量或者对象的范围时,那么容器会依次从pageContext—>request—>session—>application中查找该变量或对象,我们可以通过隐含对象获得指定作用域的值:

pageScope对象,用于获取当前页面的属性值

requestScope对象,用于获取请求范围的属性值

sessionScope对象,用于获取会话范围的属性值

applicationScope对象,用于获取程序范围的属性值

语法:

${requestScope.key}

(3)EL中基础操作符

术语定义
算术型+ 、-、 * /(div) 除 、 %(mod) 余数
逻辑型and、&&、or、||、!、not
关系型==、eq、!=、ne、、gt、<=、le、>=、ge。可以与其他值进行比较,或与布尔型、字符串型、整型或浮点型文字进行比较。
EmptyEmpty操作符是一个前缀操作符用于判断一个值是否为null或者为empty如String str = “”; ${empty str} 返回值为true;
条件型A ?B :C。根据 A 赋值的结果来赋值 B 或 C。

示例:

单个变量:${a+10}<br>
单个变量:${s}<br> 
单个对象:${key.属性名}
    //对象类型 
      Users u=new Users();
      u.setName("王老五");
      u.setPass("abc");
      pageContext.setAttribute("u1",u);
       user.name=${u1.name}
       user.pass=${u1.pass} 
 // list集合对象:   
      List list=new ArrayList();
          list.add("刘能");
          list.add(30);
          list.add(u);
      pageContext.setAttribute("list2",list);
       list1=${list2[0]}<br/>
       list2=${list2[1]}<br/>
       list3=${list2[2].pass}<br/>
​
// map集合:  
       k1=${map1.k1}<br> 
       k2=${map1.k2.username}---  ${map1.k2.password}
​
 判断变量是否有值或是否存在:${empty key值}
         List list2=new ArrayList();
         list2.add("aa");
         request.setAttribute("list222",list2);
​
判断list中是否有数据:${empty list222}        

4. JSTL

(1) 什么是JSTL

        JSP标准标签库(JSTL)是一个JSP标签集合,它封装了JSP应用的通用核心功能。

        JSTL支持通用的、结构化的任务,比如迭代,条件判断,XML文档操作,国际化标签,SQL标签。 除了这些,它还提供了一个框架来使用集成JSTL的自定义标签。

        根据JSTL标签所提供的功能,可以将其分为5个类别。核心标签 格式化标签 sql标签 xml标签 jstl函数(后面详细解释

(2) JSTL的作用和语法格式

作用:简化jsp页面编写代码

语法格式:

  1. 下载 jakarta-taglibs-standard-1.1.2.zip 包并解压,将 jakarta-taglibs-standard-1.1.2/lib/ 下的两个 jar 文件:standard.jar 和 jstl.jar 文件拷贝到 /WEB-INF/lib/ 下。

  2. 在JSP页面中引入<%@ taglib prefix=”页面使用的名称” uri=”功能范围的路径”%>

功能范围Uri前缀
coreOracle Java Technologies | Oraclec
i18nOracle Java Technologies | Oraclefmt
sqlOracle Java Technologies | Oraclesql
xmlOracle Java Technologies | Oraclex
functionsOracle Java Technologies | Oraclefn

(3) 核心标签

①核心标签是最常用的 JSTL标签。引用核心标签库的语法如下:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

② 核心标签的分类

主要我们还是以使用第一个和第三个为主

表达式操作 out、set、remove、catch

流程控制 if、choose、when、otherwise

迭代操作 forEach、forTokens

URL操作 import、param、url、redirect

Set标签

<c:set> 主要用来将变量存储至JSP范围中 或是JavaBean的属性或Map对象中

名称说明是否必须写默认值
Value要被存储的值
var存入的变量名称
scopevar变量的JSP范围Page
targetJavaBean或Map对象
property指定target对象的属性

<c:out>主要用来显示数据的内容

名称说明是否必须写默认值
value需要显示出来的值
default如果value的值为null,则显示default的值
escapeXml是否转换特殊字符,如:<转换成 & lt;True

<c:remove> 主要负责移除变量

名称说明是否必须写默认值
Var欲移除的变量名称
Scopevar变量的jsp范围Page

<c:if> 主要用于进行if判断,如果为true,则输出标签体中的内容

名称说明是否必须写默认值
Test表达式的结果为true,则执行体内容,false则相反
var如果 用来存储test运算的结果(true或false)
scopeVar变量的JSP范围page

<c:choose>,<c:when>,<c:otherwise> 作用相当于if-else

名称说明必须默认
test如果表达式的结果为true,则执行体内容,false则相反

<c:forEach> 循环控制,它可以将数组,集合(Collection)中的成员循序浏览一遍。

名称说明必须默认值
var用来存放现在指定的成员
items被迭代的集合对象
varStatus用来存放现在指的相关成员信息
begin开始的位置0
end结束的位置最后一个成员
step每次迭代的间隔数1

(4)格式化标签

1、fmt:formatDate

作用:将日期类型格式化为指定模式的字符串

属性

value:将要被格式化的数据

pattern:格式化的模式,与SimpleDateFormat的参数设置一样

var:格式化后的字符串所要存放的变量,若不指定var,则会将格式化的结果直接显示在页面

scope:变量存放的域属性空间,默认page

type:其取值为date、time、both,表示给出的value是日期、时间、还是两者都包含,默认是date

2、fmt:parseDate

作用:用于将指定字符串转化为日期类型

<fmt:parseDate value="${now }" pattern="yyyy-MM-dd" var="today"/>

Value服务器获取的时间

Pattern:转换的格式

Var:页面显示的变量

3、fmt:formatNumber

按照指定格式对数字进行格式化

属性

maxIntegerDigits:整数部分最多的位数

minIntegerDigits:整数部分最少的位数

maxFrctionDigits:小数部分最多的位数

minFrctionDigits:小数部分最少的位数

var:存储格式化结果的变量

scope:var属性的作用域

integerOnly:是否只解析整型数true或者浮点数false

就目前来说的话,只有在做一些算法题中,以及在显示页面的时间数据时使用这个比较好用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

XError_xiaoyu

你的支持,使我更好的创作

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值