Spring MVC 重定向

作者:範宗雲 来源:原创 发布时间:2015-03-31 归档:springmvc

开发环境 : JDK 7 Maven 3 Tomcat 7 Spring 4.1.5 Eclipse Luna
spring mvc 中使用 redirect: 前缀可完成重定向的动作。下面介绍如何带参重定向。
示例代码片段 1 ( 带参重定向 )
			@Controller
			@RequestMapping("/user")
			public class UserController {
			
				/**
				 * 登录页面
				 */
				@RequestMapping(value = "/login", method = GET)
				public String login() {
					return "login";
				}
				
				/**
				 * 用户登录, 登录完成重定向到首页
				 */
				@RequestMapping(value = "/login", method = POST)
				public String login(RedirectAttributes attributes, User user) {
					attributes.addFlashAttribute("user", user);
					return "redirect:/user/home";
				}
			
				/**
				 * 首页
				 */
				@RequestMapping(value = "/home", method = GET)
				public String home() {
					return "home";
				}
				
			}
			
home.jsp
			<body>
			  Welcome, ${user.name}!
			</body>
			
"redirect:/user/home" 表明重定向到 /user/home, RedirectAttributes.addFlashAttribute(key, value) 可以携带参数到重定向的 url, 并且参数不会显式的出现在重定向的 url 中。实际上, 这样的参数数据是暂存在用户 session 中, 这些参数数据可以作为一个对象被保持着, 直至下一次请求发起时, 这些数据才会被清掉。
user.name == lychie, POST /user/login --> /user/home --> Welcome, lychie!
示例代码片段 2 ( 带参重定向 )
			@Controller
			@RequestMapping("/admin")
			public class AdminController {
			
				/**
				 * 登录页面
				 */
				@RequestMapping(value = "/login", method = GET)
				public String login() {
					return "login";
				}
				
				/**
				 * 用户登录, 登录完成重定向到首页
				 */
				@RequestMapping(value = "/login", method = POST)
				public String login(RedirectAttributes attributes, User user) {
					attributes.addAttribute("name", user.getName());
					return "redirect:/admin/home";
				}
			
				/**
				 * 首页
				 */
				@RequestMapping(value = "/home", method = GET)
				public String home(ModelMap model, String name) {
					try {
						name = new String(name.getBytes("ISO-8859-1"), "UTF-8");
					} catch (UnsupportedEncodingException e) {
						e.printStackTrace();
					}
					model.addAttribute("currUser", name);
					return "admin_home";
				}
				
			}
			
admin_home.jsp
			<body>
			  Welcome, ${currUser}!
			</body>
			
RedirectAttributes.addAttribute(key, value) 可以携带字符串格式参数到重定向的 url, 并且参数会显式的出现在重定向的 url 中。若参数中含有中文, 会出现中文乱码, 可通过转码的方式来解决 ( 如上 )。
user.name == lychie, POST /admin/login --> /admin/home?name=lychie --> Welcome, lychie!

示例代码下载
spring-mvc-redirect.zip