JSP的9大内置对象和4大域对象

时间:2021-05-03 13:04:47

什么是内置对象?

在JSP开发中,会频繁使用到一些对象。例如HttpSession, ServletContext, ServletContext, HttpServletRequet。如果我们每次要使用这些对象都去创建这些对象就显示非常麻烦。所以Sun公司设计JSP时,在JSP页面加载完毕之后就会自动帮开发者创建好这些对象,而开发者只需要直接使用这些对象调用方法即可,这些创建好的对象就叫内置对象!
举例:

servlet: 
HttpSession session = request.getSession(true); (需要开发者做)

JSP:
tomcat服务器: HttpSession session = request.getSession(true);(不需要开发者做)
开发者做的: session.getId();

9大内置对象

内置对象名 类型
request HttpServletRequest
response HttpServletResponse
config ServletConfig
application ServletContext
session HttpSession
exception Throwable
page Object(this)
out JspWriter
pageContext PageContext

4大域对象

内置对象名 类型
pageContext page域
request request域
session session域
application context域

1)域对象作用:
用于数据共享, 保存数据 和 获取数据。

2)域对象方法:
setAttribute(“name”,Object) 保存数据
getAttribute(“name”) 获取数据
removeAttribute(“name”) 清除数据

3)域对象作用范围:
page域: 只能在当前jsp页面中使用(当前页面)
request域: 只能在同一个请求中使用(转发)
session域: 只能在同一个会话(session对象)中使用(私有的)
context域: 只能在同一个web应用中使用。(全局的)

PageContext

这里说下pageContext, 因为它不仅是一个内置对象, 同时还是域对象.

pageContext内置对象

作为一个内置对象,PageContext封装了其他八个对象, 可以通过pageContext获取其他八个内置对象.
我们看下PageContext的源码:

    public abstract HttpSession getSession();

public abstract Object getPage();

public abstract ServletRequest getRequest();

public abstract ServletResponse getResponse();

public abstract Exception getException();

public abstract ServletConfig getServletConfig();

public abstract ServletContext getServletContext();

其中有getSession()用于获得HttpSession对象, getServletContext()用于获得ServletContext对象.

pageContext域对象

作为一个域对象, pageContext主要用于保存数据和获取数据.

保存数据

1)默认情况下,保存到page域
pageContext.setAttribute("name");
2)可以向四个域对象保存数据
pageContext.setAttribute("name",域范围常量)

获取数据

1)默认情况下,从page域获取
pageContext.getAttribute("name")
2)可以从四个域中获取数据
pageContext.getAttribute("name",域范围常量)
域范围常量:

    PageContext.PAGE_SCOPE
PageContext.REQUEST_SCOPE
PageContext..SESSION_SCOPE
PageContext.APPLICATION_SCOPE

3)自动在四个域中搜索数据
pageContext.findAttribute("name");
顺序: page域 -> request域 -> session域- > context域(application域)