若有错,请指出
第二章 搭建Springboot环境,配置视图解析器jsp页面
第三章 全注解下的Spring Ioc
第四章 约定编程-Spring AOP
第五章 Spring Boot的数据库编程
第九章 初识Spring MVC
面试题比较常考,最重要的类就是DispatchServlet。这里是全流程,实际上Spring MVC并未走完全流程,得看你自身代码写得是否完整包含。
<dependencies>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
pojo类和对象属性的枚举类
public class Food {
private Long id;
private String foodName;
private FoodTypeEnum foodTypeEnum;
private String note;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getFoodName() {
return foodName;
}
public void setFoodName(String foodName) {
this.foodName = foodName;
}
public FoodTypeEnum getFoodTypeEnum() {
return foodTypeEnum;
}
public void setFoodTypeEnum(FoodTypeEnum foodTypeEnum) {
this.foodTypeEnum = foodTypeEnum;
}
public String getNote() {
return note;
}
public void setNote(String note) {
this.note = note;
}
}
//枚举类
public enum FoodTypeEnum {
COOKED(2,"熟食"),RAW(1,"生食");
private int code;
private String name;
FoodTypeEnum(int code,String name){
this.code=code;
this.name=name;
}
//根据code获取食物类型
public static FoodTypeEnum getFoodTypeEnum(int code){
for(FoodTypeEnum foodTypeEnum:FoodTypeEnum.values()){
if(foodTypeEnum.getCode()==code)return foodTypeEnum;
}
return null;
}
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
控制层
@Controller表明是控制器,@RequestMapping代表请求路径和控制器的映射关系,他会在Web服务器启动SpringMVC时被扫描到HandlerMapping的机制中存储,之后在用户发起请求被DispatcherServlet拦截后,通过URI和其他的条件通过HandlerMapper ing机制就能找到对应的控制器进行响应
ModelAndView对象有两个作用:1.设置转向地址。2.传递控制方法处理结果数据到结果页面
@Controller
@RequestMapping("/food")
public class FoodController {
@RequestMapping("/details")
public ModelAndView details(Long id){
Food food=new Food();
food.setId(id);
food.setFoodName("food_name");
FoodTypeEnum foodTypeEnum=FoodTypeEnum.getFoodTypeEnum(id.intValue()%2+1);
food.setFoodTypeEnum(foodTypeEnum);
food.setNote("myNote");
ModelAndView modelAndView=new ModelAndView();
//设置视图逻辑名称,等待视图解析器(ViewResolver)解析定位
modelAndView.setViewName("food/details");
//绑定数据模型
modelAndView.getModel().put("food",food);
return modelAndView;
}
}
新建webapp目录用于创建存放jsp页面
通过application.properties定制InternalResourceViewResolver初始化
在返回视图名称之后,会以前缀prefix和后缀suffix以及视图名称组成全路径定位视图
比如控制器返回的是food/details就会找到/WEB-INF/jsp/food/details.jsp作为视图
spring.mvc.view.prefix=/WEB-INF/jsp/
spring.mvc.view.suffix=.jsp
在webapp/WEB-INF/jsp/food目录下添加jsp页面(JSP视图)
视图解析器定位到视图后,视图的作用是将数据模型(Model)渲染,响应用户请求。
<%--引用自定义标签库--%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>这是jsp页面</title>
</head>
<body>
<table>
<%-- 这里的food是在控制层绑定的数据模型,可以用${}取值--%>
<tr><td>编号:</td><td><c:out value="${food.id}"></c:out></td></tr>
<tr><td>食品名称:</td><td><c:out value="${food.foodName}"></c:out></td></tr>
<tr><td>视频类型:</td><td><c:out value="${food.foodTypeEnum.code}"></c:out>--<c:out value="${food.foodTypeEnum.name}"></c:out></td></tr>
<tr><td>备注:</td><td><c:out value="${food.note}"></c:out></td></tr>
</table>
</body>
</html>
有时候只是需要JSON数据集,就如之前使用@ResopnseBody(采用处理器内部机制,暂时不讲)标注方法一样,JSON视图不是逻辑视图不会经过视图解析器而是直接把数据模型渲染为JSON
@RequestMapping("/getJson")
public ModelAndView getFood(Long id){
Food food=new Food();
food.setId(id);
food.setFoodName("food_name");
FoodTypeEnum foodTypeEnum=FoodTypeEnum.getFoodTypeEnum(id.intValue()%2+1);
food.setFoodTypeEnum(foodTypeEnum);
food.setNote("myNote");
//创建json视图
ModelAndView modelAndView=new ModelAndView();
//JSON视图不是逻辑视图,不需要视图解析器定位
View view=new MappingJackson2JsonView();
//绑定视图
modelAndView.setView(view);
//绑定数据模型
modelAndView.getModel().put("food",food);
return modelAndView;
}
SSM:spring+springmvc+mybatis,Spring,SpringMVC,ssm的区别