WEB核心【请求重定向】第十三章
目录
- 💂 个人主页: 爱吃豆的土豆
- 🤟 版权: 本文由【爱吃豆的土豆】原创、在CSDN首发、需要转载请联系博主
- 💬 如果文章对你有帮助、欢迎关注、点赞、收藏(一键三连)和订阅专栏哦
🏆人必有所执,方能有所成!
🐋希望大家多多支持😘一起进步呀!
1,请求重定向【阶段重点】
1.1:简述&原理&格式
目标:
1,理解请求重定向原理
2,熟练使用请求重定向的多种格式写法
3,掌握请求转发和重定向区别
javaEE资源跳转方式有两种:
1,重定向
2,请求转发
3,浏览器发现302状态码,就会进行自动请求。请求路径,就是响应头中location
请求重定向:依赖浏览器
请求路径会发生改变。请求转发地址栏路径没有改变。
开发简化:(BaseServlet、SpringMVC)
请求重定向:return "redirect:/路径?参数列表";
return "redirect:http://网址";
-
@WebServlet({"/d2"})
-
public class Demo2Servlet extends BaseServlet {
-
-
/**
-
* 开发简化写法(BaseServlet子类,SpringMVC)
-
* @return
-
*/
-
public String run1(){
-
System.out.println("d2-run1");
-
return "redirect:/index.jsp";
-
}
-
/**
-
* 开发简化写法(BaseServlet子类,SpringMVC)
-
* @return
-
*/
-
public String run2(){
-
System.out.println("d2-run2");
-
return "redirect:http://www.czxy.com";
-
}
-
}
- 完整写法:(适用于 过滤器组件)
项目内跳转:response对象.sendRedirect("/项目名/路径?参数列表");
外网跳转:response对象.sendRedirect("http://网址");
-
/**
-
* 完整写法(过滤器等组件)
-
* @return
-
*/
-
public void run3() throws IOException {
-
System.out.println("d2-run3");
-
//getResponse().sendRedirect("/day08_1/index.jsp");
-
getResponse().sendRedirect(getServletContext().getContextPath()+"/index.jsp");
-
}
-
/**
-
* 完整写法(过滤器等组件)
-
* @return
-
*/
-
public void run4() throws IOException {
-
System.out.println("d2-run4");
-
getResponse().sendRedirect("http://www.czxy.com");
- 原理写法:(适用于非servlet组件,通过response对象进行跳转)(了解)
请求重定向原理:
响应状态码:302
响应头设置:location=
-
/**
-
* 原理写法(适用于非servlet组件,通过response对象进行跳转)
-
* @return
-
*/
-
public void run5() throws IOException {
-
System.out.println("d2-run5");
-
getResponse().setStatus(302);
-
getResponse().setHeader("location",getServletContext().getContextPath()+"/index.jsp");}
-
/**
-
* 原理写法(适用于非servlet组件,通过response对象进行跳转)
-
* @return
-
*/
-
public void run6() throws IOException {
-
System.out.println("d2-run6");
-
getResponse().setStatus(302);
-
getResponse().setHeader("location","http://www.czxy.com");
-
}
1.2:延迟重定向
-
/**
-
* 延迟重定向-3秒
-
*/
-
public void run7() throws IOException {
-
//getResponse().setHeader("refresh","3;http://www.czxy.com");
-
//getResponse().setHeader("refresh","3;/day08_1/index.jsp");
-
getResponse().setHeader("refresh","3;"+getServletContext().getContextPath()+"/index.jsp");
-
//满足用户体验
-
getResponse().getWriter().write("<script>\n" +
-
" window.onload = function (ev) {\n" +
-
" var numNode = document.getElementById(\"num\");\n" +
-
" setInterval(function () {\n" +
-
" numNode.innerHTML = parseInt(numNode.innerHTML)-1;\n" +
-
" },1000);\n" +
-
" }\n" +
-
" </script>\n" +
-
" <h1>倒计时,还有<font color=\"red\" id=\"num\">3</font>秒跳转</h1>");
-
}
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"/>
解决方案:
- 根本解决: 将目标资源 资源路径全部转换为绝对路径: /项目名/资源名.扩展名
- 不用请求转发,用请求重定向。(治标不治本)
最后:
如果文章对您有帮助,就拿起小手赶紧给博主点赞💚评论❤️收藏💙 一下吧!
愿我们在未来的日子里。熠熠生辉!!!
文章来源: qianxu.blog.csdn.net,作者:爱吃豆的土豆,版权归原作者所有,如需转载,请联系作者。
原文链接:qianxu.blog.csdn.net/article/details/125345395
- 点赞
- 收藏
- 关注作者
评论(0)