我研究了在Windows系统中运行在Tomcat5.5服务器上的JSP代码。
我不得不将所有JSP代码复制到linux系统,当我做同样的操作时,我收到了一个错误,说明如下。
javax.servlet.ServletException: c:\tmp is not a directory
Readcsv.init(Readcsv.java:36)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:174)
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:875)
org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)
java.lang.Thread.run(Thread.java:636)
我在没有c:\ tmp目录的Windows系统中修改了一个java代码,并重新启动了tomcat服务器并且该工具工作正常。
当我将修改后的java java代码替换为linux系统时,我仍然得到同样的错误。
注意:我使用url http://192.168.0.85:8080/CNA/uploadcsv.jsp
从Windows访问linux服务器,其中85是linux的系统编号。
是否有类似tomcat的东西也必须重新启动?如果是这样怎么做?
更新
这是我在代码中使用c:\ tmp位置的地方。
public class Readcsv extends HttpServlet {
private static final String TMP_DIR_PATH = "c:\tmp";
private File tmpDir;
private static final String DESTINATION_DIR_PATH ="/files";
private File destinationDir;
public void init(ServletConfig config) throws ServletException {
super.init(config);
tmpDir = new File(TMP_DIR_PATH);
if(!tmpDir.isDirectory()) {
throw new ServletException(TMP_DIR_PATH + " is not a directory");
}
String realPath = getServletContext().getRealPath(DESTINATION_DIR_PATH);
destinationDir = new File(realPath);
if(!destinationDir.isDirectory()) {
throw new ServletException(DESTINATION_DIR_PATH+" is not a directory");
}
}
如何找到临时路径的替代品?目标路径工作正常。 我完全复制了此example
中的代码答案 0 :(得分:2)
您的应用程序似乎尝试读取Linux系统上不存在的“C:\ tmp”下的csv文件。
答案 1 :(得分:2)
不要在代码中硬编码磁盘文件系统路径。这只是可移植性和可维护性问题。
如果是临时文件,请使用File#createTempFile()
。
File tempfile = File.createTempFile("name", ".ext");
无论环境如何,它都会自动在正确的位置创建临时文件。但是,您也可以通过System.getProperty("java.io.tmpdir");
获取tmp目录根位置。
如果应用程序要读取资源,只需将它们放在运行时类路径中,或将它们的路径添加到运行时类路径中。然后,您可以通过getResource()
或getResourceAsStream()
上的Class
和ClassLoader
方法从类路径中获取它们。
InputStream input = getClass().getResourceAsStream("file.properties");
如果你真的需要在类路径之外有一个固定的路径,那么在属性文件中定义它,这样你至少可以对应用程序外部的路径进行任何控制(所以,没有每次都需要更改代码。
String path = properties.getProperty("my.file.path");
答案 2 :(得分:1)
您说您修改了代码并将其重新部署到Tomcat。
您可能只需要重新启动Tomcat即可获取新代码。在此之前,它将运行旧代码,您将得到相同的错误。
如何重新启动Tomcat取决于您运行的Linux发行版以及Tomcat的安装方式。