zoukankan      html  css  js  c++  java
  • 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

    显示日期和时间

  • 相关阅读:
    inspector 只读属性
    使用MongoDB
    【Roslyn C#】Runtime环境Unity读取字符串代码
    Unity使用LoadImage 读取byte[]图片时,会出现白边问题
    团队中避免不可维护代码的措施
    Unity点到线段的最短距离
    判断点是否在多边形内部
    Unity 根据前后帧位置自动旋转
    停止Unity在运行时脚本修改重新编译的情况
    KI子线段树 / AKEE SegmentTree
  • 原文地址:https://www.cnblogs.com/myzhijie/p/3330968.html
Copyright © 2011-2022 走看看