zoukankan      html  css  js  c++  java
  • springmvc请求参数的绑定和获取

     请求参数的绑定和获取:

           获取页面请求的参数,是javaweb必不可少的一个环节,在struts中,是通过再Action中定义属性,或者Model的方式进行数据绑定和获取。需要提供setter或getter方法,略显麻烦。而在SpringMvc中,却可以非常方便的获取请求参数,只需要在对应方法的参数列表中定义出来,即可获取,所见即所得!

    1.获取Servlet内置对象(不推荐使用这个方法)

    需求:客户端发送一个请求,返回到JSP视图中,显示servlet内置对象和session

    @RequestMapping("test7")
        public String test7(HttpServletRequest req,HttpServletResponse resp,HttpSession session){
            req.setAttribute("msg1", "jack"+req);
            req.setAttribute("msg2", "jack"+resp);
            session.setAttribute("msg3", "pick"+session);
            
            return "servlet";
        }

    视图(servlet.jsp)

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
    ${requestScope.msg1 }...${requestScope.msg2 }...${sessionScope.msg3 }
    </body>
    </html>

    2.获取PathVariable参数

    需求:使用占位符,获取参数

    @RequestMapping("test8/{age}/{name}")
        public ModelAndView test8(@PathVariable("age") String age,@PathVariable("name") String name){
            
            ModelAndView mv = new ModelAndView("hello");
            mv.addObject("msg", age+"---"+name);
            return mv;
        }

    注意:参数类型必须匹配,否则会出错

    3.获取请求参数并封装为pojo对象

    需求:提交表单,把表单里面的数据封装为对象

    定义Controller,只需要在参数中写上要封装的对象即可:

        @RequestMapping(value="testjson")
        @ResponseStatus(HttpStatus.OK)
        public void acceptJson(User user){
            System.out.println(user);
        }

     4.@RequestParam的更多用法

    没有传递参数的情况下,不会报错

    @RequestMapping("/show5")
    public ModelAndView show5(@RequestParam(value="name",required=false,defaultValue="123")){
         ModelAndView mv=new ModelAndView("hello");
         mv.addObject("msg","接收普通参数:name "+name);
         return mv;      
    }

    5.获取cookie的值

    SpringMVC中依然是通过注解加参数注入的方式:

    6.接受对象List集合

    需求:表单提交多个用户,springmvc怎样接受?

    <body>
        <form action="/test/show6.do" method="post">
               用户1:<input  type="text" name="users[0].name"/><br/>
               用户2:<input  type="text" name="users[1].name"/><br/>
               用户3:<input  type="text" name="users[2].name"/><br/>
        </form>
    </body>

    对于以上,表单中相当于提交3个用户,也就是用户的集合,SpringMvc中的Controller,不能直接接受一个User的List集合

    创建pojo 的userForm类里面提供一个用户对象的集合,提供get set toString 方法,接受参数的方式接受

    必须在UserForm中定义一个List<User>的属性:

    public class userForm{
          private List<user> users;
    //提供get set方法
          ...
    }

     7.接受JSON格式请求

    @ResponseBody 是把返回值的Pojo对象变为JSON字符串,称为序列化

    @RequestBody 是把接收到的JSON字符串变为Pojo对象,称为反序列化

    需求:客户端传来一个JSON格式数据,转换为pojo对象@RequestBody()

    @RequestMapping(value="testjson")
        @ResponseStatus(HttpStatus.OK)
        public void acceptJson(@RequestBody() User user){
            System.out.println("id"+user.getId());
            System.out.println("name"+user.getName());
            System.out.println("age"+user.getAge());
            
        }

    需求:客户端传来一个JSON格式的数组,转换为pojo对象@RequestBody()

        @RequestMapping(value="testjsons")
        @ResponseStatus(HttpStatus.OK)
        public void acceptJsons(@RequestBody() List<User> users){
            
            for (User user1 : users) {
                System.out.println("id:"+user1.getId());
                System.out.println("name:"+user1.getName());
                System.out.println("age:"+user1.getAge());
            }
        }

     8.SpringMvc和Struts的区别

    1.SpringMvc的入口是Servlet,Struts2的入口是Filter,两者的实现机制不同;

    2.SpringMvc基于方法设计,传递参数是通过方法形参,其实现是单例模式(可以改为多例,推荐用单例),struts2基于类设计,传递参数是通过类的属性,只能是多例,性能上SpringMvc更高一些

    3.参数传递方面,Struts2是用类的属性接受的,也就是在多个方法见共享,而SpringMvc基于方法,多个方法间不能共享

  • 相关阅读:
    Thread Based Parallelism
    Thread Based Parallelism
    The Divide and Conquer Approach
    Algorithms
    FTP
    POP and IMAP
    通过 python 处理 email
    Android开发环境搭建简介
    Hello world
    mybatis3.2初学感悟
  • 原文地址:https://www.cnblogs.com/lichangyun/p/8524990.html
Copyright © 2011-2022 走看看