一、java project项目

如果工程项目是java project的话获取资源文件

1、如果是在本工程根目录下直接访问

FileReader fr = new FileReader("config.properties");

2、也可以直接根据实际路径进行访问

FileReader fr = new FileReader("D:\\practice\\backend\\myeclipse\\web_db\\config.properties");

3、使用类加载器访问(所在目录为src目录 如果要放到具体的包里面 需要加上包的目录)这种方式读取资源文件只能放在src或者是src子目录

InputStream fr = JDBCUtil.class.getClassLoader().getResourceAsStream("config.properties");

二、web project

Properties pt = new Properties();
pt.load(new FileReader("config.properties"));

如果按照上面的代码访问(文件还是在根目录下)会报如下错误

出现上面的错误的解决方法(于java project项目不同 资源文件必须能够发布到服务器上才能够访问)

1、用类加载器的方式进行访问资源(在src目录下 在包中的话则需要加上包的目录)这种方式读取资源文件只能放在src或者是src子目录

InputStream is = JDBCUtil.class.getClassLoader().getResourceAsStream("config.properties");

如果资源在WebRoot的根目录下则需要用下面的代码进行访问资源

Properties pt = new Properties();
URL ur = JDBCUtil.class.getClassLoader().getResource("../../");
String pathName = ur.toString()+"config.properties";
FileInputStream is = null;
try {
is = new FileInputStream(pathName.substring(6));
} catch (FileNotFoundException e2) {
// TODO Auto-generated catch block
e2.printStackTrace();
}
try {
pt.load(is); } catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}

2、使用国际化资源类进行访问资源

ResourceBundle rb=ResourceBundle.getBundle("cn.itcast.jdbc.util.config");

但是如果你要放在项目的根目录下想通过浏览器的方式是访问不到资源的

因为发布项目的时候发布的是WebRoot目录里面的东西(根目录下的资源根本就发布不到工程里所以无法访问资源)   Tomcat编译后的文件如下图

假如你想通过这样的路径访问资源文件http://localhost:8080/web_servlet03/WEB-INF/classes/config.properties 也是访问不到的因为WEB-INF目录是不能通过

浏览器进行访问的。(虽然不能通过浏览器访问但是通过内部代码是可以访问WEB-INF中的资源的)

如果你的确想访问资源文件的话必须将资源文件放到WebRoot目录下就可以直接访问了如下图:

三、servlet访问资源

1、可以用类加载器(资源文件在src目录下)这种方式读取资源文件只能放在src或者是src子目录

InputStream is=PathDemo.class.getClassLoader().getResourceAsStream("a.txt");

2、使用servletContext上下文访问资源(注:访问的资源不能放到根目录下 因为当发布的时候发布的是webRoot下面的东西,读取资源的时候读取的是服务器的东西)

这种方式比较灵活可以根据相对路径获取真实路径从而对资源文件进行操作

public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException { response.setContentType("text/html;charset=URF-8");
ServletContext sc = getServletContext();
String root = sc.getRealPath("/");
String bPath = sc.getRealPath("/a.txt");
FileInputStream fis = new FileInputStream(bPath);
byte[] b = new byte[10];
while(true){
int rs = fis.read(b);
if(rs == -1){
break;
}
System.out.println(new String(b));
}
}

java 静态资源访问详解的更多相关文章

  1. Java之Static静态修饰符详解

    Java之Static静态修饰符详解 Java之Static静态修饰符详解 一.特点 1.随着类的加载而加载,随着类的消失而消失,生命周期最长 2.优先于对象存在 3.被所有类的对象共享 4.可以直接 ...

  2. “全栈2019”Java第七十三章:外部类里多个静态非静态内部类详解

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  3. java.lang.Thread类详解

    java.lang.Thread类详解 一.前言 位于java.lang包下的Thread类是非常重要的线程类,它实现了Runnable接口,今天我们来学习一下Thread类,在学习Thread类之前 ...

  4. java web之Filter详解

    java web之Filter详解 2012-10-20 0 个评论 作者:chenshufei2 收藏 我要投稿 .概念: Filter也称之为过滤器,它是Servlet技术中比较激动人心的技术,W ...

  5. java并发编程 | 锁详解:AQS,Lock,ReentrantLock,ReentrantReadWriteLock

    原文:java并发编程 | 锁详解:AQS,Lock,ReentrantLock,ReentrantReadWriteLock 锁 锁是用来控制多个线程访问共享资源的方式,java中可以使用synch ...

  6. Java基础之 数组详解

    前言:Java内功心法之数组详解,看完这篇你向Java大神的路上又迈出了一步(有什么问题或者需要资料可以联系我的扣扣:734999078) 数组概念 同一种类型数据的集合.其实数组就是一个容器. 数组 ...

  7. 《Tomcat与Java Web开发技术详解》思维导图

    越想构建上层建筑,就越觉得底层基础很重要.补课系列. 书是良心书,就是太基础了,正适合补课. [纯文字版] Tomcat与Java Web开发技术详解 Servlet Servlet的生命周期 初始化 ...

  8. Java 8 Lambda 表达式详解

    一.Java 8 Lambda 表达式了解 参考:Java 8 Lambda 表达式 | 菜鸟教程 1.1 介绍: Lambda 表达式,也可称为闭包,是推动 Java 8 发布的最重要新特性. La ...

  9. Java内存模型(JMM)详解

    在Java JVM系列文章中有朋友问为什么要JVM,Java虚拟机不是已经帮我们处理好了么?同样,学习Java内存模型也有同样的问题,为什么要学习Java内存模型.它们的答案是一致的:能够让我们更好的 ...

随机推荐

  1. 介绍一款自动给添加不同浏览器CSS3前缀的插件~Autoprefixer(附其他前端开发插件)

    正文 自动给CSS文件添加不同浏览器的CSS3前缀:Autoprefixer 安装 只需兼容主流浏览器 正常情况使用:(在书写完的CSS样式文件中,按F1,选择Autoprefixer CSS) 这时 ...

  2. Gym - 101982C Contest Setting (动态规划)

    A group of contest writers have written n problems and want to use k of them in an upcoming contest. ...

  3. SQL Server数据库中表的查

    DataSet 数据集 DataAdapter 数据适配器,DataSet对象与实际数据源之间的桥梁,自动开闭数据库连接,省略Open.Close.填充数据集,需要用到Fill方法. using Sy ...

  4. (模拟 打好基础)nyoj1363-计划日

    1363-计划日 内存限制:256MB 时间限制:3000ms 特判: No通过数:21 提交数:79 难度:1 题目描述: 为什么花那么多时间.精力还是学不好学不通,如何把握各科目的重难点,期中和期 ...

  5. Css(常用的特殊效果)

    一.前言 不得不说css真强大,总结了几个常用的css特殊效果 二.主要内容 1.几个特殊效果 $green = #02a774; $yellow = #F5A100; $bc = #e4e4e4; ...

  6. 把xml数据直接插入到sqlserver数据库

    存储过程: ALTER proc [ali].[ins_冻结金额表] @xmldoc varchar(max), ) as declare @idoc int exec sp_xml_prepared ...

  7. URL存在跨站漏洞http host头攻击漏洞解决方案

    最近项目部署的时候客户使用的绿盟扫描出一些漏洞,老大让我处理,经过看大神的博客等方式,分享一些简单的解决方法. 一 跨网站脚本 跨网站脚本(Cross-site scripting,通常简称为XSS或 ...

  8. Intellij IDEA 4种配置热部署的方法【转】【补】

    热加载 热加载可以使代码修改后无须重启服务器,就可以加载更改的代码.(其实分java和非java代码,本处可以让java代码立即生效且不重启服务) 第1种:修改服务器配置,使得IDEA窗口失去焦点时, ...

  9. HDU 1228(字符串处理)

    题意是将所给算式求出结果. 用的方法非常麻烦,开始没考虑到零也需要处理,以为遇上零直接跳过即可,知道发现零可以占位,比如 one zero 值为 10 而不是 1…… 代码如下: #include & ...

  10. 使用 LD_PRELOAD 变量拦截调用

    背景&原理 很多 a.out 程序都依赖动态库 libc.so, 比如使用 strcmp() 比较密码, 其实是不安全的 使用 LD_PRELOAD 变量可以使该变量中的可链接文件(编译时使用 ...