文档章节

请求内部转发与重定向区别

architect刘源源
 architect刘源源
发布于 2018/09/10 21:46
字数 520
阅读 20
收藏 1

1.请求内部转发

    使用:req.getRequestDispatcher("uri").forward(req, resp);

 

    1、多个Servlet共享一个request对象(重点)

    2、一次请求,当转发结束的时候也就是业务处理完毕的时候request对象会被销毁

    3、地址栏不改变

    注意在执行转发完毕后会继续执行代码,但是没有意义,所以一般在转发后面加return

    4、request对象的作用域(重中之重)

            作用域:共享request对象的Servlet

            作用域中存取数据:

                        req.setAttribute(key,value)

                        req.getAttribute(key)

                        req.removeAttribute(key)

请求内部转发实例演示

  1. @Override
  2. protectedvoid service(HttpServletRequest req,HttpServletResponse resp)
  3. throws ServletException,IOException{
  4. //设置响应编码格式
  5. resp.setCharacterEncoding("utf-8");
  6. resp.setContentType("text/html;charset=utf-8");
  7. //设置请求字符编码格式
  8. req.setCharacterEncoding("utf-8");
  9. //请求转发(获取用户数据):
  10. System.out.println(req.getParameter("uname"));
  11. System.out.println(req.getParameter("pwd"));
  12. //开始请求转发
  13. req.setAttribute("405","听说支付宝要收费了,赶紧给我转账");
  14. req.getRequestDispatcher("tr.action").forward(req, resp);
  15. //开始重定向
  16. resp.sendRedirect("http://www.baidu.com");
  17. return;
  18. }
  1. @Override
  2. protectedvoid service(HttpServletRequest req,HttpServletResponse resp)
  3. throws ServletException,IOException{
  4. //获取用户数据
  5. System.out.println(req.getParameter("uname")+"-----tr.action");
  6. System.out.println(req.getParameter("pwd")+"-----tr.action");
  7. System.out.println(req.getAttribute("405"));
  8. resp.getWriter().write("哈哈");
  9. }

 

2.重定向

            使用:resp.sendRedirect("uri");

            特点:

                地址栏改变

                两次请求,两个request对象

 

 

3.重定向/请求转发时参数URI问题

3.1重定向

项目目录                                             

 

             

main.jsp               

 

在main.jsp中进行重定向

response.sendRedirect("/login.jsp")-->代表localhost:8080/login.jsp
response.sendRedirect("login.jsp")-->代表localhost:8080/Admin/login.jsp
response.sendRedirect("checkOper")-->代表localhost:8080/Admin/checkOper
response.sendRedirect("/checkOper")-->代表localhost:8080/checkOper
response.sendRedirect("/Exercise_Jsp/login.jsp")-->代表localhost:8080/Exercise_Jsp/login.jsp
response.sendRedirect("/Exercise_Jsp/checkOper")-->代表localhost:8080/Exercise_Jsp/checkOper

 

3.2请求转发

在checkOper中转到Oper下的selectAll.jsp中

 

 

请求内部转发和重定向图解

总结:

请求转发是一次请求,地址栏不改变,多个Sevrlet共享一个request
重定向是两次请求,地址栏改变,两个request对象

© 著作权归作者所有

architect刘源源

architect刘源源

粉丝 169
博文 564
码字总数 941209
作品 0
浦东
程序员
私信 提问
加载中

评论(1)

architect刘源源
architect刘源源 博主
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    //获取用户参数
    String name = request.getParameter("username");
    String password = request.getParameter("password");
    //判断用户是否存在
    if("admin".equals(name)&&"123456".equals(password)){
    //  request.getRequestDispatcher("success.html").forward(request, response);
      //登录成功,重定向到成功页面
      response.sendRedirect("success.html");
    }else{
      //登录失败 转发到失败页面
      request.getRequestDispatcher("error.html").forward(request, response);
    }
    
  }
Http中的重定向和请求转发

1.重定向和请求转发区别 本质区别 例子1. 假设你去办理护照 重定向: 你先去了A局, A局的人说: "这个事情不归我们管的,你去B局吧", 然后你就从A局退了出来, 去了B局 转发: 你先去了A局, A局看...

陈小扁
2016/04/22
189
0
SpringMVC(四):转发、重定向和Flash属性

1、转发和重定向的区别 一句话概括:重定向是客户端行为,转发是服务器行为. 1.请求次数: 重定向:重定向行为是做了两次请求,及产生了两个request对象,重定向会导致request对象信息丢失。...

_Roger_
2015/09/13
1K
0
servlet和jsp的转发与重定向代码以及区别

1.首先说明以下重定向和转发的区别 重定向:浏览器发送请求到服务器之后,服务器会发一个状态码和再次请求的地址给到浏览器,浏览器根据地址再次请求服务器的过程。 转发:浏览器发送请求到服...

nqmysb
01/03
0
0
浅谈Web开发中forward与redirect的区别

Forward和Redirect代表了两种请求转发方式:直接转发和间接转发。直接转发就是由控制器来控制请求应该转发给那个信息资源。然后由这些信息资源处理请求,处理完以后还可能转发给另外的信息资...

小欣妹妹
2017/10/25
21
0
forward和redirect的区别

1.从地址栏显示来说 forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器.浏览器根本不知道服务器发送的内容从哪里来的,所以它的...

universeye
2014/05/13
329
0

没有更多内容

加载失败,请刷新页面

加载更多

Centos7 安装zabbix-agent

rpm -i https://repo.zabbix.com/zabbix/4.2/rhel/6/x86_64/zabbix-release-4.2-2.el6.noarch.rpm 可以到https://repo.zabbix.com/zabbix找到对应的版本 yum install zabbix-agent -y 出现E......

abowu
昨天
8
0
文本编辑器GNU nano 4.4 发布

GNU nano 4.4 "Hagelslag" 更新日志: 启动时,光标可以放在第一个或最后一个出现位置 字符串前面带有+/string 或 +?string的字符串。 发生自动硬包装时((--breaklonglines),任何前导引号...

linuxCool
昨天
7
0
你知道字节序吗

字节序 最近在调一个自定义报文的接口时,本来以为挺简单的,发现踩了好几个坑,其中一个比较“刻骨铭心”的问题就是数据的字节序问题。 背景 自定义报文,调用接口,服务端报文解析失败 iO...

杭城小刘
昨天
3
0
设计模式之依赖倒置原则

方法

东风破2019
昨天
6
0
关于如何通过模拟器完成模拟步数提升傻瓜式解决方案(囧)

因为对Android开发不太了解,也没去问朋友所以误打误撞找到的一个提升步数的解决方案,当然只是针对某安APP运动RUN的解决方式吧。 对Android不太了解,所以找了很多的解决方案来看看能不能破...

华山猛男
昨天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部