springMvc架构流程图及常用注解总结

springmvc架构流程图:


第一步:用户发送请求到前端控制器(DispatcherServlet)

第二步:前端控制器请求HandlerMapping查找 Handler 【可以根据xml配置、注解进行查找】

第三步:处理器映射器HandlerMapping向前端控制器返回Handler

第四步:前端控制器请求处理器适配器去执行Handler

第五步:处理器适配器去执行Handler

第六步:处理器适配器执行完成后,Controller返回ModelAndView

第七步:处理器适配器向前端控制器返回ModelAndView

ModelAndView是springmvc框架的一个底层对象,包括Model和view

第八步:前端控制器请求视图解析器去进行视图解析【根据逻辑视图名解析成真正的视图(jsp)】    

第九步:视图解析器向前端控制器返回View

第十步:前端控制器进行视图渲染【视图渲染即:模型数据(在ModelAndView对象中)填充到request域】

第十一步:前端控制器向用户响应结果


======================================================================================================

常用注解总结:

======================================================================================================

*** @RequestMapping(): 映射请求[为控制器指定可以处理哪些URL请求]

使用请求URL、请求方法、请求参数、请求头 映射请求,它们之间是与的关系,联合使用让请求更加精细化。

[value、method、params 、heads]

params和heads支持简单的表达式:

①  param1表示请求必须包含名为param1的请求

②  !param1 表示请求不能包含名为param1的请求

③  param1!= value1 表示请求包含名为param1的参数,但其值不能为

   举例:

@RequestMapping(value="/delete",method=RequestMethod.POST, params="userId",heads="contentType=text/*")

@RequestMapping还支持ant风格的资源地址:

①  ?匹配文件名中的一个字符

②  * 匹配文件名中的任意字符

③  ** 匹配多层路径

举例:

/user/createUser??: 匹配

/user/createUseraa、/user/createUserbb等 URL

/user/*/createUser:匹配

/user/aaa/createUser、/user/bbb/createUser 等 URL

/user/**/createUser: 匹配

/user/createUser、/user/aaa/bbb/createUser 等 URL

*** @PathVariable(): 映射URL绑定的占位符

通过 @PathVariable 可以将URL中占位符参数绑定到控制器处理方法的入参中,URL中{ xxx }占位符可以通过@PathVariable("xxx")绑定到操作方法的入参中。

   举例: 
      @RequestMapping(value="/delete/{id}")
      public Stringdelete(@PathVariable("id")Integer id){
      }

*** @RequestParam(): 绑定请求参数值
   在处理方法入参处使用 @RequestParam 可以把请求参数传递给请求方法
   value:参数名  
required:是否必须。默认为 true

   举例:
      @RequestMapping("/get")

  public Stringget(@RequestParam(value="userName",required=true) String name){

     return "seccess";

  }

备注:如果页面中的请求参数的名字和形参的名字一致的话,没必要用该注解。

*** @RequestHeader(): 绑定请求头的属性值
   通过 @RequestHeader 即可将请求头中的属性值绑定到处理方法的入参中
   举例:
      @RequestMapping("/get")
      public Stringget(@RequestHeader("Accept-Encoding") String encoding){
           return"seccess";
      }

*** @CookieValue()
   使用@CookieValue 绑定请求中的Cookie值,可让处理方法入参绑定某个Cookie值
   举例:
      @RequestMapping("/get")

       public String get(@CookieValue(value="sessionId",required=false)StringsessionId){

       return “success”;

 }

*** @SessionAttributes()
   若希望在多个请求之间共用某个模型属性数据,则可以在控制器类上标注此注解。

标注一个@SessionAttributes, Spring MVC 将在模型中对应的属性暂存HttpSession中,@SessionAttributes除了可以通过属性名指定需要放到会话中的属性外,还可以通过模型属性的对象类型指定哪些模型属性需要放到会话中 @SessionAttributes(types=User.class) 

会将隐含模型中所有类型为User.class 的属性添加到会话中。

@SessionAttributes(value={“user1”, “user2”})

@SessionAttributes(types={User.class, Dept.class}) 

@SessionAttributes(value={“user1”,“user2”},types={Dept.class})

举例:

@SessionAttributes("user")

@Controller

@RequestMapping("/get")

      publicString get(){
      @ModelAttribute("user")
      public User getUser(){
         User user = new User();
         user.setAge(10);

         return user;
      } 
     @ModelAttribute("/get1")
     public Userget1(@ModelAttribute("user") User user){
        user.setAget(22);
        return"success";
     }
     @ModelAttribute("/get1")
     public User get1(Map<Sting,Object> map,SessionStatussessionStatus){
         User user =map.get("user");
         user.setId(1000);
         return"success";
       }
      }

*** @ModelAttribute()

在方法定义上使用@ModelAttribute() ,SpringMVC在调用目标处理方法前,会先逐个调用在方法级上标注了@ModelAttribute的方法,在方法的入参前使@ModelAttribute()可以从隐含对象中获取隐含的模型数据中获取对象,再将请求参数绑定到对象中,再传入入参将方法入参对象添加到模型中。






  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值