目录
[🚩学习Spring MVC](#🚩学习Spring MVC)
🚩学习Spring MVC
既然是 Web 框架, 那么当⽤⼾在浏览器中输⼊了 url 之后,我们的 Spring MVC 项⽬就可以感知到⽤⼾的请求, 并给予响应.
咱们学习Spring MVC, 重点也就是学习如何通过浏览器和⽤⼾程序进⾏交互
主要分以下三个⽅⾯:
- 建⽴连接:将⽤⼾(浏览器)和 Java 程序连接起来,也就是访问⼀个地址能够调⽤到我们的Spring 程序。
- 请求: ⽤⼾请求的时候会带⼀些参数,在程序中要想办法获取到参数, 所以请求这块主要是 获取参数的功能.
- 响应: 执⾏了业务逻辑之后,要把程序执⾏的结果返回给⽤⼾, 也就是响应.
⽐如⽤⼾去银⾏存款
- 建⽴连接: 去柜台
- 请求: 带着银⾏卡, ⾝份证去存款
- 响应: 银⾏返回⼀张存折.
对于 Spring MVC 来说,掌握了以上 3 个功能就相当于掌握了 Spring MVC
上一章我们学了用spring mvc进行从客户端发出的请求中获取参数的功能。
- 1.传递数组 同一个请求参数有多个时,会自动封装成数组
- 2.传递集合 @RequestParam
- 3.传递JSON @RequestBody (最重要,将json语句转成对象)
- 4.上传文件 @RequestPart
- 5.Cookie & Session & Header
<1>结合传统的获取方式
<2>简洁获取方式(注解获取)
@CookieValue
@SessionAttribute
@RequestHeader
cookie和Session的区别,两者都是会话机制,会话就相当于对话,cookie是客户端机制,session是服务器机制,它们之间是由sessionId作为桥梁进行关联的。在Cookie中保存Session ID,然后服务器根据这个ID来管理和存取Session数据,从而平衡安全性和性能。
这一章通过学习spring MVC如何返回响应给客户端。
🎈返回静态网页
创建前端页面index.html,注意路径,路径是在src/main/resources/static路径下。
html前端代码:
后端代码:
@RequestMapping("/return2") @Controller public class ReturnController2 { @RequestMapping("/index") public String returnIndex(){ return "/index.html"; } }
返回的是index.html的视图
我们如何返回index.html中的数据呢?
我们就需要用到注解@RestController。
@RestController包含了@Controller和@ResponseBody,如果我们想返回视图就加上@Controller,如果我们想返回视图我们需要在@Controller的基础上加上@ResponseBody注解,因为@RestController是包含了@Controller和@ResponseBody注解,只有@RestController才能返回数据信息
单有@ResponseBody返回数据是不行的,我们需要@Controller告诉spring帮我们管理这个,后续我们要访问这段代码的时候,才能访问到。@Controller是类注解,能让spring管理着这个类,需要访问的时候,我们就可以访问。
综上所述:返回数据【@Controller+@ResponseBody】或者【@RestController】
返回视图 @Controller
- @Controller : 定义⼀个控制器, Spring 框架启动时加载, 把这个对象交给Spring管理.
- @ResponseBody : 定义返回的数据格式为⾮视图, 返回⼀个 text/html 信息
@Target
@Target ({ElementType.TYPE})表示类类型(修饰的是对象)
@Retention(RetentionPolicy.RUNTIME)表示生命周期
@RestController
@Controller+@ResponseBody
🎈返回数据@ResponseBody
@ResponseBody可以修饰类也可以修饰方法。
- 修饰类的时候,表示这个类下的所有方法,返回的均为数据
如果一个类中的所有方法返回的都是数据,我们就把这个注解加在类上。
- 修饰方法时,表示该方法返回的是数据
🎈返回html代码片段
@ResponseBody
@RequestMapping("/returnHtml")
public String returnHtml(){
return "<h1>返回HTML代码片段<h1>";
}
🎈返回JSON
当我们接口返回的是String时,content-Type是text/html
@ResponseBody @RequestMapping("/returnDate") public String returnIndex2(){ return "查看视图需要的数据"; }
当我们的接口返回的是对象时,content-Type自动设置成application/json
//返回JSON @ResponseBody @RequestMapping("/returnJson1") public Person returnJson(){ Person person=new Person(); person.setAge(20); person.setName("张老师"); person.setId(1); return person; }
@ResponseBody @RequestMapping("/returnJson2") public Map<Integer,String> returnJson2(){ Map<Integer,String>map=new HashMap<>(); map.put(1,"张三"); map.put(2,"李四"); map.put(3,"王五"); return map; }
🎈设置状态码
@ResponseBody
@RequestMapping("/setStatus")
public String setStatus(HttpServletResponse response){
response.setStatus(401);
return "设置状态码";
}
🎈设置Header
@ResponseBody
@RequestMapping(value = "/setHeader",produces = "application/json;charset=utf-8")
public String setHeader(HttpServletResponse response){
return "{\"ok\",1}";
}
不生气,不吃醋,就开开心心的就好了。