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中可以通过setAttribute()和getAttribute()这两个方法来设置和取得属性。从而实现数据的共享。JSP提供了四种属性保存范围:response,request,session和application。
1、page:就是设置的属性只能在当前页面有效。通过pageContext的setAttribute()和getAttribute()。
2、
request:指属性在一次请求范围内有效。如果页面从给一个页面跳转到另一个页面,那么该属性就失效了。这里所指的跳转是指客户端跳转,比如客户单击
超链接跳转到其他页面或者通过浏览器地址栏浏览其他页面。如果使用服务器端跳转<jsp:forward>,则该属性仍然生效。同理使用
request对象的setAttribute()和getAttribute()。
3、session:指客户浏览器与服务器一次会话范围内,如果服务器断开连接,那么属性就失效了。同理通过session对象的setAttribute()和getAttribute()。session范围的例外比如重新打开一个浏览器。
4、
application:指在整个服务器范围,知道服务器停止以后才会失效。同理通过application对象的setAttribute()和
getAttribute()。application范围就是保存的属性只要服务器不重启,就能在任意页面中获取,就算重新打开浏览器也是可以获取属性
的。
二、移除属性:在属性的作用域还未到就想清除相应的属性时,必须编程清除。即调用相应对象的removeAttribute()方法就可以移除指定属性。
<%@
page language="java" contentType="text/html;charset=gb2312"%>
<html> <head> <title>移除属性</title> </head>
<body> <%-- 在page范围设置属性 --%> <%
pageContext.setAttribute("name","James"); //设置属性name,其值为James
pageContext.setAttribute("age","12"); //设置属性age,其值为12
pageContext.setAttribute("sex","男"); //设置属性sex,其值为男 %> <%--
移除属性--%> <% pageContext.removeAttribute("sex"); %> <%--
取得page范围属性--%> <% String strName =
(String)pageContext.getAttribute("name"); //取值属性name的值 String strAge =
(String)pageContext.getAttribute("age"); //取值属性age的值 String strSex =
(String)pageContext.getAttribute("sex"); //取值属性sex的值
out.println("page范围:name属性值为" + strName + "<br>");
out.println("page范围:age属性值为" + strAge+ "<br>");
out.println("page范围:sex属性值为" + strSex); %> </body>
</html>
jsp内置对象浅谈_jsp内置对象
?结果页面输出:page范围:name属性值为James??????????????????????? page范围:age属性值为?12
??????????????????????? page范围:sex属性值为 null
三、request对象:request对象不但可以用来设置和取得request范围变量,还可以用来获取客户端请求参数、请求的来源、表头、Cookies等。
1、request获取客户端请求参数方法
?方法 ? ?返回值类型? ? ?方法说明? ? ?
?getParameter(String name) ? ?String? ? ??获取参数名为name的参数值 ? ?
?getParameterNames() ? ?Enumeration? ? ??获取所有参数的名称,可与上一个方法合用获取所有参数的值 ? ?
?getParameterValues(String name) ? ??String[] ? ??获取参数名为name的所有参数,比如参数是多个checkbox ? ?
?getParameterMap() ? ??Map ? ??获取所有参数封装的Map实例,通过Map实例的String[] get("id")方法返回对应参数名为id的值数组 ? ?
2、request的其他方法
方法 ? ?返回值类型 ? ?方法说明 ? ?
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地址 ? ?
四、response对象:用来向客户端传送输出信息。
方法 ? ?返回值 ? ?方法说明 ? ?
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 ? ?页面重定向,用来实现页面跳转 ? ?
jsp内置对象浅谈_jsp内置对象
注:这里的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"的标头。
五、out对象:用来向页面输出信息。
方法 ? ?返回值类型 ? ?方法说明 ? ?
clear() ? ?void ? ?清除网页上输出内容 ? ?
clearBuffer() ? ?void ? ?清除缓冲区内容 ? ?
close() ? ?void ? ?关闭缓冲区,清除所有内容 ? ?
getBufferSize() ? ?int ? ?取得缓冲区大小 ? ?
getRemaining() ? ?int ? ?取得缓冲区剩余大小 ? ?
isAutoFulsh() ? ?boolean ? ?获得缓冲区是否进行自动清除的信息 ? ?
print(String str) ? ?void ? ?进行页面输出 ? ?
println(String str) ? ?void ? ?进行页面输出并换行 ? ?
六、session对象:用来表示用户的会话状况,一般用于保存用户的各种信息,直到生命周期超时或者被认为释放掉为止。
方法 ? ?返回值类型 ? ?方法说明 ? ?
getId() ? ?String ? ?获取session的ID ? ?
getCreationTime() ? ?long ? ?获取session的生成时间 ? ?
getLashAccessedTime() ? ?long ? ?获取用户最后通过session发送请求时间 ? ?
getMaxInactiveInterval() ? ?long ? ?获取session生命周期,如果超过这个时间则失效 ? ?
invalidate() ? ?void ? ?清空session内容 ? ?
isNew() ? ?boolean ? ?判断session是否为“新”的 ? ?
setMaxInactiveInterval() ? ?void ? ?设置session生命周期,如果超过这个时间则失效 ? ?
七、application对象:用来取得和设置Servlet的相关信息。
方法 ? ?返回值类型 ? ?方法说明 ? ?
getMajorVersion() ? ?int ? ?获取主要的Servlet API版本 ? ?
getMinorVersion() ? ?int ? ?获取次要的Servlet API版本 ? ?
getServerInfo() ? ?String ? ?获取服务器版本 ? ?
getMimeType() ? ?String ? ?获取指定文件的MIME类型 ? ?
getContext() ? ?ServerContext ? ?获取指定Local的Application context ? ?
getRealPath ? ?String ? ?获取指定path的绝对路径 ? ?
jsp内置对象浅谈_jsp内置对象
八、pageContext对象:可以用来设置page范围的属性,还可以设置其他范围属性,不过需要指定范围参数,同时还可以获取其他内置对象。
方法 ? ?返回值 ? ?方法说明 ? ?
getException() ? ?Exception ? ?获取当前的exception内置对象 ? ?
getOut() ? ?JspWriter ? ?
getPage() ? ?Object ? ?
getRequest() ? ?ServletRequset ? ?
getResponse() ? ?ServletResponse ? ?
getServletConfig() ? ?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的属性 ? ?
九、page对象:page对象代表JSP转译后的Servlet,通过page对象可以非常方便地调用Servlet类中定义的方法。
实例1:通过page对象调用Servlet类中定义的方法?
<%@
page language="java" contentType="text/html;charset=gb2312"%> <%@
page info="this is the page Object Practice" %> <html>
<head> <title>page对象</title> </head>
<body> <%--通过page对象调用Servlet中的getServletInfo()方法 --%> <%
String info = ((javax.servlet.jsp.HttpJspPage)page).getServletInfo();
%> <%=info %> </body> </html>
输出:this is the page Object Practice.
十、config对象:可以用来获取Servlet的配置信息。
方法 ? ?返回值类型 ? ?方法说明 ? ?
getInitParameter(name) ? ?String ? ?获取Servlet初始化参数 ? ?
getInitParameterNames() ? ?Enumeration ? ?获取Servlet所有初始化参数名称 ? ?
getServletContext() ? ?ServletContext ? ?获取当前Application context ? ?
getServletName() ? ?String ? ?获取Servlet名称 ? ?
十一、exception对象:用来处理错误异常,如果要用exception对象,必须指定page中的isErrorPage属性值为true。
实例:exception用来处理错误异常
1、包含错误的页面:error.jsp
<%@
page language="java" contentType="text/html;charset=gb2312"
errorPage="ExceptionDemo01.jsp"%> <html> <head>
<title>错误页面</title> </head> <body> <% int[]
arr = {1,2,3}; out.println(arr[3]); %> </body> </html>
jsp内置对象浅谈_jsp内置对象
?注:error.jsp中arr[3]数组下表越界.需在page指令中指定errorPage的属性值为相应的异常处理程序。
2、异常处理页面:exceptionDo.jsp
<%@
page language="java" contentType="text/html;charset=gb2312"
isErrorPage="true"%> <%@page import="java.io.PrintStream"%>
<html> <head> <title>处理错误异常</title>
</head> <body> <%=exception%><br>
<%=exception.getMessage()%><br>
<%=exception.getLocalizedMessage()%><br> <%
exception.printStackTrace(new java.io.PrintWriter(out)); %>
</body> </html>
?注:必须在page指令中指定属性isErrorPage属性值为true。也就是说这个页面可以用于异常处理。
将会在exceptionDo.jsp中打印出error.jsp中的数组下标越界异常 信息