实现转发:
- request对象方法获取转发器 RequestDispatcher getRequestDispatcher(“转发地址”)返回值就是转发器
- 使用转发器对象的方法 forward(request,response)
图解:
代码实现:
package com.ccc.demo01Dispatcher;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet(urlPatterns = "/servlet1")
public class Servlet1 extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("Servlet1 我是刘备");
RequestDispatcher dispatcher = request.getRequestDispatcher("/servlet2");
dispatcher.forward(request,response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
package com.ccc.demo01Dispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet(urlPatterns = "/servlet2")
public class Servlet2 extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("Servlet2 我是关羽");
response.setContentType("text/html;charset=utf-8");
response.getWriter().write("二哥借你500");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
转发和重定向区别:
重定向:
- 请求了 两次服务器,地址栏有变化。由刚开始的servlet1——>变为了sevlet2
- 重定向可以 定向到外网
- 重定向的地址(若不是外网)必须得写上 项目的名称。/day12_web/servlet2
- 重定向最终的结果:影响的是servlet2中的数据
转发:
- 请求了 一次服务器,地址栏没有任何变化。servlet1——>还是sevlet1
- 转发 不能到外网。转发只是服务器内部的行为,客户端并不知道这个行为
- 转发的路径 不需要写项目的名称。/servlet2。因为是在当前项目的内部,所以可以省略项目的名称
- 转发的最终结果,影响的也是servlet2中的数据
什么时候用转发,什么时候用重定向
- 需要外网的时候,只能用重定向
- 一般想要让浏览器的地址栏有变化,那么使用重定向(假如京东网页,登录成功,跳转到首页,这时候地址也应该变成首页的地址)
- 一般不想让地址发生变化,使用转发(假如京东网页,登录失败,还在登录页面让用户继续登录),一次请求request对象是有效的