zoukankan      html  css  js  c++  java
  • SpringMVC 学习笔记(请求方法的返回值和参数)

    在用注解对配置 处理器时,一般是一个方法处理一个请求,不同方法的返回类型有着不同的意义。

    返回值为 ModelAndView 类型

      ModelAndView 是Model 和 View 的一个集合类型,其中Model 是一个Map类型的空间,其主要用来存储页面请求的返回数据

      而view 则一般是用来存储 请求数据 将要被 接收的 页面(一般为页面名称),也是服务器响应的页面(即前端得到响应后要显示的页面)

    @RequestMapping("/find.action")
        public ModelAndView findUser(){
            List<User> users = us.findAllUsers();
            ModelAndView mav = new ModelAndView();
            mav.addObject("users", users);
            mav.setViewName("showUser");//使用转发
            return mav;
        }

    返回值 为 String 类型(比较常用)

       如果controller方法返回string,

          1、表示返回逻辑视图名。

              真正视图(jsp路径)=前缀+逻辑视图名+后缀    return "index"

          2、redirect重定向

              redirect重定向特点:浏览器地址栏中的url会变化。修改提交的request数据无法传到重定向的地址。因为重定向后重新进行request(request无法共享)

                                       return "redirect:xxx.action"  重定向到另一个Action 请求中

          3、forward页面转发

              通过forward进行页面转发,浏览器地址栏url不变,request可以共享。

               return "forward:xxx.action"

    返回值为void 时

      在controller方法形参上可以定义request和response,使用request或response指定响应结果:

        1、使用request转向页面,如下:

          request.getRequestDispatcher("页面路径").forward(request, response);

        2、也可以通过response页面重定向:

          response.sendRedirect("url")

        3、也可以通过response指定响应结果,例如响应json数据如下:

          response.setCharacterEncoding("utf-8");

          response.setContentType("application/json;charset=utf-8");

          response.getWriter().write("json串");

    @RequestMapping("/find.action")
    
       public void findUser(HttpServletRequest request,HttpServletResponse response){
    
          //使用原始servlet的形式进行数据和页面的处理
    
       }

    请求参数:

      客户端的请求参数一般是k/v的结构  key=value  如 id=1&name="zhangsan";

      springmvc中,接收页面提交的数据是通过方法形参来接收的;

      

    //前台页面发送xxxx?name=zhangsan&pwd=123的请求,springmvc将
        //name设为参数user的name属性值
        //pwd设为参数user的pwd属性值
        //如果请求参数名和参数对象的属性名不一致,不会注入
        @RequestMapping(value="/save.action",method=RequestMethod.POST)
        public String saveUser(User user){
    //         User user = new User();
    //         user.setName(name);
    //         user.setPwd(pwd);
             us.saveUser(user);
             return "redirect:find.action";
        }

    一般类型的参数是可以直接被直接注入进对象的同名属性的,对日期数据绑定需要自定义converter(转换器)

      进行参数绑定时的注解:

        1、@requestParam()

                          该注释可以将请求的字符串转换为简单的数据类型 如:test(@requestParam("id") int id)

          也可以匹配不是同名的参数 如:test(@requestParam("username") String name)

          也可以设置参数的必需属性 如:test(int id ,@requestParam("username" , required=true) String name)  此时,如果请求参数中没有username这个值是,就会报错      

          三种写法,test(String name), 
              test(@RequestParam String name), 
              test(@RequestParam("userName") String name), 
              第一种如果没有name 参数不会报错, 
              第二种没有name 参数会报错,(也可以设置required = false), 
              第三种跟第二种的区别是 请求的参数名userName转换成方法的参数name

        2、@ModelAttribute   该注解有两个用法,一个是用于方法上,一个是用于参数上;

          用于方法上时:  通常用来在处理@RequestMapping之前,为请求绑定需要从后台查询的model;即在执行@RequestMapping 的方法之前 执行 @ModelAttribute的方法 将相关参数放到请求域中(默认都是存放在请求域中的)

        //这个方法找到了一个User,并且把这个User放入到ModelAttribute中的user属性
        //@ModelAttribute修饰的方法一定会在@RequestMapping方法前执行
        @ModelAttribute("user")
        public User findUser(){
            User user = us.findUserById(9);
            return user;
        }

          

        用于参数上时: 用来通过名称对应,把相应名称参数的值绑定到注解的参数bean上;要绑定的值来源于

          A) @SessionAttributes("name") 启用的session域的attribute 对象上;(即方法的形参的值来源于session域中的 name 的值)

          B) @ModelAttribute(“name”) 用于方法上时指定的model对象;(即方法的形参的值来源于请求域中的 name 的值)

          C) 上述两种情况都没有时,new一个需要绑定的bean对象,然后把request中按名称对应的方式把值绑定到bean中(默认)

          @SessionAttributes

            该注解用来绑定HttpSession中的attribute对象的值,便于在方法中的参数里使用。

            该注解有value、types两个属性,可以通过名字和类型指定要使用的attribute 对象;

  • 相关阅读:
    JAVA语法之小结
    JAVA之经典Student问题1
    Android之动画1
    Android之屏幕测试
    Android之点击切换图片
    Android之标签选项卡
    Android简单计算器
    Javascript之相册拖动管理
    Javascript之改变盒子颜色
    CSS之照片翻转
  • 原文地址:https://www.cnblogs.com/lhblogs/p/7481575.html
Copyright © 2011-2022 走看看