十、ServletContext对象【重点
】
10.1 ServletContext概述
- 全局对象,也拥有作用域,对应一个Tomcat中的Web应用
- 当Web服务器启动时,会为每一个Web应用程序创建一块共享的存储区域(ServletContext)。
- ServletContext在Web服务器启动时创建,服务器关闭时销毁。
10.2 获取ServletContext对象
- GenericServlet提供了getServletContext()方法。(推荐) this.getServletContext();
- HttpServletRequest提供了getServletContext()方法。(推荐)
- HttpSession提供了getServletContext()方法。
10.3 ServletContext作用
1.获取项目真实路径
获取当前项目在服务器发布的真实路径
String realpath=servletContext.getRealPath("/");
2.获取项目上下文路径
获取当前项目上下文路径(应用程序名称)
代码语言:javascript复制System.out.println(servletContext.getContextPath());//上下文路径(应用程序名称)
System.out.println(request.getContextPath());
3.全局容器
ServletContext拥有作用域,可以存储数据到全局容器中
- 存储数据:servletContext.setAttribute("name",value);
- 获取数据:servletContext.getAttribute("name");
- 移除数据:servletContext.removeAttribute("name");
10.4 ServletContext应用场景
- 唯一性: 一个应用对应一个ServletContext。
- 生命周期: 只要容器不关闭或者应用不卸载,ServletContext就一直存在。
ServletContext统计当前项目访问次数
代码语言:javascript复制package com.qf.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class Servlet3
*/
@WebServlet("/servlet3")
public class Servlet3 extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
ServletContext application = request.getServletContext();
Integer count=(Integer) application.getAttribute("count");
if(count==null) {
count=1;
application.setAttribute("count", count);
}else {
count ;
application.setAttribute("count", count);
}
PrintWriter out=response.getWriter();
out.write("servlet共访问次数:" count);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
10.5 作用域总结
- HttpServletRequest:一次请求,请求响应之前有效
- HttpSession:一次会话开始,浏览器不关闭或不超时之前有效
- ServletContext:服务器启动开始,服务器停止之前有效