web作用域

今天翻起之前的一本JSP+servlet的教科书,想起之前去年老师叫我起来回答web作用域的时候我那令人发笑的回答:

“web作用域有五个:page,request,session,pageContext,application。”

好吧,第一句话就错了,没错,web的作用域只有4个,分别是page,request,session和application。

而所谓的pageContext是JSP九大隐式对象之一,是JSP重要的一个域对象,是JSP页面的运行环境(页面上下文嘛),这就不赘述了。

首先是page域,

作用于当前页面,也就是JSP页面啦。不过比较少用

然后是request,

它的生命周期是从请求开始到请求结束,多用于servlet之间的信息传递,是HttpServletRequest接口的两个方法实现的,

Object getAttribute(String name)在request作用域中获取相对应名称的值

void setAttribute(String name,Object value)将对象value设置一个名称后放入request作用域中

接着是session,

会话的生命周期是从浏览器开启到浏览器关闭,是HttpSession接口实现的,

Object getAtturibute(String name)在session作用域中获取相对应名称的值

void setAttribute(String name,Object value)将对象value设置一个名称后放入session作用域中

void invalidate() 结束session作用域

最后是application,

它的作用域是从服务器开启到服务器关闭,也就是服务器生命周期内,通过servletContext实现,

Object getAtturibute(String name)在application作用域中获取相对应名称的值

void setAttribute(String name,Object value)将对象value设置一个名称后放入application作用域中

可以看到,request,session和application的方法都差不多,最大的区别在于它们的生命周期,这就是我们选择他们的依据了,

由于本人多用JSP+Servlet做项目,所以JSP页面基本是作为HTML存在的,并没有在里面嵌入多少java代码,所以在page作用域也就没什么了解;application也是极少用到的。我们多用的是request和session,request作用于请求开始到请求结束的这段时间,所以一般适用于一次性传递数据的场合,比如要显示用户的具体信息这个功能,页面发送请求后后台servlet接受请求,处理数据后封装成一个对象向前台发送,这时候就可以使用request传值了,因为它就只用一次。

说道request传值,我们顺便说说Servlet传递数据的两个方法:response.sendRedirect()和getRequestDispatcher().forward()

response.sendRedirect()是重定向,跳转一个url时不会带着request对心爱过你

getRequestDispatche ().forward() 是带着reuqest向一个地址跳转

关于这些方法的具体区别请参考:http://jorton468.blog.163.com/blog/static/72588135201101711810508/

另一篇比较细致的servlet讲解:http://blog.csdn.net/skywalkervvv/article/details/8535307

理解若有问题请多指教

你可能感兴趣的:(web作用域)