zoukankan      html  css  js  c++  java
  • Servlet第三篇【ServletConfig、ServletContext】

    一、ServletConfig对象

    ServletConfig是一个接口,它的对象是由服务器创建的,然后传递给Servlet的init()方法,你可以在init()方法中使用它。

    该接口中有4个方法:

    String getInitParameter(String name):通过参数名获取在web.xml中配置的初始化参数的值;
    Enumeration getInitParameterNames():获取所有初始化参数的名称。返回一个迭代器(或者说集合)
    String getServletName():获取Servlet在web.xml文件中的配置名称,即<servlet-name>指定的名称;
    ServletContext getServletContext():获取ServletContext对象
    

    ServletConfig对象对应web.xml文件中的<servlet>元素。例如你想获取当前Servlet在web.xml文件中的配置名,那么可以使用servletConfig.getServletName()方法获取!

    <servlet>
        <servlet-name>One</servlet-name>
        <servlet-class>cn.itcast.servlet.OneServlet</servlet-class>
        <init-param>
         	<param-name>paramName1</param-name>
        	<param-value>paramValue1</param-value>
        </init-param>
        <init-param>
        	<param-name>paramName2</param-name>
        	<param-value>paramValue2</param-value>
        </init-param>
    </servlet>
    
    在OneServlet中,可以使用ServletConfig对象的getInitParameter()方法来获取初始化参数,例如:
    String value1 = servletConfig.getInitParameter(“paramName1”);//获取到paramValue1
    

    二、ServletContext对象

    (一)ServletContext概述

    ServletContext也是一个接口,服务器会为每个应用创建一个ServletContext对象:

    1、ServletContext对象的创建是在服务器启动时完成的;
    2、ServletContext对象的销毁是在服务器关闭时完成的。

    ervletContext对象的作用是在整个Web应用的动态资源之间共享数据!例如在AServlet中向ServletContext对象中保存一个值,然后在BServlet中就可以获取这个值,这就是共享数据了。

    (二)获取ServletContext
    -- ServletConfig 中的 getServletContext();
    -- GenericServlet 中的 getServletContext();
    -- HttpSession 中的 getServletContext();
    -- ServletContextEvent 中的 getServletContext();
    
    (三)ServletContext的作用

    1、ServletContext既然代表着当前web站点,那么所有Servlet都共享着一个ServletContext对象,所以Servlet之间可以通过ServletContext实现通讯(存取数据)

    2、ServletConfig获取的是配置的是单个Servlet的参数信息,ServletContext可以获取的是配置整个web站点的参数信息

    3、利用ServletContext读取web站点的资源文件

    4、实现Servlet的转发【用ServletContext转发不多,主要用request转发】

    (四)作用的详细介绍

    实现通讯(存取数据)

    域对象的功能
    ServletContext是Servlet三大域对象之一:
    1、ServletContext;
    2、ServletRequest;
    3、Session
    

    所有域对象都有存取数据的功能,因为域对象内部有一个Map,用来存储数据,下面是ServletContext对象用来操作数据的方法:

    1、void setAttribute(String name, Object value):来存储一个对象,也可以称之为存储一个域属性,

    2、Object getAttribute(String name):用来获取ServletContext中的数据,当前在获取之前需要先去存储才行,

    3、void removeAttribute(String name):用来移除ServletContext中的域属性,如果参数name指定的域属性不存在,那么本方法什么都不做;

    4、Enumeration getAttributeNames():获取所有域属性的名称;

    配置整个web站点的参数信息

    1、Servlet可以获取初始化参数,但它是局部的参数;也就是说,一个Servlet只能获取自己的初始化参数,不能获取别人的,即初始化参数只为一个Servlet准备!

    2、ServletContext可以配置公共的初始化参数,为所有Servlet而用!

    3、还可以使用ServletContext来获取在web.xml文件中配置的整个应用的初始化参数!
    注意:应用初始化参数与Servlet初始化参数不同:

    如下,就为整个应用配置了两个初始化参数:

    <context-param>
    	<param-name>paramName1</param-name>
    	<param-value>paramValue1</param-value>  	
    </context-param>
    <context-param>
    	<param-name>paramName2</param-name>
    	<param-value>paramValue2</param-value>  	
    </context-param>
    
    	ServletContext context = this.getServletContext();
    	String value1 = context.getInitParameter("paramName1");
    	String value2 = context.getInitParameter("paramName2");
    	System.out.println(value1 + ", " + value2);
    		
    	Enumeration names = context.getInitParameterNames();
    	while(names.hasMoreElements()) {
    		System.out.println(names.nextElement());
    	}
    

    读取web站点的资源文件

    1、获取真实路径 : servletContext.getRealPath(String path)
    
    2、获取资源类 : servletContext.getResourceAsStream(String path)
    
    3、获取指定目录下所有资源路径 : servletContext.getResourcePaths(String path)
      -- 本方法的路径必须以“/”开头
      -- 本方法返回一个Set集合
    

    补充:

    获取类路径下资源

    类路径:对一个JavaWeb项目而言,就是/WEB-INF/classes和/WEB-INF/lib/每个jar包!

    方法一:
    Class类的getResourceAsStream(String path):
    	-- 路径以“/”开头,相对classes路径;
    	-- 路径不以“/”开头,相对当前class文件所在路径,例如在cn.itcast.servlet.MyServlet中执行,        那么相对/classes/cn/itcast/servlet/路径;
    
    方法二:
    ClassLoader类的getResourceAsStream(String path):
    	-- 相对classes路径;
    

    Java新手,若有错误,欢迎指正!

  • 相关阅读:
    tensorflow mnist数据集 普通神经网络
    cv2 无法读取图片
    tensorflow中的一些函数
    tensorflow中的几种交叉熵
    【BZOJ3489】A simple rmq problem(K-D Tree)
    推门游戏 The Wall Pushers(IDA*)
    [SCOI2007]k短路(A*)
    [SDOI2013]森林(启发式合并)(主席树)
    [模板A*][SCOI2005]骑士精神(A*,IDA*)
    [ZJOI2007]捉迷藏(动态点分治/(括号序列)(线段树))
  • 原文地址:https://www.cnblogs.com/Java-biao/p/12724600.html
Copyright © 2011-2022 走看看