request请求转发,就是当一个servlet接收到了一个请求,这个servlet处理完这个请求后需要另外一个servlet接着继续处理。那么此时将这个已经先处理了一半的request,reeponse发送给这个第二个servlet的过程就是request请求转发
过程大致如下所示:
request请发是在服务器内部进行的和客户端没有关系。因此不会改变请求的url。在日常开发中请求转发是经常使用的。比如servlet转发到一个jsp页面。
1,如何实现请求转发?
1,使用getRequestDispatcher(String);//获取请求转发,传入转发目的地的路径
2,在使用forward(request,response);//将request和response转发过去.
接下来模拟一个场景,就是发送一个请求包含name和sex两个参数。name由servlet1处理sex由servlet2处理。
@WebServlet(name = "ServletDemo1",urlPatterns = {"/servletDemo1"})
public class ServletDemo1 extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//模拟客户端发送一个请求带有name和sex参数。这个servlet处理name,
//sex参数又servlet2处理
String name = request.getParameter("name");
System.out.println("servletDemo1:"+name);
//请求转发
request.getRequestDispatcher("/servletDemo2").forward(request,response);
}
}
@WebServlet(name = "ServletDemo2", urlPatterns = {"/servletDemo2"})
public class ServletDemo2 extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//这个处理sex
String sex = request.getParameter("sex");
System.out.println("servletDemo2:"+sex);
}
}
启动tomcat用get形式直接在浏览器输入链接发送请求,这是我的请求路径
http://localhost:8080/qjq/servletDemo1?name=zhangsan&sex=man
然后回车发送请求,结果如下:
说明servletDemo1已经成功把request交给servletDemo2来处理。
注意点:
1,请求转发是在服务器内部进行的,是servlet交流的手段。与客户端无关。
2,一次请求只产生一个request和response.在转发过程中的request和response是同一个。