[Java学习笔记]JavaWeb中的四大域对象

域对象

可以在不同Servlet之间传递数据的对象,就是域对象

只要是域对象都有如下方法

  • setAttribute(name,value);存储数据的方法
  • getAttribute(name);根据name获取对应数据值
  • removeAttribute(name);删除数据

JavaWeb有 ServletContext、ServletRequest、HttpSession、PageContext 四大域对象,下面主要从域对象的生命周期、作用、作用范围进行介绍。
Servlet中只有前三个域对象,JSP中多了一个pageContext对象。

.
.

图解作用域

在这里插入图片描述

一、ServletContext(jsp中对象名:application)

1.生命周期

当web应用被加进容器时,创建代表整个web应用的ServletContext对象,当服务器关闭,或web应用被移除时,ServletContext对象跟着被销毁。

2.作用范围

整个web应用内部共享。

3.作用

由于一个web应用中的所有Servlet共享同一个ServletContext对象:因此Servlet对象之间可以通过ServletContext来是实现通讯。ServletContext对象通常也被称为context域对象。
应用

  • 多个Servlet通过ServletContext对象实现数据共享。
  • 获取web应用的初始化参数 getInitParameter。
  • 利用ServletContext对象读取资源文件。
    servletContext.getRealPath("/xx.properties"),servletContext.getResourceAsStream()。
public void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    List<String> list = new ArrayList<String>();
    list.add("aa");
    list.add("bb");
    list.add("cc");

    //将数据存储到ServletContext中
    getServletContext().setAttribute("emplist", list);
}

public void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {

    //获取数据
    Object object = getServletContext().getAttribute("emplist");
    if(object!=null){
        List<String> list = (List<String>) object;
        for (String string : list) {
            response.getWriter().write(string);
        }
    }
}

二、Session

1.生命周期
  • 服务器在运行时可以为每一个用户的浏览器创建一个对应JSESSIONID独享的session对象,由于session为用户浏览器独享,所以用户在访问服务器的web资源时,可以把各自的数据放在各自的session中,当用户再去访问服务器中的其它web资源时,其它web资源再从用户各自的session中取出数据为用户服务。
  • 在第一次调用request.getSession()方法时,服务器会检查是否已经有对应的session,如果没有就在内存中创建一个并返回。
  • 当一段时间内,session没有被使用(默认是30分钟),服务器会销毁该session。如果服务器非正常关闭(强行关闭),还未到期的session也会被销毁。
    另外,调用session的invalidate()方法可以立即销毁session。
2.作用范围

一次回话(客户端与服务器任意一端关闭就结束)。

三、ServletRequest

1.生命周期

在service方法调用前由服务器创建,传入service()方法,整个请求结束,ServletRequest生命周期结束。

2.作用范围

整个请求链。(请求转发也存在,请求转发属于一次请求。)

3.作用

在整个请求链中共享数据,主要可通过getAttribute、setAttribute将数据带到jsp页面中进行显示。

  • 获得客户端信息,可通过getRequestURL()、getRequestURI()、getQueryString()、getPathInfo()、getRemoteAddr()、getRemoteHost()、getRemotePort()、getLocalAddr()、getLocalName()。
  • 获得客户机请求头,getHeader(String s)、getHeaders(String s)、getHeaderNames()。
  • 获得客户机请求参数(客户端提交的数据 POST / GET):getParameter()等。

四、PageContext

PageContext对象是JSP页面中才有的对象。

1.生命周期

当对JSP的请求开始时创建,当响应结束时销毁。

2.作用范围

整个JSP页面,是四大域中最小的一个。

3.作用

pageContext对象封装了8大隐式对象,通过它可以获得其它的8个对象。

  • getException()返回Exception。
  • getPage()返回Page。
  • getRequest()返回request。
  • getResponse()返回response。
  • getServletConfig()返回config。
  • getServletContext()返回application。
  • getSession()返回session。
  • getOut()返回out。
    另外,通过pageContext还能获取其所有域中的数据。
4.getAttribute()和findAttribute()的区别

getAttribute()只能获取自己域中保存的属性,而findAttribute()则会按照(从小到大)
pageContext->request->session->servletContext 的顺序查找有无对应的属性,找到为止。
四大域中,HttpRequest和HttpResponse,session和cookie有很多联系。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值