簡體   English   中英

Jetty:Servlet無法轉發到JSP

[英]Jetty: Servlet can't forward to JSP

我有以下問題:我正在嘗試將請求從servlet轉發到jsp頁面,但我得到了404.當我直接訪問/sites/home.jsp時,它會加載jsp。

    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);
}

這個問題經常出現,所以我創建了一個使用嵌入式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 映射到Main.java中的/date/路徑規范

所以一旦你點擊http://localhost:8080/date/ ,請求就會命中servlet,而servlet又會轉發到/test/tag2.jsp

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM