欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

SpringMVC传递参数的四种方式+跳转方式

程序员文章站 2022-05-15 18:21:37
...

功能类:

/**
 * 传递参数的四种方式:
 * 	 1.使用Model方式(采用!!!)
 *   2.通用ModelAndView方式
 *   3.HttpServletRequest方式(不建议使用)
 *   4.通过返回值传参(不建议使用)
 * 跳转方式:  1.重定向        2.请求转发
 * @author 郑清
 */
@Controller
public class Demo{
	/*
	 * 1.使用Model方式(采用!!!)
	 */
	@RequestMapping("/data1")
	public String demo1(Model model){
		model.addAttribute("data","数据:李四");//设置数据到前台
		User u = new User();
		u.setUsername("张三");
		//添加模型数据,key的值为对象的类型首字母小写   ex:User-->user
		model.addAttribute(u);
		return "test.jsp";
	}
	/*
	 * 2.通用ModelAndView方式
	 */
	@RequestMapping("/data2")
	public ModelAndView demo2(){
		ModelAndView mav = new ModelAndView();//模型和视图对象
		mav.addObject("data","数据:张三");//设置数据到前台
		User u = new User();
		u.setUsername("李四");
		//添加模型数据,key的值为对象的类型首字母小写   ex:User-->user
		mav.addObject(u);
		//添加跳转的路径
		mav.setViewName("/test.jsp");
		return mav;
	}
	/*
	 * 3.HttpServletRequest方式(不建议使用)
	 */
	@RequestMapping("/data3")
	public void demo3(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException{
		request.setAttribute("data", "数据:hello");
		request.getRequestDispatcher("test.jsp").forward(request, response);
	}
	/*
	 * 4.通过返回值传参(不建议使用):
	 * SpringMVC会自动创建一个ModelAndView对象,并且调用添加模型 mav.addObject("user", user);
	 * 并且访问路径就是视图的名称 /data4  mav.setViewName("/data4");
	 * 注意:需配置视图解析器解决:ViewResolver
	 */
	@RequestMapping("/data4")
	public User demo4(){
		User u = new User();
		u.setUsername("王五");
		return u;
	}
	/*
	 * 请求转发(forward):
	 * 上面4个案例都是转发,转发的值都是放到request请求作用域,下一个页面可以取出
	 * Url地址不会改变
	 */
	@RequestMapping("/data5")
	public String demo5(Model model,HttpSession session){
		model.addAttribute("data", "数据:使用model传递");//可以取出数据
		
		User u = new User();
		u.setUsername("张三");
		model.addAttribute(u);
		
		session.setAttribute("s", u);//可以取出数据
		
		//return "/test.jsp";//返回路径
		return "forward:/test.jsp";//-->相当于手动指定了跳转的路径
	}
	/*
	 * 重定向(redirect):
	 * 重定向就是发出一个全新的请求,
	 * 如果把值放到request请求,下一个页面不能取出
	 * 如果把值放到session会话请求,下一个页面可以取出
	 * url地址会改变
	 */
	@RequestMapping("/data6")
	public String demo6(Model model,HttpSession session){
//		model.addAttribute("data","张三");//不可以取出数据
		session.setAttribute("s", "张三session");//可以取出数据
		return "redirect:/test.jsp";
	}
}

SpringMVC配置视图解析器:
        会自动添加到返回的路径中,针对requestMapping中的路径不会添加
        SpringMVC默认:InternalResourceViewResolver : 支持默认视图,采用forward,redirect。
        视图名规则:不写前缀默认为"转发" 
                视图名字符串前缀:
              forward:/xxx.jsp ->采用转发
              redirect:/xxx.jsp  ->采用重定向

        设置视图路径的前后缀,该配置可以让我们写视图路径的时候更简单!!!

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
	<property name="prefix" value="/WEB-INF/jsps/" />
	<property name="suffix" value=".jsp" />
</bean>

User类:

public class User {
	private String username;
	private String password;
	private Date date;
	
	@JsonFormat(pattern="yyyy-MM-dd",timezone="GMT+8")  //日期格式化注解
	public Date getDate() {
		return date;
	}
	@DateTimeFormat(pattern="yyyy-MM-dd")
	public void setDate(Date date) {
		this.date = date;
	}
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	@Override
	public String toString() {
		return "User [username=" + username + ", password=" + password + ", date=" + date + "]";
	}
}

test.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.data }<br/>
	获取添加的默认对象中的username的值:${requestScope.user.username }<br/>
	获取session中user对象的username的值:${sessionScope.s.username }
</body>
</html>