<mvc:view-controller/>此标签用以在springMVC配置文件中实现路径的转发和资源的请求。
web.xml配置
<servlet>
<servlet-name>spring-mvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring-mvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>spring-mvc</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
以上的url-pattern需为/*,不然服务缺省情况下访问的/路径无法被springmvc所管理。
springmvc配置
<context:property-placeholder location="classpath:resources.properties"/>
<context:component-scan base-package="test.**" use-default-filters="false">
<context:include-filter type="annotation"
expression="org.springframework.stereotype.Controller"/>
<context:include-filter type="annotation"
expression="org.springframework.web.bind.annotation.ControllerAdvice"/>
</context:component-scan>
<!-- <mvc:view-controller path="/" view-name="admin/product" />-->
<mvc:view-controller path="/" view-name="admin/index" />
<mvc:annotation-driven/>
<!-- 静态资源映射 -->
<mvc:resources mapping="/admin/**" location="/admin/"/>
<!-- 配置freeMarker的模板路径 -->
<bean id="freeMarkerConfigurer" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
<property name="templateLoaderPaths" value="${template.loader_path}" />
<property name="freemarkerSettings">
<props>
<prop key="defaultEncoding">${template.encoding}</prop>
<prop key="url_escaping_charset">${url_escaping_charset}</prop>
<prop key="locale">${locale}</prop>
<prop key="template_update_delay">${template.update_delay}</prop>
<prop key="tag_syntax">auto_detect</prop>
<prop key="whitespace_stripping">true</prop>
<prop key="classic_compatible">true</prop>
<prop key="number_format">${template.number_format}</prop>
<prop key="boolean_format">${template.boolean_format}</prop>
<prop key="datetime_format">${template.datetime_format}</prop>
<prop key="date_format">${template.date_format}</prop>
<prop key="time_format">${template.time_format}</prop>
<prop key="object_wrapper">freemarker.ext.beans.BeansWrapper</prop>
</props>
</property>
<property name="freemarkerVariables">
<map>
<entry key="base" value="#{servletContext.contextPath}"/>
<entry key="getUserMethod" value-ref="ftlfirsttest"/>
</map>
</property>
</bean>
<!-- freemarker视图解析器 -->
<bean id="viewResolver" class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
<property name="contentType" value="text/html; charset=UTF-8" />
<property name="suffix" value="${template.suffix}" />
</bean>
首先需要配置freemarker视图解析器,和freemarker全局变量设置。
在web服务中发送请求需要同后台的requestmapping所匹配,然后再返回页面,但是有时不想走后台,直接请求页面,这里我们就需要使用<mvc:resources/>指令,用以匹配mapping的路径都映射到视图解析器的资源前缀加上mvc:resources的location,即
<mvc:resources mapping="/admin/**" location="/admin/"/>
<property name="templateLoaderPaths" value="WEB-INF/template/" />
请求的资源路径为WEB-INF/template/admin/下的文件。
重点<mvc:view-controller path="" view-name=""/>其中path表示为请求的路径,view-name表示为你需要做的资源操作,其中path会首先匹配requestmapping路径,匹配不到后再进行view-name的资源寻找。view-name中可以输入相对于视图解析器的路径,也可以输入类似于redirect:路径,然后匹配次requestmapping。
总结
一:web.xml中spring的过滤路径需为/*
二:mvc:view-controller 会首先匹配path中的路径,再执行view-name的路径寻找。