ServletContext对象学习:
问题:
不同的用户使用相同的数据(可以看作是全局的公共资源)
解决:
ServletContext对象
特点:
服务器创建
作用域:
整个项目内
生命周期:
服务器启动到服务器关闭
使用:
获取ServletContext对象
//第一种方式:
ServletContext sc=this.getServletContext();
//第二种方式:
ServletContext sc2=this.getServletConfig().getServletContext();
//第三种方式:
ServletContext sc3=req.getSession().getServletContext();
使用ServletContext对象完成数据共享
//数据存储
sc.setAttribute(String name, Object value);
//数据获取
sc.getAttribute("str") ;\\返回的是Object类型
注意:
不同的用户可以给ServletContext对象进行数据的存取。
获取的数据不存在返回null。
获取项目中web.xml文件中的全局配置数据
sc.getInitParameter(String name);
根据键的名字返回web.xml中配置的全局数据的值,返回String类型。
如果数据不存在返回null。
sc.getInitParameterNames();返回键名的枚举
配置方式:注意 一组标签只能存储一组键值对数据,多组可以声明多个 进行存储。
<context-param>
<param-name>name</param-name>
<param-value>zhangsan</param-value>
</context-param>
作用:将静态数据和代码进行解耦。
获取项目webroot下的资源的绝对路径。
String path=sc.getRealPath(String path);
获取的路径为项目根目录,path参数为项目根目录中的路径
获取webroot下的资源的流对象
InputStream is = sc.getResourceAsStream(String path);
注意:
此种方式只能获取项目根目录下的资源流对象,class文件的流对象需要使用类加载器获取。
path参数为项目根目录中的路径.
**理解:**ServletContext解决了不同的用户使用相同的数据共享问题,可以看作是全局的公共资源,如果是动态的公共资源,类似于页面访问次数,则可以使用setArtribute()和getArtribute()方法进行动态更新,如果需要服务器关闭后也能动态记录数据在文件中,在下次从文件中读取进行更新ServletContext只需再配合getRealPath()方法以及IO流,如果是固定不变的数据,则可以写入Web.xml文件中配置参数,在每次需要调用时获取即可。综上,ServletContext对象实质上就是存放公共资源的对象。
ServletConfig对象学习:
问题:
如何获取在web.xml中给每个servlet单独配置的数据呢?
解决:
使用ServletConfig对象
使用:
获取ServletConfig对象
ServletConfig sc=this.getServletConfig();
获取web.xml中的配置数据(写在Servlet下)
<init-param>
<param-name>config</param-name>
<param-value>utf-8</param-value>
</init-param>
获取ServletConfig对象数据
String code=sc.getInitParameter(“config”);
理解:ServletContext可以获取在Web.xml中的全局配置数据,而如果是特定一个Servlet的数据则可以在web.xml中在Servlet下配置数据,并通过ServletConfig方法获取数据。