zoukankan      html  css  js  c++  java
  • 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");		
    	}
    
    }
    

  • 相关阅读:
    系统运行缓慢,CPU 100%,以及Full GC次数过多问题的排查思路
    微阵列杂交(Microarray Hybridization)
    autocad2018安装笔记
    java基础 大数类
    leetCode 23
    java语言基础 String类
    定时任务cronie
    Linux-vim使用操作大全
    计网期末复习题目
    操作系统期末复习题
  • 原文地址:https://www.cnblogs.com/mzywucai/p/11053518.html
Copyright © 2011-2022 走看看