1. 程式人生 > >SpringMvc前後端傳值的幾種方式

SpringMvc前後端傳值的幾種方式

從JSP頁面傳遞值到controller層的方式

直接將請求引數名作為controller中方法的形參

jsp:

......
<form action="/springmvctest1/result" method="get">  
        username:<input type="text" name="username" />  
        <p>  
        password:<input type="password" name="password"/>  
        <p>  
        <input type="submit" value="submit" />  
    </form>  
    ......

java:下面的test方法只是單純的獲取前端頁面輸入值,具體應用中可做改變

//test方法中的形參要與前端name的值相對應
    @RequestMapping(vaue="/",method=RequestMethod.GET)
    public void test(String username,String password){
        //在控制輸出前端頁面輸入的值
        System.out.println(username);
        System.out.println(password);
    }

解釋:將前端頁面你想獲取的那個name當作引數傳進來,Spring會自動去尋找

使用@RequestParam 繫結請求引數值(推薦使用)

java:

    //@RequestParam中的引數與前端頁面中的name值對應
    //將username獲取到的值傳遞給緊跟後面的username1
    //String name1這個值可以對邊起名
    public void test(@RequestParam("username") String username1,@RequestParam("password")String password1){
        System.out.println(username1);
        System.out.prritnln(password1);
    }

解釋:@RequestParam從靜態頁面中拿到你想要的引數名,並找到引數值

用註解@RequestMapping接收引數的方法

    @RequestMapping(value=/login/{username}/{password})
    public String login(@PathVariable("username") String name,@PathVariable("password") String name)

    //上面的 @RequestMapping(value=”/login/{username}/{password}”) 是以註解的方式寫在方法上的。
    //註解上的usernname和password 必須好頁面上value 相同,上面花括號{} 擴主的就相當於是一個佔位符 
 

解釋:@PathVaribale是從請求路徑中拿到你想要的引數

使用POJO

POJO:

public class User {
	private String username;
	private String password;
	public String  getUsername() {
		return username;
	}
	public String getPassword() {
		return password;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	public void setPassword(String password) {
		this.password = password;
	}
}

Controller:

    @RequestMapping(value="/result",method=RequestMethod.GET)
    public void test(User user){
        System.out.println(user.getUsername);
        System.out.prritnln(user.getPassword));
    }

解釋:POJO就是封裝的類,類中封裝的欄位作為引數,與前端頁面的引數相對應,封裝類中的屬性就是引數,然後繫結請求的引數值,原理是利用set的反射機制找到User物件中的屬性。

使用原生的Servlet API 作為Controller 方法的引數

    @RequestMapping(value="/result",method = RequestMethod.GET)
    public void test(HttpServletRequest request){
        //方法的引數與前端頁面的name值相對應
        String name = request.getParameter("username");
		String pass = request.getParameter("password");
		System.out.println(name);
		System.out.println(pass);
    }

如何將controller層值傳遞到JSP頁面

使用Request

@RequestMapping(value="/result",method=RequestMethod.GET)
	public String test2(HttpServletRequest request,User user){
		//在此請求中儲存屬性
		//屬性名稱/屬性值
		request.setAttribute("name1", user.getUsername());
		request.setAttribute("pass1", user.getPassword());
		
		System.out.println(user.getUsername());
		System.out.println(user.getPassword());
		
		return  "result";
	}

result.jsp

<body>  
    <h2>登陸</h2>  
       
    username:${name1 }  
    <p>  
    password:${pass1 }  
       
    </body>  

使用Model

@RequestMapping(value="/result",method=RequestMethod.GET)
	public String test2(@RequestParam("username")String user,@RequestParam("password") String pass,Model model){
		model.addAttribute("name1", user);
		model.addAttribute("pass1", pass);
 
		
		System.out.println(user );
		System.out.println(pass);
		
		return  "result";
	}

result.jsp

 <h2>登陸</h2>  
       
    username:${name1 }  
    <p>  
    password:${pass1 }  
       
    </body>  

解釋:先使用@RequestParam取出前端頁面的值,然後使用Model將值傳到另一個頁面
Model的具體用法請看參考文件
注意:注意引數的對應關係

使用ModelAndView

@RequestMapping(value="/result",method=RequestMethod.GET)
	public ModelAndView test2(@RequestParam("username")String user,@RequestParam("password") String pass){
		ModelAndView mav = new ModelAndView();
		mav.setViewName("result");
		mav.addObject("name1", user);
		mav.addObject("pass1",pass);
		
		System.out.println(user );
		System.out.println(pass);
		return mav;
	}

result.jsp

<h2>登陸</h2>  
       
    username:${name1 }  
    <p>  
    password:${pass1 }  
       
    </body>  

參考資料:https://blog.csdn.net/qq_41357573/article/details/84679712