SpringMVC中的常用注解
@Controller @Controller注解标注是一个类是Web控制器,其和@Component注解等价,只不过在Web层使用,其便于区分类的作用。 
@RequestMapping @RequestMapping是Spring Web应用程序中最常被用到的注解之一。 在对SpringMVC进行配置的时候,需要指定请求与处理方法之间的映射关系,这时候就需要使用@RequestMapping注解。该注解可以在控制器类的级别和其方法级别上使用。 @RequestMapping注解能够处理的HTTP请求方法有: GET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS, TRACE 。 为了能够将一个请求映射到一个特定的HTTP方法,需要在@RequestMapping中使用method参数声 明HTTP请求所使用的方法类型。如下示例,在 TestController 中添加请求映射方法 
返回类型:最常用的Controller 返回的类型()具体的返回的类型可以参考官方的文档:官方链接 String返回类型 有两种使用方式: 返回 URI 资源路径的字符串,可以使用 redirect:/服务路径 表示重定向到某个路径, forward:/服务路径 表示转发到某个路径,如果前边不写默认就是转发。  那么两者的区别是什么呢?👇 1.从地址栏显示来说: 1)forword是服务器内部的重定向,服务器直接访问目标地址的 url网址,把里面的东西读取出来,但是客户端并不知道,因此用forward的话,客户端浏览器的网址是不会发生变化的。  2)redirect是服务器根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址,所以地址栏显示的是新的地址。  2。 从数据共享来说: 1)由于在整个定向的过程中用的是同一个request,因此forward会将request的信息带到被重定向的jsp或者servlet中使用。即可以共享数据 2)redirect不能共享 3.从运用的地方来说 1)forword 一般用于用户登录的时候,根据角色转发到相应的模块 2) redirect一般用于用户注销登录时返回主页面或者跳转到其他网站 4。 从效率来说: 1)forword效率高,而redirect效率低 5.从本质来说: forword转发是服务器上的行为,而redirect重定向是客户端的行为 6.从请求的次数来说: forword只有一次请求;而redirect有两次请求, 7.redirect属于临时重定向 
返回普通的Java类型 返回类型为Object,一般使用带Getter,Setter方法的模型类 结合@ResponseBody使用,表示将对象序列化后的数据放在响应体返回 在SpringBoot中默认响应的Content-Type为 application/json 非字符串对象会自动序列化为 json 字符串
@ResponseBody 表示将控制器方法的返回序列化作为响应体内容返回前端。 根据之前《控制器方法的返回》说明,使用@ResponseBody注解: 1.返回类型为String,表示响应Content-Type: text/plain,且响应体为控制器方法的字符串返回值 2.返回类型为普通Java类型,表示响应Content-Type: application/json,以返回对象序列化为json后 作为响应体。 3.@ResponseBody可以使用在类上,表示该类中所有方法都是默认以返回值作为响应体,也就是所 有方法都使用@ResponseBody。 注意:如果返回值为null,表示响应体内容为空    
组合注解 可以使用组合注解来完成同时定义多个注解的效果,如:@RestController,@GetMapping,@PostMapping 说明该注解使用在类上,和使用两个注解@Controller,@ResponseBody在类上意思一样 @GetMapping即是:@RequestMapping(method = RequestMethod.GET) @PostMapping即是:@RequestMapping(method = RequestMethod.POST) 
@PathVariable 一般的 URI 服务路径都是固定的,SpringMVC提供了 restful 风格可以变化的 URI。{}是将服务路径 URI 中的部分定义为变量,之后在方法参数中获取该路径变量。   
@RequestParam 当请求数据要绑定到某个简单对象时,可以使用@RequestParam。 URL 中的请求数据queryString请求头,Content-Type为表单默认提交的格式 application/x-www-form-urlencoded ,请求体中 的数据 请求头,Content-Type为 multipart/form-data ,请求体中的数据。 form-data 可以提交文本 数据,也可以提交二进制文件。 以上简单对象包括:基本数据类型、包装类型、MultipartFile(接收二进制文件) 需要注意@RequestParam注解参数默认为 required=true ,如果不传该参数就会报错,需要指定 为: @RequestParam(required = false) 。  
POJO(Plain Ordinary Java Object):简单的 java 对象,实际就是属性提供了Getter,Setter方法的 普通对象。 使用 java 对象和使用@RequestParam注解非常类似,只是有点细节不同: @RequestParam是以方法参数变量名和传入的键对应,POJO对象作为方法参数时,是以POJO对 象中的属性名对应传入的键 @RequestParam默认必须传入该请求数据,而 POJO 对象是根据请求数据来填充属性,如果请求 数据没有,则属性就是默认值   POJO 对象同样可以直接获取 form-data 方式的数据,包括二进制文件  
@RequestBody 当请求的数据类型Content-Type为 application/json 时,需要显示的使用@RequestBody注解。  
@RequestPart 对于请求的数据类型Content-Type为 multipart/form-data 时,二进制文件除了以上 @RequestParam和 POJO 对象的方式外,还可以使用@RequestPart。   
Servlet API 在控制器方法参数中,可以使用Servlet相关API,SpringMVC会自动将相关Servlet对象装配到方法参数 中,如 HttpServletRequest 、 HttpServletResponse 、 HttpSession 等
使用注解实现简单的登录
实现注册、并将User对象保存在session中  
MVC模式登录: Model:  View: Controller:    
|