WEB核心【请求重定向】第十三章

举报
爱吃豆的土豆 发表于 2022/09/25 05:03:36 2022/09/25
【摘要】 目录 1,请求重定向【阶段重点】 1.1:简述&原理&格式 1.2:延迟重定向 1.3:请求转发和重定向的区别 1.4:资源跳转问题 💂 个人主页: 爱吃豆的土豆🤟 版权: 本文由【爱吃豆的土豆】原创、在CSDN首发、需要转载请联系博主💬 如果文章对你有帮助、欢迎关注、点赞、...

目录

1,请求重定向【阶段重点】

1.1:简述&原理&格式

1.2:延迟重定向

1.3:请求转发和重定向的区别

1.4:资源跳转问题


  • 💂 个人主页: 爱吃豆的土豆
  • 🤟 版权: 本文由【爱吃豆的土豆】原创、在CSDN首发、需要转载请联系博主
  • 💬 如果文章对你有帮助、欢迎关注、点赞、收藏(一键三连)和订阅专栏哦
  • 🏆人必有所执,方能有所成!

  • 🐋希望大家多多支持😘一起进步呀!

1,请求重定向【阶段重点】

1.1:简述&原理&格式

目标:

1,理解请求重定向原理

2,熟练使用请求重定向的多种格式写法

3,掌握请求转发和重定向区别

javaEE资源跳转方式有两种:

1,重定向

2,请求转发

 

3,浏览器发现302状态码,就会进行自动请求。请求路径,就是响应头中location

请求重定向:依赖浏览器 

请求路径会发生改变。请求转发地址栏路径没有改变。

开发简化:(BaseServlet、SpringMVC)

请求重定向:return "redirect:/路径?参数列表";
                     return "redirect:http://网址";


  
  1. @WebServlet({"/d2"})
  2. public class Demo2Servlet extends BaseServlet {
  3. /**
  4. * 开发简化写法(BaseServlet子类,SpringMVC)
  5. * @return
  6. */
  7. public String run1(){
  8. System.out.println("d2-run1");
  9. return "redirect:/index.jsp";
  10. }
  11. /**
  12. * 开发简化写法(BaseServlet子类,SpringMVC)
  13. * @return
  14. */
  15. public String run2(){
  16. System.out.println("d2-run2");
  17. return "redirect:http://www.czxy.com";
  18. }
  19. }
  1. 完整写法:(适用于 过滤器组件)

项目内跳转:response对象.sendRedirect("/项目名/路径?参数列表");

外网跳转:response对象.sendRedirect("http://网址");

 


  
  1. /**
  2. * 完整写法(过滤器等组件)
  3. * @return
  4. */
  5. public void run3() throws IOException {
  6. System.out.println("d2-run3");
  7. //getResponse().sendRedirect("/day08_1/index.jsp");
  8. getResponse().sendRedirect(getServletContext().getContextPath()+"/index.jsp");
  9. }
  10. /**
  11. * 完整写法(过滤器等组件)
  12. * @return
  13. */
  14. public void run4() throws IOException {
  15. System.out.println("d2-run4");
  16. getResponse().sendRedirect("http://www.czxy.com");
  1. 原理写法:(适用于非servlet组件,通过response对象进行跳转)(了解)

请求重定向原理:

响应状态码:302

响应头设置:location=

 


  
  1. /**
  2. * 原理写法(适用于非servlet组件,通过response对象进行跳转)
  3. * @return
  4. */
  5. public void run5() throws IOException {
  6. System.out.println("d2-run5");
  7. getResponse().setStatus(302);
  8. getResponse().setHeader("location",getServletContext().getContextPath()+"/index.jsp");}
  9. /**
  10. * 原理写法(适用于非servlet组件,通过response对象进行跳转)
  11. * @return
  12. */
  13. public void run6() throws IOException {
  14. System.out.println("d2-run6");
  15. getResponse().setStatus(302);
  16. getResponse().setHeader("location","http://www.czxy.com");
  17. }

1.2:延迟重定向


  
  1. /**
  2. * 延迟重定向-3秒
  3. */
  4. public void run7() throws IOException {
  5. //getResponse().setHeader("refresh","3;http://www.czxy.com");
  6. //getResponse().setHeader("refresh","3;/day08_1/index.jsp");
  7. getResponse().setHeader("refresh","3;"+getServletContext().getContextPath()+"/index.jsp");
  8. //满足用户体验
  9. getResponse().getWriter().write("<script>\n" +
  10. " window.onload = function (ev) {\n" +
  11. " var numNode = document.getElementById(\"num\");\n" +
  12. " setInterval(function () {\n" +
  13. " numNode.innerHTML = parseInt(numNode.innerHTML)-1;\n" +
  14. " },1000);\n" +
  15. " }\n" +
  16. " </script>\n" +
  17. " <h1>倒计时,还有<font color=\"red\" id=\"num\">3</font>秒跳转</h1>");
  18. }

 

1.3:请求转发和重定向的区别

 

1,请求转发使用request对象,重定向使用response对象

2,请求转发使用服务器端路径,重定向使用客户端路径

3,请求转发不能跳转外网,重定向可以

4,请求转发是服务器内部的跳转,不依赖网速,跳转速度极快。重定向是依赖浏览器的跳转,严重依赖网速,跳转速度略慢

5,请求转发:请求一次,响应一次。占用资源少
      重定向:重定向N次,响应n+1次。占用大量资源

6,请求转发可以访问受保护目录资源,重定向不能

7,请求转发不会改变地址栏路径,重定向会改变路径

      安全:请求转发。会隐藏后面转发程序的访问路径。

      程序Bug:由于请求转发不会更改地址,会导致用户重复访问某个Servlet。改为重定向

8,请求转发可以使用request作用域,重定向不能

1.4:资源跳转问题

请求转发跳转问题:

请求转发因为请求路径在转发多次也不会改变。

如果跳转中出现相对路径,相对路径的出发目录

请求地址栏目录路径来作为相对路径的出发目录

<img src="/day09_1/aaa/3.png"/> 

解决方案:

  1. 根本解决: 将目标资源 资源路径全部转换为绝对路径:  /项目名/资源名.扩展名
  2. 不用请求转发,用请求重定向。(治标不治本)

 

最后:

        如果文章对您有帮助,就拿起小手赶紧给博主点赞💚评论❤️收藏💙 一下吧! 

       愿我们在未来的日子里。熠熠生辉!!!

文章来源: qianxu.blog.csdn.net,作者:爱吃豆的土豆,版权归原作者所有,如需转载,请联系作者。

原文链接:qianxu.blog.csdn.net/article/details/125345395

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。