SpringMVC概述和注解

来源:互联网 发布:数据库实体是什么 编辑:程序博客网 时间:2024/06/06 12:13

  前边我们讲过了Mybatis这个半ORM映射的持久层框架,今天开始我们来讲一讲除了Struts2之外的另外一个流行的WEB框架--SpringMVC。

  1.SpringMVC概述

  SpringMVC是当今流向的MVC设计模式的除了Struts2之外的另一个优秀的WEB框架,且在Spring3.0之后,SpringMVC已经全面的超越了Struts2并得到了广泛的应用,他可以通过一套注解将普通的Java类编程一个控制器而不用这个类实现任何接口。

  他还支持REST风格的URL映射,采用松散耦合可插拔组件结构,比其他MVC框架更具扩展性和灵活性。

 

  2.SpringMVC的各种注解  --  从前台页面到处理器

  我们下边讲的注解都是为了从前台页面映射到相应的处理方法并将请求的内容传递给处理方法

  ① @RequestMMaping(value="")

  a : 这个注解表示当前类或者当前处理方法可以处理哪些映射请求,可以标注在类上和方法上,标注在类上时,value值表示相对于根目录的路径,标识在方法上时,若类上存在这个注解,表示相对于类定义处的URL,若类上没有这个注解,表示相对于WEB应用的根目录。

  b : 这个注解还有其他的一些属性 ,如method/param/header等,分别可以指定一个完整请求的请求方法、请求参数、请求报头。这四个属性都是为了更准确的映射一个请求而按照与的逻辑关系存在的。常用的是value和method属性。

  ② @PathVariable("")

  顾名思义,是指将路径变量映射到处理方法的入参中。什么是路径变量,就是在@RequestMapping中的写的vale值中的占位符,如@RequestMapping("/test/{id}")中的id,我们可以在处理方法的入参前添加@PathVariable("id")将这个路径变量id传入到处理方法的入参中,需要注意的是@PathVariable注解中的value值必须和@RequestMapping中指明的占位符的名称一致

  ③ @RequestParam注解

  作用是写在处理方法的入参前,将请求参数的值注入给处理方法的入参。

  这个注解有三个属性:value表示请求参数的名称,required表示这个请求参数是否为必须,defaultValue表示这个参数的默认值。

  ④ RequestHeader

  作用是写在方法入参前,将请求的报头header里的属性注入到请求参数中,和@RequestParam的用法即内含属性一致。

  ⑤ @CookieValue

  让处理方法的入参绑定某个Cookie的JsessionId值,用法和@RequestParam一样。

  ⑥ 绑定请求参数到POJO对象

  SpringMVC会将表单中请求参数的值自动的和入参声明的POJO类型中的属性相匹配,为其POJO对象填充属性值,且在表单中还支持级联属性

  ⑦ 处理方法使用源生的ServletAPI作为入参,具体支持HttpServletRequest/HttpServletResponse/HttpSession/Locale/InputStream/OutputStream/Reader/Writer/Physipal

  2. SpringMVC的各种注解  --  从处理器到目标页面

  我们下边讲的注解都是为了从处理器响应的目标页面并且将相应的模型数据放到域对象中以便于在目标页面中获取

  ① 处理方法返回ModelAndView类型的对象

  顾名思义,这个对象中包含了模型数据和视图信息,通过addObject来添加模型数据,通过构造方法传递视图的信息。

  处理方法返回的ModelAndView的对象中的Model,SpringMVC框架会自动的将其放入到域对象request中,这个Model在request中的键名称是addObject添加时的键的名称。

  ② Map入参

  当使用Map类型作为处理方法的入参时,我们在这个Map中添加的对象,SpringMVC都会自动的将其放入到域对象request中。

  ③ @SessionAttribute(value="",types="")

  作用是:将模型数据放入到HttpSession域对象中,这样我们就可以夸请求使用了。

  这个注解只可以作用在类上,且可以通过指定其两个属性value(表示域对象中的键名)、和types(表示放入域对象中的key的类型)来说明将哪些键名或者键类型的对应的对象放入到HttpSession中。

  若是在目标方法的入参中的key值在@SessionAttribute中的value值中有对应,但是没有找到相应对象的话就会抛出异常。

  ④ @ModelAttribute注解

  这个注解是一个很重要的注解,他可以作用在方法上也可以作用在处理方法的入参上。

  当@ModelAttribute作用在一个方法上时,那么所有的目标方法在执行前都会先调用这个方法,其存在的目的是为了让目标方法的入参在不再是单纯的接收表单参数中的值,而是先将表单参数的值赋值给@ModelAttribute标注的方法中的从数据库拿到的POJO,然后在将这个POJO赋值给目标方法的参数。这样做的好处是可以单纯的修改数据库中的一条记录的某些字段而不影响其他的字段

  当@ModelAttribute作用在目标方法的入参上时,表示SpringMVC在将POJO对象注入到入参时是根据的这个注解中的vale值对应的key值来从WebDataBinder对象中获取的,若没有在入参前标注这个属性,表示这个入参的默认key值是参数类型的首字母小写。