JSP&Servlet学习手册

JSP&Servlet学习手册

 

                                            沙琪玛 书

 

目录

JSP 指令... 3

书写方式... 3

指令列表... 3

JSP 内置对象... 3

内置对象特点... 3

常用内置对象... 3

out对象... 3

request对象... 4

response对象... 5

session对象... 5

pageContext对象... 5

application对象... 6

config对象... 6

page对象... 6

exception对象... 6

内置对象总结... 7

JSP http头消息... 7

HTTP状态码... 8

状态码分类... 8

常见的状态码... 8

详细状态码... 8

POST&GET提交... 10

Forward&redirect区别... 10

Servlet Filter. 11

概述... 11

函数... 11

实现方法... 11

EL表达式... 11

简介... 11

JSTL标签库... 12

使用方式... 12

整体介绍... 12

普通标签库... 12

数字日期标签库... 14

 

 

JSP 指令

书写方式

<%@ directive attribute="value" %>

指令列表

指令

描述

 

<%@ page ... %>

定义页面依赖属性,比如脚本语言,错误页面等.

 

 

<%@ include ... %>

包含某个文件。.

<%@ taglib ... %>

声明一个标记库,包含自定义操作,在页面中使用。

JSP 内置对象

内置对象特点

  1. 由JSP规范提供,不用编写者实例化。
  2. 通过Web容器实现和管理
  3.  所有JSP页面均可使用
  4. 只有在脚本元素的表达式或代码段中才可使用(<%=使用内置对象%>或<%使用内置对象%>)
  5. 输出输入对象:request对象、response对象、out对象
  6. 通信控制对象:pageContext对象、session对象、application对象
  7. Servlet对象:page对象、config对象
  8. 错误处理对象:exception对象

 常用内置对象

out对象

(数据流 javax.servlet.jsp.jspWriter)

方法名

说明

print或println

输出数据

newLine

输出换行字符

flush

输出缓冲区数据

close

关闭输出流

clear

清除缓冲区中数据,但不输出到客户端

clearBuffer

清除缓冲区中数据,输出到客户端

getBufferSize

获得缓冲区大小

getRemaining

获得缓冲区中没有被占用的空间

isAutoFlush

是否为自动输出

request对象

(请求信息 javax.servlet.http.HttpServletrequest)

方法名

说明

isUserInRole

判断认证后的用户是否属于某一成员组

getAttribute

获取指定属性的值,如该属性值不存在返回Null

getAttributeNames

获取所有属性名的集合

getCookies

获取所有Cookie对象

getCharacterEncoding

获取请求的字符编码方式

getContentLength

返回请求正文的长度,如不确定返回-1

getHeader

获取指定名字报头值

getHeaders

获取指定名字报头的所有值,一个枚举

getHeaderNames

获取所有报头的名字,一个枚举

getInputStream

返回请求输入流,获取请求中的数据

getMethod

获取客户端向服务器端传送数据的方法

getParameter

获取指定名字参数值

getParameterNames

获取所有参数的名字,一个枚举

getParameterValues

获取指定名字参数的所有值

getProtocol

获取客户端向服务器端传送数据的协议名称

getQueryString

获取以get方法向服务器传送的查询字符串

getRequestURI

获取发出请求字符串的客户端地址

getRemoteAddr

获取客户端的IP地址

getRemoteHost

获取客户端的名字

getSession

获取和请求相关的会话

getServerName

获取服务器的名字

getServerPath

获取客户端请求文件的路径

getServerPort

获取服务器的端口号

removeAttribute

删除请求中的一个属性

setAttribute

设置指定名字参数值

response对象

(响应 javax.servlet.http.HttpServletResponse)

方法名

说明

addCookie

添加一个Cookie对象

addHeader

添加Http文件指定名字头信息

containsHeader

判断指定名字Http文件头信息是否存在

encodeURL

使用sessionid封装URL

flushBuffer

强制把当前缓冲区内容发送到客户端

getBufferSize

返回缓冲区大小

getOutputStream

返回到客户端的输出流对象

sendError

向客户端发送错误信息

sendRedirect

把响应发送到另一个位置进行处理

setContentType

设置响应的MIME类型

setHeader

设置指定名字的Http文件头信息

session对象

(会话 javax.servlet.http.HttpSession)

方法名

说明

getAttribute

获取指定名字的属性

getAttributeNames

获取session中全部属性名字,一个枚举

getCreationTime

返回session的创建时间

getId

获取会话标识符

getLastAccessedTime

返回最后发送请求的时间

getMaxInactiveInterval

返回session对象的生存时间单位千分之一秒

invalidate

销毁session对象

isNew

每个请求是否会产生新的session对象

removeAttribute

删除指定名字的属性

setAttribute

设定指定名字的属性值

pageContext对象

(页面上下文 javax.servlet.jsp.PageContext)                   很少用。

方法名

说明

forward

重定向到另一页面或Servlet组件

getAttribute

获取某范围中指定名字的属性值

findAttribute

按范围搜索指定名字的属性

removeAttribute

删除某范围中指定名字的属性

setAttribute

设定某范围中指定名字的属性值

getException

返回当前异常对象

getRequest

返回当前请求对象

getResponse

返回当前响应对象

getServletConfig

返回当前页面的ServletConfig对象

getServletContext

返回所有页面共享的ServletContext对象

getSession

返回当前页面的会话对象

application对象

(应用程序 javax.servlet.ServletContext) 很少用

方法名

说明

getAttribute

获取应用对象中指定名字的属性值

getAttributeNames

获取应用对象中所有属性的名字,一个枚举

getInitParameter

返回应用对象中指定名字的初始参数值

getServletInfo

返回Servlet编译器中当前版本信息

setAttribute

设置应用对象中指定名字的属性值

config对象

(Servlet的配置信息 javax.servlet.ServletConfig)

方法名

说明

getServletContext

返回所执行的Servlet的环境对象

getServletName

返回所执行的Servlet的名字

getInitParameter

返回指定名字的初始参数值

getInitParameterNames

返回该JSP中所有的初始参数名,一个枚举

page对象

当前JSP的实例(java.lang.object),它代表JSP被编译成Servlet,可以使用它来调用Servlet类中所定义的方法。(知道即可)

exception对象

运行时的异常,(java.lang.Throwable),被调用的错误页面的结果,只有在错误页面中才可使用,即在页面指令中设置:<%@page isErrorPage=“true”%>.(知道即可)

内置对象总结

  1. Request(Javax.servlet.ServletRequest)它包含了有关浏览器请求的信息.通过该对象可以获得请求中的头信息、Cookie和请求参数。
  2. Response(Javax.servlet.ServletResponse)作为JSP页面处理结果返回给用户的响应存储在该对象中。并提供了设置响应内容、响应头以及重定向的方法(如cookies,头信息等)
  3. Out(Javax.servlet.jsp.JspWriter)用于将内容写入JSP页面实例的输出流中,提供了几个方法使你能用于向浏览器回送输出结果。
  4. pageContext(Javax.servlet.jsp.PageContext)描述了当前JSP页面的运行环境。可以返回JSP页面的其他隐式对象及其属性的访问,另外,它还实现将控制权从当前页面传输至其他页面的方法。
  5. Session(javax.servlet.http.HttpSession)会话对象存储有关此会话的信息,也可以将属性赋给一个会话,每个属性都有名称和值。会话对象主要用于存储和检索属性值。
  6. Application(javax.servle.ServletContext)存储了运行JSP页面的servlet以及在同一应用程序中的任何Web组件的上下文信息。
  7. Page(Java.lang.Object)表示当前JSP页面的servlet实例
  8. Config(javax.servlet.ServletConfig)该对象用于存取servlet实例的初始化参数。
  9. Exception(Javax.lang.Throwable)在某个页面抛出异常时,将转发至JSP错误页面,提供此对象是为了在JSP中处理错误。只有在错误页面中才可使用<%@page isErrorPage=“true”%>

JSP http头消息

描述

Accept

指定MIME类型

Accept-Charset

编码,例如utf-8

Accept-Encoding

编码方式,例如使用gzip压缩

Accept-Language

语言,例如zh-cn

Authorization

加密方式

Connection

连接设置,例如Keep-Alive

Content-Length

只用于post时,post数据的长度。

Cookie

Cookie

Host

主机

Referer

引用的页面

User-Agent

浏览器信息

HTTP状态码

状态码分类

 

已定义范围

分类

1XX

100-101

信息提示

2XX

200-206

成功

3XX

300-305

重定向

4XX

400-415

客户端错误

5XX

500-505

服务器错误

 

常见的状态码

  1. 200 OK 服务器成功处理了请求(这个是我们见到最多的)
  2. 301/302 Moved Permanently(重定向)请求的URL已移走。Response中应该包含一个Location URL, 说明资源现在所处的位置
  3. 304 Not Modified(未修改)客户的缓存资源是最新的, 要客户端使用缓存
  4. 404 Not Found 未找到资源
  5. 501 Internal Server Error服务器遇到一个错误,使其无法对请求提供服务

详细状态码

1xx(临时响应)

表示临时响应并需要请求者继续执行操作的状态代码。

代码   说明

100   (继续) 请求者应当继续提出请求。 服务器返回此代码表示已收到请求的第一部分,正在等待其余部分。 

101   (切换协议) 请求者已要求服务器切换协议,服务器已确认并准备切换。

2xx (成功)

表示成功处理了请求的状态代码。

代码   说明

200   (成功)  服务器已成功处理了请求。 通常,这表示服务器提供了请求的网页。

201   (已创建)  请求成功并且服务器创建了新的资源。

202   (已接受)  服务器已接受请求,但尚未处理。

203   (非授权信息)  服务器已成功处理了请求,但返回的信息可能来自另一来源。

204   (无内容)  服务器成功处理了请求,但没有返回任何内容。

205   (重置内容) 服务器成功处理了请求,但没有返回任何内容。

206   (部分内容)  服务器成功处理了部分 GET 请求。

3xx (重定向)

表示要完成请求,需要进一步操作。 通常,这些状态代码用来重定向。

代码   说明

300   (多种选择)  针对请求,服务器可执行多种操作。 服务器可根据请求者 (user agent) 选择一项操作,或提供操作列表供请求者选择。

301   (永久移动)  请求的网页已永久移动到新位置。 服务器返回此响应(对 GET 或 HEAD 请求的响应)时,会自动将请求者转到新位置。

302   (临时移动)  服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。

303   (查看其他位置) 请求者应当对不同的位置使用单独的 GET 请求来检索响应时,服务器返回此代码。

304   (未修改) 自从上次请求后,请求的网页未修改过。 服务器返回此响应时,不会返回网页内容。

305   (使用代理) 请求者只能使用代理访问请求的网页。 如果服务器返回此响应,还表示请求者应使用代理。

307   (临时重定向)  服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。

4xx(请求错误)

这些状态代码表示请求可能出错,妨碍了服务器的处理。

代码   说明

400   (错误请求) 服务器不理解请求的语法。

401   (未授权) 请求要求身份验证。 对于需要登录的网页,服务器可能返回此响应。

403   (禁止) 服务器拒绝请求。

404   (未找到) 服务器找不到请求的网页。

405   (方法禁用) 禁用请求中指定的方法。

406   (不接受) 无法使用请求的内容特性响应请求的网页。

407   (需要代理授权) 此状态代码与 401(未授权)类似,但指定请求者应当授权使用代理。

408   (请求超时)  服务器等候请求时发生超时。

409   (冲突)  服务器在完成请求时发生冲突。 服务器必须在响应中包含有关冲突的信息。

410   (已删除)  如果请求的资源已永久删除,服务器就会返回此响应。

411   (需要有效长度) 服务器不接受不含有效内容长度标头字段的请求。

412   (未满足前提条件) 服务器未满足请求者在请求中设置的其中一个前提条件。

413   (请求实体过大) 服务器无法处理请求,因为请求实体过大,超出服务器的处理能力。

414   (请求的 URI 过长) 请求的 URI(通常为网址)过长,服务器无法处理。

415   (不支持的媒体类型) 请求的格式不受请求页面的支持。

416   (请求范围不符合要求) 如果页面无法提供请求的范围,则服务器会返回此状态代码。

417   (未满足期望值) 服务器未满足"期望"请求标头字段的要求。

5xx(服务器错误)

这些状态代码表示服务器在尝试处理请求时发生内部错误。 这些错误可能是服务器本身的错误,而不是请求出错。

代码   说明

500   (服务器内部错误)  服务器遇到错误,无法完成请求。

501   (尚未实施) 服务器不具备完成请求的功能。 例如,服务器无法识别请求方法时可能会返回此代码。

502   (错误网关) 服务器作为网关或代理,从上游服务器收到无效响应。

503   (服务不可用) 服务器目前无法使用(由于超载或停机维护)。 通常,这只是暂时状态。

504   (网关超时)  服务器作为网关或代理,但是没有及时从上游服务器收到请求。

505   (HTTP 版本不受支持) 服务器不支持请求中所用的 HTTP 协议版本。

POST&GET提交

  1. post提交数据是隐式的,get是通过在url里面传递的(可以看一下你浏览器的地址栏),用来传递一些不需要保密的数据。
  2. 用get时,传输数据的大小有限制 (注意不是参数的个数有限制),为2K;而post没有此限制。
  3. GET的时候在SERVLET中要用DOGET方法,用POST就要用DOPOST方法。这是JSP在处理GET和POST的时候在JAVA 角度看的不同。
  4. GET时如果含有中文,一般都要进行编码,否则会出现乱码。
  5. 从地址栏显示来说forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器.浏览器根本不知道服务器发送的内容从哪里来的,所以它的地址栏还是原来的地址.
  6. redirect是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址.所以地址栏显示的是新的URL.
  7. 从数据共享来说forward:转发页面和转发到的页面可以共享request里面的数据,redirect:不能共享数据.
  8. 在servlet被调用之前截获;
  9. 可在servlet被调用之前检查servlet request;
  10. 可根据需要修改request头和request数据;
  11. 可根据需要修改response头和response数据;
  12. 可在servlet被调用之后截获.
  13. init():在容器实例化过滤器时调用,该方法接受一个FilterConfig类型的对象做为输入。
  14. destroy():执行一些清理操作。
  15. doFilter():类似servlet的doPost()、doGet()方法,执行具体的过滤任务。
  16. 在web.xml中设置过滤规则,以及对应的filter类。
  17. 书写filter,需要实现javax.servlet.Filter接口。
  18. 语法结构

Forward&redirect区别

Servlet Filter

概述

函数

实现方法

EL表达式

简介

${expression}

  1. [ ]与.运算符

EL 提供“.“和“[ ]“两种运算符来存取数据。

当要存取的属性名称中包含一些特殊字符,如.或?等并非字母或数字的符号,就一定要使用“[ ]“。例如:${ user. My-Name}应当改为${user["My-Name"]}

如果要动态取值时,就可以用“[ ]“来做,而“.“无法做到动态取值。例如:

${sessionScope.user[data]}中data 是一个变量

  1. 变量

EL存取变量数据的方法很简单,例如:${username}。它的意思是取出某一范围中名称为username的变量。

因为我们并没有指定哪一个范围的username,所以它会依序从Page、Request、Session、Application范围查找。

假如途中找到username,就直接回传,不再继续找下去,但是假如全部的范围都没有找到时,就回传null。

  1. 属性范围在EL中的名称

Page PageScope

Request RequestScope

Session SessionScope

Application ApplicationScope

JSTL标签库

使用方式

需要在JSP页面引入核心标签库,代码为:

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

整体介绍

JSTL的核心标签库标签共13个,从功能上可以分为4类:表达式控制标签、流程控制标签、循环标签、URL操作标签。使用这些标签能够完成JSP页面的基本功能,减少编码工作。

  1. 表达式控制标签:out标签、set标签、remove标签、catch标签。
  2. 流程控制标签:if标签、choose标签、when标签、otherwise标签。
  3. 循环标签:forEach标签、forTokens标签。
  4. URL操作标签:import标签、url标签、redirect标签。
  5. <c:out>

普通标签库

用来显示数据对象(字符串、表达式)的内容或结果。

在使用Java脚本输出时常使用的方式为:

<% out.println(“字符串”)%>

  1. <c:set> 很少使用

功能:主要用于将变量存取于JSP范围中或JavaBean属性中。

  1. <c:remove> 很少使用

主要用来从指定的JSP范围内移除指定的变量。

  1. <c:catch> 很少使用

用来处理JSP页面中产生的异常,并将异常信息存储。

  1. <c:if>

同程序中的if作用相同,用来实现条件控制。

<c:if test=”条件1” var=”name” [scope=”page|request|session|application”]>

<c:if test=”条件2” var=”name”[scope=”page|request|session|application”]>

【参数说明】:

(1)test属性用于存放判断的条件,一般使用EL表达式来编写。

(2)var指定名称用来存放判断的结果类型为true或false。

(3)scope用来存放var属性存放的范围。

  1. <c:choose>、<c:when>和<c:otherwise>

这3个标签通常情况下是一起使用的,<c:choose>标签作为<c:when>和<c:otherwise>标签的父标签来使用。

  1. <c:forEach>

该标签根据循环条件遍历集合(Collection)中的元素。

【语法】:

<c:forEach var=”name” items=”Collection” varStatus=”StatusName” begin=”begin” end=”end” step=”step”>

本体内容

</c:forEach>

【参数解析】:

(1)var设定变量名用于存储从集合中取出元素。

(2)items指定要遍历的集合。

(3)varStatus设定变量名,该变量用于存放集合中元素的信息。   

(4)begin、end用于指定遍历的起始位置和终止位置(可选)。

(5)step指定循环的步长。

参数类型和相关说明见下表。

名称

EL

类型

是否必须

默认值

var

N

String

items

Y

Arrays

Collection

Iterator

Enumeration

Map

String []args

begin

Y

int

0

end

Y

int

集合中最后一个元素

step

Y

int

1

varStatus

N

String

其中varStatus有4个状态属性,见下表:

属性名

类型

说明

index

int

当前循环的索引值

count

int

循环的次数

frist

boolean

是否为第一个位置

last

boolean

是否为第二个位置

  1. <c:import>标签 很少使用

该标签可以把其他静态或动态文件包含到本JSP页面。同<jsp:include>的区别为:只能包含同一个web应用中的文件。而<c:import>可以包含其他web应用中的文件,甚至是网络上的资源。

  1. <c:redirect>

该标签用来实现了请求的重定向。同时可以在url中加入指定的参数。例如:对用户输入的用户名和密码进行验证,如果验证不成功重定向到登录页面;或者实现web应用不同模块之间的衔接。

数字日期标签库

  1. <frm:formatNumber/>标签

该标签依据特定的区域将数字改变为不同的格式来显示。

  1. 被格式化的数据<frm:formatNumber>

<fmt:formatNumber>标签参数说明

名称

说明

EL

类型

必须

默认值

value

要格式化的数据

String

type

指定类型(单位、货币、百分比等)见表

String

number

pattern

格式化的数据样式

String

currencyCode

货币单位代码

String

cuttencySymbol

货币符号($、¥)

String

groupingUsed

是否对整数部分进行分组如(9,999)

boolean

true

maxIntergerDigits

整数部分最对显示多少位数

int

minIntergerDigits

整数部分最少显示多少位

int

maxFractionDigits

小数部分最多显示多少位

int

minFractionDigits

小数部分最少显示多少位

int

var

存储格式化后的数据

String

scope

var的JSP范围

String

page

Type的属性类型

类型

说明

示例

number

数字格式

0.8

currency

当地货币

¥0.80

percent

百分比格式

80%

  1. <frm:parseNumber>标签

将格式化后的数字、货币、百分比都转化为数字类型。

<fmt:parseNumber>标签参数说明

名称

说明

EL

类型

是否必须

默认值

value

被解析的字符串

String

type

指定单位(数字、货币、百分比)

String

number

pattern

格式样式

String

parseLocale

用来替代默认区域的设定

String,

Java.util.

Locale

默认本地样式

var

存储已经格式化的数据

String

scope

var变量的作用域

String

page

  1. <fmt:formatDate>标签

该标签主要用来格式化日期和时间。

<fmt:formatDate>标签属性说明

属性名

说明

EL

类型

必须

默认值

value

将要格式化的日期对象。

Java.util.Date

type

显示的部分(日期、时间或者两者)。

String

date

partten

格式化的样式。

String

dateStyle

设定日期的显示方式。

String

default

timeStyle

设定时间的显示方式。

String

default

timeZone

设定使用的时区。

String

当地所用时区

var

存储已格式化的日期或时间。

String

scope

指定var存储的JSP范围。

String

 type属性参数说明

参数名

说明

time

只显示时间

date

只显示时期

both

显示日期和时间

原文地址:https://www.cnblogs.com/myzhijie/p/3330968.html