【问题标题】:Jetty: Servlet can't forward to JSPJetty:Servlet 无法转发到 JSP
【发布时间】:2013-12-19 13:46:31
【问题描述】:

我有以下问题:我正在尝试将请求从 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);
}

【问题讨论】:

  • 所以该页面的完整网址例如是localhost:8080/sites/home.jsp ?
  • 字符限制
  • 不应该是/home.jsp吗?您的根目录是站点 siddirectory,因此您的路径将查找站点/站点/home.jsp。
  • 查看 Jetty 的访问日志,我在这里是 @JBNizet,它会在日志中清晰显示。
  • 我解决了,我必须将 Servlet 添加到 webappcontext 而不是为其创建另一个处理程序

标签: java jsp servlets jetty


【解决方案1】:

这个问题经常出现,所以我创建了一个使用 Embedded 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 编译器
  • 上下文的类加载器不能是系统类加载器。 - 见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,然后转发到/test/tag2.jsp

【讨论】:

  • 感谢您提供此信息。这是无价的。
  • 您能否提供与 web.xml 配置相同的示例。我正在尝试将我们的旧码头 6.1 移动到码头 9.3 或更高版本,但出现 jsp 编译错误。您的示例未配置为使用 WebContext。非常需要帮助。
  • @vibhas 您的需求与此问题/答案不同。您可能有一个war 文件并想使用WebAppContext。请提出一个新问题。
  • 感谢 Joakim 将发布一个新问题,比较日志,因为我无法在上面的 jetty 9.4 或 9 中呈现 jsp 页面。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-25
  • 1970-01-01
相关资源
最近更新 更多