日期:2014-05-17  浏览次数:20683 次

java的路径问题,有点看不懂了?
原因是这样,我本来打算做一个图片上传,然后把图片显示的一个东西。
开始我是这样想的。统一图片的路径都存储为upload/images/****.jpg(.png)的格式。
存储图片的目录是upload/images/
后来我发现这样弄有一个问题,就是读取的时候会有路径问题。
因为如果一个网页直接在Root(根目录的话还好。)可以直接读取到获取图片路径从而读取到图片。
(我的图片信息是写在数据库中的,需要根据网页直接生成。)
但是,如果网页要是在某一个目录(index/index.jsp)下的话,那么图片是一定读取不到。
于是我就开始想解决方案了。开始我想到了是base这个标签。
发现是可以用的。需要获取项目路径/来解决。不过要用到JSP标签。
(个人主张抛弃JSP。有一个帖子说过了,简单的说,就是JSP的部分功能和JS重叠)
后来想了一想还是算了吧。因为我在我的页面中,几乎已经不用jsp的代码和标签了。struts的标签的也不用。
和后台的数据交换用的js文件json格式。获取的数据也是通过js代码写入到html的dom中的。
我觉得这样很方便。因为如果那天,我不想用java的后台,我可以很方面的换成PHP或者ASP等等其他编程语言。
最后我找了半天,又找到了一个解决方案。网上有一种说法是 a href="/***.df".其中'/'可以代表域名。
估计这是一个w3c的标准(我没有去查啊,只是猜测,有点不太严谨了)。我就想可不可以通过修改图片的统一存储路径来实现解决这个问题。既把upload/images/****.jpg(.png)改为/upload/images/****.jpg(.png)。
这不就相当于 域名+图片路径了嘛。而且这样还不受你所在页面的限制。
(意思是,index.jsp和index/index.jsp中的链接路径都是 域名 + upload/images/****.jpg(.png))
可是,一个又让我吐血的问题出现了。
java项目的路径是 域名(IP+端口)/项目名
这一下,我就彻底奔溃了。因为,这样一来我的项目必须部署到root目录中才可以正确的使用,如果一个tomcat部署多个项目的话,这个样的项目肯定是不能正确访问的。
不单单是这个问题,大家知道struts2的路径问题吧。struts2中的“/”代表的是域名而不是我们以为的 域名/项目名
tomcat为了显示自己可以部署多项目,就直接在/加项目名。怎么没有考虑到问w3c标准的问题呢。你要区分多个项目的话,可以通过端口来区分吧。不用把项目名弄出来吧。我想这个设计上还是不够严谨的。还有strut2为什么不紧跟tomcat项目一样呢,走域名+项目名的套路。还非要弄出一个域名的套路。
我们是没办法,弄出一个 jsp 代码获取项目地址 然后用 base 标签 指定绝对路径的方法。可是,你知不知道,这样会对JSP代码产生依赖啊。如果有很多的页面,而且有一天,我们要换后台的语言的话,是多么繁琐的一件事啊。
我现在是各种纠结啊。真是不知道怎么处理这个问题了。

不知道各位大神们,有没有什么好的办法,能帮我优雅的解决这个问题。

------解决方案--------------------
好像没你想的那么复杂,
但是,如果网页要是在某一个目录(index/index.jsp)下的话,那么图片是一定读取不到。这句话是错误的,一样可以得到。你获取图片时写绝对路径就ok了
------解决方案--------------------
具体方法与实现不谈,这种情况(要在任意页面显示图片的话)总归是要用绝对路径吧
------解决方案--------------------
配置个二级域名一切都解决了.
------解决方案--------------------
绝对路径就OK了,lz都不带自己试一下的。。。。

/upload/aaa.jpg 这个表示的是项目webRoot下upload文件夹下的aaa.jpg



------解决方案--------------------
我也觉得页面是显示的时候用绝对路径是比较方便的一种,后台数据库存储的是肯定要用相对路径,lz可以找个契合点来实现图片的读取。