控制器
在springMVC中,控制器负责处理由DispatcherServlet接收并分发过来的请求,他把用户要请求的数据封装成一个model,然后把该model返回给对应的view进行展示
常用注解
@Controller 表示该类为控制器类
@RequestMapping("/XXX",method = RequestMethod.XXX) 映射url,返回值为templates下的html文件名
将该注解标注在类上,表示类中所有的响应请求的方法都将以该地址作为父路径
@GetMapping("url") = @RequestMapping("url",method = RequestMethod.GET)
常用于传递小型分散数据并刷新界面
@PostMapping("url") = @RequestMapping("url",method = RequestMethod.POST)
常用于传递JSON对象,插入数据
@PutMapping("url") = @RequestMapping("url",method = RequestMethod.GET)
常用于传递JSON对象,更新数据
@DeleteMapping("url") = @RequestMapping("url",method = RequestMethod.DELETE)
常用于传递JSON对象,删除数据
@Autowired 完成自动按类型装配 ,常用于服务类,使其成为单例静态对象
@Resource完成自动先按照名称,再按类型进行装配,常用于配置类
@ResponseBody 将控制器下的方法返回值改为json或string格式返回(不加则返回html文件)
@RestController( = @Controller+@ResponseBody)
@RequestParam(XXX) 写在变量前面,表示将前端post的json对象匹配XXX获得具体属性,赋值给注解后面的形参(参考极简实例中的登录界面(1)post方法控制器类被注释的代码)
@ModelAttribute("XXX"):应用在有返回值的方法上,相当于将该方法的返回值添加到model的"XXX"属性上
@ModelAttribute :应用在形参上,说明了该方法参数的值将由model中取得。如果model中找不到,那么该参数会先被实例化,然后被添加到model中。在model中存在以后,请求中所有名称匹配的参数都会填充到该参数中(参考极简实例中的登录界面(1))
重定向
return "redirect:/first"; //url变为/first
return "redirect:/second"; //url不变
get请求和post请求
get请求:请求参数会添加到请求资源路劲的后面,只能添加少量参数(只能存放小于2K的数据)[/xxxx?account=xxxxx&password=xxxxx]
请求参数会显示在浏览器地址栏,路由器会记录请求地址
post请求: 请求参数添加到实体内容JSON里面,可以添加大量的参数,
相对安全,但是,post请求不会对请求参数进行加密处理(可以使用https协议来保证数据安全)
相关链接:blog.csdn.net/linjpg/arti…
@Autowired和@Resource的区别
@Autowired与@Resource都可以用来装配bean. 都可以写在字段上,或写在setter方法上。
@Autowired(这个注解属业spring的)默认按类型装配,默认情况下必须要求依赖对象必须存在,如果要允许null值,可以设置它的required属性为false,如:@Autowired(required=false)。如果要使用名称装配可以结合@Qualifier注解进行使用
@Autowired () @Qualifier ( "baseDao" )
private BaseDao baseDao;
@Resource(这个注解属于J2EE的),默认先按照名称, 再按类型进行装配。如果没有指定name属性,当注解写在字段上时,默认取字段名进行安装名称查找,如果注解写在setter方法上默认取属性名进行装配。当找不到与名称匹配的bean时才按照类型进行装配。但是需要注意的是,如果name属性一旦指定,就只会按照名称进行装配。
总结:一般像服务类等都用Autowired,相当于将服务类单例化。如果是需要将实例化后的对象在不同类间传递,则用Resource
相关链接:blog.csdn.net/weixin_4042…
Model和HttpSession
(局部变量)model:可以将数据放入视图中,数据只能在Controller返回的页面使用,其他页面不能使用。spring中model缓存的值是保存在request的getAttribute里面。当调用controller里面某个@requestmapping注解的方法,都能取到这个model里面的值。
(全局变量)session:session 里放的数据保存在服务器,可以供其他页面使用,只要用户不退出或者SESSION过期,这个值
就一直可以保留。在当前的 request周期之内,调用getAttribute方法同样也可以得到。
相关链接:blog.csdn.net/Hello_ChenL…
postmapping和putmapping
引入概念:幂等性(idempotent),简单来说就是多次访问对rest服务产生的结果不会有改变。
http协议明确规定,put、get与delete请求都是具有幂等性的,而post为非幂等性请求,就是说接口被定义为post请求可访问时,说明这个接口对数据库的影响是非幂等性的。所以一般插入新数据时,用post方法,更新数据库时,用put方法,以此类推@PostMapping注解是标示接口为非幂等性接口,@PutMapping注解是标示接口为幂等性接口。
如果执行添加操作, 后面的添加请求不会覆盖前面的请求, 所以使用@Postmapping
如果执行修改操作, 后面的修改请求会把前面的请求给覆盖掉, 所以使用@PutMapping