博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
请求内部转发与重定向区别
阅读量:5878 次
发布时间:2019-06-19

本文共 1932 字,大约阅读时间需要 6 分钟。

hot3.png

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

 

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对象

转载于:https://my.oschina.net/architectliuyuanyuan/blog/2046421

你可能感兴趣的文章
Linux lsof命令详解
查看>>
SVG path
查看>>
js判断checkbox是否选中
查看>>
多系统盘挂载
查看>>
MySQL函数怎么加锁_MYSQL 函数调用导致自动生成共享锁问题
查看>>
MR1和MR2的工作原理
查看>>
Eclipse中修改代码格式
查看>>
GRUB Legacy
查看>>
关于 error: LINK1123: failure during conversion to COFF: file invalid or corrupt 错误的解决方案...
查看>>
python实现链表
查看>>
java查找string1和string2是不是含有相同的字母种类和数量(string1是否是string2的重新组合)...
查看>>
Android TabActivity使用方法
查看>>
Eclipse的 window-->preferences里面没有Android选项
查看>>
《麦田里的守望者》--[美]杰罗姆·大卫·塞林格
查看>>
央行下属的上海资信网络金融征信系统(NFCS)签约机构数量突破800家
查看>>
[转] Lazy evaluation
查看>>
常用查找算法总结
查看>>
被神话的大数据——从大数据(big data)到深度数据(deep data)思维转变
查看>>
修改校准申请遇到的问题
查看>>
Linux 进程中 Stop, Park, Freeze【转】
查看>>