第九章 初识Spring MVC

若有错,请指出
第二章 搭建Springboot环境,配置视图解析器jsp页面
第三章 全注解下的Spring Ioc
第四章 约定编程-Spring AOP
第五章 Spring Boot的数据库编程
第九章 初识Spring MVC

文章目录

  • 9.1 Spring MVC框架的设计
    • 9.1.1 配置逻辑视图
    • 9.1.2 配置JSON视图
  • 9.2 搭建SSM环境

9.1 Spring MVC框架的设计

面试题比较常考,最重要的类就是DispatchServlet。这里是全流程,实际上Spring MVC并未走完全流程,得看你自身代码写得是否完整包含。

9.1.1 配置逻辑视图

目录结构
第九章 初识Spring MVC_第1张图片
引入jsp相关依赖,这里给出所有依赖

    <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页面
第九章 初识Spring MVC_第2张图片
通过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>

启动文件配置扫描路径
第九章 初识Spring MVC_第3张图片

运行截图第九章 初识Spring MVC_第4张图片

9.1.2 配置JSON视图

有时候只是需要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;
    }

第九章 初识Spring MVC_第5张图片

在这里插入图片描述

9.2 搭建SSM环境

SSM:spring+springmvc+mybatis,Spring,SpringMVC,ssm的区别

你可能感兴趣的:(spring,boot,spring,mvc,java)