Servlet中的请求转发和重定向

1、请求转发
Servlet在接收到浏览器请求之后,进行一定的处理,先不进行响应,而是在服务器端内部"转发"给其他的Servlet程序继续处理。在这种情况下,浏览器只发出了一次请求,而且浏览器地址栏不会发生变化,用户也感知不到请求被转发了。
转发请求的Servlet和目标Servlet共享同一个request对象,也就是在目标Servlet中可以通过request.getParameter()方法获取前台传入的参数。
代码示例
request.getRequestDispatcher("success.jsp").forward(request, response);
request.getRequestDispatcher("success.html").forward(request, response);
request.getRequestDispatcher("forward").forward(request, response);

2、重定向
Servlet接收到浏览器的请求并处理完之后,会给浏览器一个特殊的响应,这个特殊的响应要求浏览器去请求一个新的资源。这时浏览器会自动去访问这个新的资源的地址。整个过程无需用户操作,但浏览器发出的是两次请求,且浏览器的地址栏会改变为新资源的地址。
重定向的情况下,原Servlet和目标资源之间就不能共享request域的数据了。
代码示例
response.sendRedirect("fail.jsp");
response.sendRedirect("fail.html");
response.sendRedirect("forward?username="+username);

3、代码示例

RegisterServlet.java

package com.keke.servlet;

import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class RegisterServlet extends HttpServlet {

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		this.doPost(request, response);
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		String username = request.getParameter("username");
		if("lps".equals(username)) {
			//请求转发
			//①跳转到jsp页面
			//request.getRequestDispatcher("success.jsp").forward(request, response);
			//②跳转到html页面
			//request.getRequestDispatcher("success.html").forward(request, response);
			//③跳转到Servlet
			request.getRequestDispatcher("forward").forward(request, response);
		} else {
			//重定向
			//①跳转到jsp页面
			//response.sendRedirect("fail.jsp");
			//②跳转到html页面
			//response.sendRedirect("fail.html");
			//③跳转到Servlet
			response.sendRedirect("forward?username="+username);
		}
	}

}

ForwardServlet.java 

package com.keke.servlet;

import java.io.IOException;
import java.io.PrintWriter;

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

public class ForwardServlet extends HttpServlet {

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		this.doPost(request, response);
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		String username = request.getParameter("username");
		System.out.println("username="+username);
	}

}

web.xml

<!-- 注册RegisterServlet -->
	<servlet>
		<servlet-name>registerServlet</servlet-name>
		<servlet-class>com.keke.servlet.RegisterServlet</servlet-class>
	</servlet>
	<servlet-mapping>
		<servlet-name>registerServlet</servlet-name>
		<url-pattern>/reg</url-pattern>
	</servlet-mapping>
	
	<!-- 注册RegisterServlet -->
	<servlet>
		<servlet-name>forwardServlet</servlet-name>
		<servlet-class>com.keke.servlet.ForwardServlet</servlet-class>
	</servlet>
	<servlet-mapping>
		<servlet-name>forwardServlet</servlet-name>
		<url-pattern>/forward</url-pattern>
	</servlet-mapping>
扫描二维码关注公众号,回复: 758955 查看本文章

猜你喜欢

转载自lipiaoshui2015.iteye.com/blog/2246323