SpringMVC

文章目录

  • 一.SpringMVC的概念
    • 1.1 Spring的概念
    • 1.2 MVC和SpringMVC的关系
  • 二.SpringMVC步骤
    • 2.1 创建一个springMVC项目
    • 2.2 获取参数的功能
    • 2.3 输出参数的功能
  • 三.SpringMVC的注解介绍
    • 3.1 获取参数
      • 3.1.1 获取参数单个参数
      • 3.1.2 获取多个参数
      • 3.1.3获取对象
      • 3.1.4 获取json对象
      • 3.1.5 从基础的url获取参数
      • 3.1.6 获取上传文件
      • 3.1.7 获取Cookie
      • 3.1.8 获取header
      • 3.1.9 获取Seesion
    • 3.2 返回数据
      • 3.2.1 返回静态页面
      • 3.2.2 返回非静态页面
    • 四.其他

一.SpringMVC的概念

1.1 Spring的概念

SpringMVC是一个Java框架,用于开发基于Java的Web应用程序。它是Spring框架的一部分,专注于在Web应用程序中实现Model-View-Controller(MVC)设计模式。MVC模式是一种常用的软件设计模式,用于将应用程序的逻辑分离成三个主要组件:模型(Model)、视图(View)和控制器(Controller),从而实现代码的解耦和更好的可维护性。
大家看下面的图片,就知道现在这个流程了.
SpringMVC_第1张图片

1.2 MVC和SpringMVC的关系

MVC(Model-View-Controller)是一种软件设计模式,用于将应用程序的逻辑分离成三个主要组件:模型(Model)、视图(View)和控制器(Controller)。这个模式的目的是实现代码的解耦和更好的可维护性。

SpringMVC是Spring框架的一部分,专注于在Java Web应用程序中实现MVC设计模式。因此,可以说SpringMVC是Spring框架对MVC模式的具体实现。它提供了一组组件和工具,用于开发基于Java的Web应用程序,并按照MVC模式来组织应用程序的代码结构。

下面是MVC和SpringMVC之间的关系:

MVC是一种设计模式:MVC是一种通用的设计模式,不仅用于Web应用程序,还可以用于其他类型的应用程序。它将应用程序划分为模型、视图和控制器,每个组件有自己的职责,从而实现了代码的分离和解耦。

SpringMVC是MVC在Spring框架中的实现:SpringMVC是Spring框架为Web应用程序提供的MVC实现。它通过控制器(Controller)、视图(View)、模型(Model)、处理器映射器(Handler Mapping)、视图解析器(View Resolver)等组件来实现MVC模式。

Spring框架是更大范围的解决方案:Spring框架提供了广泛的功能和模块,用于开发企业级Java应用程序。除了SpringMVC,它还包括Spring Core(核心容器)、Spring Security(安全)、Spring Data(数据访问)、Spring AOP(面向切面编程)等模块。SpringMVC是Spring框架的一个模块,用于处理Web应用程序的请求和响应。

综上所述,MVC是一种通用的设计模式,而SpringMVC是Spring框架对MVC模式在Web应用程序中的具体实现。使用SpringMVC,开发者可以更轻松地构建灵活可扩展的Java Web应用程序,并且能够充分利用Spring框架的其他功能和特性。

二.SpringMVC步骤

我们学习SpringMVC需要掌握一下3个功能:

  1. 连接的功能︰将用户(浏览器)和Java程序连接起来,也就是访问一个地址能够调用到我们的
    Spring程序。
  2. 获取参数的功能︰用户访问的时候会带一些参数,在程序中要想办法获取到参数。
  3. 输出数据的功能:执行了业务逻辑之后,要把程序执行的结果返回给用户。
    对于Spring MVC 来说,掌握了以上3个功能就相当于掌握了Spring MVC。
    我们先来做一个简单的demo

2.1 创建一个springMVC项目

实际上springMVC项目可以基于springboot创建,创建一个sprigboot项目,再勾选上springWeb就创建好了.
SpringMVC_第2张图片
创建一个UserController 类,实现用户到Spring程序的互联互通.
代码入下:

public class UserController {

  
    public String hi(String name) {
        return "spring mvc hi" +name;
    }
  
}

2.2 获取参数的功能

获取参数的功能,就是依赖一个注解,代码如下:

public class UserController {
      @RequestMapping("/hi")
    public String hi(String name) {
        return "spring mvc hi" + name;
    }
  
}

2.3 输出参数的功能

输出参数的功能,要在类上加入一个注解,这个注解就是@RestController
代码如下:

@RestController
public class UserController {
      @RequestMapping("/hi")
    public String hi(String name) {
        return "spring mvc hi" + name;
    }
  
}

最后的大致流程如图所示.
SpringMVC_第3张图片

看了上面的流程之后,我接下来会介绍获取参数和答应参数的一些注解

三.SpringMVC的注解介绍

3.1 获取参数

3.1.1 获取参数单个参数

三种请求方式
@RequestMapping
@GetMapping
@PostMapping
代码如下:

   @RequestMapping("/e1")
    public String example(String str){
        return "hello world "+str;
    }
    @GetMapping("/e2")
    public String example2(String str){
        return "hello world "+str;
    }
    @PostMapping("/e3")
    public String example3(String str){
        return "hello world "+str;
    }

SpringMVC_第4张图片

3.1.2 获取多个参数

代码如下:

 @RequestMapping("/e4")
    public String example4(String username,String password){
        return "hello world "+ username +" "+ password;
    }

SpringMVC_第5张图片

3.1.3获取对象

获取对象的步骤
1.检查控制器方法的参数列表,发现有一个类型为User的参数。
2.根据请求参数名username和password ,id 和age 与User类中的属性名匹配,创建User对象。
3.将请求参数的值绑定到User对象的属性上。
4.将创建并填充好的User对象传递给saveUser方法,作为参数。

 @RequestMapping("/reg")
    public Object example6(User user){
        System.out.println(user);
        return user;
    }

SpringMVC_第6张图片

3.1.4 获取json对象

这里具体的步骤就是:
1.前端发送JSON数据:前端通过AJAX或其他方式将JSON数据发送给后端。确保请求的Content-Type设置为application/json,以便告知后端该请求包含JSON数据。

2.创建Java对象:在后端的控制器方法中,创建对应的Java对象,用于接收JSON数据。这个Java对象通常是一个POJO(Plain Old Java Object),包含与JSON数据字段对应的属性。

3.使用@RequestBody注解:在控制器方法参数中使用@RequestBody注解来接收JSON数据,并将其转换为Java对象。

4.处理JSON数据:在控制器方法中,你可以对接收到的Java对象进行业务逻辑的处理。
代码如下:

    @RequestMapping("/reg2")
    public Object example7(@RequestBody User user){
        System.out.println(user);
        return user;
    }

这里我们就不构造前端界面了,我们直接使用postman来构造请求.
SpringMVC_第7张图片

3.1.5 从基础的url获取参数

代码如下:

//6.从基础的url获取参数
    @RequestMapping("/url/{username}/{password}")
    public String  example8(@PathVariable String username,@PathVariable String password){

        return "username "+ username + "password  " +password;
    }

SpringMVC_第8张图片

3.1.6 获取上传文件

具体步骤:
1.客户端发送一个带有文件上传的multipart/form-data类型的POST请求时
2.Spring MVC会将上传的文件数据自动绑定到file参数,
SpringMVC_第9张图片

具体代码如下:

 @RequestMapping("/myupload1")

    public Object upload1(@RequestPart("myimg") MultipartFile file){
        File file1=new File("D:\\Study\\java\\myimg.jpg");
        try {
            file.transferTo(file1);
            return true;
        }catch (IOException ioException){
            ioException.printStackTrace();
        }
        return false;
    }

这里的如果反复提交文件,文件会被覆盖,为了防止我们上传文件,被覆盖,我们修改了一下代码:

 @RequestMapping("/myupload2")
    public Object upload2(@RequestPart("myimg") MultipartFile file) {
        String fileName = UUID.randomUUID() + // 文件名
                file.getOriginalFilename().substring( // 文件后缀
                        file.getOriginalFilename().lastIndexOf("."));
        File saveFile = new File("D:\\Data\\" + fileName);
        try {
            file.transferTo(saveFile);
            return true;
        } catch (IOException e) {
            e.printStackTrace();
        }
        return false;
    }

3.1.7 获取Cookie

@RequestMapping("/getCk")
    public Object getCk(@CookieValue(value = "java",required = false) String java){
        return java;
    }

3.1.8 获取header

 @RequestMapping("/gethd")
    public Object getHeader(@RequestHeader("Host") String ht) {
        return "Host -> " + ht;
    }

3.1.9 获取Seesion

   /**
     * 存储 session
     */
    private static final String SESSION_KEY = "USERINFO_SESSION_KEY";

    @RequestMapping("/setsess")
    public void setSess(HttpServletRequest request) {
        HttpSession session = request.getSession();
        session.setAttribute(SESSION_KEY, "zhangsan");
    }


    /**
     * 获取 session
     */
    @RequestMapping("/getsess")
    public Object getSession(@SessionAttribute(SESSION_KEY) String name) {
        return "session->" + name;
    }

3.2 返回数据

3.2.1 返回静态页面

SpringMVC_第10张图片

3.2.2 返回非静态页面

SpringMVC_第11张图片

四.其他

补充以下请求转发和充定向的区别:

  1. 执行位置:
    重定向:是在客户端(浏览器)发生的,即在服务器端处理完当前请求后,服务器会发送一个特殊的HTTP响应状态码(302或者303)和一个新的URL给客户端,然后客户端会重新向新的URL发送请求,实现页面跳转。
    请求转发:是在服务器端发生的,即在服务器端处理完当前请求后,服务器会将请求转发到指定的目标URL,并由服务器端直接返回目标URL对应的响应,客户端并不知道页面的跳转。

  2. URL变化:
    重定向:会改变浏览器的URL地址,因为在重定向后客户端会重新向新的URL发送请求,所以浏览器的地址会变成新的URL。
    请求转发:浏览器的URL地址不会改变,因为请求转发是服务器端直接转发请求,客户端并不知道页面的实际跳转。
    SpringMVC_第12张图片

  3. 请求对象和响应对象:
    重定向:在重定向中,客户端会发送两次请求,第一次请求由服务器处理并发送重定向响应,第二次请求是客户端根据重定向响应重新发送的。
    请求转发:在请求转发中,只有一次请求,请求是直接由服务器处理的,并直接将响应返回给客户端。

  4. 数据传递:
    重定向:由于两次请求,因此数据传递比较麻烦,一般通过URL参数或Session来传递数据。
    请求转发:由于只有一次请求,因此数据传递相对简单,可以通过请求属性(Request Attribute)来传递数据。

  5. 适用场景:
    重定向:适用于页面跳转后,客户端需要刷新或新加载数据的情况,例如表单提交成功后的跳转、登录成功后的跳转等。
    请求转发:适用于页面跳转后,客户端不需要刷新或新加载数据的情况,例如服务器内部的页面跳转、过滤器的页面跳转等。

你可能感兴趣的:(javaEE进阶,spring,boot,java,后端)