模拟面试的时候被问到的一个问题,在之前具体开发项目的时候都有用到,但是突然口头被cue还是会需要一些反应时间,而且其实很多涉及到细节的东西也不是特别熟悉,所以本博文就JSP的内容进行简单介绍,也是自我知识点规整,然后后续的话,也会继续撰写细节方法的一些总结介绍~
九个内置对象,又称隐含对象:不需要预先声明就可以在脚本代码和表达式中随意使用,是JSP容器为开发人员提供的Java对象。
九大内置对象整体可以分为四大类
1.输入输出类:request对象、response对象、out对象
2.通信控制类:pageContext对象、session对象、application对象
3.servlet类:page对象、config对象
4.错误处理类:exception对象
请求对象——封装了来自客户端、浏览器的各种信息:
代表来自客户端的请求,当客户端请求页面时,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( ) | 获取和请求相关的会话 |
… | … |
响应对象——封装了服务器的响应信息:
代表的是对客户端的响应,主要是将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 ) | 设置响应头长度 |
… | … |
会话对象——保存会话信息,实现在同一用户的不同请求之间共享数据:
从一个客户打开浏览器并连接到服务器开始,到客户关闭浏览器离 开这个服务器结束(或者超时),被称为一个会话。
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) |
… | … |
输出对象——用于向客户端、浏览器输出数据:
用于在Web浏览器内输出信息,在响应中发送内容,并且管理应用服务器上的输出缓冲区,可以对数据缓冲区进行操作,及时清除缓冲区中的残余数据,为其他的输出让出缓冲空间。待数据输出完毕后,要及时关闭输出流。
类型为JspWriter,作用域Page。
以下是一些常用的方法,“ * ” 表示博主自己用到的比较多~
常用方法名 | 常用方法介绍 |
---|---|
*print或println | 输出数据 |
newLine | 输出换行字符 |
void flush( ) | 输出缓冲区数据 |
void close( ) | 关闭输出流 |
void clear( ) | 清除缓冲区中数据,但不输出到客户端 |
void clearBuffer( ) | 清除缓冲区中数据,输出到客户端 |
int getBufferSize( ) | 获得缓冲区大小 |
int getRemaining( ) | 获得缓冲区中没有被占用的空间 |
boolean isAutoFlush( ) | 是否为自动输出 |
… | … |
页面对象——指向了当前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开锁 |
… | … |
应用程序对象,全局对象——可以在不同的用户之间、在整个应用使用过程中共享信息:
可将信息保存在服务器内部空间中,直到服务器关闭,否则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的日志文件 |
… | … |
页面上下文对象,当前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 ) | 在当前位置包含另一文件 |
… | … |
配置对象——封装了应用程序的配置信息:
取得服务器的配置信息。通过 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中所有的初始参数名,一个枚举 |
… | … |
例外对象,异常对象——封装了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页面。只在一个页面保存数据,page里的变量无法在两个JSP页面传递,只要页面跳转,变量就不见了。
(转发)作用同一个请求,请求作用域,就是客户端的一次请求。只在一个请求中保存数据,request里的变量可以跨越前后两页,但只要刷新页面,变量就重新计算了。
(私有)作用同一个会话,会话作用域,当用户首次访问时,就产生一个新会话,以后服务器就记住这个会话状态。在一个会话中保存数据,仅供单个用户使用。生命周期为会话超时,或者服务器强制使会话失效。变量会一直累加,只要关闭浏览器,再次重新启动访问页面的时候,变量就重新计算了。
(全局)全局作用范围,整个应用程序共用,在部署文件的同一个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】…