zoukankan      html  css  js  c++  java
  • servlet ServletContext

    ServletContext概述

    • 全局对象,也拥有作用域,对应一个Tomcat中的Web应用

    • 当Web服务器启动时,会为每一个Web应用程序创建一块共享的存储区域(ServletContext)。

    • ServletContext在Web服务器启动时创建,服务器关闭时销毁。

    获取ServletContext对象

    GenericServlet提供了getservletContext()方法。(推荐)this.getservletContext();

    HttpServletRequest提供了getServletContext()方法。(推荐)

    HttpSession提供了getServletContext()方法。

    ServletContext作用

    获取项目真实路径

    获取当前项目在服务器发布的真实路径

    String realpath=servletContext.getRealPath("/");
    

    获取项目上下文路径

    获取当前项目上下文路径(应用程序名称)

    System.out.println(servletContext.getContextPath());//上下文路径(应用程序名称)
    System.out.println(request.getContextPath());
    

    全局容器

    servletContext拥有作用域,可以存储数据到全局容器中

    //存储数据
    servletContext.setAttribute("name",value);
    //获取数据
    servletContext.getAttribute("name");
    //移除数据
    servletContext.removeAttribute("name");
    

    ServletContext特点

    • 唯一性:一个应用对应一个servlet上下文。

    • 生命周期:只要容器不关闭或者应用不卸载,servlet上下文就一直存在。

    ServletContext应用场景

    ServletContex统计当前项目访问次数

    使用

    package com.zjw;
    
    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(name = "ServletContextServlet" , value = "/context")
    public class ServletContextServlet extends HttpServlet {
    
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
        }
    
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            //获取ServletContext对象
            ServletContext servletContext1 = this.getServletContext();
            ServletContext servletContext2 = request.getServletContext();
            ServletContext servletContext3 = request.getSession().getServletContext();
            //获取的是同一个对象
            System.out.println(servletContext1);
            System.out.println(servletContext2);
            System.out.println(servletContext3);
    
            //获取项目真实路径
            System.out.println(servletContext1.getRealPath("/"));
    
            //获取项目上下文路径
            System.out.println(servletContext1.getContextPath());
            System.out.println(request.getContextPath());
    
            //全局容器
            servletContext1.setAttribute("name","张三");
        }
    }
    
    

    运行结果

    org.apache.catalina.core.ApplicationContextFacade@9665db
    org.apache.catalina.core.ApplicationContextFacade@9665db
    org.apache.catalina.core.ApplicationContextFacade@9665db
    E:codeIdeaProjectsservletservlet	argetservlet-1.0-SNAPSHOT
    /servlet_war_exploded
    /servlet_war_exploded
    
    --------------- 我每一次回头,都感觉自己不够努力,所以我不再回头。 ---------------
  • 相关阅读:
    Java 线程池概念、原理、简单实现
    Java 中的等待唤醒机制透彻讲解
    Java 多线程安全问题简单切入详细解析
    理解 Java 多线程
    Java 异常的处理
    Android MediaPlayer的生命周期
    Node.js 撸第一个Web应用
    Android简易实战教程--第三十四话《 自定义SeekBar以及里面的一些小知识》
    使用Intent传递对象
    Android 异步查询框架AsyncQueryHandler的使用
  • 原文地址:https://www.cnblogs.com/zjw-blog/p/13896441.html
Copyright © 2011-2022 走看看