ServletContext和ServletConfig学习

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方法获取数据。

发布了66 篇原创文章 · 获赞 5 · 访问量 3492

猜你喜欢

转载自blog.csdn.net/weixin_44001681/article/details/104455514