SpringMvc前後端傳值的幾種方式
阿新 • • 發佈:2019-01-03
從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