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基于方法,多个方法间不能共享

posted on 2018-03-07 20:04  lichangyun  阅读(2345)  评论(0编辑  收藏  举报