关于ServletContext对象的简单了解

关于ServletContext对象的简单了解

问题:不同用户时用相同的数据

  •   解决:ServletContext对象
    
  •   特点:服务器创建,用户共享
    
  •   作用域:整个项目内
    
  •   生命周期:服务器启动到服务器关闭
    
  •   使用:
    
  •       获取ServletContext对象
    
  •       //第一种方式
              ServletContext sc = this.getServletContext();
          //第二种方式
              ServletContext sc2 = this.getServletConfig().getServletContext();
          //第三种方式
              ServletContext sc3 = request.getSession().getServletContext();
    
  •       使用ServletContext对象完成数据共享
    
  •           //数据存储
    
  •           sc.setAttribute(String name,Object value);
    
  •           //数据获取
    
  •           sc.getAttribute(String name);返回的是object
    
  •       注意:不同的用户可以给ServletContext对象进行数据的存取,数据不存在返回null
    
  •       获取web.xml文件中的全局配置数据
    
  •           sc.getInitParameter(String name);根据键的名字返回web.xml中配置的全局数据的值,返回的是String类型
    
  •       配置方式:
    
  •            <context-param>
                  <param-name>name</param-name>
                  <param-value>zhangsan</param-value>
               </context-param>
          将静态数据和代码进行解耦
    
          获取web项目out下资源的绝对路径
           String path =sc.getRealPath("/doc/1.txt");
           获取的路径为项目根目录,path参数为项目根目录中的路径
          获取out下的资源的流对象
          InputStream is = sc.getResourceAsStream(String path);
    
          注意:此中方式只能获取项目根目录下的的资源流对象,class文件的流对象使用类加载器来获取,path参数为项目根目录中的路径
    
public class MyServletContext extends HttpServlet {
    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //获取ServletContext对象的三种方式
        //第一种方式
        ServletContext sc = this.getServletContext();
        //第二种方式
        ServletContext sc2 = this.getServletConfig().getServletContext();
        //第三种方式
        ServletContext sc3 = request.getSession().getServletContext();
        System.out.println(sc == sc2);
        System.out.println(sc == sc3);
        //使用ServletContext对象完成数据共享
        //数据存储
        sc.setAttribute("str","我是ServletContext对象");
        //获取项目web.xml的全局配置数据
        String str = sc.getInitParameter("name2");
        System.out.println("全局配置参数:"+str);

        //获取项目根目录下的资源的绝对路径
        String path =sc.getRealPath("/doc/1.txt");
        System.out.println(path);
        //获取项目根目录下资源的流对象
        InputStream is = sc.getResourceAsStream("/doc/1.txt");
    }
}

xml的配置

public class MyServletContext2 extends HttpServlet {
    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //创建ServletContext对象
        ServletContext sc = this.getServletContext();
        //获取数据
        System.out.println("MyServletContext2"+sc.getAttribute("str"));
    }
}
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
    <!--配置全局数据 里面是键值对-->
    <context-param>
        <param-name>name</param-name>
        <param-value>zhangsan</param-value>
    </context-param>
    <servlet>
        <servlet-name>context</servlet-name>
        <servlet-class>com.ning.servlet.MyServletContext</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>context</servlet-name>
        <url-pattern>/context</url-pattern>
    </servlet-mapping>
    <servlet>
        <servlet-name>context2</servlet-name>
        <servlet-class>com.ning.servlet.MyServletContext2</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>context2</servlet-name>
        <url-pattern>/context2</url-pattern>
    </servlet-mapping>
</web-app>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值