第一个问题: JSP有多少类内置对象?
要想回答好这个问题,首先是对JSP的基本知识和技术有深刻的理解和掌握。主要有九个
内置对象:application对象,config对象,exception对象,out对象,page对象,pageContext对象,request对象,reponse对象,session对象。
(1)application对象:javax.servlet.ServletContext的实例。该实例代表JSP所属的Web应用本身,可用于JSP或者Servlet之间交换信息。
(2)config对象:javax.servlet.ServletConfig的实例,该实例代表JSP的配置信息,事实上,JSP页面通常无须配置,也就不存在配置信息了。更多的在Servlet中使用。
(3)exception对象:java.lang.Throwable的实例,只有当页面是错误处理页面,即编译指令page的isErrorPage属性为true时候,该属性才可以使用。
(4)out对象:javax..servlet.jsp.JspWriter的实例,该实例代表JSP页面的输出流,用于输出内容,形成HTML页面。<%= %>表达式的本质就是out.writer方法
(5)page对象:代表该页面本身,通常没有多少作用的。也就是servlet中的this。
(6)pageContext对象:PageContext的实例,该实例代表JSP页面上下文,使用该对象可以访问页面的共享数据。常用的方法为:getServletContext和getServletConfig方法。详细介绍见下面内容。
(7)request对象:javax.servlet.http.HttpServletRequest的实例,该对象封装了一次请求,客户端的请求参数都将封装到该对象里面。
(8)reponse对象:javax.servlet.http.HttpServletReponse的实例,代表了服务器对客户端的响应,通常很少使用该对象直接响应,而是使用out对象,除非需要生成非字符响应。而response对象常用于重定向,常用的方法是getOutStream,sendRedirect方法等
(9)session对象:javax.servlet.http.HttpServletReponse的实例,代表一次回话。当客户端浏览器与站点建立连接时候,会话开始;当客户端关闭浏览器时,回话结束。
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
第二个问题: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的方法里面生成的局部变量。