从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