实用技巧---java路径问题完全解答(二),相对路径与绝对路径。

来源:互联网 发布:手机嗅探软件 编辑:程序博客网 时间:2024/06/12 16:01
JavaEE动态web工程路径问题

       这个路径问题,特别是在做页面跳转,读取配置文件的时候经常会遇到,很恶心的。我在这里做下,较为完整的说明。

一:jsp文件路径相关

1.jsp文件的默认相对路径

对于页面加载其他文件如:链接js库,css库,加载图片,加载其他页面等,我推荐用火狐浏览器的网络分析器,查看页面请求的详细信息,很直观的。

<scripttype="text/javascript" src="test.js"></script>

上面这个语句位于一个在WebContent\page路径下的jsp文件上,他请求加载一个test.js的文件,用默认相对路径,它加载这个路径下的文件:

(这个jsp是没有经过转发的,默认相对路径是自己的文件夹,详细的在第三篇路径文章里我有说)

这里很奇怪,如果默认相对路径是自己的路径的话,为什么不是WebContent\page\test.js

我在page下面,也就是与jsp文件同一路径下的地方放了个test.js


于是


如果我把WebContent写上会怎样?


可以看出来,WebContent这个文件夹好像是假的,根本不要写!

去查看下真正部署到Tomcat上的文件后,可以看到压根没有WebContent这个文件夹


那访问WebContent之外的文件可以吗?


以上三张图可以看出,WebContent是开发时使用的文件结构(就是说在eclipse开发工程里有),它限定了实际上部署到服务器上的内容(自己不会部署到服务器上),WebContent之外的自定义内容如上面的"test.jsdata文件夹",都不会被部署。

所以做web工程写相对路径时,不要写WebContent,写了就会在实际服务器运行时出错。

总结:

1.对于页面所要的资源全部放在WebContent路径下,注意书写相对路径时不要再写WebContent。原因上面我已经说过了。

2.页面的默认相对路径是本身页面所在的路径(未经过转发):可以通过<%=request.getContextPath() %>获得工程路径,注意不要再写WebContent。

----------------------------------------------------------------------------------------------------

二.运行在服务器上面的java读取文件的路径问题

注意:

运行在服务器端的java类,他的运行路径环境与在IDE上的路径环境比较不一样,要多注意,这里的相对路径不能像javaSe程序那样写。

举个具体例子来说:

普通java类,例如Dbutil读取dbInfo.xml配置文件时,配置文件放在哪里,路径怎么写?

配置文件放在哪里:

1.不要放在工程跟路径下:因工程根路径下的文件不会被部署

2.不要放在WebContent路径下:因为部署到服务器上后,文件夹结构会发生变化,不好写相对路径。

  而且实际上代码的运行时的地方也不一样了。具体你可以去Tomcat实际上的工程看看。

  更重要的是再WEB-INF外面的文件是可以直接下载到了,很不安全。

3.对于普通java代码需要的配置文件,我建议放置在src目录下,或者是包路径下,还有web-inf下。

-------------------------------------------------------------------------------

路径怎么写:

1.实际上web java类没有正常相对路径可写,我们要用特殊的方法写。(因为在服务器上运行时路径与开发时不同了)

2.就是你想获得文件,你得从最终生成的.class文件为着手点,不要以.java文件的路径为出发点,因为真正使用的就是.class,不会拿个.java文件就使用,因为java是编译型语言嘛

3.使用DBUtil.class.getResource("").toString()获取使用类(.class)的相对路径,再使用这个相对路径去读取配置文件

4.class.getResource("/") --> 返回class文件所在的顶级目录,一般为包名的顶级目录。

5.否则只能写绝对路径了。

给个实际的例子:

包结构


部署到Tomcat上的文件的结构


以DBUtil.class文件出发,开始读取文件

DBUtil.class.getResource("").toString()+"/DBInfo.xml")

这样可以写成相对路径。

或者你就写死了:

像这样:


其实,你可以看看strust2.0与hibernate,c3p0,它们的配置文件也是写在src或者包路径下的,不要写在WebContent下。

最后,路径有问题的话,多去看看部署到Tomcat上的工程,就会明白很多。

---------------------------------------------------------------------------------------------

三:运行在IDE上的java类(没有部署的,单元测试等)

这个路径的书写就按照第一篇文章说的se的模式来写,这时要写WebContent哦。。。。

这两者不要搞混了,上次,我同学写的数据库部分,我叫他做单元测试,他写WebContent读取配置文件,结果实际部署时一直路径报错,现在知道怎么回事了吧。

---------------------------------------------------------------------------------------------

最后总结几点,把这点掌握记住就不会因为路径问题困扰了。

1.出现路径问题,多看实际部署的Tomcat工程。

2.WebContent这个文件夹只有在IDE里才有,实际部署工程是不存在的,但是它是个框架,他里面的东西才能被部署上去。总之,写相对路径时不要写它。

3.java读取配置文件,数据文件路径问题,你要明白,相对路径相对的是.class文件的路径,不是.java。

4.多比较实际部署文件,实际运行工程,使用火狐网络数据分析,能最快的解决路径问题。



0 0
原创粉丝点击