zoukankan      html  css  js  c++  java
  • Java之旅(二)--- ServletContext

    
    • 什么是ServletContext 

            WEB容器在启动时,它会为每一个WEB应用程序都创建一个相应的ServletContext对象。它代表当前web用。通过使用这个对象,servlet能够记录事件,得到资源并得到来自servlet的引擎类。

            能够把ServletContext看成是一个Web应用的server端组件的共享内存。在ServletContext中能够存放共享数据。

    另外。ServletContext对象仅仅在web应用被关闭的时候才被销毁。不同的web应用。ServletContext各自独立存在。

     

            最后总结来说:ServletContextservlet容器,其内提供的方法能够在同一web应用下的全部servlet中被使用,它就是一个全局变量。

     

    • 怎样获取ServletContext

            容器初始化一个servlet时。会为这个servlet建一个唯一的ServletConfig。容器从DDweb.xml)中读出Servlet初始化參数,并把这些參数交给ServletConfig,然后把ServletConfig传递给servletinit(ServletConfig config)方法。也就是说容器仅仅有在创建servlet实例时才会读DD文件里的init-param,而且在servlet一生仅仅读一次。ServletConfig对象中维护了ServletContext对象的引用,开发者在编写servlet时,能够通过ServletConfig.getServletContext方法获得ServletContext对象。


    • 怎样利用ServletContext实现数据共享?

    1)通过ServletContext对象:

          在InitServletService方法中利用ServletContext对象存入须要共享的数据。

    /*获取ServletContext对象*/  
    ServletContext context = this.getServletContext();   
    
    //存入共享的数据    
    context.setAttribute("name", "haha"); 
    
    

          在其他的Servlet中利用ServletContext对象获取共享的数据。   

    /*获取ServletContext对象*/  
    ServletContext context = this.getServletContext();   
    
    //获取共享的数据   
    String name = context.getAttribute("name");   
    
    System.out.println("共享的内容值是:"+name);  
    
    

    2)通过web.xml初始化參数

    <web-app>   
      <context-param>   
         <param-name>url</param-name>   
         <param-value>jdbc:mysql://localhost:3306/4g</param-value>   
      </context-param>   
    </web-app>  
    

          在ServletdoPost方法中測试获取初始化參数的过程例如以下:  

    /*获取ServletContext对象*/  
     ServletContext context = this.getServletContext();   
    
    /*获取指定名称的初始化參数*/   
    String url = context.getInitParameter("url");
    

    • 怎样利用ServletContext实现转发?

          这里面就涉及到转发方法的选择,那么到底forwardinclude有何差别呢?能够说。forward方法是把请求的内容转发到另外的一个servlet。而include是把还有一个servlet处理过后的内容拿过来。以下通过一个很easy易懂的样例来说明吧。

          举例来说比方在servlet1打一句out.print("我是Servlet1")servlet2打上out.print("我是Servlet2")

    1)使用forward方法:在servlet1中用forward命令会转到servlet2中,结果会是“我是Servlet2”;
    2)使用include方法:而在servlet1中使用include方法会依旧在servlet1的页面中,可是在输出“我是Servlet1”后继续输出“我是Servlet2”。

    /*要利用ServletContext对象实现转发获取对象*/  
    ServletContext context = this.getServletContext();   
    
    //在request对象中存入name属性    
    request.setAttribute("name", "haha");   
    
     /*依据转发的地址获取 RequestDispatcher对象*/  
    RequestDispatcher  rd  = context.getRequestDispatcher("/index.jsp");   
    
    //调用转发方法 下面採用随意方法就可以    
    rd.forward(request, response);   
    //rd.include(request, response);  
    

          关于ServletContext先说这么多,你了解它了吗?

  • 相关阅读:
    找数字(递归,二分查找)
    P1759 通天之潜水(不详细,勿看)(动态规划递推,组合背包,洛谷)
    第五讲 二维费用的背包问题(粗糙,勿点)
    VIM基础操作方法汇总
    P2347 砝码称重(动态规划递推,背包,洛谷)
    第三讲 多重背包问题(对背包九讲的学习)
    第二讲 完全背包问题(对背包九讲的学习)
    python 日期、时间、字符串相互转换
    Resource注解无法导入依赖使用javax.annotation的注解类
    Spring的配置文件找不到元素 'beans' 的声明
  • 原文地址:https://www.cnblogs.com/gcczhongduan/p/5184010.html
Copyright © 2011-2022 走看看