JAVAEE_Servlet_06_ServletContext接口

ServletContext接口

  * javax.servlet.ServletContext

  * Tomcat服务器中ServletContecxt的完整类名: ServletContext:org.apache.catalina.core.ApplicationContextFacade
  
  *  获取ServletCotext

     - 分别创建两个Servlet实现类,分别获取两个Servlet实现类的ServletContecxt,发现输出的结果是一样的,是同一个内存地址
     
    public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException {
	
	//获取ServletConfig
	
	 ServletConfig config=getServletConfig();
	 
	 //获取ServletContext
	 
	 ServletContext application=config.getServletContext();
	 
	 //输出ServletContext
	 System.out.println("ServletContext01'ServletContext"+application);
   }
   *  总结:
           
	     1.javaweb程序员只需要面向 javax.servlet.ServletContext接口进行调用方法,不需要关心Tomcat对ServletContext接口的实现
    
             2. ServletContext可以完成跨用户传递数据,因为一个项目中的所有Servle共享一个ServletContext。

	     3.ServletContext到底是什么?  什么时候被创建?   什么时候被销毁?  一个WEb项目中创建几个?
	      
	        > ServletContext被翻译为Servlet上下文
		
		> 一个WebApp只有一个ServletContext对象,无论有几个Servlet实现类都只有一个ServletContext对象。(而ServletConfig则是一个Servlet对象对应一个ServletConfig)

		> 一个Webapp只有一个Web.xml文件,所有的Servle对象的配置信息都写在这一个Web.xml文件中

		> Web.xml文件在服务器启动的时候被解析

		> ServletContext对象在服务器启动阶段被实例化

		> ServletContext对象在服务器关闭的时候被销毁

		> 得出结论 :ServletContext对应的是Web.xml文件,是Web.xml文件的代表。

		> ServletContext是所有Servlet对象四周环境的代表{在同一个Webapp中所有的Servlet共享同一个ServletContext}

		> 所有用户如果想共享同一个数据,可以把该数据放在ServletContext对象中。可实现跨用户传递数据。

		> 一般放在ServletContext对象中的数据是不建议涉及到修改操作的,因为可能触发线程安全问题。


  * ServletContext中有哪些常用的方法?


                -  void  setAttribute(String name,Object object)   向ServletContext中添加数据

                       BServletContext.setAttribute("学历","大学本科");


    
                -  Object getAttribute(String name)   从ServletContext 获取数据
                        
                      Object obj=BServletContext.getAttribute("学历");



                - Enumeration   getAttributeNames();  获取所有ServletContext中数据的name
                      
                        Enumeration attributeNames=BServletContext.getAttributeNames();
                          while(attributeNames.hasMoreElements()){
                              Object name=attributeNames.nextElement();
                              Object value=BServletContext.getAttribute((String)name);
                              System.out.println(name+"="+value);
                           }


 
  
                -  void  removeAttribute(String name)    移除ServletContext中的数据
                  
                       AServletContext.removeAttribute("学历");



                - String   getInitParameter(String name)   // 通过name获取value
		      
		        String value=application.getInitParameter(name);

 
                - 什么是ParameterNames?  <param-name>name</param-name>

                               <context-param>
                                    <param-name>name</param-name>
                                    <param-value>ShiGe</param-value>
                                </context-param>

                                <context-param>
                                    <param-name>age</param-name>
                                    <param-value>18</param-value>
                                </context-param>



		- Enumeration  getInitParameterNames   // 获取所有上下文初始化参数的name
		  
		      
		      public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException {
		
			//获取ServletConfig
			
			 ServletConfig config=getServletConfig();
			 
			 //获取ServletContext
			 
			 ServletContext application=config.getServletContext();
			 
			 
			 //获取所有上下文初始化参数的name

		         Enumeration<String> names=application.getInitParameterNames();

			 while(names.hasMoreElements()) {

				 String name=names.nextElement();

				 //通过name获取value
				 String value=application.getInitParameter(name);

				  //out.print(name+"="+value);

				 System.out.println(name+"="+value);
			 }

		     }

            - String   getRealPath(String path)    获取项目中某个文件的绝对路径

                 String path = BServletContext.getRealPath("index.html");
                 System.out.println(path);


  *  Servlet, ServletConfig, ServletContext 三者之间的关系。
	        
		-  一个Servlet对应一个ServletConfig,一百个Servlet对应一百个ServletConfig。

		-  所有的Servlet实例对象共享一个ServletContext对象

                - 一个Web项目中只有一个web.xml文件,一个web.xml中包含了所有Servlet实例对象的配置信息。
posted @ 2021-04-20 16:06  失昼  阅读(40)  评论(0)    收藏  举报