Web---浅说请求转发和请求重定向

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_34928644/article/details/82142674

请求转发

请求转发可以这样理解:李四通过电话号码找张三,而这个电话号码其实是王五的,所以是王五接到了李四的电话,接到电话后王五知道李四是找张三而且张三跟王五是同事,王五直接把电话给张三,最后张三与李四通过王五的号码进行通话。

请求重定向

请求重定向可以这样理解:李四通过电话号码找张三,而这个电话号码其实是王五的,所以是王五接到了李四打过来的电话,接到电话后王五知道李四是要找张三,这时王五是告诉李四张三的电话号码,让李四自己再打张三的电话号码找他,最后李四是通过张三的号码进行通话。

代码演示:

注意:观察重定向的目标url和请求转发的目标url

请求重定向:

package cn.hncu.servlets.go;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


@WebServlet("/redirect")
public class RedirectServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
	
	@Override
	protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		//请求重定向原理:后台向客户端浏览器发送 状态码:302 和 一个Location:url
		//浏览器接收到 302 后就会自动执行新的请求,请求目的就是 接收到的 url
		//HttpServletResponse.SC_FOUND值就是302
		//resp.setStatus( HttpServletResponse.SC_FOUND ); 
//		resp.setStatus( 302 );
//		resp.setHeader("Location", "/httpWeb/jsps/result.jsp");
		
		resp.sendRedirect("/httpWeb/jsps/result.jsp");
	}

}

请求转发:

package cn.hncu.servlets.go;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/forward")
public class ForwardServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
	
	@Override
	protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		//请求转发是内部转发(站内转发),'/'代表项目根目录
		//而请求重定向是站外请求,'/'表示服务器根目录,这里是Tomcat服务器的根目录
		//所以重定向的url是:/httpWeb/jsps/result.jsp
		req.getRequestDispatcher("/jsps/result.jsp").forward(req, resp);
	
	}

}

猜你喜欢

转载自blog.csdn.net/qq_34928644/article/details/82142674