【求助】关于JSP中,加载文件路径的问题

TPOF314 2012-08-20 07:50:56
各位高手,我现在在做一个作业,是一个用JSP做的房产中介系统。
因为是第一个作业,我们暂时没有用到数据库。我们目前的要求是:自己制作一个xml文件,里面存放一堆房产信息数据(相当于一个小型数据库)。然后实现提供用户搜索查询的功能。
现在,我已经把所有东西都做好了,唯一头疼的地方就是路径问题。加载xml的时候,一直都是文件路径错误,下图是我目前的部分代码:


没办法,为了让程序顺利运行,我目前只能用这个xml文件的绝对路径,但是提交给老师的时候,绝对路径应该是不行的。我想把xml放在这个Application的根目录下,然后用它的相对路径进行载入,但是一直不行。
后来我查了一下,工作时候的路径是tomcat的安装路径。
各位有没有什么办法可以把路径调过来?
...全文
193 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
gradeyong 2012-08-20
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 的回复:]

引用 8 楼 的回复:
俄,我知道了,lz在写路径的时候没有用到相对路径的写法
jsp servlet里,"/"代表Web应用的跟目录,"./" 代表当前目录,"../"代表上级目录
所以你的路径命前有“/”才表示web的相对根目录
你要是用
path = "root/rent.xml";

path = "/root/rent.xml";
是不同的


嗯,这个我知道……
[/Quote]

当然啦,你的web应用是必须在容器里才能运行的,所以当然你所编写的所有代码最终要都被部署在容器里才能运行。也就是你的很多编译好的文件等等都被拷贝到了容器理的应用文件夹里,才会运行。

即便NetBean有即时运行功能,其实也不过是内嵌了tomcat而已,其实还是在容器理运行的。
TPOF314 2012-08-20
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 的回复:]

引用 5 楼 的回复:

引用 3 楼 的回复:

lz需要的是一个相对路径而不是绝对路径,所以不要期望加入绝对路径,不是很好的习惯。
你说的“tomcat的安装路径”不该出现在你的程序里。路径里不该有盘符之类的东西。


(首先,和盘符没有关系,我用的是linux,没有盘符)
是这么回事的:
我运行时候的相对路径并不是这个工程的路径,而是tomcat的安装路径。也就是说……
[/Quote]

我刚刚自己解决了!虽然用了一种比较恶心的方法。不过还是要谢谢你!
可能是我的描述不太清楚吧,让你白打了这么多字,说了一堆和我问题不搭边的东西~~总之,谢了!
TPOF314 2012-08-20
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 的回复:]
俄,我知道了,lz在写路径的时候没有用到相对路径的写法
jsp servlet里,"/"代表Web应用的跟目录,"./" 代表当前目录,"../"代表上级目录
所以你的路径命前有“/”才表示web的相对根目录
你要是用
path = "root/rent.xml";

path = "/root/rent.xml";
是不同的
[/Quote]

嗯,这个我知道的。这个其实跟我想知道的没任何关系....我想知道的是,为什么我写相对路径的时候,系统把我的路径指到了tomcat的安装目录下面,而不是我当前的application~~
先表示感谢~~
gradeyong 2012-08-20
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]

引用 3 楼 的回复:

lz需要的是一个相对路径而不是绝对路径,所以不要期望加入绝对路径,不是很好的习惯。
你说的“tomcat的安装路径”不该出现在你的程序里。路径里不该有盘符之类的东西。


(首先,和盘符没有关系,我用的是linux,没有盘符)
是这么回事的:
我运行时候的相对路径并不是这个工程的路径,而是tomcat的安装路径。也就是说:如果我写的是“/WEB-INF……
[/Quote]

俄,我知道了,lz在写路径的时候没有用到相对路径的写法
jsp servlet里,"/"代表Web应用的跟目录,"./" 代表当前目录,"../"代表上级目录
所以你的路径命前有“/”才表示web的相对根目录
你要是用
path = "root/rent.xml";

path = "/root/rent.xml";
是不同的

TPOF314 2012-08-20
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]

另外lz还可以用
getServletContext().getAbsolutePath();

getServletContext().getPath();
两个方法查看当前的绝对路径合相对路径。
[/Quote]

哎~~~太杯具了,我一开始没想到直接用Servlet。看看我上面的图片就明白了,我一上来就把读取数据封装成一个单独的类了~~所以这两个方法也不可能直接调用。
gradeyong 2012-08-20
  • 打赏
  • 举报
回复
另外lz还可以用
getServletContext().getAbsolutePath();

getServletContext().getPath();
两个方法查看当前的绝对路径合相对路径。
TPOF314 2012-08-20
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

lz需要的是一个相对路径而不是绝对路径,所以不要期望加入绝对路径,不是很好的习惯。
你说的“tomcat的安装路径”不该出现在你的程序里。路径里不该有盘符之类的东西。
[/Quote]

(首先,和盘符没有关系,我用的是linux,没有盘符)
是这么回事的:
我运行时候的相对路径并不是这个工程的路径,而是tomcat的安装路径。也就是说:如果我写的是“/WEB-INF/rent.xml”的话,系统在运行的时候,认为我写的是“/home/tomcat/WEB-INF/rent.xml”
而不是:“/home/Application/WEB-INF/rent.xml”。
gradeyong 2012-08-20
  • 打赏
  • 举报
回复
lz能不能说说哪里“不行”?
gradeyong 2012-08-20
  • 打赏
  • 举报
回复
lz需要的是一个相对路径而不是绝对路径,所以不要期望加入绝对路径,不是很好的习惯。
你说的“tomcat的安装路径”不该出现在你的程序里。路径里不该有盘符之类的东西。
TPOF314 2012-08-20
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

如果只是交作业,最简单的办法就是在 WEB-INF/classes下建立一个文件夹比如叫做myXMLs

然后你的相对路径就是myXMLs/xml文件名.xml了
[/Quote]

不行啊。我查看了一下,运行时候的默认路径是tomcat的安装路径。
gradeyong 2012-08-20
  • 打赏
  • 举报
回复
如果只是交作业,最简单的办法就是在 WEB-INF/classes下建立一个文件夹比如叫做myXMLs

然后你的相对路径就是myXMLs/xml文件名.xml了

67,549

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧