JAVA之Servlet的ServletContext总结

特点

  1. 在一个web项目当中,有且仅有这一个servletcontext对象
  2. 生命周期。当服务器启动初始化该对象直到服务器关闭自动销毁

获取方式

  1. 通过this对象获取
    ServletContext servletContext = this.getServletContext();
  2. 通过HttpServletRequest对象获取
    ServletContext servletContext1 = req.getServletContext();
  3. 通过session对象获取
    HttpSession session = req.getSession();
    ServletContext servletContext2 = session.getServletContext();

例子

package servletcontext;

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;
import javax.servlet.http.HttpSession;
import java.io.IOException;

@WebServlet(value = "/a")
public class GetServletContext extends HttpServlet {

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 1.通过this对象获取
        ServletContext servletContext = this.getServletContext();
        // 2.通过HttpServletRequest对象获取
        ServletContext servletContext1 = req.getServletContext();
        // 3.通过session对象获取
        HttpSession session = req.getSession();
        ServletContext servletContext2 = session.getServletContext();

        // 通过打印。得出都是用的同一个对象
        System.out.println("servletContext:"+servletContext);
        System.out.println("servletContext1:"+servletContext1);
        System.out.println("servletContext2:"+servletContext2);
    }

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req, resp);
    }
}

运行结果

servletContext:org.apache.catalina.core.ApplicationContextFacade@54a22e00
servletContext1:org.apache.catalina.core.ApplicationContextFacade@54a22e00
servletContext2:org.apache.catalina.core.ApplicationContextFacade@54a22e00

常用方法

返回值函数名说明
StringgetRealPath("/")获取项目真实路径
StringgetContextPath()获取项目上下文路径
voidsetAttribute(String jian,String zhi)设置一个键值对进行存储
ObjectgetAttribute(String jian)通过键获取存储的值
voidremoveAttribute(String jian)移除该键

样例

package servletcontext;

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;
import java.io.IOException;

@WebServlet(value = "/b")
public class ServletContextMethod extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        ServletContext servletContext = this.getServletContext();
        // 1.获取项目真实路径
        String path1 = servletContext.getRealPath("/");
        // 2.获取项目上下文路径
        String path2 = servletContext.getContextPath();
        System.out.println(path1);
        System.out.println(path2);
        // 3.设置全局容器
        servletContext.setAttribute("username","xiaoming");
        String name = (String)servletContext.getAttribute("username");
        servletContext.removeAttribute("username");
        String name1 = (String)servletContext.getAttribute("username");
        System.out.println("没移除之前username:"+name);
        if(name1 == null){
            System.out.println("该键已被移除");
        }
    }

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req, resp);
    }
}

运行结果

D:\IDEA\workspace\MyServlet\out\artifacts\MyServlet_war_exploded
/MyServlet_war_exploded
没移除之前username:xiaoming
该键已被移除

应用场景

  通过以上的介绍,servletcontext对象可用于当计数器,设置该项目被访问的次数

作用域总结

  1. Cookie数据
    一次请求
  2. Session数据
    一次会话
  3. ServletContext数据
    整个web项目过程,直到服务器关闭
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值