`
manyinjin
  • 浏览: 91281 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

在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) {
              ...
        }
0
0
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics