请求重定向(四种方法)
来源:互联网 发布:mysql数据库密码查看 编辑:程序博客网 时间:2024/03/28 19:50
.转发与重定向细节(实际开发中知道一个原则)
RequestDispatcher有包含和转发两种功能
1.请求转发(getRequestDispatcher("").forward(request,response))
请求转发:由源组件转发到目标组件时,容器会清空源组件输出的数据,给目标干净的东西,所以用户只会看到目标组件输出的页码结果,
但是响应头信息是不清空的。
编码原则:不要在转发前后向后页面输出数据(不用功)
2.包含(动态包含)
(getRequestDispatcher("").include(request,response))
由源组件包含到目标组件时,容器会清空目标组件的头 。因此,源组件设置的头才有效。
但是,响应体信息是不清空的
编码原则:不要在目标组件中设置响应头(无用功)
===========================================^^^^^^^文章总结^^^^^^^^^==============================================================
-------------------------------->用response.sendRedirect()做转向其实是向浏览器发送一个特殊的Header,然后由浏览器来做转向,转到指定的页面,所以用sendRedirect时,浏览器的地址栏上可以看到地址的变化。(请求重定向)
package cn.ITHong.Response;import java.io.IOException;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;//请求重定向public class ResponseDemo7 extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {// response.setStatus(302);// response.setHeader("location", "http://www.baidu.com");response.sendRedirect("http://www.baidu.com");}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {}}
------------------------------------------------------- 第二种 请求转发 ------------------------------------------------------------
----------------------------------------- 以下的浏览器地址栏不会改变还是 ----------------------------------------------
----------------------------------------- 本地址栏:http://localhost:8080/Web07/servlet/RequestDemo4 ------------
---------------------------------------- 后地址栏: http://localhost:8080/Web07/servlet/RequestDemo4 ------------
------------------------------------------------------------------------------------------------------------>RequestDemo4.java(释放类)
package cn.ITHong.Request;import java.io.IOException;import javax.servlet.RequestDispatcher;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class RequestDemo4 extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {response.setContentType("text/html;charset=UTF-8");request.setAttribute("p", "request");response.getWriter().write("释放完毕");RequestDispatcher rd =request.getRequestDispatcher("/servlet/RequestDemo5");rd.forward(request, response);}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doGet(request, response);}}
------------------------------------------------------------------------------------------------------------->RequestDemo5.java(被重定向的类)
package cn.ITHong.Request;import java.io.IOException;import java.io.PrintWriter;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class RequestDemo5 extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {response.setContentType("UTF-8");String value =(String) request.getAttribute("p");response.getWriter().write(value.toString());}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doGet(request, response);}}
-------------------------------------------------------------------------------------------->第三种方法
总结:与第二种的区别
第三种:RequestDispatcher rd = ServletContext.getRequestDispatcher(目标资源的URI);
第二种: RequestDispatcher rd = ServletRequest.getRequestDispatcher(目标资源的URI);
区别:
方式三中的目标资源的URI 必须以“/”开头,不然报错,此斜线表示当前应用
方式二中的目标资源的URI 如果以“/”开头,表示当前应用(绝对路径表示法),如果不已“/”开头, 表示相对路劲
http://localhost:8080/Web07/servlet/RequestDemo5源
http://localhost:8080/Web07/servlet/RequestDemo6目标
则目标为RequestDemo6(相对源)
http://localhost:8080/Web07/servlet/RequestDemo5源
http://localhost:8080/Web07/servlet/a/RequestDemo6目标
则目标为a/RequestDemo6(相对源)
http://localhost:8080/Web07/servlet/RequestDemo5源
http://localhost:8080/Web07/RequestDemo6目标
则目标为../RequestDemo6(相对源)
package cn.ITHong.Request;import java.io.IOException;import javax.servlet.RequestDispatcher;import javax.servlet.ServletContext;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class RequestDemo4 extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {response.setContentType("text/html;charset=UTF-8");request.setAttribute("p", "request");response.getWriter().write("释放完毕");ServletContext sc = getServletContext();RequestDispatcher rd =sc.getRequestDispatcher("/servlet/RequestDemo5");rd.forward(request, response);}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doGet(request, response);}}
============================================================================================================
答案:只会在浏览器显示I'm eight 这个例子中 就像
只执行了 RequestDemo6.java.
具体:请求重定向
--------------------------------------------------------------------------------------------------------------------------RequestDemo6.java(源)
package cn.ITHong.Request;import java.io.IOException;import java.io.PrintWriter;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class RequestDemo6 extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {PrintWriter out = response.getWriter();out.print("seven forward before");//会执行,但是Httpservletquest内容会被清空request.getRequestDispatcher("/servlet/RequestDemo7").forward(request, response);//重定向out.print("seven forward after");<span style="font-family: Arial, Helvetica, sans-serif;">//会执行,但是Httpservletquest内容会被清空</span>}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doGet(request, response);}}
--------------------------------------------------------------------------------------------------------------------------RequestDemo7.java(目标:重定向地址)
package cn.ITHong.Request;import java.io.IOException;import java.io.PrintWriter;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class RequestDemo7 extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {PrintWriter out = response.getWriter();out.print("I'm eight");}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doGet(request, response);}}
- 请求重定向(四种方法)
- HttpServletResponse对象实现请求重定向(四)
- Servlet开发(四)Response对象、Request对象的请求重定向、请求转发
- 关于请求转发和重定向(二)--- 重定向
- Request对象(获取请求参数的方法、表单格式、防盗链、请求重定向)
- struts2 中请求转发与请求重定向方法
- Servlet学习笔记(四)之请求转发与重定向(RequestDispatcher与sendRedirect)
- (转)Jsp 重定向、请求转发
- 请求转发 重定向
- response请求重定向
- 请求重定向
- twisted09 请求重定向
- 请求重定向
- ajax请求重定向
- 实现请求重定向
- 请求重定向
- Servlet请求重定向
- 请求重定向
- Linux网络命令
- 第14周项目2读取文件处理成绩单
- linux源码安装mysql
- pip quick start
- iOS相机字体英文转中文,相机全屏
- 请求重定向(四种方法)
- 【酸甜苦辣】记迭代一的酸甜苦辣(妍喆篇)
- js中运算符的优先级
- lnmp一键安装+wordpress
- QThread 的使用方法(转)
- SpringMVC系列(四)注解方式上传文件
- .net基础扫盲-对象初始化器
- 解决Ubuntu9.10下txt文档中中文文本乱码问题
- 第十四周总结