servlet请求转发和重定向

本文介绍了Servlet中请求转发和重定向的区别与实现方式。请求转发通过一次请求实现在服务器内部的数据传递,而重定向则生成新的HTTP请求,两者在实际应用中各有优势。
package com.cdsxt.action;

import java.io.IOException;
import java.util.Enumeration;

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

public class RequestServlet 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 {
		//request 作为作用域使用  
		//作用域的理解:  可以简单的理解成是一个Map<String,Object>
		//往作用域中存值
		request.setAttribute("a", "aaa");
		request.setAttribute("b", "bbb");
		
		/*//取值
		String a=(String) request.getAttribute("a");
		String b=(String) request.getAttribute("b");
	
		
		//请求转发
		//request.getRequestDispacher(地址).forward(请求对象,响应对象)
		/*
		 特点:
		 	1)整个过程一次请求
		 	2)地址栏不会发生变化
		 	3)不能访问外部资源
		 	4)效率高
		 	5)绝对路径    绝对路径的/代表的是根目录之后的根
		 	6)请求转发之后的代码会继续执行 所以习惯性在后面添加一个return 语句
		 */
		//相对路径
//		request.getRequestDispatcher("requestServlet2").forward(request, response);
		
		//绝对路径
//		request.getRequestDispatcher("/requestServlet2").forward(request, response);
//		request.getRequestDispatcher("http://www.baidu.com").forward(request, response);
//		return;

		
		//重定向
		//response.sendRedirect(地址);
		/*
		  特点:
		 	1)整个过程两次请求
		 	2)地址栏会发生变化 
		 	3)能访问外部资源 response.sendRedirect("http://www.baidu.com");
		 	4)效率偏低
		 	5)绝对路径    绝对路径的/代表的是端口号之后的根
		 	6)习惯性在后面添加一个return 语句
		 */
//		response.sendRedirect("requestServlet2");
//		response.sendRedirect("http://www.baidu.com");
//		response.sendRedirect("/RequestWeb2/requestServlet2");
		//推荐绝对路径写法
		response.sendRedirect(request.getContextPath()+"/requestServlet2");
		return;
		
		//模拟重定向
//		response.setStatus(302);//设置状态码
//		response.setHeader("location", "requestServlet2");
		
	}

}

请求转发:

重定向:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值