Reputation: 49
I'm using SpringSource Tool Suite, I created a Spring MVC Project from template and I'm having a hard time understanding why when i click "run as..." in the project it does work fine, but when i click it in the home.jsp file inside the WEB-INF/views directory i get an 404 error, because of this i also can't see other jsp. Is this the normal behavior?, if so, can you explain or point me to the explanation?
This is what i get in the console.
15/05/2012 02:43:37 PM com.springsource.tcserver.security.PropertyDecoder <init>
INFO: tc Runtime property decoder using memory-based key
15/05/2012 02:43:37 PM com.springsource.tcserver.security.PropertyDecoder <init>
INFO: tcServer Runtime property decoder has been initialized in 181 ms
15/05/2012 02:43:37 PM org.apache.coyote.AbstractProtocol init
INFO: Initializing ProtocolHandler ["http-bio-1234"]
15/05/2012 02:43:38 PM com.springsource.tcserver.serviceability.rmi.JmxSocketListener init
INFO: Started up JMX registry on 127.0.0.1:6969 in 75 ms
15/05/2012 02:43:38 PM org.apache.catalina.startup.Catalina load
INFO: Initialization processed in 651 ms
15/05/2012 02:43:38 PM org.apache.catalina.core.StandardService startInternal
INFO: Arrancando servicio Catalina
15/05/2012 02:43:38 PM org.apache.catalina.core.StandardEngine startInternal
INFO: Starting Servlet Engine: VMware vFabric tc Runtime 2.6.4.RELEASE/7.0.25.B.RELEASE
15/05/2012 02:43:38 PM org.apache.catalina.startup.HostConfig deployDescriptor
INFO: Desplieque del descriptor de configuración C:\springsource32\vfabric-tc-server-developer-2.6.4.RELEASE\spring-insight-instance\conf\Catalina\localhost\HelloWorld.xml
15/05/2012 02:43:38 PM org.apache.catalina.startup.SetContextPropertiesRule begin
ADVERTENCIA: [SetContextPropertiesRule]{Context} Setting property 'source' to 'org.eclipse.jst.jee.server:HelloWorld' did not find a matching property.
15/05/2012 02:43:38 PM com.springsource.insight.collection.tcserver.ltw.TomcatWeavingInsightClassLoader start
INFO: Context [localhost|HelloWorld] will not be woven
15/05/2012 02:43:39 PM org.apache.catalina.core.ApplicationContext log
INFO: Initializing Spring root WebApplicationContext
INFO : org.springframework.web.context.ContextLoader - Root WebApplicationContext: initialization started
INFO : org.springframework.web.context.support.XmlWebApplicationContext - Refreshing Root WebApplicationContext: startup date [Tue May 15 14:43:39 MDT 2012]; root of context hierarchy
INFO : org.springframework.beans.factory.xml.XmlBeanDefinitionReader - Loading XML bean definitions from ServletContext resource [/WEB-INF/spring/root-context.xml]
INFO : org.springframework.beans.factory.support.DefaultListableBeanFactory - Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@a29c6e: defining beans []; root of factory hierarchy
INFO : org.springframework.web.context.ContextLoader - Root WebApplicationContext: initialization completed in 596 ms
15/05/2012 02:43:39 PM org.apache.catalina.core.ApplicationContext log
INFO: Initializing Spring FrameworkServlet 'appServlet'
INFO : org.springframework.web.servlet.DispatcherServlet - FrameworkServlet 'appServlet': initialization started
INFO : org.springframework.web.context.support.XmlWebApplicationContext - Refreshing WebApplicationContext for namespace 'appServlet-servlet': startup date [Tue May 15 14:43:39 MDT 2012]; parent: Root WebApplicationContext
INFO : org.springframework.beans.factory.xml.XmlBeanDefinitionReader - Loading XML bean definitions from ServletContext resource [/WEB-INF/spring/appServlet/servlet-context.xml]
INFO : org.springframework.context.annotation.ClassPathBeanDefinitionScanner - JSR-330 'javax.inject.Named' annotation found and supported for component scanning
INFO : org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor - JSR-330 'javax.inject.Inject' annotation found and supported for autowiring
INFO : org.springframework.beans.factory.support.DefaultListableBeanFactory - Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@9b2a51: defining beans [org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping#0,org.springframework.format.support.FormattingConversionServiceFactoryBean#0,org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter#0,org.springframework.web.servlet.handler.MappedInterceptor#0,org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver#0,org.springframework.web.servlet.mvc.annotation.ResponseStatusExceptionResolver#0,org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver#0,org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping,org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter,org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter,org.springframework.web.servlet.resource.ResourceHttpRequestHandler#0,org.springframework.web.servlet.handler.SimpleUrlHandlerMapping#0,org.springframework.web.servlet.view.InternalResourceViewResolver#0,trampsController,homeController,org.springframework.context.annotation.internalConfigurationAnnotationProcessor,org.springframework.context.annotation.internalAutowiredAnnotationProcessor,org.springframework.context.annotation.internalRequiredAnnotationProcessor,org.springframework.context.annotation.internalCommonAnnotationProcessor,org.springframework.context.annotation.ConfigurationClassPostProcessor$ImportAwareBeanPostProcessor#0]; parent: org.springframework.beans.factory.support.DefaultListableBeanFactory@a29c6e
INFO : org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping - Mapped "{[/tramps],methods=[GET],params=[],headers=[],consumes=[],produces=[],custom=[]}" onto public java.lang.String com.hanzellegarda.HelloWorld.controllers.TrampsController.list(org.springframework.ui.Model)
INFO : org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping - Mapped "{[/],methods=[GET],params=[],headers=[],consumes=[],produces=[],custom=[]}" onto public java.lang.String com.hanzellegarda.HelloWorld.HomeController.home(java.util.Locale,org.springframework.ui.Model)
INFO : org.springframework.web.servlet.handler.SimpleUrlHandlerMapping - Mapped URL path [/resources/**] onto handler 'org.springframework.web.servlet.resource.ResourceHttpRequestHandler#0'
INFO : org.springframework.web.servlet.DispatcherServlet - FrameworkServlet 'appServlet': initialization completed in 802 ms
15/05/2012 02:43:40 PM org.apache.catalina.startup.HostConfig deployDescriptor
INFO: Desplieque del descriptor de configuración C:\springsource32\vfabric-tc-server-developer-2.6.4.RELEASE\spring-insight-instance\conf\Catalina\localhost\insight.xml
15/05/2012 02:43:40 PM com.springsource.insight.collection.tcserver.ltw.TomcatWeavingInsightClassLoader start
INFO: Context [localhost|insight] will not be woven
15/05/2012 02:43:40 PM org.apache.catalina.core.ApplicationContext log
INFO: Initializing Spring root WebApplicationContext
15/05/2012 02:43:56 PM org.apache.catalina.core.ApplicationContext log
INFO: Initializing Spring FrameworkServlet 'Spring MVC Dispatcher Servlet'
15/05/2012 02:44:00 PM org.apache.catalina.startup.HostConfig deployDirectory
INFO: Despliegue del directorio C:\springsource32\vfabric-tc-server-developer-2.6.4.RELEASE\spring-insight-instance\webapps\manager de la aplicación web
15/05/2012 02:44:00 PM com.springsource.insight.collection.tcserver.ltw.TomcatWeavingInsightClassLoader start
INFO: Context [localhost|manager] will not be woven
15/05/2012 02:44:01 PM org.apache.catalina.startup.HostConfig deployDirectory
INFO: Despliegue del directorio C:\springsource32\vfabric-tc-server-developer-2.6.4.RELEASE\spring-insight-instance\webapps\ROOT de la aplicación web
15/05/2012 02:44:01 PM com.springsource.insight.collection.tcserver.ltw.TomcatWeavingInsightClassLoader start
INFO: Context [localhost|ROOT] will not be woven
15/05/2012 02:44:01 PM org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["http-bio-1234"]
15/05/2012 02:44:01 PM org.apache.catalina.startup.Catalina start
INFO: Server startup in 23080 ms
Upvotes: 0
Views: 4001
Reputation: 4970
Generally speaking, static files such as home.jsp are rendered via a controller.
In this case, your controllers are being annotation driven, designated by the
<annotation-driven />
XML element located in the WEB-INF/spring/appServlet/servlet-context.xml (assuming you haven't moved stuff around, I just made a sample mvc project from the template)
What this means is Spring scans your java files for @Controller objects which it will then take and tie to views.
The reason home.jsp does not render is because it is being rendered through the HomeController located in your base package.
You should notice there is an annotation with the following signature
@RequestMapping(value = "/", method = RequestMethod.GET)
This is tying the root context of your application (whatever the project name is), to the method below this annotation, which should be (i.e. localhost:8080/your_app/)
public String home(Locale locale, Model model)
What you should notice is the return type of String for this controller method. This signifies the view name that will be rendered after completion of the method. In this case it should be:
return "home";
The next part can be a bit confusing, but should make sense after a while. "home" is tied to a ViewResolver, if you go back to your servlet-context.xml, there should be a bean with class
org.springframework.web.servlet.view.InternalResourceViewResolver
Note the properties being set:
<beans:property name="prefix" value="/WEB-INF/views/" />
<beans:property name="suffix" value=".jsp" />
What this means is the view resolver will start looking for the "home" view file in /WEB-INF/views/ and append on .jsp to the end of home. The first match it finds, will be returned, and if you look at your directory structure, there is a jsp file located within:
/WEB-INF/views/home.jsp
Hope this answer helps you a bit, feel free to comment.
Upvotes: 3