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

一、Java工程:

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

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

packagecom.demo;importjava.io.FileInputStream;importjava.util.Properties;importorg.junit.Test;public classFileDemo {

@Testpublic void loadFile1() throwsException {//读取src/jdbc1.properties

FileInputStream fis = new FileInputStream("src/jdbc1.properties");

Properties prop= newProperties();

prop.load(fis);//从控制台列出prop里面的信息

prop.list(System.out);

}

@Testpublic void loadFile2() throwsException {//读取src/com/demo/jdbc2.properties

FileInputStream fis = new FileInputStream("src/com/demo/jdbc2.properties");

Properties prop= newProperties();

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

①目录结果如下

②具体读取代码如下:

packagecom.servlet;importjava.io.FileInputStream;importjava.io.IOException;importjava.util.Properties;importjavax.servlet.ServletException;importjavax.servlet.annotation.WebServlet;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;

@WebServlet("/file.do")public class FileOperateServlet extendsHttpServlet {private static final long serialVersionUID = 1L;protected voiddoGet(HttpServletRequest request, HttpServletResponse response)throwsServletException, IOException {//通过ServletContext对象的getRealPath方法获取项目的绝对路径//"/"就i代表项目的根路径即Web/,然后填写你需要读取文件的相对于根的路径//读取jdbc1.properties

String filePath = this.getServletContext().getRealPath("/jdbc1.properties");

FileInputStream fis= newFileInputStream(filePath);

Properties prop= newProperties();

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

①目录结果如下

②具体读取代码如下:

packagecom.servlet;importjava.io.FileInputStream;importjava.io.IOException;importjava.util.Properties;importjavax.servlet.ServletException;importjavax.servlet.annotation.WebServlet;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;

@WebServlet("/file.do")public class FileOperateServlet extendsHttpServlet {private static final long serialVersionUID = 1L;protected voiddoGet(HttpServletRequest request, HttpServletResponse response)throwsServletException, IOException {//通过ServletContext对象的getRealPath方法获取项目的绝对路径//"/"就i代表项目的根路径即Web/,然后填写你需要读取文件的相对于根的路径//读取jdbc2.properties

String filePath = this.getServletContext().getRealPath("/WEB-INF/classes/jdbc2.properties");

FileInputStream fis= newFileInputStream(filePath);

Properties prop= newProperties();

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

①目录结果如下

②具体读取代码如下:

packagecom.servlet;importjava.io.FileInputStream;importjava.io.IOException;importjava.util.Properties;importjavax.servlet.ServletException;importjavax.servlet.annotation.WebServlet;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;

@WebServlet("/file.do")public class FileOperateServlet extendsHttpServlet {private static final long serialVersionUID = 1L;protected voiddoGet(HttpServletRequest request, HttpServletResponse response)throwsServletException, IOException {//通过ServletContext对象的getRealPath方法获取项目的绝对路径//"/"就i代表项目的根路径即Web/,然后填写你需要读取文件的相对于根的路径//读取jdbc3.properties

String filePath = this.getServletContext().getRealPath("/WEB-INF/classes/com/servlet/jdbc3.properties");

FileInputStream fis= newFileInputStream(filePath);

Properties prop= newProperties();

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

java servlet 输出_JavaWeb中servlet读取配置文件的方式相关推荐

  1. java静态类如何赋值_Java如何读取配置文件并赋值静态变量

    应用场景 项目开发中某个功能需要抽取成方法写成一个工具类,提供给别人使用.写过工具类的人都知道,工具类中的方法一般都是静态方法,可以直接使用类名点方法名调用, 使用很方便,比如判断某个对象是否为nul ...

  2. java的web项目分工_JavaWeb中Servlet和JSP的分工案例

    jsp和Servlet的分工: * JSP: > 作为请求发起页面,例如显示表单.超链接. > 作为请求结束页面,例如显示数据. * Servlet: > 作为请求中处理数据的环节. ...

  3. java cookie过期_Java中Servlet Cookie设置过期时间(expires,max-age)

    Java中Servlet Cookie设置过期时间(expires,max-age) expires或者max-age指定了coolie的生存期,默认情况下coolie是暂时存在的,他们存储的值只在浏 ...

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

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

  5. java里 输出101-150中的素数

    输出101-150中的素数 public class CLASS { public static void main(String[] args){ int count=0; out: for(int ...

  6. spring中读取配置文件的方式,以及配置文件如何写

    application.properties spring.application.name=spring-boot-simple-study server.port=8080 application ...

  7. java循环遍历_JAVA中循环遍历list有三种方式

    转自:https://blog.csdn.net/changjizhi1212/article/details/81036509 JAVA中循环遍历list有三种方式for循环.增强for循环(也就是 ...

  8. java respose输出mp4,使用safari读取通过servlet返回的MP4视频文件报错

    有一问题求助各位大神,希望能提供解决思路!谢谢! 问题现象: 最近做的一个视频播放功能,前台使用的video.js播放框架播放mp4视频,后台使用java写的servlet接收请求的MP4文件名等参数 ...

  9. java servlet配置_JavaWeb编程 Servlet的基本配置

    学习JavaWeb的人没有不知道Servlet的吧,而要用Servlet就需要在web.xml中进行配置.相信有很多初学者跟我当初一样,对于一些配置参数不是很理解. 下面是一个最基本的Servlet配 ...

最新文章

  1. 互斥量、读写锁长占时分析的利器——valgrind的DRD
  2. 比较顺序表和链表的优缺点
  3. 华为Mate20首支预告片爆出,30秒内包含太多黑科技
  4. 第四范式推出业界首个基于持久内存、支持毫秒级恢复的万亿维线上预估系统...
  5. OpenGL multiviewport多个视口的实例
  6. 【分析】1021 Deepest Root (25 分)【DFS解法】
  7. 半平面交练习(计算几何)
  8. centos5.9 mysql_CentOS 5.9系统服务器使用yum安装Apache+PHP+MySQL环境
  9. java 解析gson_使用Java和Google GSON解析ESPN API
  10. 局域网网络风暴检测工具_【思唯网络学院】从原理到配置,最全的VLAN说明就在这了!...
  11. 打断点的方式_一位清华退休老教授:作为家长如果能管住孩子这3点,将来会成才...
  12. 转载:C#WinForm窗体事件执行次序(较完整版)
  13. html输入后面消失,excel输入减号为什么会消失
  14. 用nodejs和vue实现消息盒子
  15. norton杀毒软件与木马克星有冲突
  16. css元素点击后变色,且点击别的地方不会颜色消失
  17. 开源BI平台软件特性对比
  18. java列名无效_java中的列名无效
  19. Android引用ttf图标字体库
  20. android here地图,兼容所有安卓设备 Here地图已放开限制

热门文章

  1. 如何改变一个按钮的位置
  2. 大剑无锋之hadoop默认的数据类型都有哪些?
  3. leetcode 263. 丑数(Java版)
  4. 【牛客网】迷途的牛牛 C++
  5. 【PAT甲级 排序】1012 The Best Rank (25 分) C++ 全部AC
  6. Python基础之:struct和格式化字符
  7. Dynamo:亚马逊的高可用键值存储
  8. 【简便解法】1077 互评成绩计算 (20分)_32行代码AC
  9. 希望PAT耗子尾汁:1014 福尔摩斯的约会 (20分)——22行代码AC
  10. ctype.h(cctype) 头文件函数大全