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。說了這么多可能有點難懂,直接上圖。

①tomcat\webapps\Web目錄

 

②tomcat\webapps\Web\WEB-INF\classes目錄

②tomcat\webapps\Web\WEB-INF\classes\com\servlet目錄

三、正確讀取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中讀取文件的方式已經差不多了,有不足的地方,希望大家多多提意見!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM