我有以下问题:我正在尝试将请求从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); }
这个问题经常出现,因此我创建了一个在启用JSP的情况下使用Embedded Jetty的示例项目。
https://github.com/jetty-project/embedded-jetty- jsp/
将此项目加载到您喜欢的IDE中。
运行org.eclipse.jetty.demo.Main课程,然后使用浏览器并打开http://localhost:8080/
org.eclipse.jetty.demo.Main
http://localhost:8080/
快速导览
src/main/java/org/eclipse/jetty/demo/Main.java 包含创建/配置/并启动嵌入式服务器的部分。
src/main/java/org/eclipse/jetty/demo/Main.java
请特别注意:
jspServletHolder()
org.eclipse.jetty.containerInitializers
ServletContainerInitializersStarter
InstanceManager
javax.servlet.context.tempdir
org.apache.jasper.compiler.disablejsr199
false
getUrlClassLoader()
defaultServletHolder()
src/main/java/com/acme/DateServlet.java 是如何从Servlet转发到JSP的示例。
src/main/java/com/acme/DateServlet.java
DateServlet 映射到/date/Main.java中的路径规范
/date/
因此,一旦您点击http://localhost:8080/date/了请求,该请求就会到达servlet,而该servlet会依次转发至/test/tag2.jsp
http://localhost:8080/date/
/test/tag2.jsp