主函数:
package com.ls;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.servlet.ServletContextHandler;
import org.eclipse.jetty.servlet.ServletHolder;
public class Main {
public static void main(String[] args) throws Exception {
Server server = new Server(8080);
ServletContextHandler servletContext = new ServletContextHandler(ServletContextHandler.SESSIONS);
servletContext.setContextPath("/loadJetty");
servletContext.setResourceBase(".");
server.setHandler(servletContext);
servletContext.addServlet(new ServletHolder(new ProceedServlet()), "/");
server.start();
server.join();
}
}
ProceedServlet的代码:
package com.ls;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class ProceedServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public ProceedServlet() {
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.getServletContext().getRequestDispatcher("/load.html").forward(request, response);
}
这样的话运行主函数,在浏览器输入http://localhost:8080/loadJetty,控制台报错:java.lang.StackOverflowError,单步调试发现doGet方法在不断进行。但是,如果ProceedServlet的doGet方法写:
response.sendRedirect("/load.html");
就可以重定向到html页面。请问这是为什么呢?
附上我的项目结构图:(用Maven管理的)