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基於方法,多個方法間不能共享


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM