各位高手,我现在在做一个作业,是一个用JSP做的房产中介系统。
因为是第一个作业,我们暂时没有用到数据库。我们目前的要求是:自己制作一个xml文件,里面存放一堆房产信息数据(相当于一个小型数据库)。然后实现提供用户搜索查询的功能。
现在,我已经把所有东西都做好了,唯一头疼的地方就是路径问题。加载xml的时候,一直都是文件路径错误,下图是我目前的部分代码:
没办法,为了让程序顺利运行,我目前只能用这个xml文件的绝对路径,但是提交给老师的时候,绝对路径应该是不行的。我想把xml放在这个Application的根目录下,然后用它的相对路径进行载入,但是一直不行。
后来我查了一下,工作时候的路径是tomcat的安装路径。
各位有没有什么办法可以把路径调过来?

解决方案 »

  1.   

    如果只是交作业,最简单的办法就是在 WEB-INF/classes下建立一个文件夹比如叫做myXMLs然后你的相对路径就是myXMLs/xml文件名.xml了
      

  2.   


    不行啊。我查看了一下,运行时候的默认路径是tomcat的安装路径。
      

  3.   

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

  4.   


    (首先,和盘符没有关系,我用的是linux,没有盘符)
    是这么回事的:
    我运行时候的相对路径并不是这个工程的路径,而是tomcat的安装路径。也就是说:如果我写的是“/WEB-INF/rent.xml”的话,系统在运行的时候,认为我写的是“/home/tomcat/WEB-INF/rent.xml”
    而不是:“/home/Application/WEB-INF/rent.xml”。
      

  5.   

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

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

  6.   


    哎~~~太杯具了,我一开始没想到直接用Servlet。看看我上面的图片就明白了,我一上来就把读取数据封装成一个单独的类了~~所以这两个方法也不可能直接调用。
      

  7.   


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

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

  8.   


    嗯,这个我知道的。这个其实跟我想知道的没任何关系....我想知道的是,为什么我写相对路径的时候,系统把我的路径指到了tomcat的安装目录下面,而不是我当前的application~~
    先表示感谢~~
      

  9.   


    当然啦,你的web应用是必须在容器里才能运行的,所以当然你所编写的所有代码最终要都被部署在容器里才能运行。也就是你的很多编译好的文件等等都被拷贝到了容器理的应用文件夹里,才会运行。即便NetBean有即时运行功能,其实也不过是内嵌了tomcat而已,其实还是在容器理运行的。