【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();