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

猜你喜欢

转载自blog.csdn.net/qq_41357573/article/details/84675535