第一个问题: 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的方法里面生成的局部变量。