servlet中servletContext的五大作用(四)

1.    获取web的上下文路径

2.    获取全局的参数

3.    作为域对象使用

4.    请求转发

5.    读取web项目的资源文件

package day10.about_servletcontext.forward_redirect;

import java.io.IOException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
 * 【context对象的作用-4】:转发
 * @author mzy
 * 
 * 本例是请求转发(和请求重定向相似):
 * 
 * 在servlet界面进行跳转的方式(区别):
 * 		1.请求重定向(重定向浏览器发出了两次请求:重定向动作由浏览器自己完成)
 * 			1)重定向的话,本质是转到了另一个页面,URL会跟着一起改变。
 * 			2)重定向的话,可以重定向到另一个项目下的资源。
 * 			3)重定向是浏览器行为。(浏览器可以请求任何行为)
 * 			4)重定向浏览器发出了两次请求。
 * 
 * 		2.请求转发(转发浏览器只发出了一次请求:转发动作由服务器完成)
 * 			1)请求转发URL是不会改变的,只是内容变化为转发的地址的内容。
 * 			2)转发的话,转发只能访问到当前项目下的资源,不能转发到其它项目下的资源。
 * 			3)转发是服务器行为。(服务器的转发只能转发到当前的项目下)
 * 
 * 		接触到的域对象:
 * 			context
 * 			request
 * 			session
 * 	
 * 		因为请求转发,转发使用的是一个请求:所以就可以使用请求(request)来作为域对象
 * 		但是如果是重定向的话,浏览器发出了两次请求,两次请求的request就不是同一个域对象了
 * 		所以在重定向中,不能使用request来作为域对象。
 * 
 * 
 * 		但是context就不一样了,一次只有一个context对象,不管是重定向还是转发都能使用context。
 * 
 * 
 * 
 */
public class ContextDemo04_FowardDemo01 extends HttpServlet {

	private static final long serialVersionUID = 1686962617232277250L;

	public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("utf-8");
		response.setContentType("text/html;charset=utf-8");
		/**
		 * 转发
		 */
		ServletContext context = this.getServletContext();
		// URI
		// 1.写法一
		RequestDispatcher rd = context.getRequestDispatcher("/hello.html");
		rd.forward(request, response);
		
		// 2.写法二
		this.getServletContext().getRequestDispatcher("/hello.html").forward(request, response);
		
		// 3.写法三:sun公司在设计的时候,为了开发者在调用context的请求转发的时候方便;
		// 直接让request将context的转发功能带上了,就可以直接写:
		request.getRequestDispatcher("/hello.html").forward(request, response);
		
		// 但是我们还是要知道本质:
		// 首先ServletContext只能通过ServletConfig来获取;
		// 然后重定向的功能是ServletContext中提供的;
		// 首先要通过ServletContext获得请求转发的对象(RequestDispatcher)通过:getRequestDispatcher方法
		// 然后是再通过RequestDispatcher对象调用forward方法进行转发的。
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("utf-8");
		response.setContentType("text/html;charset=utf-8");		
	}

}

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值