ServletConfig与ServletContext的介绍、使用和对比
1.ServletConfig
了解:
通过ServletConfig对象可以获取web.xml中的配置信息
注意:
ServletConfig是针对特定的Servlet的参数或属性。
ServletConfig是表示单独的Servlet的配置和参数,只是适用于特定的Servlet。
也就是说,ServletConfig针对于特定的Servlet,如果想要项目下的其他Servlet访问,就需要用到ServletContext。
常用方法:
| 方法说明 | 功能描述 |
|---|---|
| String getInitParameter(String name) | 根据初始化参数名返回对应的初始化参数值 |
| Enumeration getInitParameterNames() | 返回一个Enumeration对象,其中包含了所有的初始化参数名 |
| ServletContext getServletContext() | 返回一个代表当前Web应用的ServletContext对象 |
| String getServletName() | 返回Servlet()的名字,即web.xml中< Servlet-name >元素的值 |
实际应用:
首先现在项目文件WEB-INF下的web.xml中进行配置参数信息 (web.xml左下角有可以在Design和Source两个模式进行切换)
param-name是参数名,param-value是参数值,在下面代码中展示根据参数名获取参数值(可以创建多个参数)

1.在Servlet中获取web.xml中配置的参数信息
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
PrintWriter out = response.getWriter();
ServletConfig config = this.getServletConfig();
String name = config.getInitParameter("name");
out.println("name:"+name);
}
效果:

2.获取并打印web.xml中配置的全部参数信息
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
PrintWriter out = response.getWriter();
ServletConfig config = this.getServletConfig();
Enumeration<String> paramNames = config.getInitParameterNames();
while(paramNames.hasMoreElements()) {
String name = paramNames.nextElement();//获得参数名
String value = config.getInitParameter(name); //根据参数名获得参数值
out.println(name+":"+value+"<br>");
}
}
效果:

这里是分隔线 下面是ServletContext
2.ServletContext
了解:
当Servlet容器启动时,ServletContext会为每个Web应用创建唯一的ServletContext对像,代表Web当前应用,该对象封装了当前Web应用信 息,还实现多个Servlet之前数据共享。
常用方法:
| 方法说明 | 功能描述 |
|---|---|
| Enumertion getAttributeNames() | 返回一个 Enumertion 对象,该对象包含了所有存放在ServletContext中的所有域属性名 |
| Object getAttribute(String name) | 根据参数指定的属性名返回一个与之匹配的域属性值 |
| viod removeAttribute(String name) | 根据参数指定的域属性名,用ServletContext中删除匹配的域属性 |
| void setAttribute(String name,Object obj) | 设置ServletContext的域属性,obj是域值 |
| Set getResourcePaths(String path) | 返回一个Set集合,集合包含资源目录中子目录和文件的路径名称。参数path必须于正斜线(/)开始,指定匹配资源的部分路径 |
| String getRealPath(String path) | 返回资源文件在服务器文件系统上的真实路径(文件的绝对路径)。参数path代表资源文件的虚拟路径,它应该以正斜线(/)开始,“/” 表示当前Web应用的根目录,如果Servlet容器不能将虛拟路径转换为文件系统的真实路径,则返回null |
| URL getResource(String path) | 返回映射到某个资源文件的URL对象。参数path必须以正斜线(/)开始,“/”表示当前Web应用的根目录 |
| InputStream getResourceAsStream(String path) | 返回映射到某个资源文件的InputStream输入流对象。参数path传递规则和getResource()方法完全一致 |
实际应用(两种方式):
1.在web.xml中配置参数信息,SevletDome中获取web应用下的参数信息
在web.xml中配置参数信息,通过sevlet获取配置参数信息
param-name是参数名,param-value是参数值,在下面代码中展示根据参数名获取参数值(可以创建多个参数)

Servlet获取web.xml中配置参数信息(单个获取参考上面Config)
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
PrintWriter out = response.getWriter();
ServletContext context = this.getServletContext();
Enumeration<String> paramNames = context.getInitParameterNames();
while(paramNames.hasMoreElements()) {
String name = paramNames.nextElement();
String value= context.getInitParameter(name);
out.println(name+":"+value+"<br>");
}
}
这里是分隔线 ,展示第二种方式 。
2.在Servlet1中定义参数信息,Servlet2获取并打印参数信息
1.Servlet1中定义参数信息,传递给context对象
//Sevlet1
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
ServletContext context = this.getServletContext();
context.setAttribute("name", "xiaohei"); //在context对象中存入name参数
}
2.Servlet2总获取到Servlet1定义的name,并打印
//Servlet2
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
PrintWriter out = response.getWriter();
ServletContext context = this.getServletContext();
String value= (String) context.getAttribute("name");
out.println(value);
}
3.对比总结:
| 比较 | ServletConfig | ServletContext |
|---|---|---|
| web.xml中配置参数信息 | Servlet标签下 | Web-app标签下 |
| 配置参数的范围 | 特定的Servlet | 整个项目下Servlet共享 |
| 获取web.xml配置参数信息 | getInitParameter(name) | 与config相同 |
| 遍历所有配置的初始化参数名 | getInitParameterNames();hasMoreElements();nextElement(); | 与config相同 |
| Servlet传入和接收(不依靠web.xml) | setSttributer(String,Object),getSttributer(“name”) |
版权声明:本文为qq_44780229原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。