Request请求转发和重定向

请求转发和重定向的区别

重定向需要发送2次请求(地址栏信息会发生变化,可以跳转到任意网页,web应用外的也可以),转发只需要发送1次请求(地址栏信息不会发生变化,只能跳转到web应用内的网页等)。

请求转发使用 getRequestDispatcher() 方法,重定向使用 sendRedirect() 方法。

getRequestDispatcher 和sendRedirect区别

1、request.getRequestDispatcher()是请求转发,前后页面共享一个request ; 这个是在服务端运行的,对浏览器来说是透明的。

语法:
1、跳转到一个servlet
request.getRequestDispatcher("想跳转的servlet名").forward(request, response);

2、跳转到一个页面
request.getRequestDispatcher("文件路径").forward(request, response);


注意:1、Servlet 以及 页面 跳转的路径是相对路径。

           2、forward方式只能跳转到本web应用中的页面上。

           3、跳转后浏览器地址栏不会变化。
           4、使用这种方式跳转,传值可以使用三种方法:url中带parameter,session,request.setAttribute

           5、request的作用范围是一次服务请求,不是整个web应用。

将本Servlet的内容(参数值)转发到另外一个Servlet的方法

1、request.setAttribute()方法,在另外一个Servlet中使用 request.getAttribute()方法获取传递的参数值。

2、request.getRequestDispatcher() 方法直接定义名称,并设置值,在另外一个Servlet中使用 request.getParameter()方法获取传递的参数值。

package com.RequestHttpServlet;

import java.io.IOException;

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

/**
 * Servlet implementation class FourRequestServlet
 */
@WebServlet("/FourRequestServlet")
public class FourRequestServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public FourRequestServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#service(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		
		//
		request.setAttribute("pass", "789");
		
		//获取转发器
		request.getRequestDispatcher("FiveRequestServlet?name=username&value=123456").forward(request, response);
	
	}

}

 

package com.RequestHttpServlet;

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;

/**
 * Servlet implementation class FiveRequestServlet
 */
@WebServlet("/FiveRequestServlet")
public class FiveRequestServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public FiveRequestServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#service(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		System.out.println("访问FiveRequestServlet");
		
		String attribute = (String) request.getAttribute("pass");
		System.out.println(attribute);
		
		String username = request.getParameter("name");
		System.out.println(username);
	}

}

2、response.sendRedirect()是重新定向,前后页面不是一个request,只能用response调用。而这个是在浏览器端运行的。        

语法:

1、response.sendRedirect("/a.jsp"); 跳转到web应用内的页面的路径是相对路径。

2、response.sendRedirect("URL"); 跳转到web应用外的任意网页

注意:1、跳转后浏览器地址栏变化。
      2、方式要传值只能在url中带parameter或者放在session中,无法使用request.setAttribute来传递。

           3、该方式只适用于无传值跳转  

Java中的请求转发重定向都是用于在不同的Servlet之间进行页面跳转的方式,但它们的实现方式和效果是不同的。 请求转发是指在当前Servlet中处理完请求后,将请求转发给另一个Servlet进行处理,转发后的请求由另一个Servlet来产生响应。请求转发的代码如下: ```java RequestDispatcher dispatcher = request.getRequestDispatcher("/b"); dispatcher.forward(request, response); ``` 其中,`/b`是要转发到的Servlet的路径,`request`和`response`是当前Servlet的请求和响应对象,转发后的请求和响应对象也是这两个对象。 请求转发的特点是:转发后的请求和响应对象与原始请求和响应对象是同一个,因此它们可以共享请求和响应的信息,比如请求参数、请求属性等。此外,请求转发是在服务器端完成的,客户端并不知道发生了转发,因此地址栏中的URL不会改变。 重定向是指在当前Servlet中处理完请求后,将请求重定向到另一个Servlet进行处理,重定向后的请求由浏览器重新发起,由另一个Servlet来产生响应。重定向的代码如下: ```java response.sendRedirect("/b"); ``` 其中,`/b`是要重定向到的Servlet的路径,`response`是当前Servlet的响应对象。 重定向的特点是:重定向后的请求和响应对象与原始请求和响应对象是不同的,因此它们不能共享请求和响应的信息。此外,重定向是在客户端完成的,因此地址栏中的URL会改变。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值