一尘不染

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

jsp

我处理了在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)

我在Windows系统中修改了没有该c:\ tmp目录的Java代码,然后重新启动了Tomcat服务器,该工具运行良好。

当我将Windows的修改后的Java代码替换为linux系统时,仍然出现相同的错误。

注意:我正在使用url从Windows访问linux服务器,http://192.168.0.85:8080/CNA/uploadcsv.jsp其中85是linux的系统号。

是否有类似tomcat的东西也必须针对Linux版本重新启动?如果是这样,该怎么做?

更新

这是我在代码中使用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");
    }

}

我如何找到临时路径的替代品?目标路径工作正常。我正是从这个例子中复制了代码


阅读 255

收藏
2020-06-10

共1个答案

一尘不染

不要在代码中硬编码磁盘文件系统路径。那只是可移植性和可维护性的麻烦。

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

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

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


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

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

如果确实需要在类路径之外具有固定路径,则可以在属性文件中对其进行定义,以便至少可以对应用程序外部的路径进行 任何 控制(因此,无需每次都更改代码)。

String path = properties.getProperty("my.file.path");
2020-06-10