Spring MVC
创始人
2024-05-28 22:42:41
0

(一)什么是MVC?

  • Model(模型)是应用程序中用于处理应用程序数据逻辑的部分,通常负责在数据库中存储数据

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

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

(二)什么是Spring MVC?

1.构建在 Servlet (API) 之上的
2.是一个 Web 框架 (HTTP)
3.来自于 Spring webMVC 模块

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

总结来说,Spring MVC 是一个实现了 MVC 模式,并继承了 Servlet API 的 Web 框架。

(三)什么是SSM/SM框架?

  • 以前:SSM = Spring + Spring MVC + MyBatis

  • 新 SSM = SpringBoot + Spring Web (Spring MVC) + MyBatis = SSM 项目

  • 更新说法: SM 框架 (Spring Boot[Spring Web] + MyBatis)

注解

@RequestMapping

即可修饰类,也可以修饰方法,当修饰类和方法时,访问的地址是类 + 方法。
@RequestMapping("/hi")//简写,value为"/hi",method为GET
@RequestMapping(value = "/hi",method= RequestMethod.GET)//全写   GET
@RequestMapping(value = "/hi",method= RequestMethod.POST)//全写  POST

@GetMapping 和 PostMapping

GET的三种写法:
@RequestMapping("/hi")//简写,value为"/hi",method为GET
@RequestMapping(value = "/hi",method= RequestMethod.GET)//全写   GET
@GetMapping("/hi") // 直接使用GETMapping的方法
POST的两种写法:
@RequestMapping(value = "/hi",method = RequestMethod.POST)
@PostMapping("/index")// 直接使用PostMapping

返回数据

@ResponseBody

  • 返回前端页面(text/html): return "/index.html" 也就是返回一个 前端的页面文件路径

  • 返回数据:return "hello" 返回的是 数据内容

注意当我们返回的内容是数据的时候,要加@ResponseBody注解

组合注解:@RestController = @Controller+@ResponseBody

获取参数

(1)传递单个参数

传递单个单参数可以用方法中的参数来实现传参
@GetMapping("/getName")
public String getName(String name) {return "Name is " + name;
}

(2)传递对象

SpringMVC中可以自动实现参数赋值,如下Demo
@GetMapping("/getUser")
public String getUser(User user) {return user.toString();
}

(3)表单参数传递

@GetMapping("/getUser")
public String getUser(String name, int age, String gender) {User user = new User();user.setName(name);user.setAge(age);user.setGender(gender);return user.toString();
}

(4)后端参数重命名

假如前端代码的命名不好,需要我们后端重新命名,那么我们就可以通过使用 @RequestParam来重命名前后端的参数值。
@GetMapping("/getName")
public String getName(@RequestParam("n") String name) {return "Name is " + name;
}

注意:如果一个参数使用@RequestParam,那么默认前端就必须要传入这个参数值,否则网页就会报错。至于为什么,我们可以看一下@RequestParam的源码,如下图:

@GetMapping("/getName")
public String getName(@RequestParam(value = "n",required = false) String name) {return "Name is " + name;
}

(5)接收JSON对象

接收JSON对象使用@RequestBody.
注意JSON对象和普通对象不一样。接收的时要使用@RequestBody,当项目后端接受不到数据,就可以考虑是不是注解使用错了。
@RequestMapping(value = "/getUserJson",method = RequestMethod.POST)
public String getUser2(@RequestBody User user) {return user.toString();
}

(6)获取URL中的参数

@PathVariable

和前面get传参并不一样,而是直接路径URL传参,不再是?后面了,就好比下面的两个链接
www.blog_system.com/user?userId=1
www.blog_system.com/user/userId=1
@Controller
@ResponseBody
public class PostMappingDemo {//{}内的 就是在URL里的参数@PostMapping("/test/{name}/{password}")public String test(@PathVariable("name") String name,@PathVariable("password") String passWord) {System.out.println(name);System.out.println(passWord);return name+":"+passWord;}//中间可以穿插URL路径@PostMapping("/show/{username}/and/{password}")public void test2(@PathVariable("password") String passWord,@PathVariable("username")String name){System.out.println(name);System.out.println(passWord);}
}

(7)上传文件

@RequestPart

@ResponseBody
@Controller
public class PartDemo {@RequestMapping("/part")//MultipartFile 是表示文件的一个类public String partTest(@RequestPart("file") MultipartFile file) throws IOException {//1.确定文件根路径String path = "D:\\part";//2.获取唯一的文件名String fileName = UUID.randomUUID().toString().replace("-","");//3,获取文件的后缀String suffix  = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf("."));//4.最后的文件路径+文件名+文件后缀进行保存file.transferTo(new File(path+fileName+suffix ));return path+fileName+suffix+"上传成功";}
}

(8)Cookie/Session/header

Servlet中获取Request 和 Response对象在SpringMVC中也是可以使用的

①获取Cookie的两种方式

//1,Servlet时代 --- 获取Cookie对象
@RequestMapping("/getCookies1")
public void getCookies1(HttpServletRequest request, HttpServletResponse response) {Cookie[] cookies = request.getCookies();//获取所有的cookiefor (Cookie cookie:cookies){System.out.println(cookie.getName()+":"+cookie.getValue());}}
//2.MVC时代 --- @Cookie注解
@RequestMapping("/getCookies2")
public void getCookies2(@CookieValue("name") String name) {System.out.println("name:" + name);
}

②获取Header的两种方式

//1.Servlet时代 --- 获取Headers
@RequestMapping("/getHeader1")
public String getHeader1(HttpServletRequest request) {String userAgent = request.getHeader("User-Agent");System.out.println(userAgent);return userAgent;
}//2.SpringMVC时代 --- 获取Headers
@RequestMapping("/getHeader2")
public String getHeader2(@RequestHeader("User-Agent") String userAgent) {System.out.println(userAgent);return userAgent;
}

③Session的存储和获取

Session的存储和Servlet类似,都是使用HttpServletRequest来获取的
//1.设置Session
@RequestMapping("setSession")
public String setSession(HttpServletRequest request) {//设置HttpSession对象参数为 true (表示没有Session对象就创建一个session)HttpSession session = request.getSession(true);if (session != null) {session.setAttribute("userName", "GoodMan");}return "session存储成功";
}//2.读取Session
@RequestMapping("getSession")
public String getSession1(HttpServletRequest request) {//获取的时候要设置参数为 false (表示没有session也不重新创建)HttpSession session = request.getSession(false);String ret = "暂无 session 会话";if (session != null && session.getAttribute("userName") != null) {ret = "Session userName:" + 
q                            String.valueOf(session.getAttribute("userName"));}return ret;
}//3.使用注解读取Session -- 相比较而言就是简写了
@RequestMapping("getSession2")
public String getSession2
(@SessionAttribute(value = "userName", required = false) String userName) {return "Session userName:" + userName;
}

相关内容

热门资讯

喜欢穿一身黑的男生性格(喜欢穿... 今天百科达人给各位分享喜欢穿一身黑的男生性格的知识,其中也会对喜欢穿一身黑衣服的男人人好相处吗进行解...
发春是什么意思(思春和发春是什... 本篇文章极速百科给大家谈谈发春是什么意思,以及思春和发春是什么意思对应的知识点,希望对各位有所帮助,...
网络用语zl是什么意思(zl是... 今天给各位分享网络用语zl是什么意思的知识,其中也会对zl是啥意思是什么网络用语进行解释,如果能碰巧...
为什么酷狗音乐自己唱的歌不能下... 本篇文章极速百科小编给大家谈谈为什么酷狗音乐自己唱的歌不能下载到本地?,以及为什么酷狗下载的歌曲不是...
华为下载未安装的文件去哪找(华... 今天百科达人给各位分享华为下载未安装的文件去哪找的知识,其中也会对华为下载未安装的文件去哪找到进行解...
怎么往应用助手里添加应用(应用... 今天百科达人给各位分享怎么往应用助手里添加应用的知识,其中也会对应用助手怎么添加微信进行解释,如果能...
家里可以做假山养金鱼吗(假山能... 今天百科达人给各位分享家里可以做假山养金鱼吗的知识,其中也会对假山能放鱼缸里吗进行解释,如果能碰巧解...
四分五裂是什么生肖什么动物(四... 本篇文章极速百科小编给大家谈谈四分五裂是什么生肖什么动物,以及四分五裂打一生肖是什么对应的知识点,希...
一帆风顺二龙腾飞三阳开泰祝福语... 本篇文章极速百科给大家谈谈一帆风顺二龙腾飞三阳开泰祝福语,以及一帆风顺二龙腾飞三阳开泰祝福语结婚对应...
美团联名卡审核成功待激活(美团... 今天百科达人给各位分享美团联名卡审核成功待激活的知识,其中也会对美团联名卡审核未通过进行解释,如果能...