ServletContext对象和ServletConfig对象
ServletContext(servlet上下文)
- 服务器会为每一个工程创建一个对象,这个对象就是ServletContext对象
- ServletContext对象被所有的用户或请求共享
- ServletContext对象的生命周期是从服务器开启到服务器关闭
- ServletContext对象的作用域是整个项目
- 可以用于配置全局的初始化参数,如:在web.xml中配置一个默认的超级管理员账户和密码
ServletContext用于统计网站浏览量
protected void service(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
ServletContext context = this.getServletContext();
Object number = context.getAttribute("number");
if(number == null){
context.setAttribute("number", 1);
}else{
context.setAttribute("number", (Integer)number+1);
}
resp.setCharacterEncoding("utf-8");
resp.setContentType("text/html; charset=utf-8");
resp.getWriter().write("当前浏览量:"+context.getAttribute("number"));
}
测试结果为:
ServletContext获取初始化全局配置
- 在web.xml中配置初始化全局参数
<context-param>
<param-name>name</param-name>
<param-value>张三</param-value>
</context-param>
- servlet中获取
//获取单个初始化参数
String name = context.getInitParameter("name");
//获取所有初始化参数,返回的是枚举类型
Enumeration<String> names = context.getInitParameterNames();
while(names.hasMoreElements()){
String name = names.nextElement();
}
ServletContext其他常见的功能
context.getContextPath():获取项目名
context.getRealPath("/"):获取到服务器的真实路径
context.getRequestDispatcher(""):实现跳转
context.getResourceAsStream(""):读取资源文件
removeAttribute(name):根据指定的key从域对象里面删除数据
ServletConfig
- getServletName():获取web.xml文件中配置的Servlet名称。
- getServletContext():获取当前项目的ServletContext对象
- getInitParameter(String name):根据给定的初始化参数,返回匹配的初始化参数值。
- getInitParameterNames():返回一个Enumeration对象,该对象包含了所有存放在web.xml中该servlet下的所有的初始化参数名。
ServletContext和ServletConfig二者区别
从作用范围来说,ServletConfig作用于某个特定的Servlet,即从该Servlet实例化,那么就开始有效,但是该Servlet之外的其他Servlet不能访问;ServletContext作用于某个webapp,即在一个webapp中相当于一个全局对象,在Servlet容器启动时就已经加载,对于不同的webapp,有不同的ServletContext。