diff --git a/src/main/webapp/WEB-INF/mvc-core-config.xml b/src/main/webapp/WEB-INF/mvc-core-config.xml index f884bd71b0b76b1a50f2996804ababea6a611264..d814c256df8ed99d027dbe0cf5c40d410f936363 100644 --- a/src/main/webapp/WEB-INF/mvc-core-config.xml +++ b/src/main/webapp/WEB-INF/mvc-core-config.xml @@ -23,7 +23,7 @@ (see header.jsp for more details) --> <mvc:resources mapping="/resources/**" location="/resources/"/> - <!-- uses WebJars so Javascript and CSS libs can be declared as Maven dependencies (we're using it for Bootstrap) --> + <!-- uses WebJars so Javascript and CSS libs can be declared as Maven dependencies (Bootstrap, jQuery...) --> <mvc:resources mapping="/webjars/**" location="classpath:/META-INF/resources/webjars/"/> <mvc:view-controller path="/" view-name="welcome"/> @@ -51,7 +51,7 @@ <bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver"> <!-- view name resolved using bean of type InternalResourceViewResolver (declared in mvc-view-config.xml) --> <property name="defaultErrorView" value="exception"/> <!-- results into 'WEB-INF/jsp/exception.jsp' --> - <property name="warnLogCategory" value="warn"/> + <property name="warnLogCategory" value="warn"/> <!-- needed otherwise exceptions won't be logged anywhere --> </bean> </beans> diff --git a/src/main/webapp/WEB-INF/mvc-view-config.xml b/src/main/webapp/WEB-INF/mvc-view-config.xml index 51ac734d6dec90fbb3c5a62efb0cc3d4e65c544f..93be9b6e72eb7ff2c0361988ea2631f9471e3f2a 100644 --- a/src/main/webapp/WEB-INF/mvc-view-config.xml +++ b/src/main/webapp/WEB-INF/mvc-view-config.xml @@ -12,52 +12,42 @@ <!-- - - This view resolver delegates to the InternalResourceViewResolver and BeanNameViewResolver, - - and uses the requested media type to pick a matching view. When the media type is 'text/html', - - it will delegate to the InternalResourceViewResolver's JstlView, otherwise to the - - BeanNameViewResolver. Note the use of the expression language to refer to the contentType - - property of the vets view bean, setting it to 'application/vnd.springsource.samples.petclinic+xml'. + - The ContentNegotiatingViewResolver delegates to the InternalResourceViewResolver and BeanNameViewResolver, + - and uses the requested media type (determined by the path extension) to pick a matching view. + - When the media type is 'text/html', it will delegate to the InternalResourceViewResolver's JstlView, + - otherwise to the BeanNameViewResolver. --> <bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver"> <property name="contentNegotiationManager" ref="cnManager"/> - <property name="order" value="0"/> </bean> - + + <!-- Simple strategy: only path extension is taken into account --> <bean id="cnManager" class="org.springframework.web.accept.ContentNegotiationManagerFactoryBean"> - <property name="mediaTypes"> - <value> - xml=application/vnd.springsource.samples.petclinic+xml - atom=#{visitList.contentType} - </value> - </property> + <property name="favorPathExtension" value="true"/> + <property name="ignoreAcceptHeader" value="true"/> </bean> - <!-- - - The BeanNameViewResolver is used to pick up the visits view name (below). - - It has the order property set to 2, which means that this will - - be the first view resolver to be used after the delegating content - - negotiating view resolver. - --> - <bean class="org.springframework.web.servlet.view.BeanNameViewResolver" p:order="1"/> - <!-- - - - This bean configures the 'prefix' and 'suffix' properties of - - InternalResourceViewResolver, which resolves logical view names - - returned by Controllers. For example, a logical view name of "vets" - - will be mapped to "/WEB-INF/jsp/vets.jsp". - --> - <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" p:prefix="/WEB-INF/jsp/" - p:suffix=".jsp" p:order="2"/> + <!-- Default viewClass: JSTL view (JSP with html output) --> + <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> + <!-- Example: a logical view name of 'vets' is mapped to '/WEB-INF/jsp/vets.jsp' --> + <property name="prefix" value="/WEB-INF/jsp/" /> + <property name="suffix" value=".jsp" /> + </bean> - <!-- - The AtomView rendering a Atom feed of the visits --> + <!-- Used here for 'xml' and 'atom' views --> + <bean class="org.springframework.web.servlet.view.BeanNameViewResolver" /> + + <!-- Renders an Atom feed of the visits. Used by the BeanNameViewResolver --> <bean id="visitList" class="org.springframework.samples.petclinic.web.VisitsAtomView"/> + <!-- Renders an XML view. Used by the BeanNameViewResolver --> <bean id="vets/vetList" class="org.springframework.web.servlet.view.xml.MarshallingView"> <property name="marshaller" ref="marshaller"/> </bean> <oxm:jaxb2-marshaller id="marshaller"> - <oxm:class-to-be-bound name="org.springframework.samples.petclinic.model.Vets"/> + <!-- Object-XML mapping declared using annotations inside 'Vets' --> + <oxm:class-to-be-bound name="org.springframework.samples.petclinic.model.Vets"/> </oxm:jaxb2-marshaller> </beans>