五 请求转发 和 URL 重定向 1 请求转发和重定向 干什么用? 是我们在java后台servlet中 由一个servlet跳转到 另一个 servlet/jsp 要使用的技术 前端发送请求到后台 : A 浏览器地址栏输入链接 B a标签 <a href="url地址">跳转</a> C form表单 <form action="url地址" method="get/post"> <input type="submit" value="跳转"> </from> get和post的区别(面试题) URL:统一资源定位符 (网址) http://www.baidu.com http://127.0.0.1:8080/day02/stu 协议://ip地址:端口号/工程名/资源路径 ?key1=value1&key2=value2 get请求的URL 协议: http:// ftp file jdbc:mysql:// ip地址: 0-255.0-255.0-255.0-255 定位电脑主机 端口号:8080 8090 通过端口号定位某台主机下的某个应用 工程名:/day02 资源路径:/stu 如果 通过URL传递参数(地址栏传参 )那么 需要在 路径的后面 通过?分割 ?号前面的是链接路径后面是传递的参数 参数的格式 : key=value 多个参数用 & 符隔开: key1=value1&key2=value2 D 通过js的BOM操作 : window.location.href = "http://www.baidu.com"; E AJAX 异步请求 servlet----》servlet/jsp 1 如何使用 请求转发 req.getRequestDispatcher(servlet或者jsp的请求路径).forward(req,resp); URL重定向 resp.sendRedirect("/day02_01/views/student.jsp"); 发现一个问题: 我们的代码 使用请求转发 跳转到jsp之后 是有数据的 但是重定向之后 没有数据 2 请求转发和重定向的原理 3 请求转发和重定向的区别 3.1 请求转发是一次请求 重定向是两次请求 (通过地址栏可以查看) 3.2 请求转发地址栏不会发生改变 重定向地址栏会发生改变 3.3 请求转发可以共享请求参数 重定向之后 就获取不了共享参数了 3.4 请求转发不能跨域(不能访问其他服务器链接) req.getRequestDispatcher("http://www.baidu.com").forward(req,resp);是不行的 重定向可以 resp.sendRedirect("http://www.baidu.com"); 这是可以的 3.5 请求转发能转到WEB-INF目录下的文件req.getRequestDispatcher("/WEB-INF/views/student.jsp").forward(req,resp); 而重定向不能 resp.sendRedirect("/day02_01/WEB-INF/views/student.jsp"); (WEB-INF目录:不能被外部通过地址直接访问) 4 为什么 请求转发不写工程名路径 而重定向一直都写工程名路径 5 什么时候时候请求转发 什么时候使用URL的重定向 如果需要共享参数 :请求转发 如果需要地址栏改变:重定向 如果需要跳转WEB-INF:请求转发 如果跳转外部链接:重定向 如果没如果 随便用