zoukankan      html  css  js  c++  java
  • JavaWeb学习笔记:ServletConfig()和ServletContext()

    ServletConfig()和ServletContext()

    1.ServletConfig()

    ServletConfig是一个接口,它由server提供商来实现。

    ServletConfig封装了Servlet的配置信息,而且能够获取ServletContext对象。

    Servlet容器在初始化servlet的时候会初始化一个servletConfig对象,这个对象在不论什么可訪问的client都是有效的。可是,需注意的是,该对象仅仅能在本servlet中应用,不能在其它servlet中訪问。

    基本的方法:

    • public ServletContext getServletContext(); //暂不写,放在ServletContext中整理
    • public String getInitParameter(String name); //获取指定參数名的初始化參数
    • public Enumeration< String > getInitParameterNames(); //获取參数名组成的 Enumeration 对象
    • public String getServletName(); //使用比較少

    获取配置信息

    怎样配置

    <servlet>
            <servlet-name>helloServlet</servlet-name>
            <servlet-class>com.buaa.zhao.HelloServlet</servlet-class>
    
            <!-- 配置 Serlvet 的初始化參数。 且节点必须在 load-on-startup 节点的前面 -->
            <init-param>
                <!-- 參数名 -->
                <param-name>user</param-name>
                !-- 參数值 -->
                <param-value>root</param-value>
            </init-param>
    
            <init-param>
                <param-name>password</param-name>
                <param-value>12345</param-value>
            </init-param>
    
            <load-on-startup>-1</load-on-startup>
        </servlet>

    获取配置信息

    public void init(ServletConfig servletConfig) throws ServletException {
    
            String user = servletConfig.getInitParameter("user");
            //输出root
            System.out.println(user);
    
            System.out.println("--------------------------");
    
            Enumeration<String> names = servletConfig.getInitParameterNames();
    
            //输出:
            //user: root
            //password: 12345
            while(names.hasMoreElements()){
                String name = names.nextElement();
                String value = servletConfig.getInitParameter(name);
                System.out.println(name + ": " + value);
            }
    
        }
    

    2.ServletContext()

    能够觉得 SerlvetContext 是当前 WEB 应用的一个大管家. 能够从中获取到当前 WEB 应用的各个方面的信息

    基本的方法

    • public String getInitParameter(String name); //获取指定參数名的初始化參数
    • public Enumeration< String > getInitParameterNames(); //获取參数名组成的 Enumeration 对象
    • public String getRealPath(String path);
    • public String getContextPath();
    • public InputStream getResourceAsStream(String path);

    获取配置信息

    ServletContext实例能够通过 serlvetConfig.getServletContext()方法获得的.

    该对象代表当前 WEB 应用: 能够觉得 SerlvetContext 是当前 WEB 应用的一个大管家. 能够从中获取到当前 WEB 应用的各个方面的信息。

    怎样配置

    <!-- 配置当前 WEB 应用的初始化參数 -->
        <context-param>
            <param-name>driver</param-name>
            <param-value>com.mysql.jdbc.Driver</param-value>
        </context-param>
    
        <context-param>
            <param-name>jdbcUrl</param-name>
            <param-value>jdbc:localhost:///test</param-value>
        </context-param>

    获取配置信息

    public void init(ServletConfig servletConfig) throws ServletException {
    
            //获取ServletContext对象
            ServletContext servletContext = servletConfig.getServletContext();
    
            String driver = servletContext.getInitParameter("driver");
            //输出:driver: com.mysql.jdbc.Driver
            System.out.println("driver: " + driver);
    
            Enumeration<String> nameContext = servletContext.getInitParameterNames();
    
            //输出
            //name: driver
            //name: jdbcUrl
            while(nameContext.hasMoreElements()) {
                String name = nameContext.nextElement();
                System.out.println("name: " + name);
            }
        }
    

    获取当前Web应用的某个文件部署在在server上的绝对路径

    须要通过方法public String getRealPath(String path);来获取。

    代码:

            String realPath = servletContext.getRealPath("/zhaoTest");
            System.out.println(realPath);

    输出结果:

    D:workspacests.metadata.pluginsorg.eclipse.wst.server.core	mp3wtpwebapps***zhaoTest.xml

    获取当前 WEB 应用的名称

    须要通过方法getContextPath();来获取。

    代码:

    String contextPath = servletContext.getContextPath();
    System.out.println(contextPath); 

    获取当前web应用的而某一个文件相应的输入流

    通过getResourceAsStream(String path)获取。path 的 / 为当前 WEB 应用的根文件夹。

    有两种方法能够获取到。

    代码

            try {
                ClassLoader classLoader = getClass().getClassLoader();
                InputStream is = classLoader.getResourceAsStream("jdbc.properties");
                System.out.println("1. " +  is);
                pros.load(is);
    
                System.out.println(pros.getProperty("name"));  
            } catch (Exception e) {
                e.printStackTrace();
            }
    
            pros = new Properties();
    
            try {
                //注意:  / 为当前 WEB 应用的根文件夹。

    InputStream is2 = servletContext.getResourceAsStream("/WEB-INF/classes/jdbc.properties"); System.out.println("2. " + is2); pros.load(is2); System.out.println(pros.getProperty("name")); } catch (Exception e) { e.printStackTrace(); }

    结果

    1. java.io.BufferedInputStream@15d442ac
    2. java.io.FileInputStream@22653566

    ServletConfig()和ServletContext()的差别

    • 作用范围不同:ServletContext的參数能够为全部的Servlet所获取,ServletConfig仅仅能由当前Servlet所获取。

      也就是说他们的差别在于,所填写的配置的信息是想让一个Servlet用还是多个Servlet用。

    • 配置不同:ServletContext是在两个元素间配置,ServletConfig是在元素之间的间配置。
  • 相关阅读:
    [译文] 实体与值对象到底是不是一回事?
    实现 WebApi 自托管服务宿主于 WinForms 及其交互
    [译文] C# 8 已成旧闻, 向前, 抵达 C# 9!
    [译文] 为什么你在 C# 里总是应该使用 "var" 关键字
    通过设置iis在局域网中访问网页
    windows 10 安装使用kafka
    ASP.NET Core 2.1 中的 HttpClientFactory (Part 4) 整合Polly实现瞬时故障处理
    ASP.NET Core 2.1 中的 HttpClientFactory (Part 3) 使用Handler实现传出请求中间件
    ASP.NET Core 2.1 中的 HttpClientFactory (Part 2) 定义命名化和类型化的客户端
    Asp.net Core 2.0 OpenId Connect Handler缺失Claims?
  • 原文地址:https://www.cnblogs.com/zhchoutai/p/8833566.html
Copyright © 2011-2022 走看看