內嵌Jetty服務器,啓動後訪問jsp頁面,顯示404 NOT FOUND。java
源代碼以下:web
package soc.main; import org.eclipse.jetty.server.Server; import org.eclipse.jetty.servlet.ServletHolder; import org.eclipse.jetty.servlet.ServletContextHandler; import org.glassfish.jersey.servlet.ServletContainer; import org.springframework.web.context.ContextLoaderListener; import org.springframework.web.context.support.AnnotationConfigWebApplicationContext; import soc.config.ApplicationApi; import soc.config.SpringJavaConfiguration; public class SocMain { public static void main(String[] args) throws Exception { ApplicationApi applicationConfig = new ApplicationApi(); ServletContainer servletContainer = new ServletContainer(applicationConfig); ServletHolder jerseyServlet = new ServletHolder(servletContainer); ServletContextHandler context = new ServletContextHandler();訪問jsp會404 context.setClassLoader(Thread.currentThread().getContextClassLoader()); context.addServlet(jerseyServlet, "/rest/*"); context.setContextPath("/"); context.setResourceBase("src/main/webapp"); context.addEventListener(new ContextLoaderListener()); // context.addEventListener(new RequestContextListener()); context.setInitParameter("contextClass", AnnotationConfigWebApplicationContext.class.getName()); context.setInitParameter("contextConfigLocation", SpringJavaConfiguration.class.getName()); int port = 8080; if (args.length == 1) { port = Integer.parseInt(args[0]); } Server server = new Server(port); server.setHandler(context); try { server.start(); server.join(); } catch (Exception e) { e.printStackTrace(); } } }
出現這一問題的緣由是:context要使用Jetty-webapp 包下的WebAppContext,使用jetty-servlet 包下的ServletContextHandler則會致使訪問jsp頁面not found。修改後的代碼以下:spring
package soc.main; import org.eclipse.jetty.server.Server; import org.eclipse.jetty.servlet.ServletHolder; import org.eclipse.jetty.webapp.WebAppContext; import org.glassfish.jersey.servlet.ServletContainer; import org.springframework.web.context.ContextLoaderListener; import org.springframework.web.context.support.AnnotationConfigWebApplicationContext; import soc.config.ApplicationApi; import soc.config.SpringJavaConfiguration; public class SocMain { public static void main(String[] args) throws Exception { ApplicationApi applicationConfig = new ApplicationApi(); ServletContainer servletContainer = new ServletContainer(applicationConfig); ServletHolder jerseyServlet = new ServletHolder(servletContainer); // ServletContextHandler context = new ServletContextHandler(); // 訪問jsp會404Not Found WebAppContext context = new WebAppContext(); context.setClassLoader(Thread.currentThread().getContextClassLoader()); context.addServlet(jerseyServlet, "/rest/*"); context.setContextPath("/"); context.setResourceBase("src/main/webapp"); context.addEventListener(new ContextLoaderListener()); // context.addEventListener(new RequestContextListener()); context.setInitParameter("contextClass", AnnotationConfigWebApplicationContext.class.getName()); context.setInitParameter("contextConfigLocation", SpringJavaConfiguration.class.getName()); int port = 8080; if (args.length == 1) { port = Integer.parseInt(args[0]); } Server server = new Server(port); server.setHandler(context); try { server.start(); server.join(); } catch (Exception e) { e.printStackTrace(); } } }