重定向,请求转发和请求包含

1.重定向
重定向是服务器通知浏览器去访问另一个地址,即再发出另一个请求。
两种方式:

1.resp.setStatus(302);
  resp.setHeader("location", "https://www.baidu.com");
2.resp.sendRedirect("HTTPS://www.baidu.com");

注意

  • 重定向是两次请求;
  • 重定向的URL可以是其他应用,不局限于当前应用;
  • 重定向的响应头为302,并且必须要有Location响应头;
  • 重定向就不要再使用response.getWriter()或response.getOutputStream()输出数据,不然可能会出现异常;重定向的URL可以是其他应用,不局限于当前应用;
  • 重定向的响应头为302,并且必须要有Location响应头;
  • 重定向就不要再使用response.getWriter()或response.getOutputStream()输出数据,不然可能会出现异常;
  • 当访问服务器内部资源的时候需要以斜杠开头加项目名称或者不加下斜杠不加项目名直接加资源路径

2.请求转发和请求包含
无论是请求转发还是请求包含,都表示由多个Servlet共同来处理一个请求。例如Servlet1来处理请求,然后Servlet1又转发给Servlet2来继续处理这个请求。

servlet2转发到servlet1

RequestDispatcher dispatcher =req.getRequestDispatcher("/servlet1");
dispatcher.forward(req, resp);

servlet2包含servlet1

RequestDispatcher dispatcher =req.getRequestDispatcher("/servlet1");
dispatcher.include(req, resp);

请求转发和请求包含的区别
* 请求转发除了最后一个servlet不可以设置响应体,但是可以设置响应头即不可以使用输出流
* 请求包含即可以设置响应体又可以设置响应头
* 请求包含一般用在jsp页面中页面合并的时候
* 请求转发多用在servlet中,转发目标大多数是jsp页面

servlet2

RequestDispatcher dispatcher =req.getRequestDispatcher("/servlet1");
resp.setHeader("aaa", "aaa");   
resp.setContentType("text/html;charset=utf-8");
PrintWriter printWriter =resp.getWriter();
printWriter.write("你好....");
//printWriter.close();
//当时转发的时候你好....无法输出到页面上
dispatcher.forward(req, resp);
//当是包含的时候你好....可以输出到页面上(响应流在servlet2中不可以关闭否则servlet1中无法使用响应流)
dispatcher.include(req, resp);

servlet1

Writer writer = resp.getWriter();
writer.write("你好");
System.out.println(resp.getHeader("aaa"));
writer.close();

请求转发与重定向比较
* 请求转发是一个请求,而重定向是两个请求;
* 请求转发后浏览器地址栏不会有变化,而重定向会有变化,因为重定向是两个请求;
* 请求转发的目标只能是本应用中的资源,重定向的目标可以是其他应用;
* 请求转发对Servlet2和Servlet1的请求方法是相同的,即要么都是GET,要么都是POST,因为请求转发是一个请求;
* 重定向的第二个请求一定是GET;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值