深度解析: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() 来获取。
适用情况:

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()%>



运行结果:

,大致就这些。

看完有什么不懂的欢迎在下方留言评论,记得点个赞哦!

你可能感兴趣的:(深度解析:JSP作用域与特殊对象,看完你肯定懂了!)