日期:2014-05-17  浏览次数:20722 次

servlet的四个域的数据名称问题
通过pageContext.findAtribute("name")是按照顺序向page  request  session  application中寻找数据,如

果没有则返回null。两个问题:

1,这四个域中的数据的名称可以相同吗?如:request中有data:aaa的数据,session中有data:bbb的数据

2,如果可以重名,那么我要找session中的data:bbb但通过pageContext.findAtribute("data")找到的确是request中的data:aaa,岂不是有问题?
servlet,四个域对象,名称问题

------解决方案--------------------
1.可以相同
2.调用findAtribute()方法,是按域范围从小到大的顺序去查找,即page->request->session->application,既然request域中有data,那就把request中的取出来了。
------解决方案--------------------
可以相同  保存的范围不同
pageContext可以取得request,session,application这三个内置对象

是各自取各自的数据的
pageContext.getRequest() 应该有这个方法  记不清了 
------解决方案--------------------
getAtribute方法,各取各的,而且用findAtribute也不太合理

引用:
可以相同  保存的范围不同
pageContext可以取得request,session,application这三个内置对象

是各自取各自的数据的
pageContext.getRequest() 应该有这个方法  记不清了

------解决方案--------------------
一试就明了
------解决方案--------------------
早上看了下api,做一补充:
servlet的那4个域分别对应的是4个Class(详见api,javax.servlet.jsp.PageContext)
page--PageContext
request--HttpServletRequest
session--HttpServletSession
application--ServletContext

而request,session,application都是基于page扩展的对象
所以可以根据page(pageContext)来获取任一一个域的对象
getPage()
getRequest()
getSession()
getServletContext()

每个域对象都提供了setAttribute getAtribute的方法 ,用于保存各自存储属性的范围
getPage().getAttribute()/setAttribute()
getRequest().getAttribute()/setAttribute()
getSession().getAttribute()/setAttribute()
getServletContext().getAttribute()/setAttribute()

------解决方案--------------------
引用:
引用:
早上看了下api,做一补充:
servlet的那4个域分别对应的是4个Class(详见api,javax.servlet.jsp.PageContext)
page--PageContext
request--HttpServletRequest
session--HttpServletSession
application--ServletC……


嗯 EL里面是按照范围小从到大的来取值的 page-request-session-application

一般开发里面会约定命名的规范来避免这个问题