JavaWeb学习笔记:ServletConfig()和ServletContext()

ServletConfig()和ServletContext()

1.ServletConfig()

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

ServletConfig封装了Servlet的配置信息,并且可以获取ServletContext对象。

Servlet容器在初始化servlet的时候会初始化一个servletConfig对象,这个对象在任何可访问的客户端都是有效的,但是,需注意的是,该对象只能在本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应用的某个文件部署在在服务器上的绝对路径

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

代码:

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

输出结果:

D:\workspace\sts\.metadata\.plugins\org.eclipse.wst.server.core\tmp3\wtpwebapps\***\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是在元素之间的间配置。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值