- 浏览: 2737304 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (1313)
- JS (65)
- CSS (6)
- html (30)
- dweamweaver工具相关 (2)
- Spry (1)
- DB (103)
- p2p (1)
- java (405)
- .net (3)
- oracle (24)
- struts (18)
- myeclipse (15)
- linux (49)
- SQL SERVER2008 (101)
- jsp (21)
- resume (1)
- other (1)
- ajax (3)
- 云计算 (2)
- excel (32)
- vss (1)
- 警戒 (1)
- eclipse (21)
- c (1)
- dialog designer (7)
- axis1.4 (4)
- webservice (11)
- CTI (1)
- svn (8)
- spring (27)
- tomcat (13)
- log4j (14)
- 网络应用 (7)
- mysql (59)
- bat (4)
- jdbc (1)
- 正式表达式 (1)
- hibernate (27)
- iphone (2)
- 系统应用 (107)
- servlet (3)
- vmware (2)
- php (12)
- JQuery (30)
- avaya (5)
- postgresql (19)
- java面试 (1)
- rose (1)
- Socket (1)
- xml (2)
- PowerDesign (3)
- visio (1)
- jstl (4)
- informix (2)
- assemble (2)
- English Study (2)
- IOS (9)
- CMMI (1)
- outlook (4)
- poi (1)
- hadoop (5)
- SAE (3)
- jor (1)
- jquery mobile (1)
- git (11)
- mina (1)
- ibatis (2)
- wordpress (2)
- 支付宝 (1)
- struts2 (14)
- apns (1)
- html5 (1)
- xampp (2)
- uml (2)
- 项目管理 (1)
- 敏捷开发 (1)
- 设计模式 (2)
- spark (1)
- maven (9)
- 微信公众平台 (1)
- json (2)
- junit (1)
- quartz (2)
- redis (2)
- memcache (1)
- android (3)
- 红杏 (1)
- postman (1)
- mybatis (5)
- iplat4j (1)
- windows (1)
- logback (1)
- Netty (1)
- wiki (1)
- dubbo (1)
- sonar (2)
- jenkins (2)
- mac (10)
- office (4)
- groovy (1)
- intellij (6)
- zookeeper (2)
- 诛仙 (1)
- MQ (2)
- docker (1)
- 2222 (0)
最新评论
-
代码改变生活:
虽然代码敲的头疼的要命,但是依然要感谢你,感谢您共享!!!!开 ...
jxl读取excel日期相差8小时 -
www3837:
org.slf4j.Logger 下载 -
hyztty:
wait_timeout = 86400 interacti ...
druid连接池 -
niaodanwangzi:
连接池可不是给你检测连接状态用的。是为了连接复用,减少连接数。 ...
druid连接池 -
supermine0903:
学习了 啦啦啦
多个路由器同时上网
(转载 http://www.xici.net/u13188220/d80625665.htm)
request、session、application学习08-11-16 23:03 发表于:《生活点滴》 分类:未分类
好像最近发现自己挺多最基本的知识都没有掌握牢固,哎。。。。
几乎所有的Web开发语言都支持Session功能,Servlet也不例外。 Servlet/JSP中的Session功能是通过作用域(scope)这个概念来实现的。
作用域分为四种,分别为:
page 在当前页面有效(仅用于JSP中)
request 在当前请求中有效
session 在当前会话中有效
application 在所有应用程序中有效
是不是看不太明白?page因为仅用于JSP中,这里只讲述其他三种作用域。 首先要声明的一点,所谓“作用域”就是“信息共享的范围”,也就是说一个信息能够在多大的范围内有效。
话说武松一日来到景阳岗,见一旗帜迎风飘扬,旗子上书五个大字“三碗不过岗”。 武松叫道:“店家,拿三碗酒来,再切两斤熟牛肉!”店小二应声道:“三碗好酒,二斤熟牛肉啰~~”里面厨师赶忙当当当当切好牛肉,店小二倒上三碗酒,店小二端上前来。
武松咕咚咕咚连干三碗,叫一声“好酒!店家,再来三碗!”小二忙又倒上三碗好酒, 武松一饮而尽。就这样前前后后武松一共喝了十八大腕。付了帐刚要走,店小二道: “客官,这前面山上有大虫,客官刚刚喝完十八碗酒恐怕过不得岗,不如在小店暂住一夜, 待明天和猎户一同过岗岂不是好?”
之后武松说什么就留待各位看官自己去回忆啦。在这段武松打虎中, 大家有没有看到些熟悉的东西?
武松: 浏览器。
酒馆: 服务器。
店小二、厨师: Servlet或者JSP。
来三碗好酒!: 浏览器向服务器发出HTTP请求。
店小二上酒: 服务器的响应。
武松从进店到离开: 一个HTTP对话。
我们可以看到,Web交互的最基本单位为HTTP请求(武松点菜)。 每个用户从进入网站到离开网站这段过程称为一个HTTP会话 (武松进店到出店),一个服务器的运行过程中会有多个用户访问, 就是多个HTTP会话(酒馆当然不可能只接待武松一个客人)。那么作用域就可以理解为:
request HTTP请求开始到结束这段时间
session HTTP会话开始到结束这段时间
application 服务器启动到停止这段时间
request
一个HTTP请求的处理可能需要多个Servlet合作(武松点菜时店小二就要吩咐厨房做菜), 几个Servlet之间可以通过某种方式传递信息(店小二就用吆喝的方式通知厨房),但这个信息在请求结束后就无效了(厨房在做完菜之后就不用再管这道菜的事儿了)。
Servlet之间的信息共享是通过HttpServletRequest接口的两个方法来实现的:
void setAttribute(String name, Object value) 将对象 value 以 name 为名称保存到request作用域中。
Object getAttribute(String name) 从request作用域中取得指定名字的信息。
doGet()、doPost()函数的第一个参数就是 HttpServletRequest 对象, 使用这个对象的 setAttribute 即可传递信息。
那么设置好信息之后,如何将信息传给其他Servlet? 这就要用到 RequestDispatcher 接口的 forward 方法,将请求转发给其他Servlet。
RequestDispatcher ServletContext.getRequestDispatcher(String path) 取得Dispatcher以便转发。path为转发的目的Servlet。
void RequestDispatcher.forward(ServletRequest request, ServletResponse response) 将request和response转发。
因此,只要在当前Servlet中先 setAttribute,然后forward,最后在forward到的Servlet中 getAttribute即可实现信息传递。
PHP的程序员可能不太好理解这一段,因为PHP中没有转发的概念, 一个请求只能由一个PHP文件来处理,所以PHP中根本没有request作用域的概念。而Servlet则不同,请求可以在应用程序中任意转发,所以用request作用域在不同Servlet之间传递信息。 需要注意两点:
转发不是重定向,转发是在Web应用内部进行的。PHP支持重定向但没有转发。
转发对浏览器是透明的,也就是说,无论在服务器上如何转发,浏览器地址栏中显示的仍然是最初那个Servlet的地址。
session
session作用域比较容易理解,同一浏览器访问多次,在这多次访问之间传递信息,就是session作用域。 ('''武松每次点菜帐房先生都要记一笔账,等武松走之前结帐用。这笔帐在武松吃饭过程中始终有效,即位于session作用域中''')
session是通过HttpSession接口实现的。
Object HttpSession.getAttribute(String name) 从session中获取信息
void HttpSession.setAttribute(String name, Object value) 向session中保存信息
而通过HttpServletRequest.getSession()方法可以获得HttpSession对象。
HttpSession HttpServletRequest.getSessio() 获取当前请求所在的session的对象。
session的开始容易判断(浏览器发出第一个HTTP请求即可认为会话开始), 但结束就不好判断了(因为浏览器关闭时不会通知服务器“我关了,会话可以结束了”),所以只能通过这种方法判断:如果一定的时间内客户端没有反应,则认为会话结束。 Tomcat的默认值为120分钟,但这个值也可以通过 HttpSession 的 setMaxInactiveInterval 方法来设置。
void setMaxInactiveInterval(int interval) 设置绘画的超时值。
如果想主动让会话结束,如用户单击“注销”的时候,可以使用 HttpSession 的 invalidate 方法:
vooid invalidate() 强制结束当前session。
application
application作用域就是服务器启动到关闭的整段时间, 在这个作用域内设置的信息可以被所有应用程序使用。 (餐馆打烊后结帐,用到的即是开张到打烊之间的所有信息。)
还记得上一节提到的ServetContext吗? application作用域上的信息传递就是通过ServetContext实现的。
Object getAttribute(String name) 从application中获取信息。
void setAttribute(String name, Object value) 向application作用域中设置信息。
总结
可以看到,每个作用域除了实现接口不同、意义不同之外,它们的使用方法和作用都是相同的, 都是通过 getAttribute 和 setAttribute 方法进行信息传递。
作用域 意义 实现接口
request HTTP请求内 HttpServletRequest
session HTTP会话内 HttpSession
application 服务器生命周期内 ServletContext
发表评论
-
普通类和线程类的区别
2017-02-18 21:44 1248假设一个类是SubThread,它的init( ... -
最近一些心得
2017-02-08 16:01 8951、Mac starUML在导出png图片时,不要用s ... -
druid连接池
2016-09-14 16:00 5195环境:Ubuntu+Mysql5.5 近期一直报 ... -
罕见问题记录
2016-08-24 17:56 9201、如果提示对catalina.out无权限。 此时 ... -
Java Security
2016-08-24 17:50 958背景: 公司有某些场景需要向第三方提供服务, ... -
kafka java demo
2016-07-10 20:51 6764环境:ubuntu10 2台(32位)+JDK1.8(32 ... -
autowired resource component
2016-05-11 15:23 947背景:同样的bean类型有2个。 尝试用autowire ... -
eclipse 部署spring源码经验之谈
2016-05-08 23:41 17061、junit加载applicationCont ... -
main函数中如何实例化内部类
2016-04-30 22:50 1204需要先new一个父类的对象,然后用父类对象.new 内 ... -
java synchronized 串行
2016-04-30 22:42 1195背景:大家都知道用synchronized来实现加锁 ... -
观察者 Listener是什么意思
2016-02-26 10:40 945从观察者设计模式来看,Listener翻译成中文就是 ... -
UTF-8和Unicode的关系
2016-02-25 16:34 981utf-8只实际了unicode的第一个plane ... -
dubbo
2016-02-18 15:48 7731、配置dubbo.xml,主要是连接到dubbo服务 ... -
datetime格式化
2016-02-18 11:25 841org.joda.DateTime格式化成特定的Str ... -
Java接口中的成员变量为什么必须是public static final?
2016-01-10 16:20 1380必须是final的,否则多个类全继承他后,每个人都改, ... -
抽象类能不能有构造函数
2016-01-10 16:06 1041可以有,但是不能用,即不能new。 refur ... -
workspace workset设置
2016-01-10 15:51 1234背景:当eclipse里面的项目太多时,看上去非常凌 ... -
eclipse一直building workspace
2015-12-10 19:37 811我这里的原因很特殊,是因为在配置spring d ... -
序列化和反序列化
2015-12-10 19:19 930说白了,序列化后 ... -
java.net.bindexception cannot assign requested address jvm_bind
2015-12-10 19:14 1400我的原因是hosts文件中关于127.0.0.1有2个 ...
相关推荐
将前台传过来的参数,通过request作用域反射到javabean,避免了大量的取值代码
Request、Session 作用域的理解 Request 作用域: * Request 作用域是指在当前请求中有效的信息共享范围 * 在 Servlet/JSP 中,Request 作用域是通过 HttpServletRequest 接口实现的 * Request 作用域的信息共享是...
JSP 中的四种作用域是指 page、request、session 和 application,这四种作用域都是用于存储和共享数据的,下面对每种作用域进行详细的解释: 1. Page 作用域 Page 作用域是 JSP 页面的内置对象,用于存储当前页面...
三大作用域 request作用域 session作用域 application作用域【servlet的上下文】
#### 三、以下代码中()可以生成一个List集合存放在request作用域 **答案解析:** - 正确答案为 **C.”names” value=”{‘Jack’,’Rose’,’Andy’}” scope=”request”/>**。 - 使用`<s:set>`标签可以设置变量...
为了使用Request作用域,需要在web.xml中配置ContextLoaderListener或DispatcherServlet。 - 示例配置:`<bean id="role" class="spring.chapter2.maryGame.Role" scope="request"/>` 4. **Session作用域**: - ...
`request.setAttribute()`用于设置request作用域的属性。 3. **session**作用域:在session作用域中设置的属性在整个会话期间都有效,直到会话结束或者显式地移除。会话通常从用户打开浏览器访问网站开始,直到关闭...
2. **Request作用域**: Request作用域的JavaBean在一次HTTP请求中有效,这意味着它可以在请求从一个页面转发到另一个页面(使用`<jsp:forward>`)的过程中保持其值。Request作用域适合处理跨多个JSP页面但局限于...
在 Spring 中,bean 的作用域可以分为五种:singleton、prototype、request、session 和 global session。这五种作用域类型决定了 bean 的实例化和生命周期的管理方式。 1. Singleton 作用域 Singleton 作用域是...
主要介绍了Spring实战之Bean的作用域request用法,结合实例形式分析了spring中Bean的request作用域相关使用技巧与操作注意事项,需要的朋友可以参考下
request作用域是指当前请求的生命周期,以一个HTTP请求为单位,请求结束后request作用域的变量将被销毁。 session作用域是指当前会话的生命周期,以一个会话为单位,会话结束后session作用域的变量将被销毁。 ...
2. **request作用域**:request作用域的变量在一次请求过程中有效。从一个页面到另一个页面的转发中,这些变量仍然可用。在转发过程中,请求对象被保存并传递给目标页面。 3. **session作用域**:session作用域的...
3. **Request作用域**:在Web应用中,每个HTTP请求都会创建一个新的Bean实例。这意味着,对于每个用户请求,Spring容器都会为该请求创建一个全新的Bean,这些Bean在请求完成后将不再存在。这种方式保证了请求之间的...
JSP(Java Server Pages)是Java技术中用于创建动态网页的一种...而临时的请求参数,如表单提交的值,适合放在request作用域中。理解并熟练运用这些内置对象和作用域,能够帮助开发者更高效地构建健壮的Web应用程序。
JSP 中Spring Bean 的作用域详解 Bean元素有一个scope属性,用于定义Bean的作用域,该属性有如下五个值: ...对于同一次Http请求,request作用域下的Bean都将只生成一个实例。这种作用域只有在Web应用中使用Spring容
二、Request作用域 Request作用域是JavaBean对象的第二小作用域,仅在当前HTTP请求内有效。使用request作用域的JavaBean对象,会在当前HTTP请求结束时销毁。例如,在login.jsp页面中使用useBean标签实例化一个...
request 作用域的大小取决于请求的生命周期,一般来说,一个请求的作用域不会超过一个页面。 例如,在 a.jsp 中点击一个链接,会产生一个新的请求 requestA-B,在 b.jsp 中可以从 request 中获取变量。在 b.jsp 中...
Request作用域 Request作用域是指在每个HTTP请求中创建的bean实例,该实例仅在当前HTTP请求内有效。这样可以确保每个请求都可以独立地操作bean实例,而不会受到其他请求的影响。例如: ```xml ...
在使用 request、session、globalsession 作用域时,需要在 web.xml 中配置 ContextListener: ```xml ... <listener-class>org.springframework.web.context.request.RequestContextListener ``` spring 中...