zoukankan      html  css  js  c++  java
  • SpringMVC的常用注解

             在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";
            }
    }
    

      

  • 相关阅读:
    下载Spring
    Jsp的静态引入和动态引入
    Jsp代码书写
    Jsp的page指令
    Jsp注释
    Python学习笔记Day04
    sublime
    sublime
    爬虫学习02_数据提取
    爬虫学习01_爬虫基础与requests模块
  • 原文地址:https://www.cnblogs.com/zxx123/p/8468860.html
Copyright © 2011-2022 走看看