mvc:view-controller小结

宋弘壮
2023-12-01

  <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的路径寻找。



 类似资料: