内嵌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(); } } }