• JavaWeb中servlet读取配置文件的方式


           我们在JavaWeb中常常要涉及到一些文件的操作,比如读取配置文件,下载图片等等操作。那我们能不能采用我们以前在Java工程中读取文件的方式呢?废话不多说我们来看看下我们以前在Java工程中读取文件是怎么读的呢,然后再来看看能不能在JavaWeb工程中采用同样的方式。

    一、Java工程:

    1.项目的目录结构如下所示

    2.读取配置文件的代码如下

    package com.demo;
    
    import java.io.FileInputStream;
    import java.util.Properties;
    
    import org.junit.Test;
    
    public class FileDemo {
        @Test
        public void loadFile1() throws Exception {
            //读取src/jdbc1.properties
            FileInputStream fis = new FileInputStream("src/jdbc1.properties");
            Properties prop = new Properties();
            prop.load(fis);
            //从控制台列出prop里面的信息
            prop.list(System.out);
        }
    
        @Test
        public void loadFile2() throws Exception {
            //读取src/com/demo/jdbc2.properties
            FileInputStream fis = new FileInputStream("src/com/demo/jdbc2.properties");
            Properties prop = new Properties();
            prop.load(fis);        
            //从控制台列出prop里面的信息
            prop.list(System.out);
         fis.close(); } }

    3.输出结果:

    -- listing properties --
    jdbc.driver_class=oracle.jdbc.driver.OracleDriver
    jdbc.connection.username=root
    jdbc.connection.url=jdbc:oracle:thin:@localhost:1521:orcl
    jdbc.connection.password=root 

     从上面可以看出,我们在eclipse中读取文件的根目录时从src开始的,然后从src开始写,一直写到我们要读取文件目录即可。

    二、JavaWeb工程:

    1.项目的目录结构如下所示

    2.读取配置文件的代码如下

    由此,可以看出我们使用Java工程的方式在web工程中读取文件的方式是不行的,那么我们该怎么办呢?

             这是因为当我们将项目以war的方式发布到tomcat上的时候,启动tomcat,tamcat会自动解压war包项目,之后我们在src目录下面所有的Java文件会编译成class字节码文件,然后存放到WEB-INF/classes目录,如果有其他文件也会相对于src的目录等级存放到相对于WEB-INF/classes相同目录等级下,如上图中jdbc1.properties相对于src目录为src/jdbc2.properties,将src替换成WEB-INF/classes即可,所以它在tomcat中最终目录为WEB-INF/classes/jdbc2.properties,同理src/com/servlet/jdbc3.properties,它在tomcat中最终目录为WEB-INF/classes/com/servlet/jdbc3.properties。而WebContent目录下文件,则会直接放到项目的根路径下即/jdbc1.properties。说了这么多可能有点难懂,直接上图。

    ①tomcatwebappsWeb目录

    ②tomcatwebappsWebWEB-INFclasses目录

    ②tomcatwebappsWebWEB-INFclassescomservlet目录

    三、正确读取web工程中的文件方式。

    1.读取jdbc1.properties

    ①目录结果如下

    ②具体读取代码如下:

    package com.servlet;
    
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.util.Properties;
    
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    @WebServlet("/file.do")
    public class FileOperateServlet extends HttpServlet {
        private static final long serialVersionUID = 1L;
    
        protected void doGet(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            // 通过ServletContext对象的getRealPath方法获取项目的绝对路径
            // "/"就i代表项目的根路径即Web/,然后填写你需要读取文件的相对于根的路径
            // 读取jdbc1.properties
            String filePath = this.getServletContext().getRealPath("/jdbc1.properties");
            FileInputStream fis = new FileInputStream(filePath);
            Properties prop = new Properties();
            prop.load(fis);
            // 从控制台列出prop里面的信息
            prop.list(System.out);
    fis.close(); } }

    ③运行结果如下:

    -- listing properties --
    jdbc.driver_class=oracle.jdbc.driver.OracleDriver
    jdbc.connection.username=root
    jdbc.connection.url=jdbc:oracle:thin:@localhost:1521:orcl
    jdbc.connection.password=root

    2.读取jdbc2.properties

    ①目录结果如下

    ②具体读取代码如下:

    package com.servlet;
    
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.util.Properties;
    
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    @WebServlet("/file.do")
    public class FileOperateServlet extends HttpServlet {
        private static final long serialVersionUID = 1L;
    
        protected void doGet(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            // 通过ServletContext对象的getRealPath方法获取项目的绝对路径
            // "/"就i代表项目的根路径即Web/,然后填写你需要读取文件的相对于根的路径
            // 读取jdbc2.properties
            String filePath = this.getServletContext().getRealPath("/WEB-INF/classes/jdbc2.properties");
            FileInputStream fis = new FileInputStream(filePath);
            Properties prop = new Properties();
            prop.load(fis);
            // 从控制台列出prop里面的信息
            prop.list(System.out);
    fis.close(); } }

    ③运行结果如下:

    -- listing properties --
    jdbc.driver_class=oracle.jdbc.driver.OracleDriver 
    jdbc.connection.username=root
    jdbc.connection.url=jdbc:oracle:thin:@localhost:1521:orcl
    jdbc.connection.password=root

    3.读取jdbc3.properties

    ①目录结果如下

    ②具体读取代码如下:

    package com.servlet;
    
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.util.Properties;
    
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    @WebServlet("/file.do")
    public class FileOperateServlet extends HttpServlet {
        private static final long serialVersionUID = 1L;
    
        protected void doGet(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            // 通过ServletContext对象的getRealPath方法获取项目的绝对路径
            // "/"就i代表项目的根路径即Web/,然后填写你需要读取文件的相对于根的路径
            // 读取jdbc3.properties
            String filePath = this.getServletContext().getRealPath("/WEB-INF/classes/com/servlet/jdbc3.properties");
            FileInputStream fis = new FileInputStream(filePath);
            Properties prop = new Properties();
            prop.load(fis);
            // 从控制台列出prop里面的信息
            prop.list(System.out);
         fis.close(); } }

    ③运行结果如下:

    -- listing properties --
    jdbc.driver_class=oracle.jdbc.driver.OracleDriver 
    jdbc.connection.username=root
    jdbc.connection.url=jdbc:oracle:thin:@localhost:1521:orcl
    jdbc.connection.password=root

    至此在web中读取文件的方式已经差不多了,有不足的地方,希望大家多多提意见!

  • 相关阅读:
    Python的单元测试(二)
    Python的单元测试(一)
    未知道——广场式的真匿名交流网站(一)
    xpath提取多个标签下的text
    清空Github上某个文件的历史版本
    如何正确使用日志Log
    使用AWS亚马逊云搭建Gmail转发服务(三)
    玩转Windows服务系列——Windows服务小技巧
    玩转Windows服务系列——服务运行、停止流程浅析
    玩转Windows服务系列——无COM接口Windows服务启动失败原因及解决方案
  • 原文地址:https://www.cnblogs.com/nanyangke-cjz/p/7124043.html
Copyright © 2020-2023  润新知