Tuesday, May 7, 2013

This post is re-done of one of my previous posts which was about embedding Jetty7. Now it's about new version - Jetty9 and also with support of Spring MVC. Just thought it would be a good idea to keep something like that as a reference. There is no much text below, this is because the source is clear enough and doesn't need much explanation. Though, feel free to raise questions in comments.

Lets start with Jetty server warpper. That's the main class which wraps all Jetty setup. Notice that there is no war here, there is no even 'web.xml'. It's all on plain folders and configured via code.

Here is class with main method. It's very simple, just starts the server and configures j.u.l's handler for slf4j (j.u.l is used by Jasper):

Here is Spring config, which was referenced by JettyServer class ('web-context.xml'). That config is used for all stuff related to String MVC.

Hi....I am getting the following exception when I place by mvcServlet.vml file under Project directory. Can you tell me where do we need to place this file so that this context listener is able to load it?

INFO: Loading XML bean definitions from ServletContext resource [/mvcServlet.xml]Jun 20, 2014 2:43:24 PM org.springframework.web.servlet.FrameworkServlet initServletBeanSEVERE: Context initialization failedorg.springframework.beans.factory.BeanDefinitionStoreException: IOException parsing XML document from ServletContext resource [/mvcServlet.xml]; nested exception is java.io.FileNotFoundException: Could not open ServletContext resource [/mvcServlet.xml] at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:341) at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:302) at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:143) at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:178) at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:149) at org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDefinitions(XmlWebApplicationContext.java:124) at org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDefinitions(XmlWebApplicationContext.java:93) at org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.java:130) at org.springframework.context.support.AbstractApplicationContext.obtainFreshBeanFactory(AbstractApplicationContext.java:465) at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:395) at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:442) at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:458) at org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:339) at org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:306) at org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:127) at javax.servlet.GenericServlet.init(GenericServlet.java:244) at org.eclipse.jetty.servlet.ServletHolder.initServlet(ServletHolder.java:456) at org.eclipse.jetty.servlet.ServletHolder.doStart(ServletHolder.java:276) at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:59) at org.eclipse.jetty.servlet.ServletHandler.initialize(ServletHandler.java:779) at org.eclipse.jetty.servlet.ServletContextHandler.startContext(ServletContextHandler.java:255) at org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:610) at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:59) at org.eclipse.jetty.server.handler.HandlerWrapper.doStart(HandlerWrapper.java:89) at org.eclipse.jetty.server.Server.doStart(Server.java:262) at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:59) at com.demo.webapp.JettyServer.start(JettyServer.java:30) at com.demo.webapp.ServerMain.main(ServerMain.java:22)Caused by: java.io.FileNotFoundException: Could not open ServletContext resource [/mvcServlet.xml] at org.springframework.web.context.support.ServletContextResource.getInputStream(ServletContextResource.java:117) at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:328) ... 27 more

it really depends how your classpath is setup, what IDE your use, settings, etc. Try to find out where is your classpath root and put that file there. Possibly, the best way to investigate it, is to put breakpoint somewhere and play a bit with Class.getResource.