一、什么是MVC
MVC就是一种思想,而Spring MVC是对MVC思想的具体实现
MVC是Model View Controller的所缩写,是一种软件架构模式,它将软件系统Fenwick墨香,视图和控制器三个基本部分。
Model:是应用程序中用于处理应用程序数据逻辑的部分。通常模型对象负责在数据库中存取数据
View:是应用程序中处理数据显示的 部分,通常视图是一句模型数据创建的
Controller:是应用程序中处理用户交互的部分。通常控制器负责从视图中读取数据,控制用户输入并且向模型发送数据。
MVC执行流程:
用户的请求首先先到Controller
Controller将请求转发给Model
Model处理业务并且将数据结果给Controller
Controller会将数据给View引擎
View转换数据生成最终的页面给用户
二、什么是Spring MVC
Spring MVC是一个Web框架,是基于Servlet API构建的框架。
它是对MVC思想的具体实现。
在构建项目时,Spring Web就是Spring MVC框架,是Spring boot里的核心。
三、Spring MVC功能
1.连接的功能:将用户浏览器和java程序连接起来,也就是访问一个地址能够调用到Spring程序。
2.获取参数的功能:用户访问的时候会带一些参数,在程序中获取到参数
3.返回数据的功能:执行了业务逻辑以后,要把程序的执行结果返回给用户
🍅Spring MVC创建和连接
🎈使用@RequestMapping
使用@RequestMapping来实现URL路由映射,使得浏览器连接程序。
@RestController
//可以设置请求类型,规定路径,也可以只写一个name
//name小写
@RequestMapping(path="/sayhi",method = RequestMethod.GET) //必须通过path来
public class TestController {@RequestMapping("/sayhi")public String sayHi(){return "hello";}
}
访问http://localhost:8080/test/sayhi
🎈@GetMapping
实现HTTP连接,但是只支持GET类型的请求。
如果有规定之只能使用get类型的请求,就直接使用
@GetMapping("/sayhi2")public String sayHi2(){return "hello";}
访问2http://localhost:8080/test/sayhi2
@PostMapping就是只支持Post类型的请求。
🍅获取参数
🎈获取单个参数
得到name。
@RestController
@RequestMapping("/test")
public class TestController2 {@RequestMapping("/getname")
//使用servletpublic String getName(HttpServletRequest request){return "Name:"+request.getParameter("name");}@RequestMapping("/getnam2")
//使用Spring的方式
public String getName2(String name) { //依赖注入return "Name:" + name;
}
🎈上传文件
@RequestMapping("/upload")public String upLoad(@RequestPart("myfile")MultipartFile file) throws IOException {//1.生成一个唯一的id | UUID = 全球唯一ID -> MAC + 随机种子 + 加密算法String name = UUID.randomUUID().toString().replace("-","");//2.得到源文件的后缀名name += file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf("."));String path = "D:\\image\\ " + name;file.transferTo(new File(path));return path;}
🎈获取Cookie/Session/header
获取Cookie
//获取cookie@RequestMapping("/getcookie")public String getCookie(@CookieValue("java")String ck){return ck;}
获取session
//设置session@RequestMapping("/set_session")public String doPostConstruct(HttpServletRequest request){HttpSession session = request.getSession();if (session != null){session.setAttribute(_SESSION_KEY,"张三");return "session set success";}else {return "session set fail";}}//获取session@RequestMapping("/getsession")public String getSession(@SessionAttribute(required = false,value = "SESSION_KEY")String name){return name;}
获header
@RequestMapping("/header")
@ResponseBodypublic String header(@RequestHeader("User-Agent") String userAgent) {return "userAgent:"+userAgent;
🍅返回数据
🎈 返回静态页面
首先创建一个静态页面:
@Controller
public class TestController3 {@RequestMapping("/index")public String index(){return "hello.html";}}
🎈返回text/html
@Controller
@ResponseBody//当成数据返回
public class TestController3 {@RequestMapping("/index")public String index(){return "hello.html";}
}
四、请求转发和请求重定向的区别
1.请求重定向(redirect)将请求重新定位到资源;
请求转发(forward)服务器端转发
2.请求重定向地址发生变化;
请求转发地址不发生变化
3.请求重定向与直接访问新地址效果一致,不存在原来的外部资源不能访问;
请求转发服务器端转发有可能会造成原外部资源不能访问