一、九大内置对象分类:
-
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
二、servlet的生命周期分为以下几个步骤,
第一,加载并实例化,第二,初始化,
第三,服务,第四,销毁。
容器启动的时候,会加载servlet的class,并new出这个对象,然后,当用户请求这个servlet的时候,容器会调用init方法初始化这个servlet,这也是整个生命周期中只会调用一次的方法,然后,会调用service方法,由这个方法调用doGet或doPost方法来响应用户,然后,容器在可用资源紧张或是长期没有对Servlet发出请求的情况下,会销毁这个servlet。
三、九大内置对象解析:
(一) 范围对象:
其中,有4个是范围对象: pageContext,request,session,application
对应jsp:useBean/指令的scope分别是:page,reqeust,session,application
也就是说,指定不同scope的bean对象(Java Bean)会被绑定到不同的范围对象中
选择范围对象的原则:作用域的范围越小越好;因为作用域小的生命周期短,有利于性能提高。
例如:
<jsp:useBean id=“stu” class=“vo.Student” scope=“page”/>
表示stu对象被绑定到javax.servlet.jsp.PageContext对象(pageContext)中,其等价的代码
<%
Student stu = pageContext.getAttribute(“stu”);
if(stu==null) {
stu=new Student();
pageContext.setAttribute(“stu”,stu);
}
%>
- pageContext
(1) 对象含义:
每一个jsp页面对应着一个pageContext。一般地,在实际应用中,主要是使用它来存取属性。
另外,pageContext对象能够存取其他隐含对象。
(2) 使用方法:
A. pageContext对象存取其他隐含对象属性的方法,此时需要指定范围的参数。
Object getAttribute(String name, int scope)
Enumeration getAttributeNamesInScope(int scope)
void removeAttribute(String name, int scope)
void setAttribute(String name, Object value, int scope)
其中,范围参数有四个,分别代表四种范围:
PAGE_SCOPE、REQUEST_SCOPE、SESSION_SCOPE、APPLICATION_SCOPE
B. PageContext对象取得其他隐含对象的方法
Exception getException() //回传目前网页的异常,不过此网页要为error page,
JspWriter getOut() //回传目前网页的输出流,例如:out
Object getPage() //回传目前网页的Servlet 实体(instance),例如:page
ServletRequest getRequest() //回传目前网页的请求,例如:request
ServletResponse getResponse() //回传目前网页的响应,例如:response
ServletConfig getServletConfig() //回传目前此网页的ServletConfig 对象,例如:config
ServletContext getServletContext() //回传目前此网页的执行环境(context),例如:application
HttpSession getSession() //回传和目前网页有联系的会话(session),例如:session
C. PageContext对象提供取得属性的方法
Object getAttribute(String name, int scope) //回传name 属性(范围为scope;类型为Object)
Enumeration getAttributeNamesInScope(int scope) // 回传所有属性范围为scope 的属性名称,回传类型为Enumeration
int getAttributesScope(String name) //回传属性名称为name 的属性范围
void removeAttribute(String name) //移除属性名称为name 的属性对象
void removeAttribute(String name, int scope) //移除属性名称为name,范围为scope 的属性对象
void setAttribute(String name, Object value, int scope) //指定属性对象的名称为name、值为value、范围为scope
Object findAttribute(String name) //寻找在所有范围中属性名称为name 的属性对象
- Request
(1) 对象含义:
该对象封装了用户提交的信息,通过调用该对象相应的方法可以获取封装的信息,即使用该对象可以获取用户提交的信息。
如:请求的来源、标头、cookies和请求相关的参数值等等。
(2) 实现接口:
request 对象实现javax.servlet.http.HttpServletRequest接口的
(3) 使用方法:
当Request对象获取客户提交的汉字字符时,会出现乱码问题,必须进行特殊处理。
Eg:
request.setCharacterEncoding(“utf-8”);
{(1)}. 储存和取得属性方法:
void setAttribute(String name, Object value) //设定name属性的值为value
Enumeration getAttributeNamesInScope(int scope) //取得所有scope 范围的属性
Object getAttribute(String name) //取得name 属性的值
void removeAttribute(String name) //移除name 属性的值
{(2)}. 取得请求参数的方法
String getParameter(String name) // 取得name 的参数值
Enumeration getParameterNames() //取得所有的参数名称
String [] getParameterValues(String name) //取得所有name 的参数值
Map getParameterMap() // 取得一个要求参数的Map
{(3)}. 能够取得请求HTTP 标头的方法
String getHeader(String name) //取得name 的标头
Enumeration getHeaderNames() //取得所有的标头名称
Enumeration getHeaders(String name) //取得所有name 的标头
int getIntHeader(String name) //取得整数类型name 的标头
long getDateHeader(String name) // 取得日期类型name 的标头
Cookie [] getCookies() // 取得与请求有关的cookies
{(4)}. 其他的方法
String getContextPath() //取得Context 路径(即站台名称)
String getMethod() //取得HTTP 的方法(GET、POST)
String getProtocol() //取得使用的协议 (HTTP/1.1、HTTP/1.0 )
String getQueryString() //取得请求的参数字符串,不过,HTTP的方法必须为GET
String getRequestedSessionId() // 取得用户端的Session ID
String getRequestURI() // 取得请求的URL,但是不包括请求的参数字符串
String getRemoteAddr() //取得用户的IP 地址
String getRemoteHost() // 取得用户的主机名称
int getRemotePort() // 取得用户的主机端口
String getRemoteUser() // 取得用户的名称
void getCharacterEncoding(String encoding) //设定编码格式,用来解决窗体传递中文的问题
- Session
(1) 对象含义
a) 什么是Session对象
Session对象是一个JSP内置对象,它在第一个JSP页面被装载时自动创建,完成会话期管理。从一个客户打开浏览器并连接到服务器开始,到客户关闭 浏览器离开这个服务器结束,被称为一个会话。当一个客户访问一个服务器时,可能会在这个服务器的几个页面之间切换,服务器应当通过某种办法知道这是一个客 户,就需要Session对象。
b) Session对象的ID
当一个客户首次访问服务器上的一个JSP页面时,JSP引擎产生一个Session对象,同时分配一个String类型的ID号,JSP引擎同时将这换个 ID号发送到客户端,存放在Cookie中,这样Session对象,直到客户关闭浏览器后,服务器端该客户的Session对象才取消,并且和客户的会 话对应关系消失。当客户重新打开浏览器再连接到该服务器时,服务器为该客户再创建一个新的Session对象。
(2) session对象简单来说就是表示目前个别用户的会话(session)状况。
(3) 实现的接口:
javax.servlet.http.HttpSession接口所提供的方法
(4) Session对象的常用方法
long getCreationTime() //取得session产生的时间,单位是毫秒
String getId() // 取得session 的ID
long getLastAccessedTime() // 取得用户最后通过这个session送出请求的时间
long getMaxInactiveInterval() //取得最大session不活动的时间,若超过这时间,session 将会失效
void invalidate() // 取消session 对象,并将对象存放的内容完全抛弃
boolean isNew() //判断session 是否为"新"的会话
void setMaxInactiveInterval(int interval) //设定最大session不活动的时间,若超过这时间,session 将会失效
- Application
(1) 对象含义
服务器启动后就产生了这个Application对象,当客户再所访问的网站的各个页面 之间浏览时,这个Application对象都时同一个,直到服务器关闭。但是与Session对象不同的时,所有客户的Application对象都时 同一个,即所有客户共享这个内置的Application对象。
application对象最常被使用在存取环境的信息。
因为环境的信息通常都储存在ServletContext中,所以常利用application对象来存取ServletContext中的信息。
(2) 实现接口:
application 对象实现javax.servlet.ServletContext 接口
(3) ServletContext接口容器所提供的方法
int getMajorVersion() //取得Container主要的Servlet API版本
int getMinorVersion() // 取得Container次要的Servlet API 版本
String getServerInfo() //取得Container的名称和版本
String getMimeType(String file) //取得指定文件的MIME 类型
ServletContext getContext(String uripath) //取得指定Local URL的Application context
String getRealPath(String path) //取得本地端path的绝对路径
void log(String message) // 将信息写入log文件中
void log(String message, Throwable throwable) // 将stack trace 所产生的异常信息写入log文件中
(二) 五个其他对象:
- page 对象
(1) 对象含义:
(2) 实现接口
page对象代表JSP本身,更准确地说page对象是当前页面转换后的Servlet类的实例。
从转换后的Servlet类的代码中,可以看到这种关系: Object page = this;
在JSP页面中,很少使用page对象。
(3) 使用方法:
- response 对象
(1) 对象含义:
response 对象主要将JSP 处理数据后的结果传回到客户端。
(2) 实现接口:
response 对象是实现javax.servlet.http.HttpServletResponse 接口。response对象所提供的方法。
(3) 使用方法:
{(1)} 设定表头的方法
void addCookie(Cookie cookie) // 新增cookie
void addDateHeader(String name, long date) // 新增long类型的值到name标头
void addHeader(String name, String value) //新增String类型的值到name标头
void addIntHeader(String name, int value) //新增int类型的值到name标头
void setDateHeader(String name, long date) //指定long类型的值到name标头
void setHeader(String name, String value) //指定String类型的值到name标头
void setIntHeader(String name, int value) // 指定int类型的值到name标头
{(2)}. 设定响应状态码的方法
void sendError(int sc) // 传送状态码(status code)
void sendError(int sc, String msg) //传送状态码和错误信息
void setStatus(int sc) //设定状态码
{(3)} 用来URL 重写(rewriting)的方法
String encodeRedirectURL(String url) 对使用sendRedirect()方法的URL予以编码
- out 对象
(1) 对象含义:
out 对象能把结果输出到网页上。
out对象实际上是PrintWriter对象的带缓冲的版本(在out对象内部使用PrintWriter对象来输出数据),可以通过page指令的buffer属性来调整缓冲区的大小,默认的缓冲区是8kb。
out主要是用来控制管理输出的缓冲区(buffer)和输出流(output stream)。
(2) 实现接口:
out对象的类型是javax.servlet.jsp.JspWriter,该类从java.io.Writer类派生,以字符流的形式输出数据
(3) 使用方法:
void clear( ) //清除输出缓冲区的内容
void clearBuffer( ) //发送数据到客户端后,清空缓冲区的内容
void close( ) // 关闭输出流,清除所有的内容
int getBufferSize( ) //取得目前缓冲区的大小(KB)
int getRemaining( ) //取得目前使用后还剩下的缓冲区大小(KB)
boolean isAutoFlush( ) //回传true表示缓冲区满时会自动清除;false表示不会自动清除并且产生异常处理
.flush() //输出缓冲区的数据
.newLine() //输出一个换行字符,换到下一行
.print(String str) //“str"是将要被写入页面缓冲区的字符(字符不以”/r/n"结尾)
.println(String str) //“str"是将要被写入页面缓冲区的字符(字符以”/r/n"结尾)
.flush() //清空缓冲区,发送全部数据到客户端page
- exception对象
(1) 对象含义:
用于处理异常的网页
若要使用exception 对象时,必须在page 指令中设定:<%@ page isErrorPage=“true” %>才能使用。
(2) 实现接口:
(3) 使用方法:
getMessage()
getLocalizedMessage()
printStackTrace(new java.io.PrintWriter(out))
- config 对象
(1) 对象含义:
config 对象里存放着一些Servlet 初始的数据结构
(2) 实现接口:
config 对象实现于javax.servlet.ServletConfig 接口
(3) 使用方法:
public String getInitParameter(name)
public java.util.Enumeration getInitParameterNames( )
public ServletContext getServletContext()
public Sring getServletName()