Ошибка при переносе кода JSP с Windows на компьютер Linux - PullRequest
0 голосов
/ 02 ноября 2010

Я работал над кодом JSP, который выполняется на сервере Tomcat5.5 в системе Windows.

Мне пришлось скопировать весь код 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)

Я изменил код Java в системе Windows без этого каталога c: \ tmp и перезапустил сервер Tomcat, и инструмент работал нормально.

Когда я заменил модифицированный Java-код Windows на систему Linux, я все еще получаю ту же ошибку.

Примечание. Я обращаюсь к серверу Linux из Windows по URL-адресу http://192.168.0.85:8080/CNA/uploadcsv.jsp, где 85 - системный номер Linux.

Есть ли что-то вроде tomcat, которое нужно перезапустить и для версии linux? Если так, как сделать то же самое?

UPDATE

Здесь я использовал местоположение 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");
    }

}

Как мне найти замену временному пути? Путь назначения работает нормально. Я точно скопировал код из этого примера

Ответы [ 3 ]

2 голосов
/ 02 ноября 2010

Не кодируйте пути файловой системы диска в своем коде.Это только проблема переносимости и удобства обслуживания.

В случае временных файлов лучше использовать File#createTempFile().

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

Он автоматически создаст временный файл вправильное место, независимо от окружающей среды.Однако вы также можете получить корневой каталог tmp dir по System.getProperty("java.io.tmpdir");.


В случае ресурсов, которые должны быть прочитаны вашим приложением, просто поместите их в путь к классам времени выполнения или добавьте их путь кпуть к классу во время выполнения.Тогда вы можете просто получить их из classpath с помощью методов getResource() и getResourceAsStream() в Class или ClassLoader.

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

Если вам действительно нужен фиксированный путь вне classpath, тогдалучше определите его в файле свойств, чтобы у вас был хотя бы любой контроль над путем извне приложения (то есть без необходимости каждый раз менять код).

String path = properties.getProperty("my.file.path");
2 голосов
/ 02 ноября 2010

кажется, что ваше приложение пытается прочитать файл csv в папке "C: \ tmp", которого нет в вашей системе Linux.

1 голос
/ 02 ноября 2010

Вы сказали, что изменили код и повторно развернули его в Tomcat.

Возможно, вам просто нужно перезапустить Tomcat, чтобы он взял новый код. До тех пор он будет работать старый код, и вы получите ту же ошибку.

Способ перезапуска Tomcat зависит от того, какой дистрибутив Linux вы используете, и от того, как вы установили Tomcat.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...