SpringMCVC域对象和视图(总体第二篇)

一、搭建试验环境

(1)创建maven项目

在这里插入图片描述
在这里插入图片描述

(2)导入依赖

<dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-aop</artifactId>
      <version>5.3.17</version>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-beans</artifactId>
      <version>5.3.17</version>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>5.3.17</version>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-core</artifactId>
      <version>5.3.17</version>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-expression</artifactId>
      <version>5.3.17</version>
    </dependency>

    <dependency>
      <groupId>commons-logging</groupId>
      <artifactId>commons-logging</artifactId>
      <version>1.2</version>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-web</artifactId>
      <version>5.3.17</version>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>5.3.16</version>
    </dependency>

    <dependency>
      <groupId>org.thymeleaf</groupId>
      <artifactId>thymeleaf-spring5</artifactId>
      <version>3.0.12.RELEASE</version>
    </dependency>
      <dependency>
          <groupId>org.apache.tomcat.embed</groupId>
          <artifactId>tomcat-embed-core</artifactId>
          <version>9.0.58</version>
      </dependency>
  </dependencies>

(3)配置web模块

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
然后应用,确定

(4)配置编码

在这里插入图片描述

(5)配置核心文件

在这里插入图片描述

(6)配置核心文件内容和视图解析器

在这里插入图片描述

<bean id="viewResolver" class="org.thymeleaf.spring5.view.ThymeleafViewResolver">
        <property name="order" value="1"/>
        <property name="characterEncoding" value="UTF-8"/>
        <property name="templateEngine">
            <bean class="org.thymeleaf.spring5.SpringTemplateEngine">
                <property name="templateResolver">
                    <bean class="org.thymeleaf.spring5.templateresolver.SpringResourceTemplateResolver">
                        <!--视图前缀-->
                        <property name="prefix" value="/WEB-INF/templates/"/>
                        <!--视图后缀-->
                        <property name="suffix" value=".html"/>
                        <property name="templateMode" value="HTML5"/>
                        <property name="characterEncoding" value="UTF-8"/>
                    </bean>
                </property>
            </bean>
        </property>
    </bean>

二、域对象共享数据

  • 有三种域对象:Request(一次请求,它只跟浏览器开启和关闭有关),Session(一次回话,它只跟服务器开启和服务器有观),ServletContext(也就Application,整个应用的范围,和浏览器和服务器都没什么关系)
  • 共享数据:一个对象,为什么能获取共享的数据呢?原因就是我们很多调用的时候都是共享的同一个类对象。
  • 我们三种方式都可以实现域数据共享,但是我们要选择能实现功能,选择最小的,这样节约资源。

1、使用ServletAPI想request域对象共享数据

在这里插入图片描述

2、通过ModelAndView想request域共享数据

  • model:主要是用于请求域共享数据
  • view:用于设置视图,实现页面跳转
@Controller
public class helloController4 {

    @RequestMapping("/target")
    public ModelAndView testModelAndView() {
        //不管你采用的什么方式,都是会放在这个里面进行返回,这个后续证明
        ModelAndView mav = new ModelAndView();

        //  处理模型数据,即向请求域request共享数据
        mav.addObject("key","helloMAV");
        // 设置视图名称
        mav.setViewName("success");
        //然后做为返回值返回给前端控制器
        return mav;
    }
}

3、通过model想request域对象设置共享数据

@RequestMapping("/target2")
    public String testModel(Model model) {
        model.addAttribute("key","helloModel");
        return "success";
    }

4、通过Map向request域里面设置共享数据

@RequestMapping("/target3")
    public java.lang.String testMap(Map<String,Object> map) {
        map.put("key","hellomap");
        return "success";
    }

5、通过ModelMap向request里面设置共享数据

@RequestMapping("/target3")
    public String testModelMap(ModelMap modelMap) {
        modelMap.addAttribute("key","hellomap");
        return "success";
    }

6、Model,ModelMap,Map它们之间的联系

(1)通过输出来查看

在这里插入图片描述
在这里插入图片描述

(2)源代码看

在这里插入图片描述
在这里插入图片描述

  • 几种方式都是创建了一个ModelAndView返回
    在这里插入图片描述

7、向session域里面共享数据

  • 建议使用Servlet原生API

    @RequestMapping("/target4")
    public String testSession(HttpSession httpSession) {
        httpSession.setAttribute("key3","hellosession");
        return "success";
    }

8、通过ServletAPI向Application里面共享数据

@RequestMapping("/target5")
    public String testApplication(HttpSession httpSession) {
        ServletContext application = httpSession.getServletContext();
        application.setAttribute("key3","kkkkkkkkkkkddddddddddk");
        return "success";
    }

三、SpringMVC视图

  • SpringMVC中的视图是View接口,视图的租用是渲染数据,将模型model中的数据展示给用户,SpringMvc的视图种类很多,默认有转发视图InternalResourceView和重定向视图RedirectView,当工程引入JSTL的依赖后,转发视图会自动转换为JSTLView,若使用视图技术Thymeleaf,在springmvc的配置文件配置了Thymeleaf的视图解析器,由此视图解析器解析之后得到的是ThymeleafView
  • JstlView是jsp里面用java代码控制html的视图,这样很麻烦,所以有如下的更好。

1、ThymeleafView

  • 当控制器方法中所配置的视图时候,没有配置任何前缀,此时就会创建Thymeleaf视图,视图解析器通过前缀,后缀匹配得到的一个路径,实现最终的跳转。此时就是ThymeleafViewResolver解析得到。
    在这里插入图片描述

2、InternalResourceView

  • InternalResourceView是转发视图
  • SpringMVC转发视图的情况:他和ThymeleafView是一样的,都是同一个对象,和重定向不一样的一点。
    在这里插入图片描述

3、RedirectView

重定向视图会有两次请求,第一次是请求原来的请求,然后有一个重定向的请求。【和转发视图不一样的就是有两次,重定向是两次浏览器的请求,所以是可以跨域的】
在这里插入图片描述

4、视图控制器

如何你在配置视图跳转的时候,就是只有一个格式,那可以SpringMVC配置文件里面配置

在这里插入图片描述
此时你可以访问之前编写的,会发现其他的页面是无法访问的,必须如下配置才可以访问。开启mvc的注解驱动。
在这里插入图片描述
在这里插入图片描述

5、InternalResourceView视图(配置jsp视图)

在这里插入图片描述
此时就可以创建我们的xxx.jsp文件了,然后同样的编写控制器进行访问。
在这里插入图片描述

此处总结一下:要创建我们的InternalResourceView视图是在.jsp文件和forward的时候就创建。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值