StackOverflowError on jetty

I try to demonstrate it on my screen .jsp page. In response to my code, it crashes: Error for /java.lang.StackOverflowError. What to do?

The "initializer " code":

package com.example;

import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.servlet.ServletContextHandler;
import org.eclipse.jetty.servlet.ServletHolder;

public class JettyJSP extends Thread{
public void run() {
    Server server = new Server(1600);
    ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS);
    context.setContextPath("/");
    server.setHandler(context);
    context.addServlet(new ServletHolder(new PageServlet1()),"/*");
    try {
        server.start();
        server.join();
    } catch (Exception e) {
        e.printStackTrace();
    }
}
}

Servlet Code:

package com.example;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class PageServlet1 extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
    {
        String message = "Hello World";
        request.setAttribute("message", message); // This will be available as ${message}
        request.getRequestDispatcher("/webapp/index.jsp").forward(request, response);
    }
}

The index code.jsp:

<!DOCTYPE html>
<html lang="en">
    <head>
        <title>SO question 2370960</title>
    </head>
    <body>
         <p>Message: ${message}</p>
    </body>
</html>
Author: DenShDen, 2016-02-15

1 answers

It's simple. java.lang.StackOverflowError is an infinite recursion. How could this happen? We'll see.

 context.addServlet(new ServletHolder(new PageServlet1()),"/*");

You create a servlet PageServlet1 that will work on all urls starting with /. Inside the servlet, you call forward to "/webapp/index.jsp, but this url itself falls under the mask /*, which leads us to PageServlet1. And so on until the stack collapses.

The easiest thing to do is to remove * from the url mask:

context.addServlet(new ServletHolder(new PageServlet1()),"/");   

Also, I don't see you have initialization of JSP support. You might want to add something like this (don't forget to configure it):

context.addServlet(new ServletHolder("jsp", JettyJspServlet.class), "*.jsp");

More specifically, it is difficult to advise something, since it is not obvious whether you are trying to distribute jsp manually or as part of war. In any case, it doesn't hurt to look at the official example: https://github.com/jetty-project/embedded-jetty-jsp

 5
Author: Nofate, 2016-02-15 19:45:12