您好,欢迎来到华佗小知识。
搜索
您的当前位置:首页使用servletContext和类加载器加载文件

使用servletContext和类加载器加载文件

来源:华佗小知识

    servletContext对象表示的是当前的这个web工程,同一个web工程下的所有的servlet共享一个servletContext对象,通过servletContext对象我们可以实现在不同的servlet中传递参数。使用servletContext对象我们可以实现请求的转发并且获取web工程启动的初始化参数。今天我来介绍一下如何使用servletContext对象来读取配置文件。

    首先我们先使用maven建立一个web工程,分配在src和WEB-INF下创建.properties文件。如图:

                                                                                 

 

我们在web.xml中创建一个servlet来读取配置文件。代码如下:

public class TestServletContext extends HttpServlet{

    private static final long serialVersionUID = 1L;

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        doPost(req,resp);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setHeader("content-type","text/html;charset=UTF-8");
        readResourceFile(response);
        response.getWriter().print("<br/>");
        response.getWriter().close();
    }

    private void readResourceFile(HttpServletResponse response) throws IOException {
        ServletContext servletContext = this.getServletContext();
        InputStream in = servletContext.getResourceAsStream("/WEB-INF/classes/com/conf/test.properties");
        Properties pro = new Properties();
        pro.load(in);
        String jdbcUrl = pro.getProperty("jdbc.url");
        String userName = pro.getProperty("jdbc.username");
        String password = pro.getProperty("jdbc.password");
        response.getWriter().println("读取src下的资源文件:jdbcUrl为"+jdbcUrl+"、userName为:"+userName+"、password为:"+password);
        response.getWriter().flush();
    }
}

访问这个servlet后浏览器输出:

 

public class TestServletContext extends HttpServlet{

    private static final long serialVersionUID = 1L;

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        doPost(req,resp);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setHeader("content-type","text/html;charset=UTF-8");
        readResourceFile(response);
        response.getWriter().print("<br/>");
        response.getWriter().close();
    }

    private void readResourceFile(HttpServletResponse response) throws IOException {
        ServletContext servletContext = this.getServletContext();
        InputStream in = servletContext.getResourceAsStream("/WEB-INF/test.properties");
        Properties pro = new Properties();
        pro.load(in);
        String jdbcUrl = pro.getProperty("jdbc.url");
        String userName = pro.getProperty("jdbc.username");
        String password = pro.getProperty("jdbc.password");
        response.getWriter().println("读取WEB-INF下的资源文件:jdbcUrl为"+jdbcUrl+"、userName为:"+userName+"、password为:"+password);
        response.getWriter().flush();
    }
}

访问这个servlet后浏览器输出:

 

 在servletContext对象中还有一个方法叫做getRealPath(String path)用来获取web应用中文件的绝对路径。这个方法比较的简单我就不多介绍了。

    在平时的开发中我们除了有时使用ServletContext对象加载配置文件还会使用类装载器来读取配置文件。下面我们来使用类装载器来读取web工程的配置文件,代码如下:

public class TestClassLoader extends HttpServlet{

    private static final long serialVersionUID = 1L;

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        doPost(req,resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse response)
            throws ServletException, IOException {
        response.setHeader("content-type","text/html;charset=UTF-8");
        readResourceFile(response);
        response.getWriter().close();
    }

    private void readResourceFile(HttpServletResponse response) throws IOException {
         ClassLoader classLoader = TestClassLoader.class.getClassLoader();    
         InputStream in = classLoader.getResourceAsStream("com/conf/test.properties");
         Properties pro = new Properties();
         pro.load(in);
         String jdbcUrl = pro.getProperty("jdbc.url");
         String userName = pro.getProperty("jdbc.username");
         String password = pro.getProperty("jdbc.password");
         response.getWriter().println("读取src下的资源文件:jdbcUrl为"+jdbcUrl+"、userName为:"+userName+"、password为:"+password);
         response.getWriter().flush();
    } 

}

请求这个servlet后浏览器输出

 

public class TestClassLoader extends HttpServlet{

    private static final long serialVersionUID = 1L;

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        doPost(req,resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse response)
            throws ServletException, IOException {
        response.setHeader("content-type","text/html;charset=UTF-8");
        readResourceFile(response);
        response.getWriter().close();
    }

    private void readResourceFile(HttpServletResponse response) throws IOException {
         ClassLoader classLoader = TestClassLoader.class.getClassLoader();    
         InputStream in = classLoader.getResourceAsStream("../test.properties");
         Properties pro = new Properties();
         pro.load(in);
         String jdbcUrl = pro.getProperty("jdbc.url");
         String userName = pro.getProperty("jdbc.username");
         String password = pro.getProperty("jdbc.password");
         response.getWriter().println("读取WEB-INF下的资源文件:jdbcUrl为"+jdbcUrl+"、userName为:"+userName+"、password为:"+password);
         response.getWriter().flush();
    } 

}

请求这个servlet后浏览器输出:

 

 注意:不建议使用类加载器去加载比较大的文件,因为可能会导致内存溢出。

 

 

 

 

 

 

    

转载于:https://www.cnblogs.com/suyang-java/p/11454315.html

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- huatuo0.cn 版权所有 湘ICP备2023017654号-2

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务