I try to create Spring MVC application that uses Jetty as servlet container. Feature of my approach is running Jetty inside Spring via bean:
<bean id="server" class="org.mortbay.jetty.Server" destroy-method="stop">
<property name="connectors">
<list>
<bean id="connector" class="org.mortbay.jetty.nio.SelectChannelConnector">
<property name="port" value="9080" />
</bean>
</list>
</property>
<property name="handlers">
<list>
&开发者_运维技巧lt;ref bean="basicContext" />
</list>
</property>
</bean>
<bean name="basicContext" class="org.mortbay.jetty.servlet.Context">
<property name="contextPath" value="/" />
<property name="servletHandler">
<bean class="org.mortbay.jetty.servlet.ServletHandler">
<property name="servlets">
<list>
<bean class="org.mortbay.jetty.servlet.ServletHolder">
<property name="name" value="spring-mvc" />
<property name="servlet">
<bean class="name.krestjaninoff.hello.util.DispatcherServletWrapper" />
</property>
</bean>
</list>
</property>
<property name="servletMappings">
<list>
<bean class="org.mortbay.jetty.servlet.ServletMapping">
<property name="servletName" value="spring-mvc" />
<property name="pathSpec" value="/*" />
</bean>
</list>
</property>
</bean>
</property>
</bean>
To pass application context to my servlet I use simple wrapper for DispatcherServlet that implements ContextAware interface:
public class DispatcherServletWrapper extends DispatcherServlet implements
ApplicationContextAware {
private static final long serialVersionUID = -5870408422415688046L;
private ApplicationContext appContext;
private ServletContext servletContext;
public void setApplicationContext(ApplicationContext arg0)
throws BeansException {
this.appContext = arg0;
}
public void setServletContext(ServletContext servletContext) {
this.servletContext = servletContext;
}
@Override
protected WebApplicationContext createWebApplicationContext(
WebApplicationContext arg0) throws BeansException {
GenericWebApplicationContext wac = new GenericWebApplicationContext();
wac.setParent(appContext);
wac.refresh();
return wac;
}
}
Application starts well but when I try to get some page I get next exception:
2010-12-08 09:50:22,684 [29071401@qtp-4084687-0] DEBUG name.krestjaninoff.hello.util.DispatcherServletWrapper
- org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:671)
- Could not complete request
java.lang.NullPointerException
at org.springframework.web.context.support.WebApplicationObjectSupport.getServletContext(WebApplicationObjectSupport.java:124)
at org.springframework.web.servlet.view.JstlView.exposeHelpers(JstlView.java:135)
at org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:211)
at org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:250)
at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1047)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:817)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:719)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:644)
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:549)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:707)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511)
at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:390)
at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765)
at org.mortbay.jetty.handler.HandlerCollection.handle(HandlerCollection.java:114)
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
at org.mortbay.jetty.Server.handle(Server.java:326)
at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542)
at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:926)
at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:549)
at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:212)
at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)
at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:410)
at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582)
So, problem occures in JstlView class when it tries get ServletContext. JstlView implements ServletContextAware interface, hence he must know about ServletContext.
In my opinion the problem lies in the fact that ServletContext instance is not created. Can anybody help me?
精彩评论