(16)ServletContext详解

1,作用:

  ServletContext对象 ,叫做Servlet的上下文对象。表示一个当前的web应用环境。一个web应用中只有一                                                                    个ServletContext对象。

 

2,对象的创建

  加载web应用时创建ServletContext对象。

  上一篇说了ServletConfig对象,一个web应用中默认只有一个ServletContext对象,可以有多个ServletConfig对象;Config对象的创建时机是Servlet第一次调用的时候,init方法之前创建。

  ServletContext相当于web环境的化身,ServletConfig对象相当于每个sevlet对象的化身。

  我们可以简单想象一下sun公司关于ServletContext的设计:

  1)创建ServletContext对象      ServletContext  context = new ServletContext()        
  2)创建ServletConfig对象   ServetConfig config = new ServletConfig();
  config.setServletContxt(context);
  class  ServletConfig{
    ServletContext context;
    public ServletContext getServletContxt(){
      return contxt;
    }
  } 

  public void init( ServletConfig config ){
    得到ServletConfig对象
    从ServletConfig对象中得到ServletContext对象
    SerlvetContext context = config.getServletContext();
  }

 

3,ServletContext对象的获取:

  a,从ServletConfig对象获取

  getServletConfig().getServletContext()

  b,在Servlet中直接获取

  ServletContext context = getServletConfig().getServletContext();

  context = getServletContext();

4,常用的API

  a,获取当前web应用的路径

  getServletContext().getContextPath()

  b,获取web初始化参数

  配置web初始化参数:

  

  

  获取参数:

  getServletContext().getInitParameterNames();//返回枚举类型,参数名列表

  getServletContext().getInitParameter(paraName)//获取具体的参数值

  

  c,作为域对象共享数据使用

  getServletContext().setAttribute("time", "2017.11.11");

  System.out.println(getServletContext().getAttribute("time"));

  getServletContext().removeAttribute("time");

  作为与对象,设置的属性数据,可以在同一个web应用下的其他servlet地方使用。相当于单例共享数据的感觉。

 

  d,转发

//转发 
/**
* 注意:不能转发当前web应用以外的资源。
*/
/*RequestDispatcher rd = this.getServletContext().getRequestDispatcher("/GetDataServlet");
rd.forward(request, response);*/
this.getServletContext().getRequestDispatcher("/GetDateServlet").forward(request, response);

  对比重定向:

//重定向
/**
* 注意:可以跳转到web应用内,或其他web应用,甚至其他外部域名。
*/
//response.sendRedirect("/day09/adv.html");
response.sendRedirect("/day10/GetDataServlet");

   

  e,获取资源路径

   java.lang.String getRealPath(java.lang.String path)     --得到web应用的资源文件

         java.io.InputStream getResourceAsStream(java.lang.String path) 


  

重点概述:

1,所有域对象

  HttpServletRequet 域对象 

  ServletContext域对象

  HttpSession 域对象

  PageContext域对象

2,转发和重定向

  1)转发

    a)地址栏不会改变

    b)转发只能转发到当前web应用内的资源

    c)可以在转发过程中,可以把数据保存到request域对象中

  2)重定向                             

    a)地址栏会改变,变成重定向到地址。

    b)重定向可以跳转到当前web应用,或其他web应用,甚至是外部域名网站。

    c)不能再重定向的过程,把数据保存到request中。

  

 

posted on 2017-12-25 09:41  洋子哥哥  阅读(691)  评论(0编辑  收藏  举报