详解Java四大作用域

四大作用域

凡是作用域都有如下方法

setAttribute(name,value);name是String类型,value是Object类型;往域对象里面添加数据,添加时以key-value形式添加
getAttribute(name);根据指定的key读取域对象里面的数据
removeAttribute(name);根据指定的key从域对象里面删除数据

1.pageContext

1.1定义:

pageContext对象是JSP中很重要的一个内置对象,不过在一般的JSP程序中,很少用到它。它是javax.servlet.jsp.PageContext类的实例对象,可以使用PageContext类的方法。

详细解释:

  • jsp内置对象:JSP的内置对象是指在JSP页面系统中已经默认内置的Java对象,这些对象不需要开发人员显式声明即可使用。在JSP页面中,可以通过存取JSP内置对象实现与JSP页面和Servlet环境的相互访问。每个内部对象均有对应所属的ServletAPI类型。

    JSP内置对象包括request对象、response对象、session对象、out对象、application对象、page对象、exception对象、pageContext对象、config对象。这些对象在客户端和服务器端交互的过程中分别完成不同的功能。

范围最小的一个域,可以获取其他八大内置对象,能够获取其他所有域中的数据。能跳转到其他资源它旨在当前页面有效,也就是用户请求的页面有效,当前页面跳转、重定向、定时刷新、关闭的时候,page对象将在响应回馈给客户端之后就释放(销毁)。


2.request(详解)

2.1定义

request概述
request是Servlet.service()方法的一个参数,类型为javax.servlet.http.HttpServletRequest。在客户端发出每个请求时,服务器都会创建一个request对象,并把请求数据封装到request

request的功能可以分为以下几种:

  • 封装了请求头数据
  • 封装了请求正文数据,如果是GET请求,那么就没有正文
  • request是一个域对象,可以把它当成Map来添加获取数据
  • request提供了请求转发和请求包含功能

2.2 request域对象的使用

一个请求会创建一个request对象,如果在一个请求中经历了多个Servlet,那么多个Servlet就可以使用request来共享数据。前一个Servlet来setAttribute传值,后一个Servlet来getAttribute获取值

void setAttribute(String name, Object value)用来存储一个对象,也可以称之为存储一个域属性

例如:servletContext.setAttribute(“xxx”, “XXX”),在request中保存了一个域属性,域属性名称为xxx,域属性的值为XXX。请注意,如果多次调用该方法,并且使用相同的name,那么会覆盖上一次的值,这一特性与Map相同;

Object getAttribute(String name)用来获取request中的数据,当前在获取之前需要先去存储才行

例如:String value = (String)request.getAttribute(“xxx”);,获取名为xxx的域属性;

void removeAttribute(String name)用来移除request中的域属性

如果参数name指定的域属性不存在,那么本方法什么都不做

Enumeration getAttributeNames()获取所有域属性的名称

它在当前请求中有效。作用域一次HTTP请求到服务器处理结束,返回响应的整个过程。request可以通过 setAttribute() 方法实现页面中的信息传递,也可以通过 forward() 方法进行页面间的转跳到多个jsp页面中,一旦刷新页面,它们将重新计算。


2.3生命周期
  1. 当请求来时创建request对象
  2. 当请求结束时,request就销毁。
  3. 每次请求都是一个新的request对象。
    request域对象,是建议使用,并被频繁使用的域对象,因为它声明周期比较短,也就代表着,它效率比较高,释放资源比较及时。

2.4 获取请求头数据
request与请求头相关的方法有:
    String getHeader(String name):获取指定名称的请求头;
    Enumeration getHeaderNames():获取所有请求头名称;
    int getIntHeader(String name):获取值为int类型的请求头。

request中还提供了与请求相关的其他方法,有些方法是为了我们更加便捷的方法请求头数据而设计,有些是与请求URL相关的方法。

int getContentLength():获取请求体的字节数,GET请求没有请求体,没有请求体返回-1;
  String getContentType():获取请求类型,如果请求是GET,那么这个方法返回null;如果是POST请求,那么默认为application/x-www-form-urlencoded,表示请求体内容使用了URL编码;
  String getMethod():返回请求方法,例如:GET
  Locale getLocale():返回当前客户端浏览器的Localejava.util.Locale表示国家和言语,这个东西在国际化中很有用;
  String getCharacterEncoding():获取请求编码,如果没有setCharacterEncoding(),那么返回null,表示使用ISO-8859-1编码;
  void setCharacterEncoding(String code):设置请求编码,只对请求体有效!注意,对于GET而言,没有请求体!!!所以此方法只能对POST请求中的参数有效!
  String getContextPath():返回上下文路径,例如:/hello
  String getQueryString():返回请求URL中的参数,例如:name=zhangSan
  String getRequestURI():返回请求URI路径,例如:/hello/oneServlet
  StringBuffer getRequestURL():返回请求URL路径,例如:http://localhost/hello/oneServlet,即返回除了参数以外的路径信息;
  String getServletPath():返回Servlet路径,例如:/oneServlet
  String getRemoteAddr():返回当前客户端的IP地址;
  String getRemoteHost():返回当前客户端的主机名,但这个方法的实现还是获取IP地址;
  String getScheme():返回请求协议,例如:http;
  String getServerName():返回主机名,例如:localhost
  int getServerPort():返回服务器端口号,例如:8080

3.session(详解)


3.1定义

服务器为了保存用户状态而创建的一个特殊的对象

当浏览器第一次访问服务器时,服务器会创建一个session对象(该对象会拥有一个唯一id,一般称作sessionId),服务器会将sessionid以cookie的方式发送给浏览器.当浏览器再次访问服务器的时候,服务器会将session对象发送过来,服务器根据sessionId就可以找到session对象。

3.2 获取session对象
HttpSession s = request.getSession(boolean flag);

注: HttpSession是一个接口。

当flag为true时:先查看请求当中是否有sessionId,如果没有, 则创建一个session对象。

如果有,则依据sessionId查找对应的session对象,如果找到了,则返回该对象,

如果找不到,创建一个新的session对象。

当flag为false时:先查找请求当中是否有sessionId,如果没有,返回null。

如果有,则依据sessionId查找对应的session 对象,如果找到了,则返回该对象,如果找不到,返回null。

HttpSession s = request.getSession();
3.3 Session常用方法
resquest.getSession():得到请求游览器(客户端)对应的session。如果没有,那么就创建应该新的session。如果有那么就返回对应的session
setAttribute(String s, Object o):在session存放属性
getAttribute(String s):从session中得到s所对应的属性
removeAttribute(String s):从session中删除s对应的属性
getId():得到session所对应的id
invalidate():使session立即无效
setMaxInactiveInterval(int i):设置session最大的有效时间。注意,这个有效时间是两次访问服务器所间隔的最大时间,如果超过最大的有效时间,那么这个session就失效了。

4.application

第四个作用域是application,它所在的所有应用程序中都有效,如果不进行手工删除,它们将一直可以使用,也就是当服务器开始到服务器结束的这段时间,application作用域中存储的数据都是有效的,所有用户均可使用。同样,可以通过 setAttribute() 赋值和 getAttribute() 取值。

ServletContext 与application的异同

相同:两者其实是一样的,相当于一个类创建了两个不同名称的变量

servlet中ServletContext就是application对象。

不同:两者的区别就是application用在jsp中,servletContext用在servlet中。application和page request session 都是JSP中的内置对象,在后台用ServletContext存储的属性数据可以用 application对象获得。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值