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 ( 带参重定向 )
user.name == lychie, POST /user/login --> /user/home --> Welcome, lychie!
@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!
user.name == lychie, POST /admin/login --> /admin/home?name=lychie --> Welcome, lychie!
示例代码下载