2017-01-02 7 views
0

Я изменил the embedded-jetty project, чтобы создать a stand-alone jsp-viewer, который должен быть в состоянии обслуживать любые каталоги, содержащие jsps, а не только те, которые встроены в файл jar. Результирующая банка отлично работает на macOS и Linux.Невозможно обслуживать файлы из папки Windows с помощью Jetty

То, что я обнаружил, что он не работает на Windows, - по какой-то причине, что ускользает от меня, хотя журналы показывают, что разрешило каталог только штрафом. Я позволил "dirAllowed" свойство списка содержимого каталога, но я постоянно получаю эту ошибку не имеет значения, каталог или файл:

HTTP ERROR 404 

Problem accessing /. Reason: 

    Not Found 

Я вырвали много ненужного кода, но я считаю, что главное различие между моим проектом на демонстрационный проект от Jetty это разница, которая показывает, как мой проект ссылается на webroot собственности как каталог, чтобы служить, а не жестко закодированным путем в файле фляги в оригинальном

>   String userDir = System.getProperty("webroot"); 
>   String webroot = (userDir != null && userDir.length() > 0)? userDir : "."; 
>   webroot = Paths.get(webroot).toAbsolutePath().normalize().toString(); 

и это

<   URL indexUri = this.getClass().getResource(WEBROOT_INDEX); 
>   URL indexUri = new URL("file://" + webroot); 

Есть ли что-то в синтаксисе file://, где я должен обрабатывать его по-разному в Windows?

Выход из консоли при запуске на MacOS

./jsp-viewer/view-jsp /tmp 
2017-01-02 15:53:50.456:INFO::main: Logging initialized @124ms to org.eclipse.jetty.util.log.StdErrLog 
jan 02, 2017 3:53:50 PM com.github.fatso83.jspviewer.Main defaultServletHolder 
INFO: Base URI: file:/tmp 
2017-01-02 15:53:50.574:INFO:oejs.Server:main: jetty-9.4.z-SNAPSHOT 
2017-01-02 15:53:50.737:INFO:oejs.session:main: DefaultSessionIdManager workerName=node0 
2017-01-02 15:53:50.737:INFO:oejs.session:main: No SessionScavenger set, using defaults 
2017-01-02 15:53:50.740:INFO:oejs.session:main: Scavenging every 660000ms 
2017-01-02 15:53:50.756:INFO:oejsh.ContextHandler:main: Started [email protected]{/,file:///tmp/,AVAILABLE} 
2017-01-02 15:53:50.779:INFO:oejs.AbstractConnector:main: Started [email protected]{HTTP/1.1,[http/1.1]}{0.0.0.0:8080} 
2017-01-02 15:53:50.779:INFO:oejs.Server:main: Started @451ms 
jan 02, 2017 3:53:50 PM com.github.fatso83.jspviewer.Main getServerUri 
INFO: Server URI: http://localhost:8080/ 

Выход на Windows (Mingw)

$ ./jsp-viewer/view-jsp /tmp/ 
2017-01-02 16:12:15.541:INFO::main: Logging initialized @266ms to org.eclipse.jetty.util.log.StdErrLog 
jan 02, 2017 4:12:18 PM com.github.fatso83.jspviewer.Main defaultServletHolder 
INFO: Base URI: file://C:/Users/SA_CAR~1.KOP/AppData/Local/Temp/2 
2017-01-02 16:12:18.106:INFO:oejs.Server:main: jetty-9.4.z-SNAPSHOT 
2017-01-02 16:12:18.449:INFO:oejs.session:main: DefaultSessionIdManager workerName=node0 
2017-01-02 16:12:18.450:INFO:oejs.session:main: No SessionScavenger set, using defaults 
2017-01-02 16:12:18.454:INFO:oejs.session:main: Scavenging every 600000ms 
2017-01-02 16:12:18.475:INFO:oejsh.ContextHandler:main: Started [email protected]{/,file://C/Users/SA_CAR~1.KOP/AppData/Local/Temp/2,AVAILABLE} 
2017-01-02 16:12:18.515:INFO:oejs.AbstractConnector:main: Started [email protected]{HTTP/1.1,[http/1.1]}{0.0.0.0:8080} 
2017-01-02 16:12:18.530:INFO:oejs.Server:main: Started @3261ms 
jan 02, 2017 4:12:18 PM com.github.fatso83.jspviewer.Main getServerUri 
INFO: Server URI: http://localhost:8080/ 

ответ

0

Ошибка была вручную создания Юрис и Urls. Делегируя эту работу на Java, я получил URL-адреса, которые работали во всех операционных системах. Как и предполагалось, ошибка присутствовала в одной из линий, упомянутых выше:

Я обменялся

URL indexUri = new URL("file://" + webroot); 

для

Paths.get(webroot).toAbsolutePath().toUri().toURL() 

и все начали работать на Windows, а также. Ян Бартель на [jetty-users] mailing list придумал ответ.

Смежные вопросы