请求的转发和重定向

RequestDispatcher接口实现转发:

jsp1上链接到Servlet,Servlet再转发(关键在这里怎么实现转发??)

演示index.html页面---->Servlet1(转发到)------>Servlet2

实现转发流程

1.用HttpServletRequest的getRequestDispatcher(path)方法,path就是指定转发到的目标地址

RequestDispatcher rd = request.getRequestDispatcher("/servlet2");

2.getRequestDispatcher方法返回的RequestDispatcher对象调用forword方法实现最终的转发动作。

rd.forward(request, response);

演示index.html页面---->Servlet1(重定向到)------>Servlet2

sendRedirect接口实现重定向:

直接HttpServletResponse调用sendRedirect(重定向的目标地址)。

response.sendRedirect("servlet2");

转发和重定向的区别:

1.请求的转发是一种服务器行为,转发时request对象会被保存,也就是说被转发到的另外一个servlet或其他资源中的request对象,跟请求转发的request是同一个对象。又由于这个过程是服务端行为,所以客户端的地址栏不会发生改变。从始到终请求只有一次,一个!

2.请求的重定向是一种客户端行为,实际上期间发生的是两次请求,前一次的请求request对象不会作保存,两个Servlet里的reuqest对象不是同一个,且地址栏地址会发生改变。

jsp页面也是一样的,演示:a.jsp链接到->b.jsp转发到->c.jsp(request保留)

3.转发只能转发到Web应用内部的资源,重定向可以到任何资源。

4.转发中地址用“/”表示WEB应用的根目录,重定向中地址“/”是站点的根目录。

index01.jsp:

跳转到Servlet01

index02.jsp:

此页面为index02.jsp

index03.jsp:

[重定向:]这里是index03.jsp页面

Servlet1:

public class Servlet01 extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//转发:getRequestDispatcher("转发地址").forward(request, response)
		request.getRequestDispatcher("/servlet2").forward(request, response);//转发到servlet2
		//重定向:
//		response.sendRedirect("/requestDispatcher/index03.jsp");
	}
}

Servlet2:

public class Servlet02 extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//设置浏览器响应字符集
		response.setHeader("Content-type", "text/html;charset=UTF-8");
		response.getWriter().print("[转发:]本Servlet是Servlet02");
	}
}

请求的转发和重定向_第1张图片

请求的转发和重定向_第2张图片 

你可能感兴趣的:(代码笔记,JAVA,java,开发语言)