Jetty:Servlet无法转发到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