SSM入门—SpringMVC框架

2023-12-18 15:18:55 浏览数 (1)

SpringMVC概述

Spring Web MVC 是一种基于Java的实现Web MVC设计模式的请求驱动类型的轻量级Web框架。

MVC的设计模式

M:model 模型

业务模型 数据模型 实体,业务代码,数据代码

V: View 视图

用于渲染数据,显示给客户

html jsp framemarker

C:Controller 控制器

主要用于接受参数,处理请求,返回结果

servlet controller

控制器主要作用:

  1. 接受参数
  2. 请求处理:调用模型
  3. 结果返回。大多为josn格式

SpringMVC工作流程

基于XML方式配置SpringMVC

操作步骤

导入Spring、SpringMVC依赖

代码语言:javascript复制
  org.springframework
  spring-context
  5.1.9.RELEASE




  org.springframework
  spring-webmvc
  5.1.9.RELEASE
...

在web.xml文件中配置前端控制器

代码语言:javascript复制
    springmvc
    org.springframework.web.servlet.DispatcherServlet

    
    contextConfigLocation
    
    classpath:spring_mvc.xml
  

  

  
    springmvc

    /
  
...

编写控制器

一个加上注解的普通Java类

代码语言:javascript复制
@Controller
@RequestMapping(value = "/helloController")
//控制器
public class HelloController {

    @RequestMapping("/sayHello")
    public void sayHello(){
        System.out.println("say hello");
    }


    @RequestMapping("/sayHi")
    public void sayHi(){
        System.out.println("say hi");
    }
}
...

配置spring_mvc.xml

代码语言:javascript复制
...

部署项目

将项目部署在Tomcat上

测试效果

输入路径:localhost/helloContorlle/sayHleeo

参数处理

基本数据类型:

可以直接传参

代码语言:javascript复制
public void sayHello(int id,@RequestParam("test") String name){
        System.out.println(id);
        System.out.println(name);
        System.out.println("say hello");
    }...

@RequestParam("test") 注解用于传递的参数名和方法的参数名不一致时

2、dto对象:

如果参数是一堆,会封装在对象中

代码语言:javascript复制
@RequestMapping("/add")
//    将前端传过来的参数自动映射到实体中
    //如果前端的是json格式对象  @RequestBody
    public void add(CompanyDTO companyDTO){
        System.out.println("添加方法");
        System.out.println(companyDTO);
    }
...

要求:传过来的参数名与实体中的属性名一致,才可以自动映射

resulful风格

一杠一值

简化了请求参数

对比:

get请求:/请求地址?id=1&name=admin

resultful请求:/请求路径/1/admin

在RequestMapping("/请求的地址/{id}/{name}")

代码语言:javascript复制
@Controller
@RequestMapping("/restfulController")
public class RestfulController {

    @RequestMapping("/test/{id}/{name}")
    public void test(@PathVariable("id") int id,@PathVariable("name") String name){
        System.out.println("id:" id);
        System.out.println("name:" name);
    }

}
...

示例:

http://localhost/restfulController/test/10/zhangsan

id:10

name:zhangsan

日期格式:将前端传过来的参数(字符串)转换为日期对象

@DateTimeFormat

代码语言:javascript复制
@DateTimeFormat 将前端传过来的参数(字符串)转换为日期对象 

//将字符串转换为日期格式数据
@DateTimeFormat(pattern = "yyyy-MM-dd")...

@JsonFormat

代码语言:javascript复制
@JsonFormat(pattern = "yyyy-MM-dd hh:mm:ss",timezone = "GMT 8")

//返回值中要将日期对象转换为字符串...

扩展:Lombok插件

简写实体

对比:

以前的实体:需要自己添加setter,getter,tostring等方法

使用Lombok:只要加上@Data注解 就可以自动完成以上操作

只需要在pom.xml中添加依赖:

代码语言:javascript复制
      org.projectlombok
      lombok
      1.18.4
...

结果的返回

前后端分离后,一般返回JSON格式数据

步骤:

引入依赖

代码语言:javascript复制
      com.fasterxml.jackson.core
      jackson-databind
      2.9.8
    ...

使用@ResponseBody //@ResponseBody 将结果转换为json格式

代码语言:javascript复制
//查询所有的公司列表
    @RequestMapping("/list")
    @ResponseBody   //@ResponseBody  将结果转换为json格式
    public List showAllCompanies(){
        //返回的是一个集合  要把这个集合转换为json的数据格式
        List companies = new ArrayList<>();

        Company company1 = new Company();
        company1.setId(1);
        company1.setName("国信安");
        company1.setLocation("云华路");
        company1.setBuildDate("2009-10-01");

        Company company2 = new Company();
        company2.setId(2);
        company2.setName("华为");
        company2.setLocation("郫县");
        company2.setBuildDate("2000-10-01");

        companies.add(company1);
        companies.add(company2);

        return companies;
    }
...
代码语言:javascript复制
{
"code":0,
"msg":"查询成功",
"count":100,
"data":[
    [{"id":1,"name":"国信安","location":"云华路","buildDate":"2009-10-01"},               {"id":2,"name":"华为","location":"郫县","buildDate":"2000-10-01"}]
]
}...

可以自己封装结果对象

代码语言:javascript复制
package com.gxa.util;

import lombok.Data;

import java.util.List;

@Data
public class ResutData {

    private int code;
    private String msg;
    private int count;
    private List data;

    public  static ResutData success(String msg,int count,List data){
        ResutData resutData = new ResutData();
        resutData.code = 0;
        resutData.msg = msg;
        resutData.count = count;
        resutData.data = data;
        return resutData;
    }


    public  static ResutData error(String msg){
        ResutData resutData = new ResutData();
        resutData.code = 1;
        resutData.msg = msg;
        return resutData;
    }
}
...

0 人点赞