jsp九大内置对象及四个作用域
JSP九大对象:内置对象(又叫隐含对象,有9个内置对象):不需要预先声明就可以在脚本代码和表达式中随意使用。
JSP中九大内置对象为:
- request 请求对象 类型 javax.servlet.ServletRequest 作用域 Request
- response 响应对象 类型 javax.servlet.SrvletResponse 作用域 Page
- pageContext 页面上下文对象 类型 javax.servlet.jsp.PageContext 作用域 Page
- session 会话对象 类型 javax.servlet.http.HttpSession 作用域 Session
- application 应用程序对象 类型 javax.servlet.ServletContext 作用域 Application
- out 输出对象 类型 javax.servlet.jsp.JspWriter 作用域 Page
- config 配置对象 类型 javax.servlet.ServletConfig 作用域 Page
- page 页面对象 类型 javax.lang.Object 作用域 Page
- exception 例外对象 类型 javax.lang.Throwable 作用域 page
一、request对象:代表的是来自客户端的请求,例如我们在FORM表单中填写的信息等,是最常用的对象。客户端的请求信息被封装在request对象中,通过它才能了解到客户的需求,然后做出响应。它是HttpServletRequest类的实例。作用域为request(用户请求期)。
常用方法:
- object getAttribute(String name) 返回指定属性的属性值
- Enumeration getAttributeNames() 返回所有可用属性名的枚举
- String getCharacterEncoding() 返回字符编码方式
- int getContentLength() 返回请求体的长度(以字节数)
- String getContentType() 得到请求体的MIME类型
- ServletInputStream getInputStream() 得到请求体中一行的二进制流
- String getParameter(String name) 返回name指定参数的参数值
- Enumeration getParameterNames() 返回可用参数名的枚举
- String[] getParameterValues(String name) 返回包含参数name的所有值的数组
- String getProtocol() 返回请求用的协议类型及版本号
- String getScheme() 返回请求用的计划名,如:http.https及ftp等
- String getServerName() 返回接受请求的服务器主机名
- int getServerPort() 返回服务器接受此请求所用的端口号
- BufferedReader getReader() 返回解码过了的请求体
- String getRemoteAddr() 返回发送此请求的客户端IP地址
- String getRemoteHost() 返回发送此请求的客户端主机名
- void setAttribute(String key,Object obj) 设置属性的属性值
- String getRealPath(String path) 返回一虚拟路径的真实路径
二、response对象:对象代表的是对客户端的响应,也就是说可以通过response 对象来组织发送到客户端的数据。但是由于组织方式比较底层,所以不建议普通读者使用,需要向客户端发送文字时直接使用。它是HttpServletResponse类的实例。作用域为page(页面执行期)。
常用方法:
- String getCharacterEncoding() 返回响应用的是何种字符编码
- ServletOutputStream getOutputStream() 返回响应的一个二进制输出流
- PrintWriter getWriter() 返回可以向客户端输出字符的一个对象
- void setContentLength(int len) 设置响应头长度
- void setContentType(String type) 设置响应的MIME类型
- sendRedirect(String location) 重新定向客户端的请求
三、session对象:指的是客户端与服务器的一次会话,从客户连到服务器的一个WebApplication开始,直到客户端与服务器断开连接为止。它是HttpSession类的实例。作用域session(会话期—)。
常用方法:
- long getCreationTime() 返回SESSION创建时间
- public String getId() 返回SESSION创建时JSP引擎为它设的惟一ID号
- long getLastAccessedTime() 返回此SESSION里客户端最近一次请求时间
- int getMaxInactiveInterval() 返回两次请求间隔多长时间此SESSION被取消(ms)
- String[] getValueNames() 返回一个包含此SESSION中所有可用属性的数组
- void invalidate() 取消SESSION,使SESSION不可用
- boolean isNew() 返回服务器创建的一个SESSION,客户端是否已经加入
- void removeValue(String name) 删除SESSION中指定的属性
- void setMaxInactiveInterval() 设置两次请求间隔多长时间此SESSION被取消(ms)
四、out对象 :out对象是JspWriter类的实例,是向客户端输出内容常用的对象 。作用域为page(页面执行期)
常用方法:
- void clear() 清除缓冲区的内容
- void clearBuffer() 清除缓冲区的当前内容
- void flush() 清空流
- int getBufferSize() 返回缓冲区以字节数的大小,如不设缓冲区则为0
- int getRemaining() 返回缓冲区还剩余多少可用
- boolean isAutoFlush() 返回缓冲区满时,是自动清空还是抛出异常
- void close() 关闭输出流
五、page对象:page对象就是指向当前JSP页面本身,有点象类中的this指针,它是java.lang.Object类的实例 。“page” 对象代表了正在运行的由JSP文件产生的类对象,不建议一般读者使用。 作用域 page
常用方法:
- class getClass 返回此Object的类
- int hashCode() 返回此Object的hash码
- boolean equals(Object obj) 判断此Object是否与指定的Object对象相等
- void copy(Object obj) 把此Object拷贝到指定的Object对象中
- Object clone() 克隆此Object对象
- String toString() 把此Object对象转换成String类的对象
- void notify() 唤醒一个等待的线程
- void notifyAll() 唤醒所有等待的线程
- void wait(int timeout) 使一个线程处于等待直到timeout结束或被唤醒
- void wait() 使一个线程处于等待直到被唤醒
- void enterMonitor() 对Object加锁
- void exitMonitor() 对Object开锁
六、application对象:实现了用户间数据的共享,可存放全局变量。它开始于服务器的启动,直到服务器的关闭,在此期间,此对象将一直存在;这样在用户的前后连接或不同用户之间的连接中,可以对此对象的同一属性进行操作;在任何地方对此对象属性的操作,都将影响到其他用户对此的访问。服务器的启动和关闭决定了application对象的生命。它是ServletContext类的实例。作用域application
常用方法:
- Object getAttribute(String name) 返回给定名的属性值
- Enumeration getAttributeNames() 返回所有可用属性名的枚举
- void setAttribute(String name,Object obj) 设定属性的属性值
- void removeAttribute(String name) 删除一属性及其属性值
- String getServerInfo() 返回JSP(SERVLET)引擎名及版本号
- 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) 返回指定资源的输入流
- RequestDispatcher getRequestDispatcher(String uripath) 返回指定资源的RequestDispatcher对象
- 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的日志文件
七、pageContext对象提供了对JSP页面内所有的对象及名字空间的访问,也就是说他可以访问到本页所在的SESSION,也可以取本页面所在的application的某一属性值,他相当于页面中所有功能的集大成者,它的本类名也叫pageContext。用域 Pageconfig对象
常用方法:
- JspWriter getOut() 返回当前客户端响应被使用的JspWriter流(out)
- HttpSession getSession() 返回当前页中的HttpSession对象(session)
- Object getPage() 返回当前页的Object对象(page)
- ServletRequest getRequest() 返回当前页的ServletRequest对象(request)
- ServletResponse getResponse() 返回当前页的ServletResponse对象(response)
- Exception getException() 返回当前页的Exception对象(exception)
- ServletConfig getServletConfig() 返回当前页的ServletConfig对象(config)
- ServletContext getServletContext() 返回当前页的ServletContext对象(application)
- void setAttribute(String name,Object attribute) 设置属性及属性值
- void setAttribute(String name,Object obj,int scope) 在指定范围内设置属性及属性值
- public Object getAttribute(String name) 取属性的值
- Object getAttribute(String name,int scope) 在指定范围内取属性的值
- public Object findAttribute(String name) 寻找一属性,返回起属性值或NULL
- void removeAttribute(String name) 删除某属性
- void removeAttribute(String name,int scope) 在指定范围删除某属性
- int getAttributeScope(String name) 返回某属性的作用范围
- Enumeration getAttributeNamesInScope(int scope) 返回指定范围内可用的属性名枚举
- void release() 释放pageContext所占用的资源
- void forward(String relativeUrlPath) 使当前页面重导到另一页面
- void include(String relativeUrlPath) 在当前位置包含另一文件
八、config对象:config对象是在一个Servlet初始化时,JSP引擎向它传递信息用的,此信息包括Servlet初始化时所要用到的参数(通过属性名和属性值构成)以及服务器的有关信息(通过传递一个ServletContext对象)。作用域 Page
常用方法:
- ServletContext getServletContext() 返回含有服务器相关信息的ServletContext对象
- String getInitParameter(String name) 返回初始化参数的值
- Enumeration getInitParameterNames() 返回Servlet初始化所需所有参数的枚举
九、exception对象:是一个例外对象,当一个页面在运行过程中发生了例外,就产生这个对象。如果一个JSP页面要应用此对象,就必须把isErrorPage设为true,否则无法编译。他实际上是java.lang.Throwable的对象.作用域 page
常用方法:
- String getMessage() 返回描述异常的消息
- String toString() 返回关于异常的简短描述消息
- void printStackTrace() 显示异常及其栈轨迹
- Throwable FillInStackTrace() 重写异常的执行栈轨迹
作用域规定的是变量的有效期限
如果把变量放到pageContext里,就说明它的作用域是page,它的有效范围只在当前jsp页面里。
从把变量放到pageContext开始,到jsp页面结束,你都可以使用这个变量。
如果把变量放到request里,就说明它的作用域是request,它的有效范围是当前请求周期。
所谓请求周期,就是指从http请求发起,到服务器处理结束,返回响应的整个过程。在这个过程中可能使用forward的方式跳转了多个jsp页面,在这些页面里你都可以使用这个变量。
如果把变量放到session里,就说明它的作用域是session,它的有效范围是当前会话。
所谓当前会话,就是指从用户打开浏览器开始,到用户关闭浏览器这中间的过程。这个过程可能包含多个请求响应。也就是说,只要用户不关浏览器,服务器就有办法知道这些请求是一个人发起的,整个过程被称为一个会话(session),而放到会话中的变量,就可以在当前会话的所有请求里使用。
如果把变量放到application里,就说明它的作用域是application,它的有效范围是整个应用。
整个应用是指从应用启动,到应用结束。我们没有说“从服务器启动,到服务器关闭”,是因为一个服务器可能部署多个应用,当然你关闭了服务器,就会把上面所有的应用都关闭了。
application作用域里的变量,它们的存活时间是最长的,如果不进行手工删除,它们就一直可以使用。
与上述三个不同的是,application里的变量可以被所有用户共用。如果用户甲的操作修改了application中的变量,用户乙访问时得到的是修改后的值。这在其他scope中都是不会发生的,page, request,session都是完全隔离的,无论如何修改都不会影响其他人的数据。