Snaps-based app doesn't allow welcome files? [message #817193] |
Fri, 09 March 2012 14:24  |
Eclipse User |
|
|
|
I'm building a Snaps-based web app as a first project, and have noticed that Snaps doesn't allow me to use a list of welcome files (in the web.xml <welcome-file-list> element) -- from the logs, it appears that a null path request gets shunted through the StaticResourceServlet instead. Is there some configuration I'm missing?
For reference, my snap is configured to respond at /lm/spring/. The request that fails is a request for that same URL. Here's my web.xml, with the root element removed because this forum won't let me post it due to the fact that it includes URLs:
<display-name>LM Portal Spring Module</display-name>
<!-- configure our parent application context -->
<context-param>
<param-name>contextClass</param-name>
<param-value>org.eclipse.virgo.web.dm.ServerOsgiBundleXmlWebApplicationContext</param-value>
</context-param>
<!-- set up the standard Spring context listener -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- create our standard Spring dispatcher servlet -->
<servlet>
<servlet-name>springModule</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>springModule</servlet-name>
<url-pattern>/w/*</url-pattern>
</servlet-mapping>
<welcome-file-list>
<!-- this doesn't appear to work with Virgo Snaps... -->
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
And my servlet's context (springModule-servlet.xml); same thing, the root element has been removed due to this forum's crankiness:
<context:component-scan base-package="gov.cancer.ccr.oit.lmportal.spring.web" />
<!-- configure our view resolver -->
<bean id="topViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/" />
<property name="suffix" value=".jsp" />
</bean>
And finally, here's the log.log entries for the request for /lm/spring/:
[2012-03-09 13:50:26.007] INFO http-bio-8080-exec-4 org.eclipse.virgo.snaps.core.OsgiSnapRegistry Snap 'org.eclipse.virgo.snaps.core.internal.webapp.WebAppSnap@4eb15265' found for context path '/spring'
[2012-03-09 13:50:26.007] INFO http-bio-8080-exec-4 o.e.v.s.c.i.w.c.StandardVirtualContainerRequestDispatcher Servicing request 'null'
[2012-03-09 13:50:26.007] INFO http-bio-8080-exec-4 org.eclipse.virgo.snaps.core.internal.webapp.url.PathUrlPattern Path '/spring/' does not match pattern '/spring/w'
[2012-03-09 13:50:26.007] INFO http-bio-8080-exec-4 o.e.virgo.snaps.core.internal.webapp.url.ExtensionUrlPattern Path '/spring/' does not match pattern 'jsp'
[2012-03-09 13:50:26.007] INFO http-bio-8080-exec-4 o.eclipse.virgo.snaps.core.internal.webapp.url.DefaultUrlPattern Path '/spring/' matches pattern '/'
[2012-03-09 13:50:26.007] INFO http-bio-8080-exec-4 o.eclipse.virgo.snaps.core.internal.webapp.url.UrlPatternMatcher Matched path '/spring/' with mapping '__resource-servlet'
[2012-03-09 13:50:26.008] INFO http-bio-8080-exec-4 o.eclipse.virgo.snaps.core.internal.webapp.url.DefaultUrlPattern Translated path '/spring' to '/'
[2012-03-09 13:50:26.008] INFO http-bio-8080-exec-4 o.eclipse.virgo.snaps.core.internal.webapp.StaticResourceServlet Resource / found
[2012-03-09 13:50:26.012] ERROR http-bio-8080-exec-4 o.a.c.core.ContainerBase.[Catalina].[localhost].[/lm].[default] Servlet.service() for servlet [default] in context with path [/lm] threw exception java.io.FileNotFoundException: /Users/levineja/Downloads/virgo-tomcat-server-3.0.2.RELEASE/work/org.eclipse.virgo.kernel.deployer_3.0.2.RELEASE/staging/global/bundle/gov.cancer.ccr.oit.lmportal-spring/1.0.0/lmportal-spring-1.0.0.jar/ (No such file or directory)
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.<init>(FileInputStream.java:120)
at org.eclipse.osgi.framework.util.SecureAction.getFileInputStream(SecureAction.java:123)
at org.eclipse.osgi.baseadaptor.bundlefile.FileBundleEntry.getInputStream(FileBundleEntry.java:56)
at org.eclipse.osgi.framework.internal.core.BundleURLConnection.connect(BundleURLConnection.java:53)
at org.eclipse.osgi.framework.internal.core.BundleURLConnection.getInputStream(BundleURLConnection.java:99)
at java.net.URL.openStream(URL.java:1010)
at org.eclipse.virgo.snaps.core.internal.webapp.StaticResourceServlet.doGet(StaticResourceServlet.java:66)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:735)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:848)
at org.eclipse.virgo.snaps.core.internal.webapp.container.ImmutableFilterChain.doFilter(ImmutableFilterChain.java:47)
at org.eclipse.virgo.snaps.core.internal.webapp.container.StandardVirtualContainerRequestDispatcher$1.doWithClassLoader(StandardVirtualContainerRequestDispatcher.java:104)
at org.eclipse.virgo.snaps.core.internal.webapp.container.StandardVirtualContainerRequestDispatcher$1.doWithClassLoader(StandardVirtualContainerRequestDispatcher.java:1)
at org.eclipse.virgo.snaps.core.internal.webapp.container.StandardVirtualContainerRequestDispatcher.doWithThreadContextClassLoader(StandardVirtualContainerRequestDispatcher.java:121)
at org.eclipse.virgo.snaps.core.internal.webapp.container.StandardVirtualContainerRequestDispatcher.service(StandardVirtualContainerRequestDispatcher.java:101)
at org.eclipse.virgo.snaps.core.internal.webapp.WebAppSnap.handleRequest(WebAppSnap.java:152)
at org.eclipse.virgo.snaps.core.RequestRouter.service(RequestRouter.java:51)
at org.eclipse.virgo.snaps.core.SnapHostFilter.doFilter(SnapHostFilter.java:62)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:224)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:185)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:151)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
at org.eclipse.virgo.web.tomcat.support.ApplicationNameTrackingValve.invoke(ApplicationNameTrackingValve.java:33)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:929)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:405)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:269)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:515)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:302)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:680)
Requests for /lm/spring/index.jsp return the index.jsp that's at that location, so that's fine -- it's just the null-path -- /lm/spring/ -- that's failing.
|
|
|
|
Re: Snaps-based app doesn't allow welcome files? [message #820070 is a reply to message #820045] |
Tue, 13 March 2012 13:29  |
Eclipse User |
|
|
|
The web.xml for the host (again minus the root element, because the forum sees the URLs in it and won't let me post links):
<?xml version="1.0" encoding="UTF-8"?>
<display-name>Virgo Web Portal</display-name>
<filter>
<filter-name>host-filter</filter-name>
<filter-class>org.eclipse.virgo.snaps.core.SnapHostFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>host-filter</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>INCLUDE</dispatcher>
<dispatcher>FORWARD</dispatcher>
<dispatcher>REQUEST</dispatcher>
</filter-mapping>
The host is configured at Web-ContextPath '/lm'.
I'm not sure what you mean by "What is the full context path you are requesting as for just '/lm/spring'?". Guessing, the context should be to my Snap bundle -- called lmportal-spring, and residing in the lmportal-spring.jar file that you see in that log. That bundle's MANIFEST.MF has "Snap-ContextPath: /spring", mapping it to the full context '/lm/spring'.
__resource-servlet comes from Snap's own default web.xml -- in org.eclipse.virgo.snaps.core, in the src/main/resources/META-INF/snaps/default-web.xml file. It maps to Virgo's own StaticResourceServlet (org.eclipse.virgo.snaps.core.internal.webapp.StaticResourceServlet).
These bundles are all deployed via uploading them in the Admin Console.
I believe that Tomcat natively is supposed to handle welcome-file negotiation, so something's happening in Snaps to override this. (It's all spelled out in the Servlet spec, section 9.10 in Servlet 2.4.) Just looking at the log file I posted originally, I suspect that the problem here is that the default configuration for the Snaps host (as spelled out in that default-web.xml, etc.) is claiming control over the root ('/') of all deployed Snaps, rather than allowing Tomcat to try to do its welcome-file dance first.
|
|
|
Powered by
FUDForum. Page generated in 0.02709 seconds