jsp内置对象作用域白话演示
内置对象就是JSP中不需要自己定义和声明的对象,可以在JSP中直接使用。
JSP中有9大内置对象,它们有两个常用的方法:
setAttribute("key","value"):存值,以键值对的形式,key是键,value是值。
getAttribute("key"):取值,通过key取曾经set到内置对象中的值。
简要介绍一下pageContext,request,session,application这四个内置对象的作用范围的试验小方法:
1.pageContext作用域:
在同一页面中正常传值,跳转后值消失。
2.request作用域:
页面发生跳转,如果是地址栏信息没有改变的情况(称为一次请求),则正常传值。
3.session作用域:
浏览器未关闭(会话状态),得到值后数据一直在,默认30分钟后销毁。浏览器关闭(一次会话结束),值消失。常用于用户信息的保存,如登录状态。
4.application作用域:
服务器关闭后,数据才消失。常用于统计网站点击量,访问量等。
在demo01中写上这些代码,在地址栏输入http://localhost:8080/JSP_002/demo01.jsp,肯定是都能得到结果的。
<%
int num=0;
pageContext.setAttribute("p",1);
request.setAttribute("r",1);
session.setAttribute("s",1);
%>
<%
System.out.println( pageContext.getAttribute("p"));
System.out.println( request.getAttribute("r"));
System.out.println( session.getAttribute("s"));
%>
前三个一起验证:
如果在demo01.jsp中加入跳转到demo2.jsp,即下面这行代码:
<jsp:forward page="demo2.jsp"></jsp:forward>
如果把上面这行代码加入到最后面,浏览器打开demo01.jsp,那么控制台得到结果:1 1 1 null 1 1 (demo01.jsp执行编译完,set和get都在同一个页面所以值全部得到,然后跳转到demo2.jsp,pageContext的值消失)
如果放到两段Java代码的中间,浏览器打开demo01.jsp,那么得到结果:null 1 1 (demo01.jsp执行完前一段代码,还没有执行到后一段get方法时就跳转到了demo2.jsp,由demo2.jsp的get方法获得的值,pageContext的值消失,request能得到值是因为虽然执行跳转到demo2.jsp的代码但未使地址栏发生改变,还是demo01.jsp)
以下我们试验把跳转代码放入两段Java代码中间,主要测试跳转到demo2.jsp后的执行结果。
session是指浏览器未关闭,第一次请求得到的信息会保留。
操作1:直接打开demo2.jsp,执行结果为:null null null (set方法在demo01.jsp里面,当直接打开demo2.jsp页面,地址栏已经不是demo01.jsp了,所以由于作用域的不同,只有application的值是存在的)
操作2:先打开demo01.jsp,再打开demo2.jsp,执行结果:先得到null 1 1 (同标红部分),null null 1 (第一个null,set和get不在同一个页面,所以值未得到,第二个null地址栏地址栏直接改变了,打开的是demo2.jsp,而不再是set所在的demo1.jsp,所以值未得到。第三个1是因为打开demo01.jsp后,未关闭浏览器,直接打开demo2.jsp,执行demo01的时候,session是可以得到值了的,浏览器未关闭,值就会保留,所以再直接打开demo2.jsp后,值是存在的)
最后验证一下application:
<%
if(application.getAttribute("n")==null){ //num相当于key,num的值一直保留,如果其它jsp文件里也用的num这个名,那么其它页面的访问量就都算在一起了,如果用其它名则各自算各自的
application.setAttribute("n",0);
}
Integer nu=(Integer)application.getAttribute("n");
application.setAttribute("n",nu+1);
nu=(Integer)application.getAttribute("n");
System.out.println(nu);
%>
或者类型转换一下
<% if(application.getAttribute("num")==null){ //num相当于key,num的值一直保留,如果其它jsp文件里也用的num这个名,那么其它页面的访问量就都算在一起了,如果用其它名则各自算各自的
application.setAttribute("num",new Integer(0));
}
Integer count=(Integer)application.getAttribute("num");
application.setAttribute("num",new Integer(count.intValue()+1));
count=(Integer)application.getAttribute("num");
System.out.println(count.intValue());
%>
<center>这是第<%=count.intValue()%>个访问者!</center>
执行结果:只要没有重启Tomcat服务器,每次刷新或者重启浏览器,数据都会保留,上面代码是一个简易的访问量例子,每点开一次,访问值加1。
jsp内置对象作用域白话演示的更多相关文章
- JSP运行过程 JSP脚本 静态动态包含 jsp指令 jsp内置对象jsp四大作用域 jsp动作元素 EL表达式 JSTL 设计模式 JSP开发模式 EL内置对象
Day38 JSP JSP的运行过程具体如下: (1)客户端发出请求,请求访问JSP文件. (2)JSP容器先将JSP文件转换成一个Java源文件(Java Servlet源程序),在转换过程中,如果 ...
- jsp内置对象浅谈
jsp内置对象浅谈 | 浏览:1184 | 更新:2013-12-11 16:01 JSP内置对象:我们在使用JSP进行页面编程时可以直接使用而不需自己创建的一些Web容器已为用户创建好的JSP内置对 ...
- JavaWeb学习----JSP内置对象详解
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...
- JavaWeb之 JSP:内置对象,EL表达式,JSP标签基础
JSP的内置对象 什么是JSP的内置对象呢? 在JSP页面进行编程的时候,如果我们要使用一些对象,如:HttpSession,ServletConfig,ServletContext这些对象,如果每次 ...
- JSP内置对象详解
jsp中内置对象:request.response.session.applecation.out.pagecontesx.config.page.exception.cookie 1.request ...
- JSP内置对象(上)
在JSP中为了简化页面的开发提供了一些内置的对象.这些对象不需要由JSP的编写者通过new关键字实例化,他们都由容器实现和管理,在所有的JSP页面中都可以使用内置对象. JSP中共有9大内置对象: o ...
- jsp内置对象的方法
JSP内置对象的方法:out:out.print();request:request对象主要用于出列客户端请求. 常用方法: String getParameter(String name) ...
- 咸鱼入门到放弃8--jsp<三>jsp内置对象
NO. 内置对象 类型 1 pageContext javax.servlet.jsp.PageContext 2 request javax.servlet.http.HttpServletRequ ...
- 转:jsp内置对象中page与pageContext与el内置对象pageScope与pageContext区别
原文地址:jsp内置对象中page与pageContext与el内置对象pageScope与pageContext区别 首先说明一下jsp9大内置对象 (1)HttpSession类的session对 ...
随机推荐
- react-native修改android包名
安卓已包名作为应用的唯一id,相对iOS来说改起来就不是那么方便,但为了能正式发布自己的应用,还是得改过来. 假设包名为com.exease.etd.objective,以下地方需要修改. 首先是两个 ...
- EntityFramework codefirst
一.Entity Framework 迁移命令(get-help EntityFramework) Enable-Migrations 启用迁移 Add-Migration 为挂起的Model变化添加 ...
- Keepalived实现心跳检测实现自动重启
项目中服务器如果发生宕机:1.故障转移 2.心跳检测 3.负载均衡 4.自动重启 心跳检测: 心跳检测脚本: 写入nginx_check.sh脚本 vi /etc/keepalived/nginx_ ...
- Spring Boot2.0之全局捕获异常
全局捕获异常,很明显的错误404返回给客户,很不好呀.整个web请求项目全局捕获异常,比如空指针直接返回给客户啊,那多操蛋呀~ 看这几个常用的注解: @ExceptionHandler 表示拦截异常 ...
- gVim/Vim 一键编译、连接、运行 C/C++ 单文件
用于Gvim 或 Vim 配置文件的一键编译与运行函数(注:需要机器上安装了GCC才行) 本代码只加入了对C/C++的编译与运行,如果要加入其语言的可以参考此代码加入即可 同时,本代码加入了对Wind ...
- CSS3咖啡制作全过程动画
CSS3咖啡制作全过程动画是一款利用纯CSS3实现的咖啡制作全过程动画特效,从把咖啡豆导入杯子,到把咖啡煮好,整个动画还比较流畅. 源码:http://www.huiyi8.com/sc/8788.h ...
- laravel基础课程---11、lavarel的ajax操作(ajax优劣势是什么)
laravel基础课程---11.lavarel的ajax操作(ajax优劣势是什么) 一.总结 一句话总结: 优势:用户友好度:异步通信,不会频繁刷新页面,用户友好度比较高 优势:减轻数据库压力 缺 ...
- CentOS Wifi Connection
方法一: http://wiki.centos.org/HowTos/Laptops/WpaSupplicant http://www.cnblogs.com/tanghuimin0713/p/343 ...
- 分享知识-快乐自己:Hibernate各种查询操作
Hibernate各种查询操作(一) 测试数据库如下: t_sort表: t_good表: 一.对象导航方式查询 查询所有食品类下面 ...
- IDEAL葵花宝典:java代码开发规范插件 (maven helper)解决maven 包冲突的问题
小编说到: 在我们日常开发当中常常我们会遇到JAR包冲突.找来找去还找不到很是烦人.那么所谓的JAR包冲突是指的什么那?JAR包冲突就是-引入的同一个JAR包却有好几个版本. 例如: 项目中引用了两个 ...