JSP作用域与特殊对象

引言:
        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() 来获取。
    适用情况:<jsp:forward>

  • session. setAttribute() 设置的属性在同一个会话中有效,同一会话中的其他页面可以通过session.getAttribute() 来获取,即便这些页面是在不同的请求中。
    适用情况:

	response.sendRedirect()
	form 表单提交
	链接跳转<a href="">
	<jsp:forward> 
  • 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<a.length;i++){ 
  String name=(String)( a[i].getName() );
  String value=(String) (a[i].getValue() );
  out.println(name+:+value);
  }
%> 
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中设置初始化参数,

<context-param>
  <param-name>copyright</param-name>
  <param-value>Copyright pds.edu.cn.software.</param-value>
</context-param>

页面中通过config对象访问:

 <%ServletContext sc=config.getServletContext(); %>
 <%=sc.getInitParameter("copyright") %>
3、page对象:
  • 使用 page 对象可以访问 Servlet 类的所有变量和方法,相当于this,代表当前页面本身的对象。
  • java.lang.Object类的一个实例 。

例:

<% @ page info=”我的信息” contentType=”text/html;charset=GBK”%>
<html>
<body>
   <%=((javax.servlet.jsp.HttpJspPage)page).getServletInfo()%>
</body>
</html>
4、exception对象:

exception对象用于处理 JSP 页面中的错误。

例:

<%@ page isErrorPage="true" %>
<html>
    <head>
        <title>隐式对象</title>
    </head>
    <body>
        <h1>隐式对象:异常</h1>
        已检测到以下错误:br>
        <b><%= exception %></b><br>
        <% exception.printStackTrace(out); %>
    </body>
<html>

可以指定别的页面输出报错信息:

a.Jsp:

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8" errorPage="error.jsp"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
</head>
<body>
	<%!int a[] = { 0, 1, 2 };%>
	<%=a[3]%>
</body>
</html>

error.jsp:

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8" isErrorPage="true"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
</head>
<body>
	错误原因:<%=exception.getMessage()%>
	<%=exception.toString()%>
</body>

</html>

运行结果:
在这里插入图片描述
🆗,大致就这些。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值