Как открыть файл без расширения по URL, развернутому на JBoss
Требовать прочитать плоский файл, который не имеет никакого расширения через URL, не может получить его, так как браузер (404) и java(FileNotFoundException) не принимают файл в качестве ресурса для открытия.
import java.net.*;
import java.io.*;
public class URLTest {
public static void main(String[] args) {
/*Block 1: Reading a file "test.txt" (WITH extension) that works */
try{ System.out.println("Block 1");
URL url1 = new URL("http://localhost:8080/CtxPath/test.txt"); //file test.txt available at WebContent
BufferedReader in = new BufferedReader(new InputStreamReader(url1.openStream()));
String inputLine;
while ((inputLine = in.readLine()) != null)
System.out.println(inputLine);
in.close();
} catch(Exception e) { e.printStackTrace(); }
/* Block 2 : Reading the other one "test" (WITHOUT extension) that throws Exception */
try{ System.out.println("Block 2");
URL url2 = new URL("http://localhost:8080/CtxPath/test"); ////file test also available at WebContent
BufferedReader in = new BufferedReader(new InputStreamReader(url2.openStream()));
String inputLine;
while ((inputLine = in.readLine()) != null)
System.out.println(inputLine);
in.close();
} catch(Exception e) { e.printStackTrace(); }
}
}
Выход
Блок 1 Содержимое файла из test.txt успешно прочитано. Блок 2 java.io.FileNotFoundException: http://localhost:8080/CtxPath/test на sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1624) на java.net.URL.openStream(URL.java:1037) на URLTest.main (URLTest.java:28)
Jboss 5.1 Java 1.7
Получение исключения по открытому URL для файла (тест) без расширения. Другой файл с расширением.txt (test.txt), помещенный в то же место с аналогичным содержимым, открывается без каких-либо проблем.
Существует ли какая-либо конкретная программа или конфигурация сервера, позволяющая обслуживать файл без расширения?
3 ответа
В реализации контейнера сервлетов вещи без суффикса "test" не обрабатываются как файл, а рассматриваются как отображение сервлета.
Вы можете скачать исходный код tomcat, логика которого аналогична в jboss, и посмотреть.
И я не думаю, что вы должны создавать файл без суффикса, если вам действительно нужно, затем поместите его в WEB-INF/xxx/, а затем используйте сервлет, чтобы помочь прочитать его.
Java просто вызывает URL. Не важно, есть ли у него .
в пути. Сервер, с которым вы звоните, с другой стороны, / может / имеет логику, которая определяет, как он пытается выполнить запрос. FileNotFoundException
указывает на 404
http код состояния был возвращен.
Возможно, у файла есть расширение, которое вы не сможете увидеть, потому что настройки операционной системы скрывают расширения, или некоторые правила на вашем сервере могут привести к его возвращению 404. Java не дает файлу не найденное исключение из-за расширения.
Пожалуйста, дайте нам знать проблему, когда вы решите ее.