Deploy a embedded Jetty&Jersey war to jetty9,only

2019-08-29 09:45发布

问题:

I cteate a jetty&jersey embedded project with IDEA and Maven,I put it in Github https://github.com/Mengqi777/JettyProject. Run JettyServerStart.java start the server, in the browser address bar enter localhost:8080/dynamic, show OK, enter localhost:8080/static, show static resource file

Now I package it to a war file,and put it in jetty webapps directory. But only can see static file in brower with enter localhost:8080/static.404 Not Found Error when in brower with enter localhost:8080/dynamic

What happend?

What should I do to package this project into a war file or jar file and run it in jetty successfully?

回答1:

You are doing things in your embedded-jetty usage in JettyServerStart.java that you do not declare/configure in your webapp or war file.

It's a maven project, but not declared as a webapp or war project (in the pom.xml)

Its doesn't have its WEB-INF in the right place (maven directory structure wise), which means your built war file is invalid.

The dependencies are not declared correctly for a webapp or war project (you cannot include jetty-server in a war file)

Your badly located WEB-INF/web.xml does not perform the same configuration steps as your JettyServerStart.java

You don't specify how you created your ${jetty.base} directory to support this war file?

You didn't specify what version of jetty-distribution or jetty-home you downloaded, or are attempting to work with.

The statement "and put it in jetty webapps directory" is unclear, which one? (using jetty-distribution/webapps is invalid and will cause many errors and warnings if you attempt to use it for your own webapps, there's no jetty-home/webapps, and you didn't identify your jetty-base configuration)

The way your project is declared right now, even if manually assembled, skipping maven entirely, you have no servlets, no filters, no listeners, no intializers, only a servlet spec mandated DefaultServlet on url-pattern / giving you static content. That's why accessing http://localhost:8080/static/ works, but nothing else.