SpringMVC中的转发和重定向
来源:互联网 发布:java 缺省修饰符 编辑:程序博客网 时间:2024/05/16 19:04
SpringMVC中的转发和重定向
1. 转发和重定向异同
区别一:
重定向时浏览器上的网址改变
转发时浏览器上的网址不变
区别二:
重定向实际上产生了两次请求(速度慢)
转发只有一次请求(速度快)
重定向:
发送请求 –>服务器运行–>响应请求,返回给浏览器一个新的地址与响应码–>浏览器根据响应码,判定该响应为重定向,自动发送一个新的请求给服务器,请求地址为之前返回的地址–>服务器运行–>响应请求给浏览器
转发:(只在服务器端执行)
发送请求 –>服务器运行–>进行请求的重新设置,例如通过request.setAttribute(name,value)–>根据转发的地址,获取该地址的网页–>响应请求给浏览器
重定向:以前的request中存放的变量全部失效,并进入一个新的request作用域。
转发:以前的request中存放的变量不会失效,就像把两个页面拼到了一起。
区别三:
重定向时的网址可以是任何网址
转发的网址必须是本站点的网址
参考:http://www.2cto.com/kf/201107/97118.html
2. Controller中可以方便的通过forward , redirect 前缀来达到转发到其它资源的目的
如下代码中,在doLigin方法中转发到了userHome这个url, 转发后,request作用域还是同一个,数据也都还存在,userHome.jsp页面正常显示${username}, 而且url并没有变化。如果把forward改成redirect,则request中的数据超出作用于无法取得。
package cn.com.susq.controller;import org.apache.log4j.Logger;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.servlet.ModelAndView;import javax.annotation.Resource;import javax.servlet.http.HttpServletRequest;import java.io.UnsupportedEncodingException;/** * Created by susq on 2017-5-15. */@Controllerpublic class LoginController { private static Logger logger = Logger.getLogger(LoginController.class); @Resource HttpServletRequest request; @RequestMapping("/loginPage") public String toLoginPage() { return "login"; } @RequestMapping("/userHome") public ModelAndView toUserHome(HttpServletRequest request) { logger.info("username in forward: " + request.getParameter("username")); return new ModelAndView("userHome", "username", request.getParameter("username")); } @RequestMapping("/logout") public String logout() { request.getSession().removeAttribute("user"); return "redirect:/"; } @RequestMapping("/doLogin") public String doLogin(HttpServletRequest request) { try { request.setCharacterEncoding("utf-8"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } logger.info("username: " + request.getParameter("username")); logger.info("password: " + request.getParameter("password")); try { if(request.getParameter("username").equals("张三") && request.getParameter("password").equals("123")) { request.getSession().setAttribute("user", "张三"); return "forward:/userHome"; } else { logger.info("没登录上"); return "/loginPage"; } } catch (Exception e) { return "/loginPage"; } }}
forward:
redirect:
jsp文件如下
login.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %><%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><body><form action="/doLogin" method="post"> 用户名:<input type="text" name="username" /><br> 密码:<input type="text" name="password" /><br> <input type="submit" value="登录" /></form></body></html>
userHome.jsp
<%@ page isELIgnored="false"%><%@taglib uri="http://www.springframework.org/tags" prefix="spring" %><%@taglib uri="http://www.springframework.org/tags/form" prefix="form" %><%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head> <title>My JSP 'hello.jsp' starting page</title></head><body>当前用户:${username}<c:if test="${username!=null}"> <a href="/logout">退出</a></c:if>${message}</body></html>
阅读全文
0 0
- SpringMVC中的转发和重定向
- SpringMvc中的转发和重定向
- SpringMVC中的转发和重定向
- springmvc中的转发和重定向
- SpringMVC 转发和重定向
- springmvc转发和重定向
- SpringMVC中的重定向与请求转发
- springMVC 请求转发和重定向(RedirectAttributes)
- SpringMVC-请求转发和重定向
- SpringMVC 结果的转发和重定向
- springmvc里的转发和重定向
- springmvc转发和重定向(十一)
- SpringMVC 重定向和请求转发
- 【SpringMVC】SpringMVC结果的转发和重定向(十六)
- servlet(jsp)中的重定向和转发
- java web中的转发和重定向
- action中的重定向和转发
- Http中的重定向和转发
- Toeplitz matrix 与 Circulant matrix
- Android判断service是否在运行!
- NIO学习
- ssm:关于自定义转换器的使用
- SQL语句之group by
- SpringMVC中的转发和重定向
- 原来迭代器也可以作为一种类型
- Maven编译技巧
- 《TCP/IP详解 卷1:协议》 读书笔记 第四章 ARP:地址解析协议
- 复习java面向对象(继承)
- Fork别人的项目以及利用Gradle发布项目到Jcenter
- 解决安装Apache24安装时443端口被占用方法
- JavaScript思维导图
- Linux-三-命令-(20170515)