JettyServerでweb.xmlのないウェブアプリを構築します。


もっと読む
    JettyServerはしばしば組み込まれたserverとして、特に私たちがJavaEEのアプリケーションを開発する時、JettyServer+Hsqldbは大いに私たちの開発速度を加速します。webapplicationの自動化ユニットテストに広く応用されています。   
    webapplicationとして、WEB-INFディレクトリと以下のweb.xmlがなければ、あなたの反応はどうなりますか?もしStruts 2+だったら  Springのwebapplicationは?
    ある時、私達は本当にこのような需要があります。例えば、jarパッケージを使って、簡単なアプリを発表したいです。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) {
              ...
        }