SpringMVC

SpringMVC

SpringMVC(Spring Web MVC、Spring Web):是基于Servlet构建的原生Web框架。

1.什么是MVC

MVC(Model View Controller):是软件工程中的一种软件架构模式。分别为为模型、视图、控制器。各个部分实现不同的功能,方便开发。

视图:负责界面的显示

控制器:对请求参数处理和决定使用哪一个模型。

模型:执行业务逻辑和获取数据。

在这里插入图片描述

MVC是一种思想、Spring MVC是具体的实现,继承了Servlet API的Web框架。Spring功能的具体使用,在SpringMVC中得到了很大的体现,大部分Java项目都是SpringMVC项目,因此也是学习SpringMVC的原因。

2.请求映射到程序

对于用户发来的请求,如何实现请求到具体程序的映射呢?Spring MVC使用了一个DispatcherServlet来处理所有的HTTP请求。这个Servlet的作用是将请求分派到相应的Controller。因此我们需要在Controller对象提供一些映射信息,来保证我们的请求被准确分发。

路由映射:将用户请求的url,映射到具体的某一个方法的过程。

@Controller  //添加控制器
@ResponseBody //返回非view示图
@RequestMapping("/hello") //路由器规则注册
public class DemoController {
    @RequestMapping(value="/Hi")//路由器规则注册
    public Object sayHi(){
        return "Hi~~~";
    }
}

@RequestMapping:接口路由注册,既可以修饰类也可以修饰方法、method的参数指定url请求的方法的类型。

@PostMapping:接口路由注册,限制使用post方法。

@GetMapping:接口路由注册,限制使用get方法。

注意:请求映射标记需要具体到方法。SpringMvc默认返回的是视图(页面)。

3.获取参数

每一个请求方法都有两个隐藏参数,分别是HttpServletRequest和HttpServletResponse,如果需要使用,只需要在方法中声明即可。

1.获取单个参数

认识参数有关的注解:

  1. @RequestBody:。在Spring MVC中,一个请求方法中只能有一个@RequestBody参数。如果再次读取,stream已经关闭,会出现400错误,一般用于接收JSON格式的数据。

    @RequestMapping("/info")
    public Object person(@RequestBody Info info, Integer id){
        return  info.toString()+id;
    }
    
  2. @RequestParam:它可以映射URL查询参数(query string parameters)和表单数据(form data)。还可以对参数进行重命名和配置某个参数是否为必要参数,默认为true。设置非必要时,不存在则对象为null。

  3. @PathVariable:用于将URL路径参数绑定到方法的参数上。参数的类型只能是String类型

    @RequestMapping("/user/{id}/{name}")  
        public String getUser(@PathVariable("id") Integer id, @PathVariable String name) {  
            // 使用路径参数id执行相应的操作  
            return "User with ID: " + id;  
        }  
    
  4. @CookieValue(“cookieKey”):@CookieValue注解主要用于将请求的Cookie数据映射到控制器处理方法的参数上。其中,"cookieKey"是用来绑定和获取特定Cookie的键值。

    @GetMapping("/userinfo")  
    public String getUserInfo(@CookieValue("cookieKey") String cookieKey) {  
        // 从Cookie中获取用户的ID,并执行相应的操作  
        // ...  
        return "user-info"+cookieKey;  
    }  
    
  5. @SessionAttribute:@SessionAttributes(“user”)接收到请求之后,会自动根据请求的cookie匹配session,并拿到session中的属性user。可以设置必要or非必要。

  6. @RequestHeader(“User-Agent”):可以指定想要拿到的头部,赋给参数。

  7. 通过HttpServletRequest对象获取

        @RequestMapping("/hi")
        public Object sayHi(HttpServletRequest request, HttpServletResponse response){
            //根据参数获取,如何没有该参数会空指针异常
            String name = request.getParameter("name");
            return "Hi~~~" + name;
        }
    
  8. 直接通过参数映射获取(存在多个参数时,参数顺序没有关系)

      @RequestMapping("/Hey")
        public Object sayHey(String name){
            return "Hey~~~"+name;
        }
    
  9. 获取一个对象

    //属性名建议所有都小写
    @Data
    public class Info {
        private String name;
        private Integer age;
        private String sex;
    }
    
    @RequestMapping("/Info")
    public Object person(Info info, Integer id){
    return "id:"+ id+ " " +info.toString();
    }
    

2.传输文件

@RequsetPart(“key”):用于处理multipart/form-data类型的请求参数,它通常被用在文件上传的情况下。

@RequestMapping("/upload")
public Object upload(@RequestPart("file")MultipartFile multipartFile) throws IOException {
    //将文件保存到指定的路径
    multipartFile.transferTo(new File("D:\\gitee\\java\\springboot-demo\\img.png"));
    return "success";
}

4.请求转发和重定向

主要使用在页面跳转。

  1. forward:是请求转发

  2. redirect:请求重定向

  3. 定义不同:请求转发是服务器端实现的,服务器代为请求并将结果返回给客户端。而请求重定向是客户端的跳转,服务器返回新的URL地址给客户端,让客户端访问新的URL所指向的资源。

  4. 请求方不同:在请求转发中,客户端只需要发送一次请求,而在请求重定向中,客户端需要发送两次完全不同的请求。

  5. 最终URL地址不同:请求转发过程中,URL地址不变。而请求重定向中,URL地址发生了改变,显示的是最终跳转的地址。

URL地址给客户端,让客户端访问新的URL所指向的资源。
2. 请求方不同:在请求转发中,客户端只需要发送一次请求,而在请求重定向中,客户端需要发送两次完全不同的请求。
3. 最终URL地址不同:请求转发过程中,URL地址不变。而请求重定向中,URL地址发生了改变,显示的是最终跳转的地址。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

南 栀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值