一、搭建试验环境
(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的时候就创建。