JSP—九大内置对象、四大作用域

博客概要

     模拟面试的时候被问到的一个问题,在之前具体开发项目的时候都有用到,但是突然口头被cue还是会需要一些反应时间,而且其实很多涉及到细节的东西也不是特别熟悉,所以本博文就JSP的内容进行简单介绍,也是自我知识点规整,然后后续的话,也会继续撰写细节方法的一些总结介绍~

文章目录

    • 博客概要
    • JSP九大内置对象
      • 1.request对象
      • 2.response对象
      • 3.session对象
      • 4.out对象
      • 5.page对象
      • 6.application对象
      • 7.pageContext对象
      • 8.config对象
      • 9.exception对象
    • JSP四大作用域
      • 1.Page范围
      • 2.Request范围
      • 3.Session范围
      • 4.Application范围
    • 总结
    • 参考资料

JSP九大内置对象

     九个内置对象,又称隐含对象:不需要预先声明就可以在脚本代码和表达式中随意使用,是JSP容器为开发人员提供的Java对象。

九大内置对象整体可以分为四大类
1.输入输出类:request对象、response对象、out对象
2.通信控制类:pageContext对象、session对象、application对象
3.servlet类:page对象、config对象
4.错误处理类:exception对象

1.request对象

     请求对象——封装了来自客户端、浏览器的各种信息:

     代表来自客户端的请求,当客户端请求页面时,JSP将创立一个新对象来表示该请求,用于接收通过Http协议传输到服务器内部的数据(头信息、系统信息、请求方式、请求参数、表单数据、Cookie等)。

     类型为ServletRequest,作用域为Request。

以下是一些常用的方法,“ * ” 表示博主自己用到的比较多~

常用方法名 常用方法介绍
*Object getAttribute( String name ) 获取指定属性的属性值,如果属性值不存在返回NULL
Enumeration getAttributeNames() 获取所有可用属性名(枚举、集合)
getCookies( ) 获取所有Cookie对象
*String getCharacterEncoding( ) 获取请求的字符编码方式
int getContentLength( ) 获取请求的正文长度(以字节数),如不确定返回-1
*String getContentType( ) 得到请求体的MIME类型
*String getParameter( String name ) 获取name指定参数的参数值
Enumeration getParameterNames( ) 获取所有参数名(枚举、集合)
String[ ] getParameterValues( String name ) 获取参数name的所有值(数组)
String getProtocol( ) 获取客户端向服务器端传送数据的协议名称 、协议类型及版本号
String getScheme( ) 返回请求用的计划名,如:http.https及ftp等
String getServerName( ) 获取接受请求的服务器主机名
String getServerPath( ) 获取客户端请求文件的路径
int getServerPort( ) 获取服务器接受此请求所用的端口号
BufferedReader getReader( ) 返回解码过了的请求体
String getRemoteAddr( ) 获取发送此请求的客户端IP地址
String getRemoteHost( ) 获取发送此请求的客户端主机名
*getRequestURI( ) 获取发出请求字符串的客户端地址
*void setAttribute( String key,Object obj ) 设置指定参数的属性值
isUserInRole( ) 判断认证后的用户是否属于某一成员组
getHeader( ) 获取指定名字报头值
getHeaders( ) 获取指定名字报头的所有值(枚举)
ServletInputStream getInputStream( ) 返回请求输入流,获取请求中的数据
getMethod( ) 获取客户端向服务器端传送数据的方法
getQueryString( ) 获取以get方法向服务器传送的查询字符串
*getSession( ) 获取和请求相关的会话

2.response对象

     响应对象——封装了服务器的响应信息:

     代表的是对客户端的响应,主要是将JSP容器处理过的对象传回客户端,还定义了处理创建新HTTP头的接口,通过此对象,程序员可以添加新的Cookie或日期戳,HTTP状态代码等。

     类型为HttpServletResponse,作用域为Page。

以下是一些常用的方法,“ * ” 表示博主自己用到的比较多~

常用方法名 常用方法介绍
addCookie( ) 添加一个Cookie对象
addHeader( ) 添加Http文件指定名字头信息
containsHeader( ) 判断指定名字Http文件头信息是否存在
encodeURL( ) 使用sessionid封装URL
flushBuffer( ) 强制把当前缓冲区内容发送到客户端
getBufferSize( ) 返回缓冲区大小
ServletOutputStream getOutputStream( ) 返回到客户端的输出流对象,一个二进制输出流
sendError( ) 向客户端发送错误信息
*sendRedirect( ) 把响应发送到另一个位置进行处理,页面重定向
void setContentType( String type ) 设置响应的MIME类型
setHeader( ) 设置指定名字的Http文件头信息
*String getCharacterEncoding( ) 返回响应用的是何种字符编码
PrintWriter getWriter( ) 返回可以向客户端输出字符的一个对象
void setContentLength( int len ) 设置响应头长度

3.session对象

     会话对象——保存会话信息,实现在同一用户的不同请求之间共享数据:

     从一个客户打开浏览器并连接到服务器开始,到客户关闭浏览器离 开这个服务器结束(或者超时),被称为一个会话

     session对象是一个jsp内置对象,在第一个jsp被装载时,由服务器自动创建的与用户请求相关的对象,用于跟踪客户端请求之间的客户端会话,完成会话期管理。当一个客户访问一个服务器时,可能会在这个服务器的几个页面之间切换,服务器应当通过某种办法知道这是一个客户,就需要为每个用户都生成一个session对象,用于保存该用户的信息,跟踪用户的操作状态。

     session对象内部使用Map类来保存数据,因此保存数据的格式为 “Key/value”。 session对象的value可以使复杂的对象类型,而不仅仅局限于字符串类型。

     类型为ServletContext,作用域Application。

以下是一些常用的方法,“ * ” 表示博主自己用到的比较多~

常用方法名 常用方法介绍
getAttribute 获取指定名字的属性
getAttributeNames 获取session中全部属性名字,一个枚举
long getCreationTime( ) 返回session的创建时间
public String getId( ) 获取会话标识符
long getLastAccessedTime( ) 返回最后发送请求的时间
int getMaxInactiveInterval( ) 返回session对象的生存时间单位千分之一秒
void invalidate( ) 销毁session对象
boolean isNew( ) 每个请求是否会产生新的session对象
removeAttribute 删除指定名字的属性
setAttribute 设定指定名字的属性值
String[] getValueNames( ) 返回一个包含此session中所有可用属性的数组
void removeValue( String name ) 删除SESSION中指定的属性
void setMaxInactiveInterval( ) 设置两次请求间隔多长时间此session被取消(ms)

4.out对象

     输出对象——用于向客户端、浏览器输出数据:

     用于在Web浏览器内输出信息,在响应中发送内容,并且管理应用服务器上的输出缓冲区,可以对数据缓冲区进行操作,及时清除缓冲区中的残余数据,为其他的输出让出缓冲空间。待数据输出完毕后,要及时关闭输出流。

     类型为JspWriter,作用域Page。

以下是一些常用的方法,“ * ” 表示博主自己用到的比较多~

常用方法名 常用方法介绍
*print或println 输出数据
newLine 输出换行字符
void flush( ) 输出缓冲区数据
void close( ) 关闭输出流
void clear( ) 清除缓冲区中数据,但不输出到客户端
void clearBuffer( ) 清除缓冲区中数据,输出到客户端
int getBufferSize( ) 获得缓冲区大小
int getRemaining( ) 获得缓冲区中没有被占用的空间
boolean isAutoFlush( ) 是否为自动输出

5.page对象

     页面对象——指向了当前JSP程序本身:

     代表JSP本身,只有在JSP页面内才是合法的。 page隐含对象本质上包含当前 Servlet接口引用的变量,类似于Java编程中的 this 指针。

     类型为Object,作用域Page。

以下是一些常用的方法,“ * ” 表示博主自己用到的比较多~

常用方法名 常用方法介绍
*String toString( ) 将当前项目的信息打印出来
*class getClass 返回当前的object类
int hashCode( ) 返回page对象的hashCode值
*boolean equals( Object obj ) 用于比较对象是否与当前对象相同
void copy( Object obj ) 把此Object拷贝到指定的Object对象中
Object clone( ) 克隆此Object对象
void notify( ) 唤醒一个等待的线程
void notifyAll( ) 唤醒所有等待的线程
void wait( int timeout ) 使一个线程处于等待直到timeout结束或被唤醒
void wait( ) 使一个线程处于等待直到被唤醒
void enterMonitor( ) 对Object加锁
void exitMonitor( ) 对Object开锁

6.application对象

     应用程序对象,全局对象——可以在不同的用户之间、在整个应用使用过程中共享信息:

     可将信息保存在服务器内部空间中,直到服务器关闭,否则application对象中保存的信息会在整个应用中都有效。与session对象相比,application对象生命周期更长,类似于系统的“全局变量”。当JSP页面被初始化时,将创建此对象,并且在JSP页面被jspDestroy()方法删除时application对象也将被删除,意思就是应用启动同时被创建,直至应用关闭。

     类型为ServletContext,作用域Application。

以下是一些常用的方法,“ * ” 表示博主自己用到的比较多~

常用方法名 常用方法介绍
*Object getAttribute( String name ) 获取应用对象中指定名字的属性值
Enumeration getAttributeNames( ) 获取应用对象中所有属性的名字,一个枚举
*getInitParameter 返回应用对象中指定名字的初始参数值
String getServletInfo 返回Servlet编译器中当前版本信息
void setAttribute( String name,Object obj ) 设置应用对象中指定名字的属性值
void removeAttribute( String name ) 删除一属性及其属性值
String getRealPath( String path ) 返回一虚拟路径的真实路径
ServletContext getContext( String uripath ) 返回指定WebApplication的application对象
int getMajorVersion( ) 返回服务器支持的Servlet API的最大版本号
int getMinorVersion( ) 返回服务器支持的Servlet API的最大版本号
String getMimeType( String file ) 返回指定文件的MIME类型
URL getResource( String path ) 返回指定资源(文件及目录)的URL路径
InputStream getResourceAsStream( String path ) 返回指定资源的输入流
Servlet getServlet( String name ) 返回指定名的Servlet
Enumeration getServlets( ) 返回所有Servlet的枚举
Enumeration getServletNames( ) 返回所有Servlet名的枚举
void log( String msg ) 把指定消息写入Servlet的日志文件
void log(Exception exception,String msg) 把指定异常的栈轨迹及错误消息写入Servlet的日志文件
void log(String msg,Throwable throwable) 把栈轨迹及给出的Throwable异常的说明信息 写入Servlet的日志文件

7.pageContext对象

     页面上下文对象,当前JSP页面对象——可以访问JSP页面所有对象以及命名空间

     取得任何范围的参数,通过它可以获取 JSP页面的out、request、reponse、session、application 等对象。pageContext对象的创建和初始化都是由容器来完成的,在JSP页面中可以直接使用 pageContext对象。是JSP页面所有对象功能的“集大成者”。

     类型为PageContext ,作用域Page 。

以下是一些常用的方法,“ * ” 表示博主自己用到的比较多~

常用方法名 常用方法介绍
*void forward(String relativeUrlPath) 重定向到另一页面或Servlet组件
*public Object getAttribute( String name ) 获取属性值
*Object getAttribute( String name,int scope ) 在指定范围内取属性的值
public Object findAttribute( String name ) 按范围搜索指定名字的属性
void removeAttribute( String name ) 删除属性
void removeAttribute( String name,int scope ) 在指定范围删除某属性
*void setAttribute( String name,Object attribute ) 设定属性值
*void setAttribute( String name,Object obj,int scope ) 在指定范围内设置属性及属性值
*Exception getException( ) 返回当前异常对象
*ServletRequest getRequest( ) 返回当前请求对象
*ServletResponse getResponse( ) 返回当前响应对象
ServletConfig getServletConfig( ) 返回当前页面的ServletConfig对象
ServletContext getServletContext( ) 返回所有页面共享的ServletContext对象
*HttpSession getSession( ) 返回当前页面的会话对象
JspWriter getOut( ) 返回当前客户端响应被使用的JspWriter流(out)
Object getPage( ) 返回当前页的Object对象(page)
int getAttributeScope( String name ) 返回某属性的作用范围
Enumeration getAttributeNamesInScope( int scope ) 返回指定范围内可用的属性名枚举
void release( ) 释放pageContext所占用的资源
void include( String relativeUrlPath ) 在当前位置包含另一文件

8.config对象

     配置对象——封装了应用程序的配置信息

     取得服务器的配置信息。通过 pageConext对象的 getServletConfig() 方法可以获取一个config对象。当一个Servlet 初始化时,容器把某些信息通过 config对象传递给这个 Servlet。 开发者可以在web.xml 文件中为应用程序环境中的Servlet程序和JSP页面提供初始化参数。

     一般项目中,JSP被用作模版技术,也就是位于表示层,而位于表示层的JSP文件一般是不需要配置信息的,所以此对象在JSP程序中其实很少使用。

     类型为ServletConfig,作用域Page 。

以下是一些常用的方法,“ * ” 表示博主自己用到的比较多~

常用方法名 常用方法介绍
ServletContext getServletContext( ) 返回所执行的Servlet的环境对象
getServletName 返回所执行的Servlet的名字
*String getInitParameter( String name ) 返回指定名字的初始参数值
Enumeration getInitParameterNames( ) 返回该JSP中所有的初始参数名,一个枚举

9.exception对象

     例外对象,异常对象——封装了JSP程序执行过程中发生的异常和错误信息

     显示异常信息,只有在包含 isErrorPage=“true” 的页面中才可以被使用,在一般的JSP页面中使用该对象将无法编译JSP文件。excepation对象和Java的所有对象一样,都具有系统提供的继承结构。exception 对象几乎定义了所有异常情况。
     在Java程序中,可以使用try/catch关键字来处理异常情况; 如果在JSP页面中出现没有捕获到的异常,就会生成 exception 对象,并把 exception 对象传送到在page指令中设定的错误页面中,然后在错误页面中处理相应的 exception 对象。

     类型为Throwable,作用域Page 。

以下是一些常用的方法,“ * ” 表示博主自己用到的比较多~

常用方法名 常用方法介绍
*String getMessage( ) 返回exception对象的异常信息字符串
getLocalizedmessage( ) 返回本地化的异常错误
*String toString( ) 返回关于异常错误的简单信息描述
Throwable fillIntStackTrace( ) 重写异常错误的栈执行轨迹
void printStackTrace( ) 显示异常及其栈轨迹

JSP四大作用域

1.Page范围

     (当前页面)作用当前页面, 一个JSP页面。只在一个页面保存数据,page里的变量无法在两个JSP页面传递,只要页面跳转,变量就不见了。

2.Request范围

     (转发)作用同一个请求,请求作用域,就是客户端的一次请求。只在一个请求中保存数据,request里的变量可以跨越前后两页,但只要刷新页面,变量就重新计算了。

3.Session范围

     (私有)作用同一个会话,会话作用域,当用户首次访问时,就产生一个新会话,以后服务器就记住这个会话状态。在一个会话中保存数据,仅供单个用户使用。生命周期为会话超时,或者服务器强制使会话失效。变量会一直累加,只要关闭浏览器,再次重新启动访问页面的时候,变量就重新计算了。

4.Application范围

     (全局)全局作用范围,整个应用程序共用,在部署文件的同一个WebApp共享。在整个服务器中保存数据,供全部用户共享。生命周期为应用程序的启动到停止。变量会一直在累加,除非重启tomcat,否则就一直变大。


总结

     本博文偏理论,多是一些硬知识点的整理,其实博主目前是偏应用的,所有借着撰写博客的机会也巩固回忆理论知识,发现了之前很多的知识漏洞,也了解到了一些新方法,感觉还是很棒哒~

对象名 对象解释 类型 作用域
request 请求对象 java.servlet.ServletRequest Request
response 响应对象 java.servlet.ServletResponse Page
session 会话对象 java.servlet.http.HttpSession Session
out 输出对象 java.servlet.jsp.JspWriter Page
page 页面对象 java.lang.Object Page
application 应用程序对象 java.servlet.ServletContext Application
pageContext 页面上下文对象 java.servlet.jsp.PageContext Page
config 配置对象 java.servlet.ServletConfig Page
exception 异常对象 java.lang.Throwable Page

参考资料

【1】jsp九大内置对象和四大作用域
【2】jsp四大作用域和九大内置对象
【3】JSP九大内置对象及四个作用域
【4】JSP 九大内置对象及其作用域
【5】JSP的内置对象以及作用域。
【6】…

你可能感兴趣的:(Java理论)