ServletConfig对象,ServlsetContext对象详解

ServletConfig:

ServletConfig是什么和来源?

		1.ServletConfig代表当前Servlet在web.xml中的配置信息。

获取ServletConfig对象的方式“

	继承来自servlet,servlet对象进行获取该方法
    //ServletConsfig代表的是当前web应用的配置信息 this代表的是当前的对象servlet对象,对象的顶级存在全局的配置信息
    ServletConfig config = this.getServletConfig();
    System.out.println("获取当前的配置对象:"+config);
    专业解释:
	在Servlet接口中init方法参数就是ServletConfig,在Servlet创建出来时,init方法立即被容器调用,由容器传入ServletConfig对象。
	在GenericServlet中,实现了这个方法,将ServletConfig设置成了类的成员变量,并提供了getServletConfig方法,获取该对象。
	我们的Servlet都间接继承子GenericServlet,所以可以在自己的Servlet中直接调用getServletConfig方法获取这个对象。

ServletConfig对象功能:

	1. ServletConfig获取初始化参数
	2.  配置初始化参数
	3. 在web.xml中的<servlet>标签中可以配置零个或多个<init-param>标签,用来为当前Servlet配置一些自定义的参数
	4. 可以为每个servlet进行配置初始化参数,不是一个全局对象,是每个servlet的对象
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        //ServletConsfig代表的是当前web应用的配置信息 this代表的是当前的对象servlet对象,对象的顶级存在全局的配置信息
        ServletConfig config = this.getServletConfig();
        System.out.println("获取当前的配置对象:"+config);
        //通过配置信息进行获取参数信息
        String servletName = config.getServletName();
        System.out.println("当前Servlet的名字"+servletName);
        ServletContext servletContext = config.getServletContext();
        System.out.println("当前SrvletContext的虚拟路径:"+servletContext);
        Enumeration<String> initpapm = config.getInitParameterNames();
        //遍历所有的初始化参数的名字
        while (initpapm.hasMoreElements()){
            String name = initpapm.nextElement();
            //s根据参数名获取参数值
            String initParameter = config.getInitParameter(name);
            System.out.println(name+"~"+initParameter);
        }
    }

Servlet Config对象的声明周期:

		生命周期;
				sevletConfig对象随着servlet创建的时候进行出现,一旦进行创建,则该对象主动拥有该servlet的对象的属性信息和配置信息
				可以通过响应的方法进行获取对应的配置信息,也可以进行配置servlet的参数的信息,当servlet被销毁或者被移除容器的时候,对象被销毁

ServletContext:----->最主要的是使用的域对象比较多,进行共享数据的消息

	概述:
	ServletContext对象代表当前web应用。当服务器启动时,服务器在启动时会依次加载web应用,每一个web应用加载完成后都会创建一个ServletContext对象唯一代表该web应用,这个对象一直存活,直到web应用移除出容器或服务器关闭时,随着应用销毁,ServletContext对象跟着销毁。

ServletContext是什么和来源?

来源:
服务器在启动时会依次加载web应用,每一个web应用加载完成后都会创建一个ServletContext对象唯一代表该web应用,这个对象一直存活,直到web应用移除出容器或服务器关闭时,随着应用销毁,ServletContext对象跟着销毁,当web应用出现创建的时候,该被服务器创建

ServletContext对象功能:

	1. .	ServletContext对象读取web应用初始化参数   存在的是全局区域  跟ServletConfig对象不一致
		<context-param>
		<param-name>encode</param-name>
		<param-value>utf-8</param-value>
	获取参数:
		可以利用ServletContext对象的如下方法获取初始化信息:
		ServletContext.getInitParameter();
		ServletContext.getInitParameterNames();

注意:
		但是这种初始化参数只能在该Servlet内部获取。而为整个web应用配置的初始化参数,通过ServletContext可在整个web应用中使用。
		

	2. ServletContext对象作为域对象使用
		域:一个对象具有了可以被看见的范围,利用这个对象身上的Map,在这个范围内共享数据,这样的对象叫做域对象
		
		ServletContext域:
			作用范围:
						整个web应用
			生命周期:
						当服务器启动web应用加载后立即创建代表这个web应用的ServletContext对象,一直驻留在内存中,唯一的代表这个web应用,直到服务器关闭或web应用被移除出容器时,随着web应用的销毁,ServletContext对象销毁
					操作域的方法:				
							setAttribute(String name,Object obj);//向域中设置数据
							Object getAttribute(String name);//从域中获取数据
							removeAttribute(String name);//从域中移除数据

在web.xml中利用标签为整个web应用配置初始化信息

encode
utf-8

  protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        /**
         * ServletContext对象代表的是当前web应用的对象,在应用创建之初tomcat中创建一个对象,servletContext
         * 一个应用只有一个ServletContext对象,唯一标识该web应用的对象
         *
         *
         */
        //方式一:获取servletContext对象
        ServletContext sc1 = this.getServletConfig().getServletContext();
        //方式二;获取servletContext对象
        ServletContext sc2 = this.getServletContext();
        System.out.println(sc1==sc2);

        //响应浏览器的对象
        response.getWriter().write("你好,世界!");

        //功能一;配置全局web应用的初始化信息对象,比如整个web应用的编码
        Enumeration<String> initParameterNames = sc1.getInitParameterNames();
        while(initParameterNames.hasMoreElements()){
            String name = initParameterNames.nextElement();
            String initParameter = sc1.getInitParameter(name);
            System.out.println(name+":"+initParameter);
        }
        //功能二:作为域对象使用进行获取整个Web应用的作用域,域作用于是最大的
        sc1.setAttribute("msg","你好世界");
        //设置的作用域范围可以进行数据的共享

        /**
         * ServletContext的生命周期,随着web应用的创建二创建,除非web应用被销毁。或者服务器已经进行了关闭
         * 对象一直存活在整个web应用中,知道web应用被销毁,或者被服务器异常关闭
         *
         * 四大作用域:request  session  ServletContext   page
         *
         */
        //功能三:获取路径进行资源的读取
		//一般使用的是通过getServletContext对象进行获取web的资源,不通过对应的类加载加载sWEB-INF/classes加载资源文件
		  //功能三:获取路径进行资源的读取 拼接出系统的盘符路径,最终得到的是绝对路径
        String path = sc1.getRealPath("ServletConfigDemo1.java");
        System.out.println(path);
        //servletContext.getRealPath("xxxx");--这个方法会在传入的路径前拼接当前web应用的硬盘路径,
        // 从而拼接出资源的硬盘路径,从而可以找到资源。
        //根据类加载器来加载文件 ,最终获取的是路径   加载加载的是文件,任何文件都可以进行加载进入内存
        //通过类加载器及逆行获取类路径
        String path1 = ServletContextDemo1.class.getClassLoader().getResource("/ServletCofigServlet/WEB-INF/classes/a.xml").getPath();
        //URLs统一资源定位符  也就是长的地址
        System.out.println("类加载器获取的路径:"+path1);


    }

类加载器读取资源:

	如果当前程序中没有ServletContext可以用,此时可以拜托类加载器帮我们加载资源:
	类加载器可以加载.class文件,同样也可以加载其他类型的资源文件
	在ClassLoader上提供了getResource("相对于类加载目录的路径")可以加载资源,但是要求这个路径给一个相对于类加载器加载类的目录的路径(WEB-INF/classes)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值