在SpringMVC中常用的注解主要都是用于Controller上,所以下面的四大不同类型的注解都是根据它们处理的request的不同内容部分来区分的;
        处理request body的注解:@RequestParam, @RequestBody;
        处理request uri的注解:@PathVariable;
        处理request header部分的注解:@RequestHeader, @CookieValue;
        处理attribute类型的注解:@SessionAttribute,@ModelAttribute;
        在@Controller注解之后就是@RequestMapping注解了;
            这个RequestMapping就是用来注解一个控制类的方法,可以实现多级的管理控制器;例如,你可以先在一个类上去注解一个@RequestMapping("/user");然后在这个类的里面再去注解一个方法@RequestMapping("/register");这样的话,你可以通过请求user/register来进入register这个控制器中,实现多级的管理控制器;
            然后这个RequestMapping个人觉得需要记住的属性有两个,一个默认属性value,标注是由那个请求映射过来的。而另一个属性是method属性, 用来指示该方法仅仅处理哪些HTTP请求方式;
            @RequestMapping(value = "/hello",method = RequestMethod.POST)和@RequestMapping(value = "/hello",method = RequestMethod.GET);如果没有指定method属性值,则请求处理方法可以处理任意的HTTP请求方式;
        下面是关于Model,ModelMap和ModelAndView这三种接口用来存储模型数据;个人理解,就是我们前面提到了当你的请求中携带了参数的时候,我们称他们为模型数据,这个时候,我们需要一个容器来存储这些模型数据,而在Controller中,我们只需要给控制器这个存储了模型数据的容器就可以了,也就是将模型数据进行封装。其中,Model和ModelMap基本没有太大的区别,而ModelAndView则是不仅包含了模型数据信息,还包含了视图信息,可以看成是一个Map<String,Object>对象;下面上代码;
@Controller
public class User1Controller{
//@ModelAttribute修饰的方法会先与login调用,该方法用于接收前台jsp页面传入的参数
@ModelAttribute
public void userModel(String loginname,String password,Model model){
logger.info("userModel");
User user = new User();
user.setLoginname(loginname);
user.setPassword(password);
model.addAttribute("user",user);
}
@RequestMapping("/login1")
public String login(Model model){
logger.info("login");
//从Model当中取出之前存入的名为user的对象
User user = (User) model.asMap().get("user");
System.out.println(user);
user.setUsername("测试");
return "result11";
}
}

上面这个是model的使用;

@Controller
public class User2Controller{
private static final Log logger = LogFactory.getLog(User2Controller.class);
@ModelAttribute
public void userModel2(String loginname,String password,ModelMap modelmap){
logger.info("userModel2");
User user = new User();
user.setLoginname(loginname);
user.setPassword(password);
modelMap.addAttribute("user",user);
}
@RequestMapping("/login2")
public String login2(ModelMap modelMap){
logger.info("login2");
User user = (User) modelMap.get("user");
System.out.println(user);
user.setUsername("测试");
return "result2";
}
}

上面这个是ModelMap的使用;

@Controller
public class User3Controller{
private static final Log logger = LogFactory.getLog(User3Controller.class);
@ModelAttribute
public void userModel3(String loginname,String password,ModelAndView mv){
logger.info("userModel3");
User user = new User();
user.setLoginname(loginname);
user.setPassword(password);
mv.addObject("user",user);
}
@RequestMapping("/login3")
public ModelAndView login3(ModelAndView mv){
logger.info("login3");
User user = (User) mv.getModel().get("user");
System.out.println(user);
user.setUsername("测试");
mv.setViewName("result3");
return mv;
}
}
        上面这个是ModelAndView 的使用;
        接下来是@RequestParam注解,用于将指定的请求参数赋值给方法中的形参;
@RequestMapping("/login")
public ModelAndView login(
@RequestParam("loginname") String loginname;
@RequestParam("password") String password;){
return...
}
        这个RequestParam其实就是一个声明你在jsp页面中命名并打算传送过来的参数,value里面是你要传递过来的参数的名字;
        @PathVariable注解;
            这个注解可以非常方便地获得请求URL中的动态参数;这个注解经常用于当你要进入一些登录界面的时候,这个时候,你可以灵活地设置要去哪个登录界面;
        @SessionAttributes注解;
            这个注解可以允许我们有选择地指定Model中的哪些属性需要转存到HttpSession对象中;上代码;
@Controller
@SessionAttribute("user")
public class SessionAttributesController{
private static final Log logger = LogFactory.getLog(SesssionAttributesController.class);
@RequestMapping("/{formname}")
public String loginForm(@PathVariable String formName){
return formName;
}
@RequestMapping("/login")
public String login(
@RequestParam("loginname") String loginname,
@RequestParam("password") String password,
Model model){
User user = new User();
user.setLoginname(loginname);
user.setPassword(password);
user.setUsername(admin);
model.addAttribute("user",user);
return "welcome";
}
}
下面要讲的是@ModelAttribute注解的五种使用方法,@ModelAttribute使用方法较为灵活,请见机行事;
       1,@ModelAttribute(value = "")返回具体类的方法;
       2,@ModelAttributevoid返回值的方法;
       3,@ModelAttribute返回具体类的方法 ;
       4,@ModelAttribute和@RequestMapping同时注释一个方法;
       5,@ModelAttribute 注释一个方法的参数;
        1,@ModelAttribute(value = "")返回具体类的方法,我们前面说过,ModelAttribute相当于一个存储模型数据的容器,而这第一种方法就相对有点简单了,就是标明了这是存储了那个具体的模型数据,记住是一个模型数据而已;而且没有提供容器,是属于简单的数据传输时用到的,上代码;
@Controller
public class ModelAttribute1Controller{
@ModelAttribute("loginname")
public String userModel1(
@RequestParam("loginname") String loginname){
return loginname;
}
@RequestMapping("/login1")
public String login1(){
return "result1";
}
}

2,@ModelAttribute注解void返回值的方法,相对于上一个而言,这个的注解的特点在于他提供了一个容器来存储模型数据,而且还允许存储多个模型数据;上代码;

@Controller
public class ModelAttribute2Controller{
@ModelAttribute
publicv void userModel2(
@RequestParam("loginname") Stirng loginname,
@RequestParam("password") String password,
Model model){
model.addAttribute("loginname",loginname);
model.addAttribute("password",password);
}
@RequestMapping("/login2")
public String login2(){
return "result2";
}
}

  

 从此,你就可以用model.addAttribute这个方法来将模型数据存入到容器中了;
        3,@ModelAttribute返回具体类的方法;前面我们说的第一个方法里面ModelAttribute注解标注的是一个返回值为String的方法,而接下来的这个的返回值却是一个类。也就是说,他一样没有用容器,但是他用类将这些模型数据给封装了起来,上代码;
@Controller
public User userModel3(
@RequestParam("loginname") String loginname,
@RequestParam("password") String password){
return find(loginname,password);
}
@RequestMapping("/login3")
public String login3{
return "result3";
}

  4,@ModelAttribute和@RequestMapping同时注释一个方法;这个时候就会有一个骚操作,这个时候方法里面返回的值就不再是视图名称了,而是model属性的值了,虽然我不知道这个有什么用。。。反正就是骚操作。。。

@Controller
public class ModelAttribute4Controller{
@RequestMapping("/login4")
@ModelAttribute("username")
public String login4(){
return "admin";
}
}

    5,@ModelAttribute 注释一个方法的参数,这个跟第三个有点像,我觉得不同之处可能在于封装在类里面的模型在下面的Controller中可以被再次设置和使用吧。。。

@Controller
public class ModelAttribute5Controller{
@ModelAttribute("user")
public User userModel5(
@RequestParam("loginname") String loginname,
@RequestParam("password") String password){
User user = new User();
user.setLoginname(loginname);
user.setPassword(password);
return user;
}
@RequestMapping(("/login5")
public String login5(@ModelAttribute("user") User user){
user.setUsername("管理员");
return "result5";
}
}

  

SpringMVC的常用注解的更多相关文章

  1. (三)SpringMVC之常用注解

    SpringMVC的常用注解 注解 说明 @Controller 用于说明这个类是一个控制器 @RequestMapping 用于注释一个控制器类或者控制器类的方法 @RequestParam 用于将 ...

  2. springMvc之常用注解介绍

    @requestbody和@requestparam的用法  获取请求参数的方法 get请求: 直接获取request    如: public String getHtml(HttpServletR ...

  3. SpringMVC相关常用注解

    @Controller: @Controller 用于标记在一个类上,使用它标记的类就是一个SpringMVC Controller 对象 @RequestMapping: RequestMappin ...

  4. Spring和SpringMVC的常用注解

    Spring的部分: 使用注解之前要开启自动扫描功能 其中base-package为需要扫描的包(含子包). <context:component-scan base-package=" ...

  5. springMVC的常用注解有哪些?

    1.@Controller @Controller 用于标记在一个类上,使用它标记的类就是一个SpringMVC Controller 对象.分发处理器将会扫描使用了该注解的类的方法,并检测该方法是否 ...

  6. springmvc:常用注解

    一.RequestParam注解 作用: 把请求中指定名称的参数给控制器中的形参赋值. 属性: value:请求参数中的名称. required:请求参数中是否必须提供此参数.默认值:true.表示必 ...

  7. SpringMVC框架——常用注解

    @RequestMapping Spring MVC 通过 @RequestMapping 注解将请求与业务方法进行映射,在方法定义处,在类定义都可以添加该注解. 常用参数: 1.value:指定请求 ...

  8. SpringMVC常用注解實例詳解3:@ResponseBody

    我的開發環境框架:        springmvc+spring+freemarker開發工具: springsource-tool-suite-2.9.0JDK版本: 1.6.0_29tomcat ...

  9. SpringMVC常用注解實例詳解2:@ModelAttribute

    我的開發環境框架:        springmvc+spring+freemarker開發工具: springsource-tool-suite-2.9.0JDK版本: 1.6.0_29tomcat ...

随机推荐

  1. awk批量处理文件夹中所有文件

       #c=``     done

  2. Jetson TX2上的demo(原创)

    Jetson TX2上的demo 一.快速傅里叶-海动图 sample The CUDA samples directory is copied to the home directory on th ...

  3. 初码-Azure系列-存储队列的使用与一个Azure小工具(蓝天助手)

    初码Azure系列文章目录 将消息队列技术模型简化,并打造成更适合互联网+与敏捷开发的云服务模式,好像已经是行业趋势,阿里云也在推荐使用消息服务(HTTP协议为主)而来替代消息队列(TCP协议.MQT ...

  4. python中的函数对象与闭包函数

    函数对象 在python中,一切皆对象,函数也是对象 在python语言中,声明或定义一个函数时,使用语句: def func_name(arg1,arg2,...): func_suite 当执行流 ...

  5. Go笔记-垃圾回收集和SetFinalizer

    [垃圾回收]     1- Go的开发者也不用写代码来释放程序中不再使用的变量和结构占用内存,Go中有独立的进程,垃圾回收器(GC),处理这些事情.它会搜索不再使用的变量然后释放它们.     2- ...

  6. 吴恩达深度学习笔记(deeplearning.ai)之卷积神经网络(一)

    Padding 在卷积操作中,过滤器(又称核)的大小通常为奇数,如3x3,5x5.这样的好处有两点: 在特征图(二维卷积)中就会存在一个中心像素点.有一个中心像素点会十分方便,便于指出过滤器的位置. ...

  7. BZOJ 2024: [SHOI2009] 舞会 [容斥原理 高精度]

    题意:和上题基本一样,求至少k对a>b的方案数.不取模!!! 做k+1遍容斥就行了 高精度超强!!!几乎把所有的都用上了 然后,注意有负数,所以容斥的时候正负分别保存然后再一减就行了 这是我省选 ...

  8. POJ 3128 Leonardo's Notebook [置换群]

    传送门 题意:26个大写字母的置换$B$,是否存在置换$A$满足$A^2=B$ $A^2$,就是在循环中一下子走两步 容易发现,长度$n$为奇数的循环走两步还是$n$次回到原点 $n$为偶数的话是$\ ...

  9. 一个Windows下线程池的实现(C++)

    前言 本文配套代码:https://github.com/TTGuoying/ThreadPool 先看看几个概念: 线程:进程中负责执行的执行单元.一个进程中至少有一个线程. 多线程:一个进程中有多 ...

  10. Java中的Throable类是不是受查异常?

    Q: Throable是不是受查异常? A: 是 在Java规范中,对非受查异常和受查异常的定义是这样的: The unchecked exception classes are the run-ti ...