ServletConfig与ServletContext区别

在编写servlet过程中,需要用到 ServletConfig、ServletContext对象,它们让很多人感觉有点懵B!!我的理解如下:

ServletConfig对象:封装了(一个)servlet(ps:实现servlet接口的类)在web.xml中的配置 (ps: web.xml一对<servlet>标签中的内容),在初始化期间ServletConfig将信息传递给 servlet对象。

一个servlet被实例化后,任何客户端在任何时候访问都有效,但是一个servlet的ServletConfig对象不能被另一个servlet访问。

ServletContext对象: 封装了(一个)web应用(ps:整个项目)在web.xml中的配置 web容器(服务器)在启动时会加载web应用,并为每个web应用创建唯一的servlet context对象,一个Web应用的多个servlet共享一个ServletContext中存放的共享数据。ServletContext对象是真正的一个全局对象,同一个web应用中的Servlet都可以访问。

在servlet中如何获取ServletContext对象和ServletConfig对象,请看下面代码:

Servlet1.java

package com.test;


import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;


public class Servlet1 extends HttpServlet {
	@Override
	public void init() throws ServletException {
		ServletConfig config = this.getServletConfig();
		System.out.println("Servlet1 config==" + config);
		// getServletContext()方法封装了config.getServletContext()简化了代码.
		System.out.println("Servlet1 context==" + this.getServletContext());
		// 获取Servlet1 param_value
		System.out.println("Servlet1 param_value==" + config.getInitParameter("param_name"));
		System.out.println("context value==" + this.getServletContext().getInitParameter("param_name"));
		System.out.println("*********************************");
	}
}


Servlet2.java

package com.test;

import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;

public class Servlet2 extends HttpServlet {
	@Override
	public void init() throws ServletException {
		ServletConfig config = this.getServletConfig();
		System.out.println("Servlet2 config==" + config);
		// getServletContext()方法封装了config.getServletContext()简化了代码.
		System.out.println("Servlet2 context==" + this.getServletContext());
		// 获取Servlet1 param_value
		System.out.println("Servlet2 param_value==" + config.getInitParameter("param_name"));
		System.out.println("context value==" + this.getServletContext().getInitParameter("param_name"));
		System.out.println("*********************************");
	}
}


web.xml文件的配置:



	ServletTest
	
		index.html
		index.jsp
	
	
		Servlet1
		com.test.Servlet1
		
			param_name
			servlet1value
		
		1
	
	
		Servlet2
		com.test.Servlet2
		
			param_name
			servlet2value
		
		0
	
	
		param_name
		context_value
	

部署到tomcat中,然后启动服务,在控制台打印出如下信息:

Servlet2 config==org.apache.catalina.core.StandardWrapperFacade@77c8996b
Servlet2 context==org.apache.catalina.core.ApplicationContextFacade@38394fc7
Servlet2 param_value==servlet2value
context value==context_value
*********************************
Servlet1 config==org.apache.catalina.core.StandardWrapperFacade@15fbc415
Servlet1 context==org.apache.catalina.core.ApplicationContextFacade@38394fc7
Servlet1 param_value==servlet1value
context value==context_value
*********************************

通过控制台打印的信息可以得出如下结论:

1、 在servlet1和servlet2中取得的ServletContext对象都是同一个对象,说明整个web应用都只有一个唯一的ServletContext实例;

2、 servlet1与servlet2的serveletConfig对象是不一样的,说明ServletConfig对象的作用范围仅在servlet中。

另:

在web.xml文件,servlet的配置里的3的作用:可以让servlet在服务器启动时加载.填入的数字(>=0)表示优先级.数字越小,优先级越高.值相同,按顺序

点此处到转载来源

你可能感兴趣的:(javaweb)