Model(模型)是应用程序中用于处理应用程序数据逻辑的部分,通常负责在数据库中存储数据
View(视图)是应用程序中处理数据显示的部分,通常视图是依据模型数据创建的。
Controller(控制器)是应用程序中处理用户交互的部分,通常从视图读取数据,控制用户输 ,并向模型发送数据。
1.构建在 Servlet (API) 之上的
2.是一个 Web 框架 (HTTP)
3.来自于 Spring webMVC 模块
MVC 是一种思想, Spring MVC 是对 MVC 思想的具体实现
总结来说,Spring MVC 是一个实现了 MVC 模式,并继承了 Servlet API 的 Web 框架。
以前:SSM = Spring + Spring MVC + MyBatis
新 SSM = SpringBoot + Spring Web (Spring MVC) + MyBatis = SSM 项目
更新说法: SM 框架 (Spring Boot[Spring Web] + MyBatis)
即可修饰类,也可以修饰方法,当修饰类和方法时,访问的地址是类 + 方法。
@RequestMapping("/hi")//简写,value为"/hi",method为GET
@RequestMapping(value = "/hi",method= RequestMethod.GET)//全写 GET
@RequestMapping(value = "/hi",method= RequestMethod.POST)//全写 POST
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
传递单个单参数可以用方法中的参数来实现传参
@GetMapping("/getName")
public String getName(String name) {return "Name is " + name;
}
SpringMVC中可以自动实现参数赋值,如下Demo
@GetMapping("/getUser")
public String getUser(User user) {return user.toString();
}
@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();
}
假如前端代码的命名不好,需要我们后端重新命名,那么我们就可以通过使用 @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;
}
接收JSON对象使用@RequestBody.
注意JSON对象和普通对象不一样。接收的时要使用@RequestBody,当项目后端接受不到数据,就可以考虑是不是注解使用错了。
@RequestMapping(value = "/getUserJson",method = RequestMethod.POST)
public String getUser2(@RequestBody User user) {return user.toString();
}
@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);}
}
@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+"上传成功";}
}
Servlet中获取Request 和 Response对象在SpringMVC中也是可以使用的
//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);
}
//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的存储和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;
}
上一篇:EXCEL-职业版本(2)
下一篇:什么是Hibernate框架?