JSP九大内置对象和四大作用域和Servlet的三大作用域对象

一、JSP九大内置对象:内置对象(又叫隐含对象,有9个内置对象):不需要预先声明就可以在脚本代码和表达式中随意使用

内置对象特点:

  • 由JSP规范提供,不用编写者实例化。

  • 通过Web容器实现管理

  • 所有JSP页面均可使用

  • 只有在脚本元素的表达式代码段中才可使用(<%=使用内置对象%><%使用内置对象%>)

常用内置对象:

  • ** 输出输入对象:**request对象、response对象、out对象

  • ** 通信控制对象:**pageContext对象、session对象、application对象

  • Servlet对象:page对象、config对象

  • 错误处理对象:exception对象

括号内为其对应的类

Request(ServletRequest):它包含了有关浏览器请求的信息.通过该对象可以获得请求中的头信息、Cookie和请求参数。

Response(ServletResponse):作为JSP页面处理结果返回给用户的响应存储在该对象中。并提供了设置响应内容、响应头以及重定向的方法(如cookies,头信息等)

Out(JspWriter):用于将内容写入JSP页面实例的输出流中,提供了几个方法使你能用于向浏览器回送输出结果。

pageContext(PageContext):描述了当前JSP页面的运行环境。可以返回JSP页面的其他隐式对象及其属性的访问,另外,它还实现将控制权从当前页面传输至其他页面的方法。

Session(HttpSession):会话对象存储有关此会话的信息,也可以将属性赋给一个会话,每个属性都有名称和值。会话对象主要用于存储和检索属性值。

Application(ServletContext):存储了运行JSP页面的servlet以及在同一应用程序中的任何Web组件的上下文信息。

Page(Object):表示当前JSP页面的servlet实例

Config(ServletConfig):该对象用于存取servlet实例的初始化参数。

Exception(Throwable):在某个页面抛出异常时,将转发至JSP错误页面,提供此对象是为了在JSP中处理错误。只有在错误页面中才可使用<%@page isErrorPage=“true”%>

Jsp内置对象功能主要方法
out向客户端输出数据print() println() flush() clear() isAutoFlush() getBufferSize() close() …………
request向客户端请求数据getAttributeNames() getCookies() getParameter() getParameterValues() setAttribute() getServletPath() …………
response封装了jsp产生的响应,然后被发送到客户端以响应客户的请求addCookie() sendRedirect() setContentType() flushBuffer() getBufferSize() getOutputStream() sendError() containsHeader()……………
applicationGryffindor90
config表示Servlet的配置,当一个Servlet初始化时,容器把某些信息通过此对象传递给这个ServletgetServletContext() getServletName() getInitParameter() getInitParameterNames()……………
pageJsp实现类的实例,它是jsp本身,通过这个可以对它进行访问flush()………
pagecontext为JSP页面包装页面的上下文。管理对属于JSP中特殊可见部分中己经命名对象的该问forward() getAttribute() getException() getRequest() getResponse() getServletConfig() getSession() getServletContext() setAttribute() removeAttribute() findAttribute() ……………
session用来保存每个用户的信息,以便跟踪每个用户的操作状态getAttribute() getId() getAttributeNames() getCreateTime() getMaxInactiveInterval() invalidate() isNew()
exception反映运行的异常getMessage()…………

二、JSP四大作用域

jsp的四大作用域为:PageContext,ServletRequest,HttpSession,ServletContext;

  • ServletRequest域:作用范围是整个请求链(请求转发也存在);生命周期是在service方法调用前由服务器创建,传入service方法。整个请求结束,request生命结束。

  • HttpSession域:作用范围是一次会话。生命周期是在第一次调用request.getSession()方法时,服务器会检查是否已经有对应的session,如果没有就在内存中创建一个session并返回。当一段时间内session没有被使用(默认为30分钟),则服务器会销毁该session。如果服务器非正常关闭(强行关闭),没有到期的session也会跟着销毁。如果调用session提供的invalidate() ,可以立即销毁session。

  • ServletContext域:作用范围是整个Web应用。生命周期是当Web应用被加载进容器时创建代表整个web应用的ServletContext对象,当服务器关闭或Web应用被移除时,ServletContext对象跟着销毁。

作用域从小到大为:PageContext(jsp页面)< ServletRequest(一次请求)< HttpSession(一次会话)< ServletContext(整个web应用)。

pageContext, request, session、application四个作用域中

  1. 如果把变量放到pageContext里,就说明它的作用域是page,它的有效范围只在当前jsp页面里。 从把变量放到pageContext开始,到jsp页面结束,你都可以使用这个变量。

  2. 如果把变量放到request里,就说明它的作用域是request,它的有效范围是当前请求周期。所谓请求周期,就是指从http请求发起,到服务器处理结束,返回响应的整个过程。在这个过程中可能使用forward的方式跳转了多个jsp页面,在这些页面里你都可以使用这个变量。

  3. 如果把变量放到session里,就说明它的作用域是session,它的有效范围是当前会话。所谓当前会话,就是指从用户打开浏览器开始,到用户关闭浏览器这中间的过程。这个过程可能包含多个请求响应。也就是说,只要用户不关浏览器,服务器就有办法知道这些请求是一个人发起的,整个过程被称为一个会话(session),而放到会话中的变量。

  4. 如果把变量放到application里,就说明它的作用域是application,它的有效范围是整个应用。整个应用是指从应用启动,到应用结束。我们没有说“从服务器启动,到服务器关闭”是因为一个服务器可能部署多个应用,当然你关闭了服务器,就会把上面所有的应用都关闭了。application作用域里的变量,它们的存活时间是最长的,如果不进行手工删除,它们就一直可以使用。与上述三个不同的是,application里的变量可以被所有用户共用。如果用户甲的操作修改了application中的变量,用户乙访问时得到的是修改后的值。这在其他scope中都是不会发生的,page, request, session都是完全隔离的,无论如何修改都不会影响其他

    ** 三、servlet的三大作用域对象:**

1.request(HttpServletRequest)
  • request是表示一个请求,只要发出一个请求就会创建一个request,它的作用域:仅在当前请求中有效。

  • 用处:常用于服务器间同一请求不同页面之间的参数传递,常应用于表单的控件值传递。

  • 方法:request.setAttribute(); request.getAttribute(); request.removeAttribute(); request.getParameter().

2.session(HttpSession):
  • 服务器会为每个会话创建一个session对象,所以session中的数据可供当前会话中所有servlet共享。

  • 会话:用户打开浏览器会话开始,直到关闭浏览器会话才会结束。一次会话期间只会创建一个session对象。

  • 用处:常用于web开发中的登陆验证界面(当用户登录成功后浏览器分配其一个session键值对)。

  • 方法:session.setAttribute(); session.getAttribute(); session.removeAttribute();

  • 获得session对象方法:

    在Servlet中:HttpSession session = request.getSession();
    由于session属于jsp九大内置对象之一,当然可以直接使用。例如:<%session.serAttribute("name","admin")%>。

  • session被销毁

    1.session超时;

    2.客户端关闭后,再也访问不到和该客户端对应的session了,它会在超时之后被销毁;

    3.调用session. invalidate();

备注: session是服务器端对象,保存在服务器端。并且服务器可以将创建session后产生的sessionid通过一个cookie返回给客户端,以便下次验证。(session底层依赖于cookie)
3.application(ServletContext):
  • tomcat启动时创建,tomcat关闭时销毁,整个web的生命周期只有一个

  • 作用范围:所有的用户都可以取得此信息,此信息在整个服务器上被保留。Application属性范围值,只要设置一次,则所有的网页窗口都可以取得数据。ServletContext在服务器启动时创建,在服务器关闭时销毁,一个JavaWeb应用只创建一个ServletContext对象,所有的客户端在访问服务器时都共享同一个ServletContext对象;ServletContext对象一般用于在多个客户端间共享数据时使用;

  • 获取application对象方法(Servlet中):
ServletContext app01 = this.getServletContext();
app01.setAttribute("name", "kaixuan");    //设置一个值进去
ServletContext app02 = this.getServletContext();
app02.getAttribute("name");    //获取键值对
  • ServletContext同属于JSP九大内置对象之一,故可以直接使用

  • 备注:服务器只会创建一个ServletContext 对象,所以app01就是app02,通过app01设置的值当然可以通过app02获取。

    Servlet三大作用域总结:

  • 作用域: (1)request,(2)session,(3)application

  • (1)使用作用域传递数据和存储数据

  • (2)使用作用域传递数据时,必须掌握作用域对应的生命周期和作用范围


  • 生命周期

  • (1) request:只限于一次请求

  • (2) session:一次会话(多次请求)

    开始

    用户向服务器发送请求的时候 
    
    结束
    
      客户端
    
       丢失JsessionId值的时候(关闭浏览器)
    
      服务器端 
    
          关闭服务器 
    
          超过会话的不活动周期时间 
  • (3) application:项目的加载到卸载

  • 作用范围

    (1) requset:所有被请求转发的Servlet

    (2) session:所有的Servlet

    (3)application:所有的Servlet(换一个浏览器演示,跟session作用域区分)

  • 如何正确的选择作用域

    (1) request:跟当前操作功能相关

    (2) session: 跟用户信息相关

    (3) application:跟项目全局信息相关

如何正确的选择作用域不正确,会出现什么情况:
内存浪费

转载于:https://www.cnblogs.com/xianyao/p/10793478.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值