SpringMVC

简介: SpringMVC

一. SpringMVC 定义

MVC 是Model View Controller 的缩写,它是软件工程中的一种软件架构模式,它把软件系统分为模型、试图和控制器三个基本部分。


• Model(模型):是应用程序中处理应用程序数据逻辑的部分。通常模型对象负责在数据库存取数据。


• View(视图):是应用程序中处理数据显示的部分。通常视图是依据数据创建的。


• Controller(控制器):是应用程序中处理用户交互的部分。通常控制器负责从视图读取数据,控制用户输入,并向模型发送数据。

MVC 执行流程:


1. 用户的请求首先先到 Controller


2. Controller 将请求转发给Model


3. Model 处理业务并将数据结果给 Controller


4. Controller 会将数据给 View 引擎


5. View 转换数据生成最终的页面返回给用户

MVC和Spring MVC 的关系

MVC 是一种思想,而Spring MVC是对思想的具体实现


总的来说,Spring MVC是一个实现了 MVC 模式,并继承了 Servlet API 的 Web 框架。既然是 web 框架,那么当用户在浏览器中输入了 url 后,我们的Spring MVC 项目就可以感知到用户的请求。

二. Spring MVC 创建和连接

创建spring boot 项目时,勾选上 Spring Web 模块即可

接下来实现用户到Spring 程序的互联互通:

//让 spring 框架启动时,加载
@Controller
//返回非页面数据
@ResponseBody
//路由规则注册
@RequestMapping("/test")
public class TestController {
    @RequestMapping("/hello")
    public String sayHello(){
        return "hello world";
    }
}

这样实现之后,本地访问 localhost:8080/test/hello  时就能打印“hello world"的信息


2.1 @RequestMapping 注解介绍

@RequestMapping 是 Spring Web 应用程序中最常被用到的注解之一,它是用来注册接口的路由映射的。  

get 请求的 3 种写法:

//写法一
@RequestMapping("/getMethod")
//写法二
@RequestMapping(value = "/getMethod",method = RequestMethod.GET)
//写法三
@GetMapping("/getMehod")

post 请求的 2 中写法

//写法一
@RequestMapping(value = "/postMethod",method = RequestMethod.POST)
//写法二
@PostMapping("/postMethod")

三. 参数的获取

3.1 传递单个/多个参数

    @RequestMapping("/getname1")
    public String getName(HttpServletRequest request){
        return "Name: "+request.getParameter("name");
    }
 
    @RequestMapping("getname")
    //此处的参数名需和请求中的参数名相同,多个参数也一样
    public String getName(String name){
        return "Name: "+name;
    }
 
    @RequestMapping("/getparas")
    public String getParas(String name,Integer age){
        return "Name: "+name+" Age: "+age;
    }

3.2 传递一个对象

//创建一个User类
@Data
public class User {
    private String name;
    private int age;
    private String password;
}
 
@RequestMapping("user")
public  User getUserInfo(User user){
    return user;
}

3.3 @RequestBody 接收JSON对象

    @RequestMapping("/getjson")
    //@RequestBody只能修饰参数
    public User user(@RequestBody User user){
        return user;
    }

3.4 参数重命名

    @RequestMapping("getname")
    //value对应的是请求中的参数名
    //required=false 参数设置为非必须的(如果不设置,请求中若没有该参数名,则返回400)
    public String getName(@RequestParam(value = "n",required = false) String name, @RequestParam(value = "p",required = false) String password){
        return "Name: "+name+" Password: "+password;
    }

3.5 从URL中获取参数-@PathVariable

    @RequestMapping("/url/{name}/{password}")
    public String getinfo(@PathVariable(value = "name") String n,@PathVariable(value = "password") String p){
        return n+": "+p;
    }

3.6 上传文件-@RequestPart

    @RequestMapping("file")
    public String saveFile(@RequestPart("myfile")MultipartFile file) throws IOException {
        //打印myfile
        System.out.println(file.getName());
        //打印秋招.png
        System.out.println(file.getOriginalFilename());
        //生成唯一ID | UUID=全球唯一ID -> MAC + 随机种子 + 加密算法
        String name=UUID.randomUUID().toString().replace("-","");
        name+=file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf("."));
        String path="E:\\image\\"+name;
        file.transferTo(new File(path));
        return path;
    }

3.7 获取cookie - @CookieValue

    @RequestMapping("/cookie")
    public String getCookie(@CookieValue(value = "mycookie" ,required = false)String value){
        return "Cookie:"+value;
    }

3.8 session 的获取与存储-@SessionAtribute

    @RequestMapping("/set_session")
    public String setSession(HttpServletRequest request){
        HttpSession session=request.getSession(true);
        if(session!=null){
            session.setAttribute("name","张三");
            return "session set true";
        }else {
            return "session set false";
        }
    }
    @RequestMapping("/get_session")
    public String getSessionValue(@SessionAttribute(value ="name" ,required = false) String value){
        return "name: "+value;
    }

3.9 获取header-@RequestHeader

    @RequestMapping("/getheader")
    public String getHeader(@RequestHeader(value = "User-Agent",required = false)String user){
        return "User-Agent: "+user;
    }

四. 请求转发和请求重定向

forward VS redirect

• forward 是请求转发

• redirect 是请求重定向

使用对比:

@Controller
public class Redirect {
    @RequestMapping("/index")
    public String index(){
        return "redirect:/index.html";
    }
    @RequestMapping("index2")
    public String index2(){
        return "forward:/index.html";
    }
}

举例说明:


例如你(浏览器)告诉你妈妈(服务器),你想吃牛肉,如果你妈妈,说好,我帮你去买(服务器帮你做),这就是 forward 请求转发;如果你妈妈让你自己去买,那么就是请求重定向.


forward 和 redirect 区别:


• 请求重定向将请求重新定位到资源,请求转发服务器转发


• 请求重定向地址发生变化,请求转发地址不发生变化


• 请求重定向与直接访问新地址效果一致,不存在原来的外部资源不能访问;请求转发服务器端转发有可能造成原外部资源不能访问

相关文章
|
Java Spring
81.【SpringMVC】(二)
81.【SpringMVC】
105 0
|
缓存 前端开发 Java
|
前端开发 JavaScript Java
|
5月前
|
前端开发 Java 数据格式
|
5月前
|
JSON 前端开发 Java
|
4月前
|
前端开发 Java 数据格式
SpringMVC(三)
SpringMVC(三)
17 0
|
6月前
|
JSON 前端开发 Java
SpringMVC
SpringMVC
48 0
|
前端开发 应用服务中间件
SpringMVC4
SpringMVC4
44 0
|
前端开发 Java Spring
你真的了解SpringMVC吗?(下)
你真的了解SpringMVC吗?(下)
59 0
|
前端开发 Java Maven
SpringMVC1
SpringMVC1
83 0
SpringMVC1