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