JSP基础--九大内置对象

作者:无名 - 其它综合 -

jsp九大内置对象

object findattribute(string name):依次在page、request、session、application范围查找名称为name的数据,如果找到就停止查找。这说明在这个范围内有相同名称的数据,那么page范围的优先级最高!

这样定义变量 session_aa

1 什么是jsp九大内置对象

在jsp中无需创建就可以使用的9个对象,它们是:

l out(jspwriter):等同与response.getwriter(),用来向客户端发送文本数据;

l config(servletconfig):对应真身中的servletconfig;

l page(当前jsp的真身类型):当前jsp页面的this,即当前对象;

l pagecontext(pagecontext):页面上下文对象,它是最后一个没讲的域对象;

l exception(throwable):只有在错误页面中可以使用这个对象;

l request(httpservletrequest):即httpservletrequest类的对象;

l response(httpservletresponse):即httpservletresponse类的对象;

l application(servletcontext):即servletcontext类的对象;

l session(httpsession):即httpsession类的对象,不是每个jsp页面中都可以使用,如果在某个jsp页面中设置lt;%@page session=false%gt;,说明这个页面不能使用session。

在这9个对象中有很多是极少会被使用的,例如:config、page、exception基本不会使用。

在这9个对象中有两个对象不是每个jsp页面都可以使用的:exception、session。

在这9个对象中有很多前面已经学过的对象:out、request、response、application、session、config。

2 通过真身来对照jsp

  我们知道jsp页面的内容出现在真身的_jspservice()方法中,而在_jspservice()方法开头部分已经创建了9大内置对象。

public void _jspservice(httpservletrequest request, httpservletresponse response)[崔1]

throws java.io.ioexception, servletexception {

pagecontext pagecontext = null;[崔2]

httpsession session = null;[崔3]

servletcontext application = null;[崔4]

servletconfig config = null;[崔5]

jspwriter out = null;[崔6]

object page = this;[崔7]

jspwriter _jspx_out = null;

pagecontext _jspx_page_context = null;

try {

response.setcontenttype("text/html;charset=utf-8");

pagecontext = _jspxfactory.getpagecontext(this, request, response,

null, true, 8192, true);

_jspx_page_context = pagecontext;

application = pagecontext.getservletcontext();

config = pagecontext.getservletconfig();

session = pagecontext.getsession();

out = pagecontext.getout();

_jspx_out = out;

    从这里开始,才是jsp页面的内容[崔8]

}

3 pagecontext对象

  在javaweb中一共四个域对象,其中servlet中可以使用的是request、session、application三个对象,而在jsp中可以使用pagecontext、request、session、application四个域对象。

pagecontext 对象是pagecontext类型,它的主要功能有:

l 域对象功能;

l 代理其它域对象功能;

l 获取其他内置对象;

3.1 域对象功能

  pagecontext也是域对象,它的范围是当前页面。它的范围也是四个域对象中最小的!

l void setattribute(string name, object value);

l object getattrbiute(string name, object value);

l void removeattribute(string name, object value);

3.2 代理其它域对象功能

还可以使用pagecontext来代理其它3个域对象的功能,也就是说可以使用pagecontext向request、session、application对象中存取数据,例如:

pagecontext.setattribute("x", "x");[崔9]

pagecontext.setattribute("x", "xx", pagecontext.request_scope);[崔10]

pagecontext.setattribute("x", "xxx", pagecontext.session_scope);[崔11]

pagecontext.setattribute("x", "xxxx", pagecontext.application_scope);[崔12]

l void setattribute(string name, object value, int scope):在指定范围中添加数据;

l object getattribute(string name, int scope):获取指定范围的数据;

l void removeattribute(string name, int scope):移除指定范围的数据;

l object findattribute(string name):依次在page、request、session、application范围查找名称为name的数据,如果找到就停止查找。这说明在这个范围内有相同名称的数据,那么page范围的优先级最高!

3.3 获取其他内置对象

一个pagecontext对象等于所有内置对象,即1个当9个。这是因为可以使用pagecontext对象获取其它8个内置对象:

l jspwriter getout():获取out内置对象;

l servletconfig getservletconfig():获取config内置对象;

l object getpage():获取page内置对象;

l servletrequest getrequest():获取request内置对象;

l servletresponse getresponse():获取response内置对象;

l httpsession getsession():获取session内置对象;

l servletcontext getservletcontext():获取application内置对象;

l exception getexception():获取exception内置对象;


[崔1]request和response两个对象是方法参数。

[崔2]pagecontext对象

[崔3]session对象

[崔4]application对象

[崔5]config对象

[崔6]out对象

[崔7]page对象

[崔8]jsp页面的内容从这里才开始,所以可以使用上面定义的变量!这就是9大内置对象为什么可以在jsp页面中无需创建就可以使用的奥秘了!

[崔9]向pagecontext中存储数据

[崔10]向request中存储数据

[崔11]向session中存储数据

[崔12]向application中存储数据

lt;%@page language="java" import="java.util.*" contenttype="text/html; charset=utf-8" 
	errorpage="error.jsp"%gt;
lt;!doctype html public "-//w3c//dtd html 4.01 transitional//en" "http://www.w3.org/tr/html4/loose.dtd"gt;
lt;htmlgt;
lt;headgt;
lt;meta http-equiv="content-type" content="text/html; charset=utf-8"gt;
lt;titlegt;insert title herelt;/titlegt;
lt;/headgt;
lt;bodygt;
	lt;%
		//int a = 10/0;
		/* if(true){
			throw new runtimeexception("出错了");
		} */
		pagecontext.setattribute("aaa", "aaa");
		out.print(pagecontext.getattribute("aaa"));
		pagecontext.removeattribute("aaa");
		
		pagecontext.setattribute("bbb", "bb",pagecontext.request_scope);
		out.print(request.getattribute("bbb"));
		out.print(pagecontext.getrequest().getattribute("bbb"));
		
		pagecontext.setattribute("cc", "cc",pagecontext.session_scope);
		out.print((string)request.getsession().getattribute("cc"));
		out.print(pagecontext.getsession().getattribute("cc"));
		
		pagecontext.setattribute("dd", "dd",pagecontext.application_scope);
		out.print(request.getservletcontext().getattribute("dd"));
		out.print(pagecontext.getservletcontext().getattribute("dd"));
		
		out.print(pagecontext.findattribute("dd")+"  d");
	%gt;
lt;/bodygt;
lt;/htmlgt;

  

jsp基础--九大内置对象

原文地址:https://www.cnblogs.com/eadela/p/11327131.html

IT人知识库 该篇知识地址:http://www.itpeo.net/9999/4539845.html





Markdown:Syntax

markdown: syntax main basics syntax license ...

docker部署nginx服务器

1,下载nginx镜像 docker pull nginx 2,启动 docker run --name runo ...

wepy小程序入门和项目初始化

前言: wepy小程序项目初始化的操作,官方文档看了好几遍,感觉写得不是很清楚。 这篇写得挺好的:小程序开发之wepy ...

EffectiveJavaP2CreatingandDestroyingObjects

this chapter concerns creating and destorying objects : wh ...

vue中的ref,refs使用

使用elementui时,tree遇到的坑 1、发现,this.$refs每次都是undefined; 问题原因:渲染组 ...

Leetcode672.灯泡开关II

灯泡开关ii 现有一个房间,墙上挂有n只已经打开的灯泡和 4 个按钮。在进行了m次未知操作后,你需要返回这n只灯泡可能有 ...

golang基础学习-strings包常用函数学习

package main import ( "fmt" "strings" ) //strfunc 字符串说明 ...

C#基础篇之语言和框架介绍

1.如何描述c#和.net的关系? .net的是平台,c#是为了微软公司为了.net平台开发的面向对象语言。 2.c# ...

Python_re模块

一、re简介   正则表达式是一种对字符串(包括普通字符、非打印字符、通用字符(称为原子)、特殊字符(称为元字符))操作 ...

第八天:错误异常处理

错误类型 1、语法错误 syntaxerror:代码拼写出错 attributeerror:属性异常 try: ...

python3之深浅copy对比

一、赋值对比1、列表l1=[1,2,3] l2=l1 l1.append(#39;a#39;) print(l1,l2) ...

PHP代码规范之PSR-1

1.概述 1. 必须使用lt;php gt; 或是lt;=gt;这两种标签 2. php代码中必须使用utf-8 wit ...

安装使用Hadoop遇到的一些问题

安装完后却不能运行hadoop,仔细查看日志信息,hadoop记录了详尽的日志信息,日志文件保存在logs文件夹内。 ...

c++string去除首尾空格、\n、\r、\t

string s = " test "; size_t n = s.find_last_not ...

.Net基础之3——运算符

(3)convert类型转换 1、类型如果相兼容的两个变量,可以使用自动类型转换或者显示类型转换。 但是如果两个类型的变 ...

iOS的match函数

1.求余 extern double fmod(double,double); fmod(10.2,3) =1.2 ...

AndroidStudio解决ADB检测不到手机导致无法连接的问题

adb的全称是android debug bridge,是用来管理模拟器和真机的通用调试工具。   开usb调试 ...

Django==>Form组件

django ==gt; form 组件 目录: 1.基本使用 2.form中字段和插件 3.自定义验证规则 4.动态加 ...

「mysql优化专题」详解引擎(InnoDB,MyISAM)的内存优化攻略?(9)

注意:以下都是在mysql目录下的my.ini文件中改写(技术文)。 一、innodb内存优化 innodb用一块内存区 ...

新媒体的冲击,传统企业的出路在哪?

新媒体冲击,传统企业的出路在哪? 在二零壹伍克强总理提出我们进入互联网+时代起,我国正式宣布进入后互联网时代,在互联网新 ...