Skip to content
Advertisement

Jetty 11 Doesn’t Detect Jakarta Servlets

This is a follow up to this question. I don’t think it’s a duplicate because the accepted answer indicates that Jetty 11 doesn’t work with javax servlets, but I’m asking why Jetty 11 doesn’t work with jakarta servlets.

I have an example project here that uses Jetty 9 to deploy a local server, including a javax servlet that uses the @WebServlet annotation. This all works fine.

Now I’m trying to update this to use Jetty 11 and the Jakarta servlets API.

pom.xml

JavaScript

ServerMain.java

JavaScript

HelloWorldServlet.java

JavaScript

index.html

JavaScript

I can run the server using mvn package exec:java and it starts up just fine.

My index.html file loads properly:

index.html

But when I navigate to my servlet’s URL, I get a 404:

404

I don’t see any errors (or any output at all) in my command line.

I should also mention that my Jakarta servlet works fine with the full version of Jetty 11 (using Jetty home and Jetty base directories, as described here). It’s just this “standalone” Jetty server launcher that seems to be having trouble, so I’m suspicious of my ServerMain.java file.

What do I need to change to get Jetty 11 to detect my Jakarta servlet?

Advertisement

Answer

Remove the configuration effort, it’s used wrong, and is the source of your issues.

These lines, delete them.

JavaScript

Starting with Jetty 10, you don’t manage Configuration options this way. The existence of the jar with the feature in your classpath is enough. (in your case it’s jetty-annotations-<ver>.jar)

Second, you don’t ever use setConfigurations() with that small of a Configuration list (you are leaving out many required Configuration entries).

Instead, you should have used the addConfiguration(Configuration...) method, for just the new AnnotationConfiguration(), but only if that specific Configuration wasn’t auto-discoverable, which jetty-annotation is.

Tip, use server.setDumpAfterStart(true) before your server.start() call, and see what the server state is, including what your WebAppContext looks like, and its Configuration entries. This is a great way to see what your changes are doing to your server and your contexts.

Here’s an example project with Jetty 11, using @WebServlet, and WebAppContext.

https://github.com/jetty-project/embedded-servlet-server/blob/jetty-11.0.x/src/main/java/org/eclipse/jetty/demos/EmbedMe.java

User contributions licensed under: CC BY-SA
2 People found this is helpful
Advertisement