2 zhf 2016cs zhf_2016cs 于 2017.08.28 10:37 提问

jetty代码,可以重定向到html页面,却不能转发 3C

主函数:

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管理的)
图片说明

1个回答

zhf_2016cs
zhf_2016cs   2017.08.29 14:36

其实在Servlet里重定向到一个html页面,浏览器会显示404错误页面,昨天之所以重定向成功了,是因为先用ResourceHandler访问了这个html页面。实际上,jetty中访问静态页面似乎只能通过ResourceHandler。

Csdn user default icon
上传中...
上传图片
插入图片