ServletContext

ServletContext (Servlet上下文)

1.可以理解为servlet运行的背景((环境)
2.ServletContext指的就是Tomcat
3.每当Tomcat加载完一个项目之后,会马上创建一个ServletContext对象,在内存中唯一代表该项目
在这里插入图片描述

package web;

import java.io.IOException;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


public class ServletContextDemo1 extends HttpServlet {
	private static final long serialVersionUID = 1L;
    
	protected void doGet(HttpServletRequest request, HttpServletResponse response) 
			throws ServletException, IOException {
		//获取ServletContext
		//1、可直接调用get方法,且本身没有此方法,可知get方法是继承自父类的
		ServletContext sc = getServletContext();  
		//ServletContext sc2 = request.getServletContext();
		//System.out.println("sc==sc2?"+(sc==sc2)); //true
		
		//利用session统计登录人数
		Integer count1 = (Integer)request.getSession().getAttribute("count");
		if(count1 == null) {
			count1 = 1;
		}else{
			count1++;
		}
		request.getSession().setAttribute("count", count1);
		response.getWriter().write("session="+count1+"    ");
		
		
		
		//利用ServletContext统计登录人数
		Integer count2 = (Integer)sc.getAttribute("count");
		if(count2 == null) {
			count2 = 1;
		}else {
			count2++;
		}
		sc.setAttribute("count", count2);
		response.getWriter().write("ServletContext="+count2);
		
		
		
	}

}

1)常用功能

可以在整个项目内部实现数据的共享,当前项目中所有组件都可以直接访问到同一个ServletContext对象

  • 1.ServletContext不能替代Session,因为所有用户访问的都是同一个ServletContext对象,不同用户保存的数据会彼此覆盖
  • 2.ServletContext中适合保存整个项目通用的一些数据,例如项目总的登录人数
  • 3.如何选择:
    • 1.数据是不同用户都相同,还是每个用户不同:相同->ServletContext
    • 2.数据共享是否跨请求?跨请求->Session,不跨请求->Request
  • 4.获取一个资源在服务器硬盘上的绝对路径
package web;

import java.io.File;
import java.io.IOException;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


public class ServletContextDemo2 extends HttpServlet {
	private static final long serialVersionUID = 1L;
    
	protected void doGet(HttpServletRequest request, HttpServletResponse response) 
			throws ServletException, IOException {
		File file = new File("config.xml");
		System.out.println("path1="+file.getAbsolutePath());
		
		
		File file2 = new File("/config.xml");
		System.out.println("path2="+file2.getAbsolutePath());
		
		
		//ClassLoader
		ServletContext sc = getServletContext();
		//getRealPath()方法获取的是  webapp 下的文件的绝对路径
		//()里的路径为相对于webapp的相对路径
		String path3 = sc.getRealPath("1.jsp");
		System.out.println("path3="+path3);
		String path4 = sc.getRealPath("WEB-INF/web.xml");
		System.out.println("path4="+path4);
		
	}

}

以上结果为:
在这里插入图片描述

2)常用API

  • 1.在Servlet中获取ServletContext对象:
ServletContext sc=getServletContext();
ServletContext sc=request.getServletContext();
ServletContext sc=getServletConfig().getServletContext();
  • 2.数据操作:
sc.setAttribute(String name,object value);
object value=sc.getAttribute(String name);
sc.removeAttribute(String name);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值