zoukankan      html  css  js  c++  java
  • ServletContext

    1. ServletContet 概述

    • 一个项目只有一个 ServletContext 对象;
    • ServletContext 对象在服务器启动时创建;
    • ServletContext 对象在服务器关闭时销毁;
    • ServletContext 的生命周期: 与天地同寿!!!

    ServletContext 对象的作用: 在整个 Web 应用的动态资源之间共享数据!例如在 AServlet 中向
    ServletContext 对象中保存一个值,然后在 BServlet 中就可以获取这个值.

    2. 获取 ServletContext

    • ServletConfig 类中有 getServletContext() 方法
    // 1. 在 Servlet 接口中获取 ServletContext 对象
    
    public class MyServlet implements Servlet{
    
        public void init(ServletConfig config){
            ServletContext context = config.getServletContext();
        }
    }
    
    // 2. 在 GenericServlet 或 HttpServlet 中获取 ServletContext 对象
    
    public class Myservlet extends HttpServlet{
    
        public void doGet(HttpServletRequest req, HttpServletResponse resp){
            ServletContext context = this.getServletContext();
        }
    }
    
    // 3. HttpSession 中也有 getServletContext() 方法
    
    // 4. ServletContextEvent 中也有 getServletContext() 方法
    

    3. 域对象的功能

    1. JavaWeb 四大域对象:
      • PageContext;
      • ServletRequest;
      • HttpSession;
      • application(ServletContext);
    2. 所有域对象都有存储数据的功能, 因为域对象内部有一个 Map, 用来存储数据.
    3. ServletContext 对象用来操作数据的方法
        // 存储一个对象, 也称为存储一个域属性.
        // 多次使用相同 name 调用该方法, 会覆盖上一次的值
        void setAttribute(String name, Object value);
    
        // 获取 ServletContext 中的数据
        Object getAttribute(String name);
    
        // 移除 ServletContext 中的域属性
        void removeAttribute(String name);
    
        // 获取所有域属性的名称
        Enumeration getAttributeNames();
    

    4. 获取应用初始化参数

    1. 可以使用 ServletContext 来获取 web.xml 文件中配置的应用初始化参数!
      注意, 应用初始化参数与 Servlet 初始化参数不同
    <web-app>
        // 应用初始化参数
        <context-param>  
            <param-name>paramName2</param-name>
            <param-value>paramValue2</param-value>
        </context-param>
        <context-param>
            <param-name>paramName3</param-name>
            <param-value>paramValue3</param-value>
        </context-param>
    </web-app>
    

    5. 获取资源相关方法

    // 1. 获取真实路径
    // 获取 a.jsp 的真实路径, 返回值为: F:	omcat6webappshelloa.jsp
        String realPath = servletContext.getRealPath("/a.jsp");
    
    // 获取 b.jsp 的真实路径
        String realPath = servletContext.getRealPath("/WEB-INF/b.jsp");
    
    // 2. 获取资源流
    // 获取 a.jsp 资源流
        InputStream in = servletContext.getResourceAsStream("/a.jsp");
    
    // 获取 b.jsp 资源流
        InputStream in = servletContext.getResourceAsStream("WEB-INF/b.jsp");
    
    // 3. 获取指定目录下所有资源路径
    // 获取 /WEB-INF 下所有资源的路径
        Set set = servletContext.getResourcePaths("/WEB-INF");
    

    6. 练习: 访问量统计

    ServletContext application = this.getServletContext();
    Integer count = (Integer)application.getAttribute("count");
    
    if(count == null){
        count = 1;
    } else {
        count++;
    }
    
    response.setContextType("text/html;charset=utr-8");
    
    // 向浏览器输出 count 值
    response.getWriter().print("<h1>本页面一共被访问" + count + "次! </h1>");
    application.setAttribute("count",  count); // 将 count 值保存回 servletContext 中
    

    7. 获取类路径下的资源

    1. 类路径对一个 JavaWeb 项目而言, 就是 "/WEB-INF/classes" 下的文件, 以及 "/WEB-INF/lib"下的 jar 包;
    2. 有两种方式:
      • Class (了解)
      • ClassLoader
    3. 步骤:
      • 得到 Class;
      • 得到 ClassLoader;
      • 调用其 getResourceAsStream() 方法, 得到一个 InputStream
    // 1. 使用 ClassLoader 获取类路径下的资源
    // 获取 src 目录下的 a.txt
        // 获取 ClassLoader
        ClassLoader c2 = this.getClass().getClassLoader();
    
        // 得到 InputStream
        InputStream in = c2.getResourceAsStream("a.txt");   // 该路径相对于 classes 路径, 即 src 目录下
    
        // 将输入流转换成字符串, 使用 commons-io-2.5 的 jar 包中的 IOUtils 工具
        String s = IOUtils.toString(in);
    
    
    // 2. 使用 Class 获取类路径下的资源
        Class c = this.getClass();
    
        // 相对当前 .class 文件所在目录!
        // 即相对于 cn/itcast/servlet  文件夹内的 a.txt
        InputStream input = c.getResourceAsStream("a.txt");
    
        // 如果 a.txt 在 src 目录下
        // 相对 classes 目录下, 注意, 路径中带有 "/"
        InputStream input = c.getResourceAsStream("/a.txt");
    

    **参考资料:** - [JavaWeb 视频教程](https://www.bilibili.com/video/av12760389/index_2.html#page=13) - [JavaEE 6.0 文档](http://tool.oschina.net/apidocs/apidoc?api=javaEE6)
  • 相关阅读:
    oracle的根容器下新建pdb容器及本地用户
    oracle监听配置与防火墙问题
    oracle问题:ORA-09817及解决办法
    Oracle:Ora-01652无法通过128(在temp表空间中)扩展temp段的过程-解决步骤
    oracle:ORA-14765建索引阻塞创建分区及处理步骤
    oracle-组合索引字段位置与查询效率之间的关系
    hbase的split策略和预分区
    启动hbase后hmaster自动关闭
    hive一级分区、二级分区、动态分区
    hive beeline连接和交互shell连接
  • 原文地址:https://www.cnblogs.com/linkworld/p/7577452.html
Copyright © 2011-2022 走看看