内置对象和属性范围
四种属性范围
九个内置对象
1.内置对象
如果说想要使用一个对象,必须new 出来,但是在我们的jsp操作中,发现我们使用过的out,request对象没有进行实例化,类似于这样的对象,我们叫做jsp的内置对象,也就是收不需要实例化的对象,总共有9个。
序号
对象
类型
1
pageContext
javax.servlet.jsp.PageContext
2
request
javax.servlet.http.HttpServletRequest
3
response
javax.servlet.http.HttpServletResponse
4
session
javax.servlet.http.HttpSession
5
application
javax.servlet.ServletContext
6
config
javax.servlet.ServletConfig
7
out
javax.servlet.jsp.jspWriter
8
page
java.lang.Object
9
exception
java.lang.Throwable
2.属性范围
在jsp中,有四种属性范围,所谓属性范围,就是指在一个jsp中设置了属性,是否可以在其他页面能够访问。四种属性范围分别指的是以下的四种:
·属性范围在当前页面有效:设置了一个属性,在设置属性的页面可以取得属性,跳转到其他页面则无法取得设置的属性
·属性范围在服务端跳转范围内有效:一个页面设置了属性,然后经过服务端跳转(n次),依然可以取得设置的属性
·属性范围在一次会话中有效:一个页面设置属性,无论是经过服务端还是客户端跳转,只要浏览器不重启,设置的属性都可以取得。
·属性范围在服务器上下文中有效:页面设置的属性,无论是经过客户端还是服务端跳转,无论是哪一个会话,只要服务器不重启,设置的属性都可以访问。
NO
方法
描述
1
public void setAttribute(String name,Object val)
设置属性
2
pulblic Object getAttribute(String name)
取得属性
3
public void removeAttribute(String name)
删除属性
2.1page属性范围
page属性范围也就是我们上面所提到的第一种属性范围,使用的是pageContext这个内置对象设置和取得的,指的是在一个页面使用pageContext设置了属性之后,本页面可以通过pageContext取得设置的属性,跳转到其他页面之后无法取得设置的属性。要注意的一点,所谓的page属性范围使用的是pageContext这个内置对象设置和取得的。
//设置属性
pageContext.setAttribute("company","厦门");
pageContext.setAttribute("address","厦门市");
pageContext.setAttribute("tel","0592-2565166");
%>
如果现在我们通过服务端跳转,看能不能取得设置的属性
这是pageAttributeDemo02.jsp
发现我们通过服务端跳转后取不到之前设置的page范围的属性了,如果说想要通过服务端跳转后也能取得设置的属性,我们必须使用第二种属性范围。
2.2request属性范围
request属性范围,是第二种属性范围,也就是说设置的属性在当前页面可以取得,通过服务端跳转之后也可以取得设置的属性。
//设置属性
request.setAttribute("company","厦门");
request.setAttribute("address","厦门市");
request.setAttribute("tel","0592-2565166");
%>
这是pageAttributeDemo02.jsp
通过
//设置属性
request.setAttribute("company","厦门");
request.setAttribute("address","厦门");
request.setAttribute("tel","0592-2565166");
%>
现在,我们发现,request范围属性经过多次跳转之后,依然可以取得设置的属性,那么现在如果经过客户端跳转呢?
//设置属性
request.setAttribute("company","厦门");
request.setAttribute("address","厦门");
request.setAttribute("tel","0592-2565166");
%>
客户端跳转
这是requestAttributeDemo03.jsp
通过程序运行结果发现,通过客户端跳转不能够取得设置的request范围的属性,那么如果现在我就想要通过客户端取得设置的属性呢?那么我们可以使用第三种范围属性。
3.session
session属性范围就是我们第三种属性范围,也就是之前提到过的,属性范围在一次会话中有效。是无论经过客户端还是服务端跳转,都可以取得设置的属性,当然前提是浏览器不能重启。
//设置属性
session.setAttribute("company","厦门");
session.setAttribute("address","厦门");
session.setAttribute("tel","0592-2565166");
%>
客户端跳转
02
03
以上的程序说明我们session范围的属性,在经过客户端或者服务端跳转之后,设置的属性依然可以取得。现在我们来重启一下浏览器:通过操作发现,重启浏览器之后,取不到设置的session范围属性了,那么如果现在想要在浏览器重启后取得设置的属性,我们必须使用第四种属性范围。
4.application属性范围
application范围属性就是第四种范围属性,属性是设置在服务器的上下文中,只要服务器不重启,那么设置的属性统统都可以取得。无论是经过客户端你还是服务端还是浏览器重启,都可取得设置的属性。
//设置属性
application.setAttribute("company","厦门");
application.setAttribute("address","厦门");
application.setAttribute("tel","0592-2565166");
%>
客户端跳转
03
设置的application范围的属性,无论是通过客户端还是服务端或者浏览器重启,都可以取得设置的属性。那么现在如果服务器重启呢?通过操作发现,重启服务器后,之前设置的属性取不到了,那么如果想要在重启服务器后取得设置的属性呢?那是没有办法的。
3.属性范围使用说明
在开发中,我们常用的属性范围就是request和session范围,那么在开发中,怎么区分使用二者呢?一般来说,只对于同一个功能的属性的传递,使用request范围属性。那么对于session范围来说,主要还是用于登陆上面。
4.关于pageContext属性的进一步说明
上面我们讲解的是四种属性范围,实际上四种属性范围都是通过pageContext设置的,在pageContext中,setAttribute()方式实际上被重载过:
·设置属性:
public abstract void setAttribute(java.lang.String name, java.lang.Object value)
public abstract void setAttribute(java.lang.String name,
java.lang.Object value,
int scope)
对于这两个方法,第一个方法是我们之前一直在使用的,对于第二个方法,相比第一个方法多了一个参数(int scope),实际上这个参数就是指定属性范围的参数:
·APPLICATION_SCOPE
·PAGE_SCOPE
·SESSION_SCOPE
·REQUEST_SCOPE
也就是说,通过这个方法,我们可以设置四种属性范围。
pageContext.setAttribute("j1m","111",PageContext.SESSION_SCOPE);
%>
跳转
02
总结,知道九个内置对象(pageContext,session,request,response,applicatino,config,page,exception),充分掌握四种属性范围(page仅对于自己的页面传值;request应用于服务端传值,但是客户端跳转不能传值;session一般应该于用户的登录注册保存在一次会话中,会话结束,属性值消失;application属性范围应用于整个服务器中,服务器关闭属性值消失。