目录
一、什么是MVC
二、什么是Spring MVC
三、Spring MVC功能
1、Spring MVC创建和连接
使用@RequestMapping
@GetMapping
2、获取参数
获取单个参数
上传文件
获取Cookie/Session/header
3、返回数据
返回静态页面
返回text/html
编辑四、请求转发和请求重定向的区别
MVC就是一种思想,而Spring MVC是对MVC思想的具体实现
MVC是Model View Controller的所缩写,是一种软件架构模式,它将软件系统Fenwick墨香,视图和控制器三个基本部分。
Model:是应用程序中用于处理应用程序数据逻辑的部分。通常模型对象负责在数据库中存取数据
View:是应用程序中处理数据显示的 部分,通常视图是一句模型数据创建的
Controller:是应用程序中处理用户交互的部分。通常控制器负责从视图中读取数据,控制用户输入并且向模型发送数据。
MVC执行流程:
用户的请求首先先到Controller
Controller将请求转发给Model
Model处理业务并且将数据结果给Controller
Controller会将数据给View引擎
View转换数据生成最终的页面给用户
Spring MVC是一个Web框架,是基于Servlet API构建的框架。
它是对MVC思想的具体实现。
在构建项目时,Spring Web就是Spring MVC框架,是Spring boot里的核心。
1.连接的功能:将用户浏览器和java程序连接起来,也就是访问一个地址能够调用到Spring程序。
2.获取参数的功能:用户访问的时候会带一些参数,在程序中获取到参数
3.返回数据的功能:执行了业务逻辑以后,要把程序的执行结果返回给用户
使用@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
实现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")
//使用servlet
public 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
//获取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")
@ResponseBody
public String header(@RequestHeader("User-Agent") String userAgent) {
return "userAgent:"+userAgent;
首先创建一个静态页面:
@Controller
public class TestController3 {
@RequestMapping("/index")
public String index(){
return "hello.html";
}
}
@Controller
@ResponseBody//当成数据返回
public class TestController3 {
@RequestMapping("/index")
public String index(){
return "hello.html";
}
}
1.请求重定向(redirect)将请求重新定位到资源;
请求转发(forward)服务器端转发
2.请求重定向地址发生变化;
请求转发地址不发生变化
3.请求重定向与直接访问新地址效果一致,不存在原来的外部资源不能访问;
请求转发服务器端转发有可能会造成原外部资源不能访问