HttpServletRequest詳解

       HttpServletRequest對象表明客戶端的請求,當客戶端經過HTTP協議訪問服務器時,HTTP請求中的全部信息都封裝在這個對象中,開發人員經過這個對象的方法,能夠得到客戶這些信息。java

      經過Request對象進行的經常使用操做web

    • 獲取客戶機信息服務器

    • 獲取請求頭信息jsp

    • 獲取請求參數this

    • 利用請求域傳遞對象url

        1、request獲取客戶機信息spa

            getRequestURL方法返回客戶端發出請求完整URL.net

            getRequestURI方法返回請求行中的資源名部分code

            getQueryString 方法返回請求行中的參數部分對象

            getRemoteAddr方法返回發出請求的客戶機的IP地址

            getMethod獲得客戶機請求方式

            getContextPath 得到當前web應用虛擬目錄名稱

public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		//1.獲取客戶端請求的完整URL
		String url = request.getRequestURL().toString();
		System.out.println(url);
		//2.獲取客戶端請求的資源部分的名稱
		String uri = request.getRequestURI();
		System.out.println(uri);
		//3.獲取請求行中參數部分
		String qStr = request.getQueryString();
		System.out.println(qStr);
		//4.獲取請求客戶端的ip地址
		String ip = request.getRemoteAddr();
		System.out.println(ip);
		//5.獲取客戶機的請求方式
		String method = request.getMethod();
		System.out.println(method);
		//6.獲取當前web應用的名稱
		String name = request.getContextPath();
		System.out.println(name);
		
		response.sendRedirect(request.getContextPath()+"/index.jsp");
	}

        2、request獲取請求頭信息 

        得到客戶機請求頭

    • getHeader(name)方法 --- String 

    • getHeaders(String name)方法 --- Enumeration<String>

    • getHeaderNames方法 --- Enumeration<String>

        得到具體類型客戶機請求頭

    • getIntHeader(name)方法  --- int

    • getDateHeader(name)方法 --- long(日期對應毫秒)

public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		String value = request.getHeader("Host");
		System.out.println(value);
		
		Enumeration<String> enumeration = request.getHeaderNames();
		while(enumeration.hasMoreElements()){
			String name = enumeration.nextElement();
			String value = request.getHeader(name);
			System.out.println(name+":"+value);
		}
		
	}

        3、request獲取請求參數

        getParameter(name) --- String 經過name得到值

        getParameterValues  --- String[ ] 經過name得到多值 checkbox

        getParameterNames  --- Enumeration<String> 得到全部name

        getParameterMap  --- Map<String,String[ ]> key :name value: 多值

        處理中文亂碼-->點擊詳細解釋

public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		String value = (String) request.getAttribute("name");
	}

        4、request利用請求域傳遞對象

            request對象同時也是一個域對象,開發人員經過request對象在實現轉發時,把數據經過request對象帶給其它web資源處理

    • setAttribute方法 

    • getAttribute方法  

    • removeAttribute方法

    •  getAttributeNames方法

            request做用域的做用範圍

            在請求轉發時傳遞數據

public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		request.setAttribute("name", "zqwang121");
		this.getServletContext().getRequestDispatcher("/servlet/Demo4").forward(request, response);
		
		String result = "zqwang121";
		request.setAttribute("result", result);
		request.getRequestDispatcher("/show.jsp").forward(request, response);
	
	}
public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		String value = (String) request.getAttribute("name");
		System.out.println(value);
	}

        4、request實現請求轉發

    • request對象提供了一個getRequestDispatcher方法,該方法返回一個RequestDispatcher對象,調用這個對象的forward方法能夠實現請求轉發,從而共享請求中的數據

    • 若是在調用forward方法以前向servlet程序中寫入的部份內容已經被真正的傳送到了客戶端,forward將不能進行,會拋出異常。

    • 若是在調用forward以前向response緩衝區中寫入了內容,只要寫入到其中的內容尚未真的被輸出到客戶端,forward方法就能夠正常執行,但原來寫入到緩衝區中的數據將被清空,注意只是實體內容被清空,以前寫入的響應頭信息仍然存在。

public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		request.getRequestDispatcher("/servlet/Demo6").forward(request, response);	
	}
相關文章
相關標籤/搜索