配置SpringMVC中的视图解析器

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_38409944/article/details/82783021

视图解析器的作用:

就是当 DispatcherServlet将ModelAndView传递给视图解析器的时候,将ModelAndView数据填充到相应的视图中,然后返回一个带有数据的视图给DispatcherServlet.

视图解析其中有个抽象类:

AbstractCachingViewResolver 它将解析过的视图进行缓存,下次再次解析的时候就会在缓存中直接寻找该视图。


第一种视图:UrlBasedViewResolver,继承上面这个抽象类,具有缓存功能。但这里不介绍了,因为有个更通用的方法替代这个视图。


第二种视图:InternalResourceViewResolver 继承UrlBasedViewResolver` 而且有自己的特点。
先来看看它是如何配置的:
springmvc.xml:

 <mvc:annotation-driven></mvc:annotation-driven>
    <!--<bean class="controller.FruitsController"></bean>-->
    <context:component-scan base-package="controller"></context:component-scan>
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/jsp"></property>
        <property name="suffix" value=".jsp"></property>
    </bean>

处理器:

modelAndView.setViewName("/fruitsList");

当你访问:http://localhost:8080/SpringMVC_test/queryList.action即可。
总结:

  1. 利用前缀和后缀的配置,可以减少Contreller中视图定义的代码。
  2. 该解析器也有对视图缓存的功能
  3. 通常把jsp放在WEB-INF目录下,视图解析器会在服务器中将请求foreword到对应的视图上。

再来介绍一个返回模板类型的视图解析器:FreeMarkerViewResolver
它会解析逻辑视图配置,返回一种Freemarker模板,该模板负责将数据模型中的数据合并到模板中,从而生成标准的输出,可以生成各种文本,包括HTML,XML,java源码等。
先来看看配置吧,springmvc要配置两个部分:

<mvc:annotation-driven></mvc:annotation-driven>
    <!--<bean class="controller.FruitsController"></bean>-->
    <context:component-scan base-package="controller"></context:component-scan>

    <!--视图解析器-->
    <bean class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
        <property name="prefix" value="fm_"></property>
        <property name="suffix" value=".ftl"></property>
        <property name="order" value="1"></property>
    </bean>
    <!--模板文件的路径以及其他配置-->
    <bean class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
        <property name="templateLoaderPath" value="/WEB-INF/freemarker"></property>
    </bean>

再看看控制器:

//标识是一个控制器,可以被处理器适配器找到
@Controller
public class FruitsController {

    private FruitService fruitService = new FruitService();
    //@RequestMapping实现将queryList方法和url进行映射,一个方法对应一个url
    //一般建议将url设置和方法写一样
    @RequestMapping("/queryList")
    public ModelAndView queryList() {
        List<Fruit> list = fruitService.queryFruitsList();
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.addObject("fruits",list);

        System.out.println(modelAndView.getModelMap());
        modelAndView.setViewName("fruit");
        return modelAndView;
    }
    class FruitService{
        public List<Fruit> queryFruitsList(){
            List<Fruit> list = new ArrayList<Fruit>();
            list.add(new Fruit("苹果",5));
            list.add(new Fruit("火龙果",7));
            list.add(new Fruit("雪莲果",4));
            return list;
        }
    }
}

所以要在/WEB-INF/freemarker的目录下创建一个模板:
/WEB-INF/freemarker/fm_fruit.ftl

所以只要
http://localhost:8080/SpringMVC_test/queryList.action
就可以访问到
/WEB-INF/freemarker/fm_fruit.ftl
注意:maven还要配置:

<dependency>
          <!--在spring中使用Freemarker这个必不可少,否则报错-->
          <groupId>org.springframework</groupId>
          <artifactId>spring-context-support</artifactId>
          <version>4.3.6.RELEASE</version>
      </dependency>
      <dependency>
          <groupId>org.freemarker</groupId>
          <artifactId>freemarker</artifactId>
          <version>2.3.28</version>
      </dependency>

不过最后的编码问题还有数据访问没实现…… 试了下网上方法不行。模板这一块 以后再了解。
总结:
使用FreeMarkerViewResolver可以生成Freemarker模板。

哈哈哈 其他的还有很多,我就不多介绍了。一个用来jsp,一个用来模板 我觉得这两个基本已经够满足要求的了。

猜你喜欢

转载自blog.csdn.net/qq_38409944/article/details/82783021