JSP相关介绍?看这篇就够了!

JSP介绍

1.JSP简介

  • JSP全称为Java Server Pages,中文名叫Java服务器页面
  • JSP是在传统的HTML网页中插入Java程序段,从而形成JSP文件
  • JSP可近似认为是HTML+Java

JSP和传统HTML进行比较

  • *.html 静态⻚⾯(包含固定的⻚⾯内容)
  • *.jsp 动态⻚⾯(⻚⾯数据可以动态更新,⽀持嵌套java代码和html代码)

JSP的相关特点

  • 跨平台:它能表现出在不同系统下的运行。
  • 支持分离网络逻辑网络设计
  • 支持可重用的基于组件设计

本质上,JSP本质上就是Servlet,并且Servlet展示信息的不方便问题后,才引入JSP的概念。

2.JSP的基本使用

2.1 JSP中嵌套Java语句
page指令:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
    ...
    ...
<body>
 <%! int i=10;%>  <!--成员变量-->
 <%! public void show(){}%>   <!--成员⽅法-->
 <%=i%>   <!--输出变量值-->
 </body>
 
 <%--jsp注释-->
    --html注释会在页面上展示
 <!--html注释-->

首先,进行指令说明。其次在<body>标签内部嵌套基本的Java语句

3.JSP工作原理(以访问http://localhost:8080/test/index.jsp为例子)

  1. 首先,浏览器访问前面项目的jsp文件后,服务器会发现jsp文件后缀,它会根据路径找到对应的index.jsp文件
  2. jsp文件会被翻译成index_jsp.java文件,并对这个Java文件进行编译,产生一个index_jsp.class文件并让class文件进行加载运行
  3. 最后将JSP翻译成Java文件,它让JSP所有HTML代码通过流进行输出,也就是编译成class被虚拟机加载。
  4. 加载完后,它将JSP中的HTML代码以流的⽅式写回浏览器。所以在JSP中展示出了HTML代码

可以看出,它的本质就像Servlet,都是通过客户端进行访问处理,进入服务器端。服务器端根据其中的Java语言和HTML语言进行相应处理进行返回响应处理。

4.JSP内置对象

JSP中⼀共预先定义了9个对象,分别为:requestresponsesessionapplicationoutpagecontextconfigpageexception

其中的疑惑可以访问我前面的Servlet的内置对象讲解。

4.1 request对象
<% request.setAttribute("a1","aaa");%>
<%=request.getAttribute("a1")%>

上面的代码中,我们进行很基本的存值将其中的值进行取出

4.2 response对象
<% response.sendRedirect("");>

上面是重定向函数,进行跳转页面。

4.3 session对象

session的作用域在当前会话期间

<% session.setAttribute("b1","bbb");>
<%=session.getAttribute("b1")%>

如上面4.1所展示的一样,进行存值和取值

4.4 application对象

application表示的是整个程序在运行的期间,它的作用于在于整个程序运行

<% application.setAttribute("c1","ccc");>
<%=application.getAttribute("c1")%>
4.5 page对象

page表示的是**’当前的页面‘,跟this有异曲同工之处。可见,它的作用于在于当前页面**。

<% pageContext.setAttribute("d1","ddd");>
<%=pageContext.getAttribute("d1")%>
4.6 out对象

out对象主要用于输出

<% out.print("<script>alert("输出成功!")</script>")%>
4.7 config对象

config对象主要用于配置信息,获取初始化参数

<%config.getInitParamenter("")%>
4.8 exception对象

exception对象用于展示错误信息

<% exception.getMessage()%>

5.JSP的指令

JSP指令⽤来设置整个JSP⻚⾯相关的属性,如⽹⻚的编码⽅式和脚本语⾔。

指令名称的描述

  • page 定义⽹⻚依赖属性,⽐如脚本语⾔、error⻚⾯、缓存需求等等
  • include 包含其他⽂件
  • taglib 引⼊标签库的定义
5.1 page指令

比如在JSP文件中创建一个List类后,会自动在Page指令中设置List

--语法格式
<%@ page attribute="value" %>

后续的page指令介绍不在后续中展示出来。

5.2 including指令

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

--语法格式
<%@ include file="⽂件相对 url 地址" %>

include 指令中的⽂件名实际上是⼀个相对的 URL 地址

5.3 Taglib指令

JSP API允许⽤户⾃定义标签⼀个⾃定义标签库就是⾃定义标签的集合。 Taglib指令引⼊⼀个⾃定义标签集合的定义,包括库路径⾃定义标签

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

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

6.状态码

比如说网页常见的404就是无法识别的意思。它的大致意思就是将对应的状态环节的问题进行反馈

如下展示的是http中的状态码列表

状态码状态码英文名称中文描述
100Continue继续。客户端应继续其请求
101Switching Protocols切换协议。服务器根据客户端的请求切换协议。只能切换到更高级的协议,例如,切换到HTTP的新版本协议
200OK请求成功。一般用于GET与POST请求
201Created已创建。成功请求并创建了新的资源
202Accepted已接受。已经接受请求,但未处理完成
203Non-Authoritative Information非授权信息。请求成功。但返回的meta信息不在原始的服务器,而是一个副本
204No Content无内容。服务器成功处理,但未返回内容。在未更新网页的情况下,可确保浏览器继续显示当前文档
205Reset Content重置内容。服务器处理成功,用户终端(例如:浏览器)应重置文档视图。可通过此返回码清除浏览器的表单域
206Partial Content部分内容。服务器成功处理了部分GET请求
300Multiple Choices多种选择。请求的资源可包括多个位置,相应可返回一个资源特征与地址的列表用于用户终端(例如:浏览器)选择
301Moved Permanently永久移动。请求的资源已被永久的移动到新URI,返回信息会包括新的URI,浏览器会自动定向到新URI。今后任何新的请求都应使用新的URI代替
302Found临时移动。与301类似。但资源只是临时被移动。客户端应继续使用原有URI
303See Other查看其它地址。与301类似。使用GET和POST请求查看
304Not Modified未修改。所请求的资源未修改,服务器返回此状态码时,不会返回任何资源。客户端通常会缓存访问过的资源,通过提供一个头信息指出客户端希望只返回在指定日期之后修改的资源
305Use Proxy使用代理。所请求的资源必须通过代理访问
306Unused已经被废弃的HTTP状态码
307Temporary Redirect临时重定向。与302类似。使用GET请求重定向
400Bad Request客户端请求的语法错误,服务器无法理解
401Unauthorized请求要求用户的身份认证
402Payment Required保留,将来使用
403Forbidden服务器理解请求客户端的请求,但是拒绝执行此请求
404Not Found服务器无法根据客户端的请求找到资源(网页)。通过此代码,网站设计人员可设置"您所请求的资源无法找到"的个性页面
405Method Not Allowed客户端请求中的方法被禁止
406Not Acceptable服务器无法根据客户端请求的内容特性完成请求
407Proxy Authentication Required请求要求代理的身份认证,与401类似,但请求者应当使用代理进行授权
408Request Time-out服务器等待客户端发送的请求时间过长,超时
409Conflict服务器完成客户端的 PUT 请求时可能返回此代码,服务器处理请求时发生了冲突
410Gone客户端请求的资源已经不存在。410不同于404,如果资源以前有现在被永久删除了可使用410代码,网站设计人员可通过301代码指定资源的新位置
411Length Required服务器无法处理客户端发送的不带Content-Length的请求信息
412Precondition Failed客户端请求信息的先决条件错误
413Request Entity Too Large由于请求的实体过大,服务器无法处理,因此拒绝请求。为防止客户端的连续请求,服务器可能会关闭连接。如果只是服务器暂时无法处理,则会包含一个Retry-After的响应信息
414Request-URI Too Large请求的URI过长(URI通常为网址),服务器无法处理
415Unsupported Media Type服务器无法处理请求附带的媒体格式
416Requested range not satisfiable客户端请求的范围无效
417Expectation Failed服务器无法满足Expect的请求头信息
500Internal Server Error服务器内部错误,无法完成请求
501Not Implemented服务器不支持请求的功能,无法完成请求
502Bad Gateway作为网关或者代理工作的服务器尝试执行请求时,从远程服务器接收到了一个无效的响应
503Service Unavailable由于超载或系统维护,服务器暂时的无法处理客户端的请求。延时的长度可包含在服务器的Retry-After头信息中
504Gateway Time-out充当网关或代理的服务器,未及时从远端服务器获取请求
505HTTP Version not supported服务器不支持请求的HTTP协议的版本,无法完成处理

7.EL表达式

Expression Language表达式语言语法格式

${需要展示信息的名字}

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

上面的“没有指定变量”可以认为是没有在作用域中的变量。这要求首先要进行其存值的操作——setAttribute()

7.1 基础操作符

单个变量:${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} 

8.JSTL

  • JSP标准标签库(JSTL)是⼀个JSP标签集合,它封装了JSP应⽤的通⽤核⼼功能
  • JSTL支持通用的、结构化任务。比如循环迭代,条件判断,XML文档操作等等。并且它提供一个框架使用集成的JSTL自定义标签
8.1 JSTL的使用

JSTL的存在即合理,它在于简化JSP页面编写代码,加大代码的可用性。

1.首先下载JSP标准标签库
2.创建新项目,项目部署步骤不变。
3.下载该包

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

4.在JSP⻚⾯中引⼊<%@ taglib prefix=”⻚⾯使⽤的名称” uri=”功能范围的路径”%>

例如:使用其中的核心标签库core

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

语法如下:

<%@ 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
   var="<string>"
   value="<string>"
   target="<string>"
   property="<string>"
   scope="<string>"/>

<c:set> 主要⽤来将变量存储⾄JSP范围中

属性描述是否必要默认值
value要存储的值主体的内容
target要修改的属性所属的对象
property要修改的属性
var存储信息的变量
scopevar属性的作用域Page

【示例】

<c:set var="uname" value="张三" scope="session" ></c:set>
out标签

语法格式:

<c:out value="<string>" default="<string>" escapeXml="<true|false>"/>

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

属性描述是否必要默认值
value要输出的内容
default输出的默认值主体中的内容
escapeXml是否忽略XML特殊字符true
remove标签

语法格式:

<c:remove var="<string>" scope="<string>"/>

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

属性描述是否必要默认值
var要移除的变量名称
scope变量所属的作用域所有作用域
if标签

语法格式

<c:if test="<boolean>" var="<string>" scope="<string>">
   ...
</c:if>
属性描述是否必要默认值
test条件
var用于存储条件结果的变量
scopevar属性的作用域page
流程控制choose,when,otherwise

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

<c:choose>标签与Java switch语句的功能一样,用于在众多选项中做出选择。

switch语句中有case,而<c:choose>标签中对应有<cwhen>,switch语句中有default,而<c:choose>标签中有c:otherwise

<c:choose>
    <c:when test="<boolean>">
        ...
    </c:when>
    <c:when test="<boolean>">
        ...
    </c:when>
    ...
    ...
    <c:otherwise>
        ...
    </c:otherwise>
</c:choose>
forEach标签

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

<c:forEach
    items="<object>"
    begin="<int>"
    end="<int>"
    step="<int>"
    var="<string>"
    varStatus="<string>">

    ...
8.3 格式化标签
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:存储格式化结果的变量

scopevar属性的作⽤域

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Xiao艾扶

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值