`

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>

 

分享到:
评论

相关推荐

    servlet请求转发、重定向、包含

    Servlet请求转发、重定向和包含是Servlet中处理客户端请求的重要技术,它们都涉及到如何有效地管理用户请求和页面跳转,但各自有不同的特性和应用场景。 1. **请求转发(Request Forward)** - 请求转发是在服务器...

    请求转发与重定向

    在Web开发中,**请求转发**与**重定向**是两种非常重要的控制流程技术,它们都用于实现页面跳转的功能,但其工作原理和应用场景有所不同。 #### 二、请求转发 ##### 1. 定义 **请求转发**是在服务器内部进行的,它...

    javaServlet请求转发和重定向.pdf

    Java Servlet 请求转发和重定向是两种不同的页面跳转机制,它们在 Web 应用程序中扮演着重要的角色。理解这两种机制的区别和使用场景是非常重要的。 请求转发是指将请求再转发到另一资源(一般为 JSP 或 Servlet)...

    请求转发与重定向的区别

    在Web应用开发中,请求转发(Request Forwarding)和重定向(Redirect)是两种常见的用于控制用户请求流向的技术。理解它们的区别对于深入学习Java Servlet、Web编程或HTTP协议至关重要。 首先,请求转发是在服务器...

    servlet中实现请求转发,用户登录

    在Servlet中,请求转发与重定向(Redirect)不同。重定向是客户端行为,浏览器收到服务器的302响应后会发起一个新的请求,而请求转发是服务器内部操作,不会生成新的请求。因此,请求转发适用于需要共享请求属性或者...

    java servlet请求转发重定向

    ### Java Servlet 请求转发与重定向详解 #### 一、引言 在Java Web开发中,请求转发和重定向是两种非常重要的技术手段,用于控制页面之间的跳转逻辑。这两种技术虽然都能实现页面间的跳转,但其工作原理、应用场景...

    请求转发和重定向的区别共1页.pdf.zip

    在Web应用开发中,请求转发和重定向是两种常见的服务器端控制用户请求的方式,它们都是用来改变客户端浏览器的请求目标,但实现机制和效果有所不同。本文将深入探讨这两种技术的区别。 首先,请求转发(Request ...

    Servlet转发与重定向

    1. 转发的范围:RequestDispatcher.forward 方法只能将请求转发给同一个 WEB 应用中的组件,而 HttpServletResponse.sendRedirect 方法可以重定向到当前应用程序中的其他资源,也可以重定向到同一个站点上的其他应用...

    转发和重定向的区别

    在Web开发中,"转发"(Forward)和"重定向"(Redirect)是两种常见的页面跳转方式,它们虽然在效果上看似相似,但其实有着本质的区别。理解这两种技术的工作原理及其应用场景对于优化应用程序的性能和用户体验至关...

    请求转发与重定向详解代码

    在Web开发中,请求转发(Request Forward)和重定向(Redirect)是两种常见的处理客户端请求的方式,它们在处理用户请求并展示相应页面时起到关键作用。这篇文章将深入讲解这两种技术的工作流程,以及它们在实际应用...

    JavaWeb中的 请求转发 和 重定向.docx

    在JavaWeb开发中,请求转发和重定向是两种常见的客户端请求处理方式,它们都是用于将一个请求从一个Servlet传递到另一个Servlet或者从一个资源跳转到另一个资源。这两种方法虽然都可以实现页面间的跳转,但它们的...

    Servlet+jsp.docx

    ##### 2.2 重定向与请求转发 - **重定向**:客户端行为,服务器告诉客户端一个新的URL,客户端重新发起请求。客户端可以看到新的URL。 - **请求转发**:服务器内部行为,客户端看不到转发的过程,只能看到最终的...

    转发和重定向的区别 forward和redirect的区别

    在Java的Servlet编程中,`转发`和`重定向`是两种不同的机制,用于在服务器端将客户端的请求导向不同的资源。它们的主要区别在于请求处理流程、URL改变以及数据共享方式。 1. 转发(Forward): - 使用`...

    重定向和转发的区别

    综上所述,重定向和转发虽然都能实现页面跳转的功能,但它们在技术实现、应用场景以及对请求处理等方面存在着明显的差异。开发者在实际应用中应根据具体的业务需求和技术背景来选择合适的方式。了解这些区别有助于更...

    请求重定向个请求分派

    * 请求分派只能将请求转发给同一个 Web 应用程序中的其他组件,而重定向不仅可以定向到当前应用程序中的其他资源,也可以重定向到其他站点的资源上。 * 重定向的访问过程结束后,浏览器地址栏中显示的 URL 会发生...

    Java中Request请求转发详解

    Java中Request请求转发是指在Servlet中使用RequestDispatcher将请求转发到另一个Servlet或JSP页面,以实现请求的重定向或包含。在本文中,我们将通过示例代码详细介绍Java中Request请求转发的实现过程。 ...

    转发与重定向的详细说明

    例如,在一个基于MVC架构的系统中,用户请求可能首先被控制器(如Servlet)接收,控制器处理业务逻辑后,可能会选择将请求转发给视图层(如JSP页面),以便呈现最终的用户界面。 **2. 实现方式** 转发可以通过`...

Global site tag (gtag.js) - Google Analytics