内嵌Jetty服务器,启动后访问jsp页面,显示404 NOT FOUND。
源代码如下:
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。修改后的代码如下:
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();
}
}
}