我们在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中读取文件的方式已经差不多了,有不足的地方,希望大家多多提意见!

JavaWeb中servlet读取配置文件的方式的更多相关文章

  1. python读取配置文件的方式

    python读取配置文件的方式 1.从config.ini中读取,后缀无所谓,文件名字也无所谓,不过config.ini是常用写法,所谓见名知意 config.ini内容: [global] ip = ...

  2. Java读取配置文件的方式

    Java读取配置文件的方式-笔记 1       取当前启动文件夹下的配置文件   一般来讲启动java程序的时候.在启动的文件夹下会有配置文件 classLoader.getResource(&qu ...

  3. python中读取配置文件的方式

    方式1:argparse argparse,是Python标准库中推荐使用的编写命令行程序的工具.也可以用于读取配置文件. 字典样式的配置文件*.conf 配置文件test1.conf { " ...

  4. Servlet读取配置文件的三种方式

    一.利用ServletContext.getRealPath()[或getResourceAsStream()] 特点:读取应用中的任何文件.只能在web环境下. private void text3 ...

  5. Java工程中如何读取配置文件中参数信息

    Java中读取配置文件中参数: 方法一:通过JDK中Properties来实现对配置文件的读取. Properties主要用于读取Java的配置文件,不同的编程语言有自己所支持的配置文件,配置文件中很 ...

  6. Spring中加载配置文件的方式

    原文:http://blog.csdn.net/snowjlz/article/details/8158560 Spring 中加载XML配置文件的方式,好像有3种, XML是最常见的Spring 应 ...

  7. asp.net core轻松入门之MVC中Options读取配置文件

    接上一篇中讲到利用Bind方法读取配置文件 ASP.NET Core轻松入门Bind读取配置文件到C#实例 那么在这篇文章中,我将在上一篇文章的基础上,利用Options方法读取配置文件 首先注册MV ...

  8. Java中spring读取配置文件的几种方法

    Spring读取配置XML文件分三步: 一.新建一个Java Bean: package springdemo; public class HelloBean { private String hel ...

  9. Java_JDBC连接数据库_使用读取配置文件的方式

    package com.homewoek3_4.dao; import java.io.IOException; import java.io.InputStream; import java.sql ...

随机推荐

  1. 全面进攻python之前回顾下自己近三个月的自学之路

    人生是在一直试错的过程中成长起来的.这句话貌似很有道理,但回顾了下自己近三个月python自学学习之路,又觉得自己对这句话又有了新的看法------行动之前必须要有正确的选择,这样做错了才能成长. 2 ...

  2. etymology-F

    forsake [fə'seɪk] vt.放弃:断念. watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400 ...

  3. Zynq GPIO 中断

    /* * Copyright (c) 2009-2012 Xilinx, Inc. All rights reserved. * * Xilinx, Inc. * XILINX IS PROVIDIN ...

  4. Visual Studio/Eclipse调用 JBoss5中的WebService

    1. HelloWebService.java package com.xx.webservices; import javax.jws.WebMethod; import javax.jws.Web ...

  5. UVA Problem B: Fire!

    Problem B: Fire! Joe works in a maze. Unfortunately, portions of the maze have caught on fire, and t ...

  6. Selenium操作之滚动条

    在用Selenium做UI自动化时,经常会遇到有些元素找不到之类的问题,但是自己的代码并没有错,元素就是找不到,这是为什么呢?原因很简单,由于页面内容较多,有些内容需要下拉滚动条才会显示,这里介绍一种 ...

  7. ORACLE中关于 char 和 varchar2 的比较

    先建表做一个测试: ) , VARC2 )), CHAR2 ) ; INSERT INTO TT VALUES('A','A','A') ; INSERT INTO TT VALUES('A','A ...

  8. 1.2.1 Fragments - 碎片

    在activity中,Fragment代表了一种行为和用户界面的一部分.在一个activity里,你可以联合多个fragment来创建一个多面板的UI,你也可以在多个activity里重复使用同一个f ...

  9. 如何利用gdb调试程序?

    程序的大体意思就是各一个数组赋值,然后输出来程序已经写在了上面,下面我们就来看一下如何产生带有调试信息的编译文件,这里我们要使用gcc的-g参数,用于在编译文件中加入一些调试信息.发现加了-g和没有加 ...

  10. 分析并实现 360 P1路由器上的测速功能(也可以针对金山测速功能)

    现在各种智能路由器以及一些PC上的防火墙软件,都提供网络测速功能.笔者对此进行了研究,并在自己的路由器上也实现了此功能.下面做一下总结 一般的网络测速,主要关注两个方面:网络延迟和下载速率 1.网络延 ...