zoukankan      html  css  js  c++  java
  • jsp九个内置对象、四个域对象及Servlet的三大域对象

    一,什么是内置对象?

    在jsp开发中会频繁使用到一些对象,如ServletContext HttpSession PageContext等.如果每次我们在jsp页面中需要使用这些对象都要自己亲自动手创建就会特别的繁琐.SUN公司因此在设计jsp时,在jsp页面加载完毕之后自动帮开发者创建好了这些对象,开发者只需要使用相应的对象调用相应的方法即可.这些系统创建好的对象就叫做内置对象.

    在servlet程序中,如果开发者希望使用session对象,必须通过request.getSession()来得到session对象;而在jsp程序中,开发中可直接使用session(系统帮我们创建好的session对象的名字就叫session)调用相应的方法即可,如:session.getId().


    二,九大内置对象到底是哪九大呢?

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

    三,解析几个内置对象

    1)out对象对象,对象类型是JspWriter类,相当于带缓存的PrintWriter(不带缓存)

    PrintWriter:write("内容")    - - - - -     直接向浏览器输出内容
    
    JspWriter:writer("内容")    - - - - -      向jsp缓冲区写出内容

    JspWriter当满足以下条件时之一时,缓冲区的内容写出:

    a,缓冲区满了

    b,刷新缓冲区

    c,关闭缓冲区

    d,jsp页面执行完毕

    2)pageContext对象

    pageContext的对象类型是PageContext,叫jsp的上下文对象.

    pageContext作用:可以获取其他八个内置对象

    //示例:  
    pageContext.getOut();  
    pageContext.getServletConfig()
     
    • 1
    • 2
    • 3

    使用场景:在自定义标签时会频繁使用到PageContext对象;或者是定义一个方法需要用到多个对象时,传一个pageContext对象就能解决问题.


    四,JSP中四大域对象

    分类:

    ServletContext     context域  
    HttpServletRequet  request域  
    HttpSession        session域     --前三种在学习Servlet时就能接触到  
    PageContext        page域     --jsp学习的  
     
    • 1
    • 2
    • 3
    • 4

    域对象的作用:保存数据,获取数据,共享数据.

    保存数据:
    pageContext.setAttribute("内容");//默认保存到page域  
    pageContext.setAttribute("内容",域范围常量);//保存到指定域中  
    //四个域常量  
    PageContext.PAGE_SCOPE  
    PageContext.REQUEST_SCOPE  
    PageContext..SESSION_SCOPE  
    PageContext.APPLICATION_SCOPE  
    获取数据:
    pageContext.getAttribute("内容");  
    <p>pageContext.getAttribute("name",<span style="font-family:宋体;">域范围常量</span><span style="font-family:Calibri;">);</span></p>//自动在四个域中搜索数据  
    pageContext.findAttribute("内容");//在四个域中自动搜索数据,顺序:page域->request域->session域->application域(context域)  

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


    Servlet的三大域对象

    ServletContext     context域  
    HttpServletRequet  request域  
    HttpSession        session域
    • ServletConfig的解析;
    /**
     * 在javax.servlet包中,定义了ServletConfig接口。
     * Servlet容器使用ServletConfig对象在Servlet初始化时向其传递配置信息。
     *所谓的Serlvet配置信息,就是在Web应用程序中web.xml文件中配置有关Servlet的内容。
     *
     *一个ServletConfig对象对应web.xml中一对<serlvet></servlet><servlet-mapping></servlet-mapping>
     *其生命周期:是一个servlet的实例化,初始化,就绪,销毁
     *相比较与servletContext来说较短
     */
    public class ServletConfig_Test extends HttpServlet{
    
        @Override
        protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
             ServletConfig servletConfig = getServletConfig();
    
            //getInitParameter(String name)方法:返回指定名称的初始化参数的值,如果参数不存在则返回null值。
             String blog = servletConfig.getInitParameter("blog");
             //getServletName()方法:获取web.xml文件中配置的Servlet名称。
             String servletname = servletConfig.getServletName();
    
        }
    
    }
    • ServletContext
    /**
     * servletContext对象是Servlet三大域对象之一,每个Web项目都拥有且唯一的一个ServletContext对象,
     * 该对象是Web项目的全局对象或者上下文。Tomcat服务器在启动web项目时,会自动创建一个ServletContext对象,
     * 在关闭时,会自动销毁这个ServletContext对象。ServletContext对象可以在整个Web应用中共享数据资源。
     * 
     * 由于一个WEB应用中的所有Servlet共享同一个ServletContext对象,因此Servlet对象之间可以通过ServletContext对象
     * 实现通讯。
     * 
     *1) 实现数据共享
     *2) 获取全局配置参数
     *3) 请求转发
     *a) 拿取请求转发器,然后转发
     *4) 获取资源文件
     *5) 用来获得文件的MIME的类型.
     * 
     */
    public class ServletContext_text extends HttpServlet{
            ServletContext sc ; 
    
             @Override
             public void init(ServletConfig config) throws ServletException {
                 super.init(config) ;
                 sc = config.getServletContext() ;//1.
             }
    
             public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
                  //第二种方式
                  ServletContext sc1 = this.getServletContext() ;
                  System.out.println(sc);
                  System.out.println(sc1 == sc);
                  //第三种方式
                  ServletContext sc2 = request.getSession().getServletContext() ;
                  System.out.println(sc2 == sc);
              }
    
             public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
                  doGet(request, response);
              }
    
    }
    原文转载: https://blog.csdn.net/zsp151296/article/details/78003099
  • 相关阅读:
    QuantLib 金融计算
    【翻译】《理解收益率曲线》系列
    QuantLib 金融计算——C++ 代码改写成 Python 程序的一些经验
    可转债研报阅读笔记
    SWIG 3 中文手册——13. 约定
    SWIG 3 中文手册——12. 自定义功能
    SWIG 3 中文手册——11. 类型映射
    【翻译】Quant 应该怎样写博客?
    QuantLib 金融计算——案例之普通利率互换分析(2)
    仿射期限结构模型:理论与实现——实现部分
  • 原文地址:https://www.cnblogs.com/create-and-orange/p/10788426.html
Copyright © 2011-2022 走看看