SpringMVC 学习笔记
- SpringMVC框架概述
- SpringMVC 基本使用
- @RequestMapping 注解
- SpringMVC 获取请求参数
- SpringMVC 操作域对象
- SpringMVC的视图
- RESTful
SpringMVC框架概述
- MVC 的概念
MVC是一种软件架构的思想,将软件按照模型、视图、控制器来划分
M:Model,模型层,指工程中的JavaBean,作用是处理数据
V:View,视图层,指工程中的html或jsp等页面,作用是与用户进行交互,展示数据
C:Controller,控制层,指工程中的servlet,作用是接收请求和响应浏览器 - SpringMVC 特点
基于原生的Servlet,通过了功能强大的前端控制器DispatcherServlet,对请求和响应进行统一处理
SpringMVC 基本使用
@RequestMapping 注解
- 功能:@RequestMapping注解的作用就是将请求和处理请求的控制器方法关联起来,建立映射关系。
- 可以用来修饰类或方法
(1)修饰类:设置映射请求的请求路径的初始信息
(2)修饰方法:设置映射请求请求路径的具体信息 - 常用属性
(1)value:设定要匹配的请求地址(可为多个)
(2)method:设定要匹配的请求方式(可为多个) - SpringMVC支持ant风格的路径
?:表示任意的单个字符
* :表示任意的0个或多个字符
**:表示任意的一层或多层目录 - 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 获取请求参数
- 通过控制器方法的形参获取请求参数
<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";
}
注意:如果请求中有多个同名的参数,应在形参处使用对象数组接收。
- @RequestParam 注解
(1)value属性:指定为形参赋值的请求参数的参数名
(2)设置是否必须传输此请求参数,默认值为true(此时若请求中没有此名称的参数,则会在浏览器端报错 400)
(3)defaultValue:如果地址中为传值或传的值为空,则用该属性的值注入给形参。 - @RequestHeader 与 @CookieValue
与@RequestParam 类似,也有上述三个属性。 - 通过对象获取请求参数
<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 操作域对象
- 使用ModelAndView向request域对象共享数据
@RequestMapping("testModelAndView")
public ModelAndView testModelAndView(){
ModelAndView mav = new ModelAndView();
mav.addObject("hello","hello modelandview");
mav.setViewName("success");
return mav;
}
- 使用 Model ModelMap Map 向request域对象共享数据
Model、ModelMap、Map类型的参数其实本质上都是 BindingAwareModelMap 类型的
用法也基本类似
@RequestMapping("/testModel")
public String testModel(Model model){
model.addAttribute("testScope", "hello,Model");
return "success";
}
- 操作 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的视图
- 当控制器方法中所设置的视图名称没有任何前缀时,此时的视图名称会被SpringMVC配置文件中所配置的视图解析器解析,视图名称拼接视图前缀和视图后缀所得到的最终路径,会通过转发的方式实现跳转。
- 当设置的视图名称前缀为 forword:时,创建InternalResourceView视图,会通过转发的方式实现跳转。
- 当设置的视图名称前缀为 redirect:时,创建RedirectView视图,会通过重定向的方式实现跳转。
- 如果仅仅需要实现页面跳转,可使用视图控制器view-controller(在 springMVC 的配置文件中配置)
<mvc:view-controller path="/testView" view-name="success"></mvc:view-controller>
RESTful
- 实现:具体说,就是 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请求方式 |
- HiddenHttpMethodFilter
(1)作用:浏览器端无法直接提交 put 或 delete 请求,HiddenHttpMethodFilter 可以将浏览器发出的 post 请求转换为 put 或 delete 。
(2)HiddenHttpMethodFilter 处理put和delete请求的条件:
当前请求的请求方式必须为post
当前请求必须传输请求参数_method
满足以上条件,HiddenHttpMethodFilter 过滤器就会将当前请求的请求方式转换为请求参数_method的值,因此请求参数_method的值才是最终的请求方式