企业国际网站建设,中国制造网服务种类,建设个人网站第一步这么做,网址被禁止访问怎么办文章目录 一、Spring Boot Web MVC 概念二、状态码三、其他注解四、响应操作 一、Spring Boot Web MVC 概念
Spring Web MVC 是⼀个 Web 框架#xff0c;一开始就包含在Spring 框架里。
1. MVC 定义
软件⼯程中的⼀种软件架构设计模式#xff0c;它把软件系统分为模型、视… 文章目录 一、Spring Boot Web MVC 概念二、状态码三、其他注解四、响应操作 一、Spring Boot Web MVC 概念
Spring Web MVC 是⼀个 Web 框架一开始就包含在Spring 框架里。
1. MVC 定义
软件⼯程中的⼀种软件架构设计模式它把软件系统分为模型、视图和控制器三个基本部分 2. 什么是Spring MVC MVC 是⼀种架构设计模式, 也⼀种思想, ⽽ Spring MVC 是对 MVC 思想的具体实现 Spring MVC 是⼀个实现了 MVC 模式的 Web 框架 Spring Boot 只是实现Spring MVC的其中⼀种方式而已 Spring Boot 实现了MVC思想后就被称为Spring MVC可以实现 web功能 Spring Boot 可以添加很多依赖, 借助这些依赖实现不同的功能. Spring Boot 通过添加Spring Web MVC框架, 来实现web功能 Spring Boot 结合自身特点的情况如下图不过核心依旧没变 3. Spring Boot 不同的传参介绍
普通传参, 也就是通过查询字符串来传参form-datax-www-form-urlencodedraw可以上传任意格式的⽂本可以上传text、json、xml、html等
4. Spring Boot 不同的传参方式 如果使用的是基本类型必须要传值不然会报错因为基本类型无法被赋值null 1传递单个参数
限制方法
RequestMapping(value demo1,method RequestMethod.PUT)
public String demo1(String name){return 接收到的name: name;
}不限制方法
RequestMapping(demo1)
public String demo1(String name){return 接收到的name: name;
}2传递多个参数 多个参数发送的时候顺序是无所谓的 RequestMapping(demo2)
public String demo2(String name, Integer age){return 接受到的name: name age: age;
}3传递对象
RequestMapping(demo3)
public String demo3(Person person){return person.toString();
}RequestMapping(demo4)
public String demo4(RequestParam(name) String username){return 接收到的name: username;
}如果进行了重命名就必须要使用RequestParam注解里的名字 想要把name变成非必传参数
计算机这边正规的还是name但是程序员这边是用username代替了name
4传递数组/集合
RequestMapping(demo5)
public String demo5(String[] str){return 接收到的数组 str.toString() ,长度是 str.length;
}如果传的是一个列表idea会把列表默认为数组需要一个RequestParam注解才能让idea知道这个是列表 RequestMapping(/demo6)
public String m7(RequestParam(required false,defaultValue zhangsan,lisi,wangwu,zhaoliu) ListString listParam){return 接收到的参数listParam: listParam ,长度:listParam.size();
}5传递JSON数据 Json 只能接收正文的而且只能接收JSON字符串格式 工作中上面四种传参方式都不常用比起传单个/多个数据还是更倾向于传对象但是上述方法太过繁琐我们一般使用JSON传递数据 概念本质上是一个字符串有着自己的格式和语法可以描述数据信息
语法 1数据在 键值对(Key/Value) 中 2数据由逗号 , 分隔 3对象⽤ {} 表⽰ 4数组⽤ [] 表⽰ 5值可以为对象, 也可以为数组, 数组中可以包含多个对象
传递方法 接收JSON对象, 需要使⽤ RequestBody 注解 原理赋值是要keyXXX的格式但是JSON本质是一个字符串是一整个数据需要转换 二、状态码
http状态码不是后端定义的 5XX通常指服务端发生错误4XX通常指客户端发生错误3XX通常是重定向2XX通常表示成功 业务状态码后端定义的无法作假
三、其他注解
1. 获取URL中参数PathVariable PathVariable用来获取url路径上的数据绑定 RequestMapping(/demo8/{name}/{wendiage})
public String demo8(PathVariable String name, PathVariable(wendiage) Integer age){return 解析的name: name , age: age;
}查找url的时候要准确对应
2. 上传文件RequestPart
RequestMapping(/demo9)
public String demo9(RequestPart MultipartFile file) throws IOException {System.out.println(file.getOriginalFilename());file.transferTo(new File(D:/else/ file.getOriginalFilename()));return success;
}3. 获取Cookie/Session 传统获取方式简洁注解获取方式 这两个都是会话机制 1 概念理解
Cookie Cookie 相当于学生证注册完成之后可以让保安知道是该学校的学生并完成一系列操作
问题是可以伪造的
Session 会话⼀个客户与服务器之间的不中断的请求响应
本质上是个“哈希表”用来存储用户的信息确保服务器能够分辨出请求从属于哪个对话/用户 1Session是由服务器生成的唯一的标识符。Session 默认是保存在内存中的. 如果重启服务器则 Session 数据就会丢失
2Session 是服务器端的无法伪造需要写代码手动添加。在内存中存储服务器重启后就会被清空
3问题分布式情况下会多创建Session Cookie 和 Session 的区别
Cookie 是客⼾端保存⽤⼾信息的⼀种机制Session 是服务器端保存⽤⼾信息的⼀种机制Cookie 和 Session之间主要是通过 SessionId 关联起来的Cookie 和 Session 经常会在⼀起配合使⽤. 但是不是必须配合
2 获取Cookie 代码
Spring 是基于servlet创建的所以servlet支持的Spring 都支持
//拿到所有的CookieRequestMapping(/demo10)public String demo10(HttpServletRequest request, HttpServletResponse response){//Spring内置对象Cookie[] cookies request.getCookies();StringBuilder builder new StringBuilder();if (cookies ! null){for (Cookie ck : cookies){builder.append(ck.getName() : ck.getValue());}}return Cookie信息 builder;}//使用注解的方式一个一个去拿
RequestMapping(/demo11)
public String cookie(CookieValue(kunjuan) String bite) {return bite bite;
}Cookie 的值需要设置浏览器 F12打开开发者工具可以手动设置但也因说明Cookie是可以伪造的, 也就是不安全的, 所以使⽤Cookie时, 后端需要进⾏Cookie校验 3 Session 代码
解析getSession 内部提取到请求中Cookie里的SessionId然后根据SessionId获取到对应的Session 对象, Session 对象⽤HttpSession来描述
Session 存储
RequestMapping(/setSess)
public String setsess(HttpServletRequest request) {// 获取Session对象HttpSession session request.getSession();if (session ! null) {session.setAttribute(username, java);}return session 存储成功;
}Session 读取
RequestMapping(/getSess1)
public String sess(HttpServletRequest request) {// 如果 session 不存在, 不会⾃动创建HttpSession session request.getSession(false);String username null;if (session ! null session.getAttribute(username) ! null) {username (String) session.getAttribute(username);}return username username;
}//通过注解只能拿到一个
RequestMapping(/getSession2)
public String getSession2(SessionAttribute(required false) String username){//SessionAttribute 默认是一个必传参数return username:username;
}RequestMapping(/getSession3)
public String getSession3(HttpSession session){String username (String)session.getAttribute(username);return 登录用户:username;
}
//HttpSession session 等同于 HttpSession session request.getSession(true)4 Cookie 和Session 的联系
1当一台电脑打开了多个浏览器每一个浏览器对应的服务器都会创建一个会话但是服务器之间是不知道这些浏览器都是由用户一个人打开的服务器每一个会话都会记录一个SessionId而每一个Id都会对应一个SessionValuevalue 里面存了许多值。
2后台服务器会把SessionId告诉客户端把SessionId存到Cookie里面后面再访问的时候就会带着SessionId去访问。服务器就可以根据SessionId 带你去拿到这个SessionId对象
3. 获取header
RequestMapping(/getHeader)
public String getHeader(HttpServletRequest request){String userAgent request.getHeader(User-Agent);return userAgent:userAgent;
}RequestMapping(/getHeader2)
public String getHeader2(RequestHeader(User-Agent) String userAgent){return userAgent:userAgent;
}四、响应操作
Http响应结果可以是数据, 也可以是静态页面也可以针对响应设置状态码, Header信息等多个注解时, 没有先后顺序, 先写哪个都可以 响应中的 Content-Type 常见取值有以下几种: text/html : body 数据格式是 HTMLtext/css : body 数据格式是 CSSapplication/javascript : body 数据格式是 JavaScriptapplication/json : body 数据格式是 JSON 1. 返回静态页面
Content-Type 为 text/htm
RestController
RequestMapping(/return)
public class returnController {RequestMapping(/htmlTest)public String htmlTest(){return /index.html;}
}Controller
RequestMapping(/return)
public class returnController {RequestMapping(/index)public String htmlTest2(){return /index.html;}
}1解析
RestController RestController 定义返回的数据格式为非视图, 返回⼀个 text/html 信息即返回的是正文信息 Controller Controller 定义⼀个控制器, Spring 框架启动时加载, 把这个对象交给Spring管理 ResponseBody ResponseBody定义返回的数据格式为⾮视图, 返回⼀个 text/html 信息 生命周期活在代码里编译后就消失了
2. 返回数据
可以修饰类也可以修饰方法。修饰类的时候表示这个类下的所有方法返回的均为数据修饰方法时表示该方法返回的是数据
ResponseBody
RequestMapping(/index2)
public String htmlTest3(){return /index.html;
}Content-Type 为 text/htm
3. 返回HTML代码片段
ResponseBody
RequestMapping(/returnHtml)
public String returnHtml(){return h1返回HTML代码片段/h1;
}Content-Type 为 text/htm
4. 返回JSON
ResponseBody
RequestMapping(/returnJson)
public Person returnJson(){Person person new Person();person.setId(1);person.setName(zhangsan);person.setAge(7);return person;
}当我们的接口返回的是对象时Content-Type 为 application/json
5. 设置状态码
Spring MVC会根据我们⽅法的返回结果自动设置响应状态码, 程序员也可以⼿动指定状态码
ResponseBody
RequestMapping(/setStatus)
public String setStatus(HttpServletResponse response){response.setStatus(401);//通常表示没有登录return 设置状态码;
}6. 设置header
ResponseBody
RequestMapping(value /r1,produces application/json;charsetutf-8)
public String r1(HttpServletResponse response){//设置headerresponse.setHeader(myhead,myhead);return {OK:1};
}consumes限制能够处理的请求不是这个请求的处理不了produces设置返回的内容类型