【Web第十四天】ServletConfig+ServletContext

ServletConfig+ServletContext

1.ServletConfig

  用来代表Servlet在web.xml中配置信息的对象

1.1.获取ServletConfig对象

    在当前Servlet内部, 通过如下方式来获取

   ServletConfig config = this.getServletConfig();

 

1.2.ServletConfig功能

1.2.1.获取当前Servlet的初始化参数

   在web.xml文件中, 可以在<Servlet>标签内部为每一个Servlet配置一段初始化参数, 这些参数相当于我们为这个Servlet配置一段初始化信息, 可以在当前Servlet内部通过ServletConfig对象来获取这些初始化信息!

 

  获取初始化参数的方式:

    config.getInitParameter(name);  --根据指定的参数名获取对应的参数值

    config.getInitParameterNames();  --获取所有初始化参数的名字组成的枚举

1.2.2.获取ServletContext对象

    ServletConfig config = this.getServletConfig();

    ServletContext context = config.getServletContext();

 

2.ServletContext

    代表整个WEB应用的对象

     在WEB应用被服务器加载之后,服务器会立即创建代表当前WEB应用的ServletContext对象, 创建之后ServletContext对象会一直驻留在服务器的内存中, 用来唯一的表示当前WEB应用.直到服务器关闭或者是WEB应用被移出容器时为止, 随着WEB应用的销毁, 代表WEB应用的ServletContext对象也会跟着销毁!!

 

2.1.获取ServletContext对象

      this.getServletConfig().getServletContext();

   或者

   this.getServletContext();

 

2.2.ServletContext功能

2.2.1.获取web应用的初始化参数

     在web.xml文件中可以为每一个Servlet配置初始化参数, 配置的参数只能在当前Servlet内部通过ServletConfig对象来获取, 在别的Servlet中无法获取!

    如果现有一段配置信息, 不是属于某一个Servlet, 而是希望在整个WEB应用中都可以获取到,可以将这段信息配置给整个WEB应用,再通过代表WEB应用的ServletContext对象来获取这些信息!

 

    配置初始化参数的方式:

      <context-param>

                     <param-name>scparam1</param-name>

                     <param-value>scvalue1</param-value>

      </context-param>

      ...

 

    获取初始化参数的方式:

             getInitParameter();

             getInitParameterNames();

 

2.2.2.作为域对象来使用

    如果一个对象具有一个可以被看见的范围, 利用该对象上的map可以在整个范围内实现数据的共享!

       ServletContext对象是一个域对象, 利用这个对象上的map就可以在整个web应用内实现资源的共享.

 

      域对象提供的方法:

             setAttribute(String name, Object obj);//添加或修改域属性

             getAttribute(String name);//通过属性名获取属性值

             removeAttribute(String name);//根据属性名删除属性

             getAttributeNames();//获取所有域属性名字组成的枚举

 

       域对象的特征:

             生命周期: 和WEB应用的命一般长

             作用范围: 整个WEB应用

             主要功能: 在整个WEB应用范围内实现数据的共享

 

2.2.3.获取web资源文件

1.web开发中, 当加载配置文件需要写一个路径时:

  1.1如果写一个相对路径:

      例如:String path = "conf.properties";

      //加载路径为:E:\software\tomcat7.0\bin\conf.properties

 

      在通过相对路径加载资源文件时, 程序会到tomcat的bin目录寻找该配置文件, 但是找不到!!如果是相对路径, 会到程序启动的目录下寻找该文件, 由于WEB应用是运行在tomcat服务器, 所以程序启动的目录就是tomcat服务器的启动目录, 就是bin目录!  

       1.2如果写一个绝对路径:

      例如:String path = "/conf.properties";

        // 加载路径为:E:\conf.properties

 

    在通过绝对路径加载资源文件时, 这时会到WEB应用所在路径的硬盘根目录去寻找该文件, 但是也找不到。

 

3)可以写一个带盘符的绝对路径:

    例如:String path = "E:/software/tomcat7.0/webapps/day11/WEB-INF/classes/conf.properties";

    //可以正确加载到配置文件

 

     在通过带盘符的绝对路径寻找文件时, 可以找到文件, 但是这样写路径把路径写死在程序中了,如果后期换一个发布环境, 路径很可能是错误的, 所以这样写路径也不可取!!

 

2.可以通过ServletContext对象提供的方法来获取WEB资源文件

    servletContext对象提供的getRealPath方法是基于WEB应用的根路径(/day11)去寻找该配置文件, 所以在getRealPath方法中还需要传入文件相对于WEB应用根路径的路径!

     方法为:servletContext.getRealPath(String path);

 

    例如:配置文件路径为:

        E:/software/tomcat7.0/webapps/day11/WEB-INF/classes/conf.properties

         则方法应写为:

        this.getServletContext().getRealPath("/WEB-INF/classes/conf.properties");

 

3.也可以通过类加载器来获取WEB资源文件

    类加载器提供的getResource方法是基于WEB应用的类目录(/day11/WEB-INF/classes)去寻找该配置文件, 所以在getResource方法中还需要传入文件相对于classes目录的路径!

    方法为:classLoader.getResource(String path).getPath();

 

    例如:配置文件路径为:

        E:/software/tomcat7.0/webapps/day11/WEB-INF/classes/conf.properties

         则方法应写为:

        ServletContextDemo2.class.getClassLoader().getResource("conf.properties").getPath();

 

posted @ 2018-03-29 16:31  songyao  阅读(89)  评论(0编辑  收藏  举报