问题描述
JSP页面中调用后台的java类,java类中想读取某个路径的文件,但是系统提示找不到指定的路径我大概知道估计是Web页面通过tomcat服务器后路径问题但不知道怎么解决而且调用的这个java类是个普通类不是servlet,不用request希望高手帮小弟解决一下JSP:<%@pagelanguage="java"contentType="text/html;charset=UTF-8"pageEncoding="UTF-8"%><!DOCTYPEhtmlPUBLIC"-//W3C//DTDHTML4.01Transitional//EN""http://www.w3.org/TR/html4/loose.dtd"><html><head><metahttp-equiv="Content-Type"content="text/html;charset=UTF-8"><title>ATAList</title><linkrel="stylesheet"href="#"type="text/css"></head><jsp:useBeanid="domparser"scope="page"class="tcp.testATA"/><jsp:setPropertyname="domparser"property="*"/><%domparser.serach_ATAID();%><body>testtesttest</body></html>java类放在src.tcp下:packagetcp;importjava.io.BufferedReader;importjava.io.File;importjava.io.FileReader;publicclasstestATAextendsThread{publicStringstrXML="";publicStringgetString(){returnstrXML;}publictestATA(){}publicvoidserach_ATAID()throwsException{Stringv_strXML="";try{Filefile=newFile("./WebContent/images/book.xml");Stringaa=System.getProperty("java.class.path");System.out.println("33333"+file.exists());System.out.println("44444"+file.getPath());System.out.println("55555"+aa);FileReaderfileReader=newFileReader(file);BufferedReaderreader=newBufferedReader(fileReader);char[]buf=newchar[1024*100];reader.read(buf);v_strXML=newString(buf);reader.close();}catch(Exceptione){e.printStackTrace();System.out.println("捕获异常呢4?"+e);}}}要读取的xml文件<?xmlversion="1.0"encoding="utf-8"?><FaultGuide><member><FaultID>02</FaultID><FaultCode>300-600-900</FaultCode><content>1111</content></member><member><FaultID>01</FaultID><FaultCode>300-600-900</FaultCode><content>2222</content></member></FaultGuide>
解决方案
解决方案二:
1、首先jsp是在Server端执行,由jsp引擎编译成servlet,然后执行,所以很多人说jsp就是一个servlet2、jsp中调试不如servlet中方便,建议你先在servlet调试通过,再放进jsp调试
解决方案三:
路径对不对额
解决方案四:
把路径写全,看看能不能访问,如果能访问再想其他办法
解决方案五:
引用3楼shixitong的回复:
把路径写全,看看能不能访问,如果能访问再想其他办法
写绝对路径是没有问题的可以找的到但是相对路径就不可以了怀疑是通过web后走的tomcat的路径所以一直提示找不到文件
解决方案六:
引用2楼rui888的回复:
路径对不对额
写绝对路径是没有问题的可以找的到但是相对路径就不可以了怀疑是通过web后走的tomcat的路径所以一直提示找不到文件
解决方案七:
引用5楼purifypipi的回复:
Quote: 引用2楼rui888的回复:
路径对不对额写绝对路径是没有问题的可以找的到但是相对路径就不可以了怀疑是通过web后走的tomcat的路径所以一直提示找不到文件
能不能把这个路径写在属性文件里?
解决方案八:
现在这个不是servlet,要是servlet还是拼个全路径出来
解决方案九:
引用6楼shixitong的回复:
Quote: 引用5楼purifypipi的回复:
Quote: 引用2楼rui888的回复:
路径对不对额写绝对路径是没有问题的可以找的到但是相对路径就不可以了怀疑是通过web后走的tomcat的路径所以一直提示找不到文件
能不能把这个路径写在属性文件里?
写在属性文件里是什么意思呢?property?
解决方案十:
其实也可以给这个方法加个参数,把路径传进去最终组装成http://ip:duankou/images/book.xmlhttp://ip:duankou/这一部分可以通过request的相关API获得后台类中直接写成:传进来的参数+images/book.xml但是我觉得最好还是写在属性文件里
解决方案十一:
你看一下TOMCAT下面是否有这个文件吧,有时候是Tomcat下面没有这个文件
解决方案十二:
引用8楼purifypipi的回复:
Quote: 引用6楼shixitong的回复:
Quote: 引用5楼purifypipi的回复:
Quote: 引用2楼rui888的回复:
路径对不对额写绝对路径是没有问题的可以找的到但是相对路径就不可以了怀疑是通过web后走的tomcat的路径所以一直提示找不到文件
能不能把这个路径写在属性文件里?
写在属性文件里是什么意思呢?property?
就是把那个方法中用的路径写在配置文件中,然后再类的方法中再去读那个配置文件取路径,property、xml这些文件都可以
解决方案十三:
引用2楼rui888的回复:
路径对不对额
顶
解决方案十四:
绝对路径,如果是绝对路径对的话,那就可以考虑这个在服务端执行的时候自动拼接的地址是否是你想要的,在来做其他的吧
解决方案十五:
哪位大神能帮我调试一下我的程序啊理论上的东西我试了好多次都没试通啊跪谢啦跪谢啊能力有限帮我调试一下我的代码吧十分感激引用13楼Pa_Java的回复:
绝对路径,如果是绝对路径对的话,那就可以考虑这个在服务端执行的时候自动拼接的地址是否是你想要的,在来做其他的吧
解决方案:
引用7楼shixitong的回复:
现在这个不是servlet,要是servlet还是拼个全路径出来
哪位大神能帮我调试一下我的程序啊理论上的东西我试了好多次都没试通啊跪谢啦跪谢啊能力有限帮我调试一下我的代码吧十分感激
解决方案:
在程序里调用文件,分为几种情况:1.如果这个文件是程序的配置文件,肯定跟着程序,程序部署到哪就跟到哪,这样的文件,如果是部署时不需修改的,可以写在src里的某个包下,经过编译,会进到classes里,然后引用文件的类用XXX.class.getResourceAsStream("/com/xxx/xxx/xxx.ext")这种方式来读取这个文件。如果是部署时需修改的,一般写在WEB-INF下的某个自建目录下,比如WEB-INF/config/xxx,然后程序中写一个取WebRoot的工具类,该类从当前class的物理路径向上查找,直到找到“WEB-INF”后,再向上一级,就是工程的根,然后以后找工程中的任何东西都可以通过这个工具类找到根再加上相对路径。这个根只计算一次就长驻内存,以后直接调用就可以。StringclassPathRoot=WebRootUtil.class.getResource("/").getFile();FileclassPath=newFile(classPathRoot);while(true){classPath=classPath.getParentFile();if(classPath.getName().equals("WEB-INF")){classPath=classPath.getParentFile();break;}}StringwebRoot=classPath.getAbsolutePath();2.如果这个文件是用户生成的文件,比如用户上传,或者是在程序运行中生成的某些文件,一般要通过配置指定一个位置,然后程序通过读取配置来找到这个路径,因为在部署时这个路径通常是要特殊管理的,比如要给特殊的权限,以让程序可以读写这个目录,另外如果是集群多台服务器统一读一个路径,很可能还是一个网络上的位置,而不是本机的某个路径。这时需要通过nfs或rsync等手段把某个目录映射到网络上的某个硬盘位置,以让程序像读本地文件一样读网络上的文件。总而言之,在程序读取文件时,尽量要考虑将来程序部署到不同的环境时的情况,而不是当时能读到就行。
解决方案:
如果你实在非要想知道你怎么能读到那个文件,你就在程序里往./xxx目录下写个文件,然后看看这个xxx目录生成在哪了就行了,一般应该是生成在了tomcat/bin下面了,因为整个程序的启动的地方是在tomcat/bin,你整个程序运行时的当前目录就是tomcat/bin下面,如果你是用eclipse启动了,看看是不是生成在了eclipse的安装路径下了。或者你newFile(".").getAbsolutePath();把这个输出到日志或者控制台,就知道当前路径在哪了。
解决方案:
推荐你用个方法,在你调用的类里面写一个相对路径下的空文件,运行下,看文件生成在什么地方(在tomcat中的位置),然后根据这个位置对你类里面要读取文件的位置进行修改。