将JSP代码从Windows迁移到Linux计算机时出错

时间:2010-11-02 16:40:10

标签: java jsp tomcat

我研究了在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

中的代码

3 个答案:

答案 0 :(得分:2)

您的应用程序似乎尝试读取Linux系统上不存在的“C:\ tmp”下的csv文件。

答案 1 :(得分:2)

不要在代码中硬编码磁盘文件系统路径。这只是可移植性和可维护性问题。

如果是临时文件,请使用File#createTempFile()

File tempfile = File.createTempFile("name", ".ext");

无论环境如何,它都会自动在正确的位置创建临时文件。但是,您也可以通过System.getProperty("java.io.tmpdir");获取tmp目录根位置。


如果应用程序要读取资源,只需将它们放在运行时类路径中,或将它们的路径添加到运行时类路径中。然后,您可以通过getResource()getResourceAsStream()上的ClassClassLoader方法从类路径中获取它们。

InputStream input = getClass().getResourceAsStream("file.properties");

如果你真的需要在类路径之外有一个固定的路径,那么在属性文件中定义它,这样你至少可以对应用程序外部的路径进行任何控制(所以,没有每次都需要更改代码。

String path = properties.getProperty("my.file.path");

答案 2 :(得分:1)

您说您修改了代码并将其重新部署到Tomcat。

您可能只需要重新启动Tomcat即可获取新代码。在此之前,它将运行旧代码,您将得到相同的错误。

如何重新启动Tomcat取决于您运行的Linux发行版以及Tomcat的安装方式。