SpringMVC 学习笔记

  • SpringMVC框架概述
  • SpringMVC 基本使用
  • @RequestMapping 注解
  • SpringMVC 获取请求参数
  • SpringMVC 操作域对象
  • SpringMVC的视图
  • RESTful


SpringMVC框架概述

  1. MVC 的概念
    MVC是一种软件架构的思想,将软件按照模型、视图、控制器来划分
    M:Model,模型层,指工程中的JavaBean,作用是处理数据
    V:View,视图层,指工程中的html或jsp等页面,作用是与用户进行交互,展示数据
    C:Controller,控制层,指工程中的servlet,作用是接收请求和响应浏览器
  2. SpringMVC 特点
    基于原生的Servlet,通过了功能强大的前端控制器DispatcherServlet,对请求和响应进行统一处理

SpringMVC 基本使用

@RequestMapping 注解

  1. 功能:@RequestMapping注解的作用就是将请求和处理请求的控制器方法关联起来,建立映射关系。
  2. 可以用来修饰类或方法
    (1)修饰类:设置映射请求的请求路径的初始信息
    (2)修饰方法:设置映射请求请求路径的具体信息
  3. 常用属性
    (1)value:设定要匹配的请求地址(可为多个)
    (2)method:设定要匹配的请求方式(可为多个)
  4. SpringMVC支持ant风格的路径
    ?:表示任意的单个字符
    * :表示任意的0个或多个字符
    **:表示任意的一层或多层目录
  5. SpringMVC 支持路径中的占位符
    SpringMVC路径中的占位符常用于RESTful风格中,可以将请求路径中的某些数据通过路径的方式传输到服务器中。
<a th:href="@{/testRest/1/admin}">测试路径中的占位符-->/testRest</a><br>
@RequestMapping("/testRest/{id}/{username}")
public String testRest(@PathVariable("id") String id, @PathVariable("username") String username){
    System.out.println("id:"+id+",username:"+username);
    return "success";
}

SpringMVC 获取请求参数

  1. 通过控制器方法的形参获取请求参数
<a th:href="@{/testParam(username='admin',password=123456)}">测试获取请求参数-->/testParam</a><br>
@RequestMapping("/testParam")
public String testParam(String username, String password){
    System.out.println("username:"+username+",password:"+password);
    return "success";
}

注意:如果请求中有多个同名的参数,应在形参处使用对象数组接收。

  1. @RequestParam 注解
    (1)value属性:指定为形参赋值的请求参数的参数名
    (2)设置是否必须传输此请求参数,默认值为true(此时若请求中没有此名称的参数,则会在浏览器端报错 400)
    (3)defaultValue:如果地址中为传值或传的值为空,则用该属性的值注入给形参。
  2. @RequestHeader 与 @CookieValue
    与@RequestParam 类似,也有上述三个属性。
  3. 通过对象获取请求参数
<form th:action="@{/testpojo}" method="post">
    用户名:<input type="text" name="username"><br>
    密码:<input type="password" name="password"><br>
    性别:<input type="radio" name="sex" value="男">男<input type="radio" name="sex" value="女">女<br>
    年龄:<input type="text" name="age"><br>
    邮箱:<input type="text" name="email"><br>
    <input type="submit">
</form>
@RequestMapping("/testpojo")
public String testPOJO(User user){
    System.out.println(user);
    return "success";
}
//最终结果-->User{id=null, username='张三', password='123', age=23, sex='男', email='123@qq.com'}

SpringMVC 操作域对象

  1. 使用ModelAndView向request域对象共享数据
@RequestMapping("testModelAndView")
    public ModelAndView testModelAndView(){
        ModelAndView mav = new ModelAndView();
        mav.addObject("hello","hello modelandview");
        mav.setViewName("success");
        return mav;
    }
  1. 使用 Model ModelMap Map 向request域对象共享数据
    Model、ModelMap、Map类型的参数其实本质上都是 BindingAwareModelMap 类型的
    用法也基本类似
@RequestMapping("/testModel")
public String testModel(Model model){
    model.addAttribute("testScope", "hello,Model");
    return "success";
}
  1. 操作 session 域和 application 域时,可使用原生的 ServletAPI
@RequestMapping("/testSession")
public String testSession(HttpSession session){

    session.setAttribute("testSessionScope", "hello,session");
    
	ServletContext application = session.getServletContext();
    application.setAttribute("testApplicationScope", "hello,application");
    
    return "success";
}

SpringMVC的视图

  1. 当控制器方法中所设置的视图名称没有任何前缀时,此时的视图名称会被SpringMVC配置文件中所配置的视图解析器解析,视图名称拼接视图前缀和视图后缀所得到的最终路径,会通过转发的方式实现跳转。
  2. 当设置的视图名称前缀为 forword:时,创建InternalResourceView视图,会通过转发的方式实现跳转。
  3. 当设置的视图名称前缀为 redirect:时,创建RedirectView视图,会通过重定向的方式实现跳转。
  4. 如果仅仅需要实现页面跳转,可使用视图控制器view-controller(在 springMVC 的配置文件中配置)
<mvc:view-controller path="/testView" view-name="success"></mvc:view-controller>

RESTful

  1. 实现:具体说,就是 HTTP 协议里面,四个表示操作方式的动词:GET、POST、PUT、DELETE。
    (1)它们分别对应四种基本操作:GET 用来获取资源,POST 用来新建资源,PUT 用来更新资源,DELETE 用来删除资源。
    (2)REST 风格提倡 URL 地址使用统一的风格设计,从前到后各个单词使用斜杠分开,不使用问号键值对方式携带请求参数,而是将要发送给服务器的数据作为 URL 地址的一部分,以保证整体风格的一致性。

操作

传统方式

REST风格

查询操作

getUserById?id=1

user/1–>get请求方式

保存操作

saveUser

user–>post请求方式

删除操作

deleteUser?id=1

user/1–>delete请求方式

更新操作

updateUser

user–>put请求方式

  1. HiddenHttpMethodFilter
    (1)作用:浏览器端无法直接提交 put 或 delete 请求,HiddenHttpMethodFilter 可以将浏览器发出的 post 请求转换为 put 或 delete 。
    (2)HiddenHttpMethodFilter 处理put和delete请求的条件:
    当前请求的请求方式必须为post
    当前请求必须传输请求参数_method
    满足以上条件,HiddenHttpMethodFilter 过滤器就会将当前请求的请求方式转换为请求参数_method的值,因此请求参数_method的值才是最终的请求方式