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

时间:2022-09-26 09:17:45

一、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()……………
application Gryffindor 90
config 表示Servlet的配置,当一个Servlet初始化时,容器把某些信息通过此对象传递给这个Servlet getServletContext() getServletName() getInitParameter() getInitParameterNames()……………
page Jsp实现类的实例,它是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:跟项目全局信息相关

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

JSP九大内置对象和四大作用域和Servlet的三大作用域对象的更多相关文章

  1. JSP——九大内置对象和其四大作用域

    一.JSP九大内置对象: JSP根据Servlet API 规范提供了某些内置对象,开发者不用事先声明就可以使用标准的变量来访问这些对象. Request:代表的是来自客户端的请求,例如我们在FORM ...

  2. jsp 九大内置对象和其作用以及四大域对象

    感谢作者:Fangcf. 链接:https://blog.csdn.net/qq_39320833/article/details/80818442 一.jsp 九大内置对象 方法简单介绍:https ...

  3. Jsp九大内置对象及其作用域

    本文主要介绍Jsp九大内置对象及其作用域,着重介绍几个常用的,希望对初学者有所帮助. 1 Jsp九大内置对象 2 详细介绍 2.1 request javax.servlet.http.HttpSer ...

  4. JSP九大内置对象和四个作用域

    JSP九大内置对象和四个作用域 在学习JSP的时候,首先就要先了解JSP的内置对象,什么是内置对象呢?内置对象也叫隐含对象,就是不需要预先声明就可以在脚本代码和表达式中随意使用.而这样的内置对象在JS ...

  5. 黑马程序员【JSP九大内置对象和四个作用域】转载

    http://www.cnblogs.com/fanfu1/p/4530980.html JSP九大内置对象和四个作用域 ------- android培训.java培训.期待与您交流! ------ ...

  6. JSP九大内置对象的作用和用法总结?

    JSP九大内置对象的作用和用法总结? 1.request对象javax.servlet.http.HttpServletRequest request对象代表了客户端的请求信息,主要用于接受通过HTT ...

  7. JSP九大内置对象(转载)

    JSP中一共预先定义了9个这样的对象,分别为:request.response.session.application.out.pagecontext.config.page.exception 1. ...

  8. JSP九大内置对象和四种属性范围解读

    林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 摘要:本文首先主要解说了JSP中四种属性范围的概念.用法与实例. 然后在这个基础之上又引入了九 ...

  9. 一、JSP九大内置对象 &Tab;二、JAVAEE三层架构和MVC设计模式 &Tab;三、Ajax

    一.JSP九大内置对象###<1>概念 不需要预先申明和定义,可以直接在jsp代码中直接使用 在JSP转换成Servlet之后,九大对象在Servlet中的service方法中对其进行定义 ...

随机推荐

  1. listview&plus;seekbar问题的解决

    最近做了个项目,其中有录音播放功能.每次录音结束都会在listView中显示,在listView中能播放每次的录音,也可以每条录音之间的切换播放.随之就引发了许多的问题,比如当我播放第一条录音的时所有 ...

  2. 在包a中编写一个类Father,具有属性:年龄(私有)、姓名(公有); 具有功能:工作(公有)、开车(公有)。 在包a中编写一个子类Son,具有属性:年龄(受保护的)、姓名; 具有功能:玩(私有)、学习(公有)。 最后在包b中编写主类Test,在主类的main方法中测试类Father与类Son。

    package a; public class Father { public String name; private int age; public Father(String name) { t ...

  3. java 访问活动目录代码

    package demo; import java.util.Hashtable; import javax.naming.Context; import javax.naming.NamingEnu ...

  4. 前端开发中的一些chrome插件推荐

    这篇博客推荐的都是谷歌chrome浏览器插件,理论上,与之相同内核的浏览器都能使用.由于是谷歌插件,所以在天朝的网络,你懂的! 红杏 专为 学者 .程序员.外贸工作者 打造的上网加速器.我们相信,上网 ...

  5. Android 4&period;4 上实现透明导航栏和状态栏 Translucent system bar

    Translucent system UI styling To get the most impact out of your content, you can now use new window ...

  6. Linux基础命令第一天

    一.命令行bash基本操作 1,shell 用户不能直接操作内核,所以用户操作通过shell传递给内核,Linux下叫shell,就相当于Windows下的cmd shell分为两种: GUI:图形界 ...

  7. 微信小程序上传后发布或者体验版测试无数据解决办法

    在做微信小程序开发的过程中,发现小程序在本地调用接口的数据都显示,但是上传之后,发现手机体验没有数据.以下为解决办法: 1.先清除缓存试试. 2.打开微信小程序工具右上角的详情——项目设置,将“不校验 ...

  8. sql数据库光标变成黑快怎么回事?

    可能是因为你按到了insert键啦,你再按一下insert键应该就可以啦. 光标变成块状说明当前是覆盖模式.光标变成竖条状说明当前是插入模式.

  9. 黄聪:php精度计算问题

    如果用php的+-*/计算浮点数的时候,可能会遇到一些计算结果错误的问题,比如echo intval( 0.58*100 );会打印57,而不是58,这个其实是计算机底层二进制无法精确表示浮点数的一个 ...

  10. xadmin系列之单实例模式

    先看下单实例的定义 python的模块实现单例模式是python语言特有的,python的模块天然就是单例的,因为python有个pyc文件,导入一次后,第二次导入直接从pyc中取数据了 这里我们主要 ...