servlet的“单例”问题

来源:互联网 发布:数组slice js 编辑:程序博客网 时间:2024/06/18 05:04
按照单例的原理,Servlet结构并不是单例结构,其本身只是一个普通Java类
只是Web容器在维护这些Servlet的时候只给创建一个实例存在JVM中,用户请求服务时,服务器只调用它已经实例化好的Servlet对象来处理请求。所以,告诉你的是Servlet并不是单例,只是容器让它只实例化一次,变现出来的是单例的效果而已。
模仿一个web容器单实例化类:
例子:
package test;
import java.util.Map;
import javax.servlet.Servlet;
public class Test{
private static Map<String, Servlet> map;

public static void setMap(){
/*
 * 读取web.xml文件
 * 将<servlet-class>web.servlet.servletName</servlet-class>
 * 中的类名字map.put("web.servlet.servletName",null);   
*/
}
//通过类名字获取对象
public static Servlet getInstance(String servletClassName){
/*
 * 读取key
 * 当第一次访问该servlet时获取的对象为null
 * 第一次访问进行初始化,后面进行访问时直接获取map中的对象
 */
Servlet servlet = map.get(servletClassName);
//为空,则进行初始化
if (servlet==null) {
Class<?> c;
try {
c = Class.forName(servletClassName);
servlet = (Servlet) c.newInstance();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
return servlet;
}
}

0 0