它的作用有如下两点:
1 用来向服务器输出各种类型的内容
out对象直接生成一个动态的html文件,然后发送给浏览器
主要有如下两个方法:
void println():向客户端输出各种类型数据
void print()
newLine():输出一个换行符
2 对应用服务器上的输出缓冲区进行管理(用的比较少,通常使用默认设置,不需要手动管理)
close():关闭输出流,从而可以强制终止当前页面的剩余部分向浏览器输出。
clearBuffer():清除缓冲区里的数据,同时把数据输出到客户端
clear():清除缓冲区里的数据,但不把数据输出到客户端
int getRemaining():获取缓冲区中没有被占用的空间的大小
flush():输出缓冲区里的数据,先将之前缓冲区的数据输出到客户端,然后再清除缓冲区的数据
int getBufferSize():获得缓冲区的大小
request:是调用JSP页面的请求,是javax.servlet.http.HttpServletRequest接口的一个实例,可以用此对象取得请求的
Header,信息(如浏览器版本,语言和编码等),请求的方式(get/post),请求的参数名称,参数值,客户端的主机名称等
常用方法:
getParameter("paramName"):返回客户端向服务器传送的数值,该参数由paramName指定,没有返回null
getMethod():返回客户端向服务器传送数据的方法(get,post等等)
getParameterValues(String name):获取指定参数的所有值,由name指定,返回字符串数组
getParameterNames():获取客户端传送给服务器端的所有参数的名字,结果是一个枚举类型数据(Enumeration)
getRequestURI():获得请求的url地址
getProtocol():得到协议名称
getRemoteAddr():获取客户端的ip地址
getRemoteHost():获取客户端机器的名称
getServletName():获取服务器的名字
getQueryString():得到url的查询部分,对于post而言,该方法得不到任何信息
getServletPath():获得客户端请求服务器文件的路径
getServletPort():获取服务器端的端口
Cookie[] getCookies():
对应类:javax.servlet.http.HttpServletRequest
response:表示的是返回给客户端的响应
是javax.servlet.http.HttpServletResponse接口的一个实例
经常用于设置HTTP标题,增加cookie,设置响应内容的类型和状态,发送HTTP重定向和编码URL
常用方法:
addCookie(Cookie cookie):增加一个Cookie对象,用于在客户端保存特定的信息
setMaxAge(int sencond):设置cookie的存活时间
Cookie的创建:
Cookie cookie = new Cookie("key","value");
从客户端读取cookie的内容:
Cookie[] request.getCookies():
cookie是一个小的文本数据,由服务器端生成,发送给客户端浏览器,客户端如果浏览器设置为启用cookie,则会将这个小文本数据保存到某个目录下的文本文件内,下次登录同一个网站,客户端浏览器则会自动将cookie读入之后,传给服务器端。cookie中的值以key—value的形式表达。
用处:减轻用户一些验证输入负担,比如用户名密码的输入。减轻服务器的负担,比如一些购物车商品与用户名称绑定放在服务器需要占据大量的资源。设置用户偏好,服务器根据cookie值决定显示给客户端什么样的界面。
解决cookie安全:将数据保存在服务器端,使用session。及时删除cookie。
addHeader(String name,String value):增加HTTP头信息,该Header信息将发送到客户端
containHeader(String name):判断指定名字的HTTP文件头是否存在
sendError(int):向客户端发送错误的信息
sendRedirect(String url):重定向JSP文件
和<jsp:forward>的区别
sendRedirect通过客户端发送二次申请,不同的request对象,转发的目标页面能够共享request中的数据,能够重定向到当前应用程序的其他资源,而且能够重定向到同一个站点上的其他应用程序中的资源,甚至是使用绝对url重定向到其他站点的资源。效率较低。
jsp:forward是同一个request,在服务器内部转发,转发的目标页面不能共享request中数据,只能再同一个web应用程序内的资源之间转发请求。效率较高。
setContentType(String contentType):设置MINE类型与编码方式
pageContext:javax.srvlet.jsp.PageContext的一个实例。运行后的环境,与servletContext类似,一个application要运行,首先要编译,编译以后要放到某个地运行,那个地就是servletContext,很少用到,与容器相关
提供了返回jsp页面的其他隐式对象的方法
在pageContext对象中保存的属性,只能在当前页面中获取,pageContext对象具有页面范围
相关的方法:
pageContext对象提供了访问其它隐含对象的统一入口
提供了请求转发的两个方法:forward()和include(),其内部实现是调用RequestDispatcher对象的forward()和include()
session:javax.servlet.http.HttpSession的一个实例,服务器端使用一个sessionId记住每个不同的对话。每个用户都是不同的。
常用方法:
setAttribute(String name,Object obj):可以是集合,字符串,基本类型等等。
getAttribute(String name):获取session中的值
removeAttribute(String name):将属性名为name的内容从session移除
invalidate():将session中所有的内容移除
application:javax.servlet.ServletContext的一个实例,被所有用户共享的,例如,网站的在线用户名单即可被所有用户共享。
config:配置文件web.xml,对应javax.servlet.ServletConfig接口,就是servlet里面的ServletConfig对象
exception:java.lang.Trowable对象。代表了JSP文件运行时所产生的异常对象,此对象不能在一般的jsp文件中直接使用,而只能在使用了<%@ page isErrorPage="true" %>的jsp文件中使用
page:java.lang.Object对象。指当前页面Object page = this,很少使用,因为当前页面的所有内容可以直接访问,比如当前页面里面的成员变量或者是局部变量
范围:
page范围:在这个范围内的对象,只能在创建这个对象的页面中访问。当servlet类的_jspService()执行完毕,属于page范围的对象引用将被丢弃。
具有page范围的对象被绑定到javax.servlet.jsp.PageContext对象中,可以调用pageContext这个隐含对象的getAttribute()来访问具有这种范围类型的对象,pageContext对象本省也属于page范围。
request范围:具有request范围的对象被绑定到javax.servlet.ServletRequest对象,可以调用request这个隐含对象的getAttribute()来访问具有这种范围类型的对象。
调用forward()方法转向的页面和调用include()包含的页面中都可以访问这个范围内的对象。
session范围:具有session范围的对象被绑定到javax.servlet.http.HttpSession对象中,可以调用session这个隐含对象的getAttribute()方法来访问具有这种范围内的对象
jsp容器为每一次会话,创建一个HttpSession对象,在会话期间,可以访问session范围内的对象。
application范围:具有application范围内的对象被绑定到javax.servlet.ServletContext,可以调用application这个隐含对象的getAttribute()方法来访问具有这种范围内的对象
在web应用程序运行期间,所有的页面都可以访问这个范围内的对象。
___________________________以下内容转载自:http://www.strutshome.com/index.php/archives/1
JSP内置对象:我们在使用JSP进行页面编程时可以直接使用而不需自己创建的一些Web容器已为用户创建好的JSP内置对象。如request,session,response,out等。
下面就JSP2.0给出的9个内置对象:
内置对象 | 类型 | 作用域 |
request | javax.servlet.http.HttpServletRequest | request |
response | javax.servlet.http.HttpServletResponse | response |
pageContext | javax.servlet.jsp.PageContext | page |
session | javax.servlet.http.HtpSession | session |
application | javax.servlet.jsp.ServletContext | application |
out | javax.servlet.jsp.JspWriter | page |
config | javax.servlet.ServletConfig | page |
page | java.lang.Object | page |
exception | java.lang.Throwable | page |
我们同样可以根据它们的作用进行分类:
第一类:与Servlet有关:page和config
第二类:与Input/Output有关:out,request和response
第三类:与Context有关:application,session和pageContext
第四类:与Error有关:exception
第一个问题: JSP有多少类内置对象?
要想回答好这个问题,首先是对JSP的基本知识和技术有深刻的理解和掌握。主要有九个
内置对象:application对象,config对象,exception对象,out对象,page对象,pageContext对象,request对象,reponse对象,session对象。
第二个问题:JSP的内置对象都是什么类型的?这些对象的作用是什么?它们常用的方法是什么呢?
(1)application对象:javax.servlet.ServletContext的实例。该实例代表JSP所属的Web应用本身,可用于JSP或者Servlet之间交换信息。常用的方法有:
方法 | 返回值类型 | 方法说明 |
getMajorVersion() | int | 获取主要的Servlet API版本 |
getMinorVersion() | int | 获取次要的Servlet API版本 |
getServerInfo() | String | 获取服务器版本 |
getMimeType() | String | 获取指定文件的MIME类型 |
getContext() | ServerContext | 获取指定Local的Application context |
getRealPath | String | 获取指定path的绝对路径 |
getInitParameter(name) | String | 获取Servlet初始化参数 |
getInitParameter(String paramName)用来获取Web应用的配置参数,这些配置参数应该在Web.xml文件中使用context-param元素配置,每个<context-param../>元素配置一个参数。
注意:每个Web应用只有一个ServletContext实例,在JSP页面可以通过application内置对象访问该实例,而在Servlet中则必须通过代码获取:ServletContext sc= getServletConfig().get ServletContext();
(2)config对象:javax.servlet.ServletConfig的实例,该实例代表JSP的配置信息,事实上,JSP页面通常无须配置,也就不存在配置信息了。更多的在Servlet中使用。
方法 | 返回值类型 | 方法说明 |
getInitParameter(name) | String | 获取Servlet初始化参数 |
getInitParameterNames() | Enumeration | 获取Servlet所有初始化参数名称 |
getServletContext() | ServletContext | 获取当前Application context |
getServletName() | String | 获取Servlet名称 |
(3)exception对象:java.lang.Throwable的实例,只有当页面是错误处理页面,即编译指令page的isErrorPage属性为true时候,该属性才可以使用。
(4)out对象:javax..servlet.jsp.JspWriter的实例,该实例代表JSP页面的输出流,用于输出内容,形成HTML页面。<%= %>表达式的本质就是out.writer方法。
方法 | 返回值类型 | 方法说明 |
clear() | void | 清除网页上输出内容 |
clearBuffer() | void | 清除缓冲区内容 |
close() | void | 关闭缓冲区,清除所有内容 |
getBufferSize() | int | 取得缓冲区大小 |
getRemaining() | int | 取得缓冲区剩余大小 |
isAutoFulsh() | boolean | 获得缓冲区是否进行自动清除的信息 |
print(String str) | void | 进行页面输出 |
println(String str) | void | 进行页面输出并换行 |
(5)page对象:代表该页面本身,通常没有多少作用的。也就是servlet中的this。
(6)pageContext对象:PageContext的实例,该实例代表JSP页面上下文,使用该对象可以访问页面的共享数据。常用的方法为:getServletContext和getServletConfig方法。详细介绍见下面内容。
(7)request对象:javax.servlet.http.HttpServletRequest的实例,该对象封装了一次请求,客户端的请求参数都将封装到该对象里面。获得参数的方法有:
方法 | 返回值类型 | 方法说明 |
getParameter(String name) | String | 获取参数名为name的参数值 |
getParameterNames() | Enumeration | 获取所有参数的名称,可与上一个方法合用获取所有参数的值 |
getParameterValues(String name) | String[] | 获取参数名为name的所有参数,比如参数是多个checkbox |
getParameterMap() | Map | 获取所有参数封装的Map实例,通过Map实例的String[] get(“id”)方法返回对应参数名为id的值数组 |
其他的方法有:
方法 | 返回值类型 | 方法说明 |
getHeader(String name) | String | 获取指定标题名称为name的标头 |
getHeaderName() | Enumeration | 获取所有的标头名称 |
getIntHeader(String name) | int | 获取标题名称为name的标头,内容以整数类型返回 |
getDateHeader(String name) | long | 获取标题名称为name的标头,内容以日期类型返回 |
getCookies() | Cookie | 获取相关的Cookie |
getContextPath() | String | 获取Context的路径 |
getMethod() | String | 获取客户端的提交方式 |
getProtocol() | String | 获取使用的HTTP协议 |
getQueryString() | String | 获取请求的字符串 |
getRequestSessionId() | String | 获取客户端的Session ID |
getRequestURI() | String | 获取请求的URI |
getRemoteAddr() | String | 获取客户端IP地址 |
(8)reponse对象:javax.servlet.http.HttpServletReponse的实例,代表了服务器对客户端的响应,通常很少使用该对象直接响应,而是使用out对象,除非需要生成非字符响应。而response对象常用于重定向,常用的方法是getOutStream,sendRedirect方法等。
方法 | 返回值 | 方法说明 |
addCookie(Cookie cookie) | void | |
addDateHeader(String name,long date) | void | |
addHeader(String name,String value) | void | |
addIntHeader(String name,int value) | void | |
setDateHeader(String name,long date) | void | |
setHeader(String name,String value) | void | |
setIntHeader(String name,int value) | void | |
sendError(int sc) | void | 传送状态码 |
sendError(int sc,String msg) | void | 传送状态码和错误信息 |
setStatus(int sc) | void | 设置状态码 |
sendRedirect(String URL) | void | 页面重定向,用来实现页面跳转 |
注:这里的response对象的sendRedirect(String URL)方法设置页面重定向将改变浏览器地址栏信息,所以也称客户端跳转。
实例1:response对象实现页面的自动刷新:只需要早JSP页面中加上
<%–使用response对象的setIntHeader设置属性Refresh的值(单位为秒)来实现页面自动刷新–%> <% response.addIntHeader(“Refresh”,10); %>
实例2:实现页面自动跳转:可以通过response对象的setHeader()方法添加一个标题为Refresh的标头,并制定页面跳转时间及跳转页面,从而实现页面自动跳转。 <% response.setHeader(“Refresh”,”10;URL=http://www.baidu.com”); %>
这里使用setHeader方法添加一个标题为”Refresh”,值为”10,URL=http://www.baidu.com”的标头。
(9)session对象:javax.servlet.http.HttpServletReponse的实例,代表一次回话。当客户端浏览器与站点建立连接时候,会话开始;当客户端关闭浏览器时,回话结束。
方法 | 返回值类型 | 方法说明 |
getId() | String | 获取session的ID |
getCreationTime() | long | 获取session的生成时间 |
getLashAccessedTime() | long | 获取用户最后通过session发送请求时间 |
getMaxInactiveInterval() | long | 获取session生命周期,如果超过这个时间则失效 |
invalidate() | void | 清空session内容 |
isNew() | boolean | 判断session是否为“新”的 |
setMaxInactiveInterval() | void | 设置session生命周期,如果超过这个时间则失效 |
第三个问题:JSP内置对象的在什么情况下产生的呢?
一个JSP页面对应一个Servlet类,每个Servlet类有三个方法:
init方法:初始化JSP/Servlet的方法。
destory方法:销毁JSP/Servlet的方法。
service方法:对用户请求产生响应的方法。
request对象和reponse对象是service方法的形参,application对象,page对象,out对象,pageContext对象,session对象都是service的方法里面生成的局部变量。
第四个问题:pageContext与其他JSP内置对象的关系?
pageContext对象是JSP中很重要的一个内置对象,不过在一般的JSP程序中,很少用到它。它是 javax.servlet.jsp.PageContext类的实例对象,可以使用PageContext类的方法。实际上,pageContext对象提供了对JSP页面所有的对象及命名空间的访问。pageContext对象能够存取其他隐含对象。
方法 | 返回值 | 方法说明 |
getException() | Exception | 获取当前的exception内置对象, 不过此网页要为error page |
getOut() | JspWriter | 获得网页的输出流 |
getPage() | Object | 获得页面Servlet 实体 |
getRequest() | ServletRequset | 获得网页的请求 |
getResponse() | ServletResponse | 获得网页的响应 |
getServletConfig() | ServletConfig | 获得网页的ServletConfig 对象 |
getServeltContext() | ServletContext | 获得网页的执行环境 |
getSession() | HttpSession | 获得和网页有联系的会话 |
getAttribute(String name,int scope) | Object | 获取指定范围的name属性值 |
getAttributeNamesInScope(int scope) | Enumeration | 获取指定范围所有属性名称 |
getAttributesScope(String name) | int | 获取属性名称为name的属性范围 |
removeAttribute(String name) | void | 移除属性名称为name的 属性 |
removeAttribute(String name,int scope) | void | 移除指定范围的属性名称为name的 属性 |
setAttribute(String name,Object value,int scope) | void | 设置指定范围的name属性 |
findAttribute(String name) | Object | 寻找所有范围的属性名称为name的属性 |
第五个问题:request属性的特点?
request:指属性在一次请求范围内有效。如果页面从给一个页面跳转到另一个页面,那么该属性就失效了。这里所指的跳转是指客户端跳转,比如客户单击超链接跳转到其他 页面或者通过浏览器地址栏浏览其他页面。如果使用服务器端跳转<jsp:forward>,则该属性仍然生效。同理使用request对象的 setAttribute()和getAttribute()。
参考内容:
讲解servlet生命周期的文章:
http://www.cnblogs.com/AaronLi/archive/2011/09/02/2164355.html
详细讲解jsp内置对象的文章,此文章排版不错,尤其表格是使用将知识讲解的十分合理,但是内容比较多需要狠狠吃透才行的。
http://www.blogjava.net/RoyPayne/archive/2012/01/05/367930.htm