Jetty:Servlet无法转发到JSP

时间:2013-12-03 13:15:36

标签: java jsp servlets jetty

我有以下问题:我正在尝试将请求从servlet转发到jsp页面,但是我得到了404.当我直接访问/sites/home.jsp时,它会加载jsp。< / p>

    WebAppContext sites = new WebAppContext("src/com/example/blub/server/sites", "/sites");
    ServletContextHandler weblet = new ServletContextHandler(ServletContextHandler.SESSIONS);
    weblet.setContextPath("/");
    weblet.addServlet(new ServletHolder(new Weblet()), "/home");
    HandlerList handlers = new HandlerList();
    handlers.setHandlers(new Handler[] {sites, weblet});
    server.setHandler(handlers);

public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    req.getRequestDispatcher("/sites/home.jsp").forward(req, resp);
}

1 个答案:

答案 0 :(得分:4)

这个问题经常出现,所以我创建了一个使用嵌入式Jetty并启用JSP的示例项目。

https://github.com/jetty-project/embedded-jetty-jsp/

将此项目加载到您喜欢的IDE中。

运行org.eclipse.jetty.demo.Main课程,然后使用浏览器并打开http://localhost:8080/

快速浏览

src/main/java/org/eclipse/jetty/demo/Main.java包含创建/配置/启动嵌入式服务器的部分。

特别注意:

  • JspServlet必须命名为“jsp” - 请参阅jspServletHolder()
  • 需要为JSP初始化程序设置org.eclipse.jetty.containerInitializers
  • 需要添加ServletContainerInitializersStarter bean
  • 需要添加InstanceManager引用
  • 需要创建适当的javax.servlet.context.tempdir
  • org.apache.jasper.compiler.disablejsr199设置为false以使用标准JavaC编译器
  • Context的类加载器不能是系统类加载器。 - 请参阅getUrlClassLoader()
  • DefaultServlet必须命名为“default” - 请参阅defaultServletHolder()

src/main/java/com/acme/DateServlet.java是如何从Servlet转发到JSP的示例。

DateServlet是mapped to path spec of /date/ in Main.java

所以一旦你点击http://localhost:8080/date/,请求就会命中servlet,而servlet又会转发到/test/tag2.jsp