以前使用的安装版的tomcat,jsp文件里使用相对路径时一切正常,后来用了解压版的tomcat,把以前的jsp代码拿过来用,只要是有路径操作的地方全部都会报错,把相对路径改为绝对路径之后就能正常运行了。请问这是怎么一回事?是不是解压版的tomcat还需要配置什么东西才可以读取相对路径,谢谢

解决方案 »

  1.   

    不是啊,我一直用绿色的tomcat,首先确定你项目的路径是否正确,重新在绿色tomcat部署一次,看看有没有错误
      

  2.   

    肯定是写错了  不要加domain的名称 和/(前面)
      

  3.   

    没有啊,我的相对路径名是正确的啊,在以前安装版的tomcat里可以正常运行的,项目的路径也没有问题,就是还一直报错。提示这个错误:
    org.apache.jasper.JasperException: javax.servlet.ServletException: java.sql.SQLException: [Microsoft][ODBC Microsoft Access Driver] '(未知的)'不是一个有效的路径。 确定路径名称拼写是否正确,以及是否连接到文件存放的服务器。
    org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:541)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:417)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:803)jsp里面路径的一句是这么写的:
    String url="jdbc:odbc:Driver={MicroSoft Access Driver(*.mdb)};DBQ=webapps/test/db1.mdb";db1.mdb这个文件是存在的,就是提示找不到,换成绝对路径就可以正常运行,这是为什么?
      

  4.   

    我又用了一个输出流语句进行测试,发现了问题所在
    FileWriter fw=new FileWriter("sp.txt");
    结果最后生成sp.txt的地方竟然是tomcat的bin文件夹里,根目录的位置变了,这是为什么呢?可不可以改回原来根目录的地址?
      

  5.   

    参考:深入体验java web 开发内幕-核心基础,第212页
    简单说的说就是相对路径是相对于谁的问题,解压版是相对于start.bat.
    所以,可以换用:
    (1)getServletContext().getResourceAsStream("/WEB-INF/aa.txt");
    ServletContext可以从整个Web应用中找到文件,/代表web应用根目录
    (2)getClass().getResourceAsStream("/aa.txt");
    这是从classpath中查找文件,所以aa.txt的位置应该是在:/WEB-INF/classes/aa.txt
    (3)还可以用java.util.ResourceBundle类的getBundle()方法
    ResourceBundle rb = ResourceBundle.getBundle("com.sdkd.config");
    位置是:/WEB-INF/classes/com/sdkd/config.properties