在JettyServer中构建无web.xml的web application

JettyServer常常会作为内嵌的server,特别是在我们开发JavaEE的应用的时候,JettyServer+Hsqldb会大大的加快我们开发的速度,它广泛应用于针对webapplication的自动化单元测试中。
作为一个webapplication,如果没有WEB-INF目录和下面的web.xml,你的反应会是什么?如果是一个Struts2+ Spring的一个webapplication呢?
有的时候我们真的有这种需求,比如我要用一个jar包来发布一个功能简单的application,既有webservice又是RESTfull的,在希望它是一种很light的方式的同时又希望利用Struts+Spring来做,怎么办呢?
我们来看看一种甚至是web.xml都不需要的方式吧。

final ClassPathXmlApplicationContext originalContext =
new ClassPathXmlApplicationContext("accountServiceContext.xml");

Object o = originalContext.getBean("accountService");
//publish accountservice as a webservice with XFire
XFire xfire = XFireFactory.newInstance().getXFire();
ServiceFactory factory = new ObjectServiceFactory(xfire.getTransportManager(), null);
Service service = factory.create(AccountService.class);
service.setInvoker(new BeanInvoker(o));
xfire.getServiceRegistry().register(service);
try {
int port = Integer.parseInt(System.getProperty("port", "9999"));
server = new Server(port);
//build a webappContext without WEN-INF/web.xml
WebAppContext webApp = new WebAppContext();
webApp.setContextPath("/");
webApp.setBaseResource(Resource.newClassPathResource(""));
webApp.setConfigurations(new Configuration[0]);
webApp.addFilter(RedirectFilter.class, "/*", 1);
//org.apache.struts2.dispatcher.FilterDispatcher, let struts recongonize our actions
webApp.addFilter(FilterDispatcher.class, "/*", 1).setInitParameter("actionPackages", "com.***.action");
webApp.addServlet(XFireServlet.class, "/*");
webApp.addEventListener(new ServletContextListener() {
public void contextInitialized(ServletContextEvent sce) {
//use spring context to build a webApplicationContext
context = new WebApplicationContextWrapper(originalContext, sce.getServletContext());
//make spring work with servlet Container
sce.getServletContext().setAttribute(
WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE, context);
}
public void contextDestroyed(ServletContextEvent sce) {
}
});
server.addHandler(webApp);
server.start();
} catch (Exception e) {
...
}

你可能感兴趣的:(java技术)