引言:
JSP中一共有四大作用域,所谓的“作用域”是指“信息共享的范围”,即一个“信息”能够在多大的范围内是有效的。
一、作用域通信对象:
JSP内置对象的四个作用域分别为:pageContext、request、session、application 。
作用域表如下:
名称 作用域
pageContext 当前页内有效
request 同一个请求内有效
session 同一个会话内有效
application 同一个应用内有效
关于pageContext:
pageContext对象代表当前页面的上下文环境,类型为javax.servlet.jsp.PageContext。
作用1:可以获取页面所有相关的属性
作用2:可以得到当前页面中所有其他的JSP隐含对象(out、request、response、session、application等)及其所支持的属性
四个内置对象的常用方法均为:
void setAttribute(String key, Object value):以键/值的方式,将一个对象的值存放到其中。
Object getAttribute(String key):根据名称去获取内置对象中存放对象的值。
有效范围总结:
pageContext.setAttribute() 设置的属性只在当前页面中有效,通过pageContext.getAttribute() 来获取。
request. setAttribute() 设置的属性在同一个请求中有效,通过request.getAttribute() 来获取。
适用情况:
session. setAttribute() 设置的属性在同一个会话中有效,同一会话中的其他页面可以通过session.getAttribute() 来获取,即便这些页面是在不同的请求中。
适用情况:
response.sendRedirect()
form 表单提交
链接跳转
application.setAttribute() 设置的属性在同一个应用中有效,同一应用中其他页面可以通过application.getAttribute() 来获取,即便这些页面可能在不同的会话中。
例题:
统计访问页面的用户数
<%
Integer count = (Integer) application.getAttribute("count");
if (count != null) {
count++;
} else {
count = 1;
}
application.setAttribute("count", count);
%>
<%
Integer i = (Integer) application.getAttribute("count");
out.println("统计访问量:目前有" + i + "人访问过本网站");
%>
问题:如果将application对象换成session对象,会有什么不同?
答:访问量会一直是1。
二、特殊对象:
JSP的特殊对象一共有四个:cookie、config、page、exception。
1、cookie对象:
cookie的写入,要结合response对象来实现。
写入Cookie的主要步骤:
1、创建cookie对象。
2、设定cookie的属性(一般设置Cookie的有效期)。
3、调用response.addCookie(Cookie c)方法将其写入到客户端。
<%
Cookie c = new Cookie("season","spring");
c.setMaxAge(30); //cookie的有效期为30秒
response.addCookie(c); //将cookie写入客户端
%>
Cookie的有效期:
过期属性是按秒为单位记录的,使用正整数。
负值表示该cookie的生存期是当前浏览器会话。
零值表示立即删除该cookie。
如果不设置cookie的有效期,就不能在硬盘上保存cookie信息,一旦浏览器关闭,cookie信息就消失。
Cookie有效期的设置必须在将Cookie写入客户端之前进行。
对于cookie的读取,要结合request对象来实现:
<%
Cookie a[ ]=request.getCookies();
//根据设置时的cookie个数决定数组元素个数
for( int i=0;i
2、config对象:
config对象:主要用来获取服务器的配置信息,它实现的是javax.servlet.ServletConfig接口。
使用config对象可以获取Web应用配置描述文件web.xml的相关信息。
config对象的常用方法:
public String getInitParameter(String name) 获取服务器指定name参数的初始值。
public ServletContext getServletContext()获取Servlet的上下文。
public String getServletName() 获取Servlet的服务器名。
例:
Web.xml中设置初始化参数,
copyright
Copyright pds.edu.cn.software.
页面中通过config对象访问:
<%ServletContext sc=config.getServletContext(); %>
<%=sc.getInitParameter("copyright") %>
3、page对象:
使用 page 对象可以访问 Servlet 类的所有变量和方法,相当于this,代表当前页面本身的对象。
java.lang.Object类的一个实例 。
例:
<% @ page info=”我的信息” contentType=”text/html;charset=GBK”%>
<%=((javax.servlet.jsp.HttpJspPage)page).getServletInfo()%>
4、exception对象:
exception对象用于处理 JSP 页面中的错误。
例:
<%@ page isErrorPage="true" %>
隐式对象
隐式对象:异常
已检测到以下错误:br>
<%= exception %>
<% exception.printStackTrace(out); %>
可以指定别的页面输出报错信息:
a.Jsp:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" errorPage="error.jsp"%>
<%!int a[] = { 0, 1, 2 };%>
<%=a[3]%>
error.jsp:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" isErrorPage="true"%>
错误原因:<%=exception.getMessage()%>
<%=exception.toString()%>
运行结果:
,大致就这些。