HttpServletRequest請求信息的獲取

HttpServletRequest 是一個接口,他的父類接口ServletRequest,在開發中我們一般是使用帶協議的。

請求消息行的獲取

常見方法:

1,獲取請求提交的方式 getMethod()
2,獲取請求的協議 getProtocol()
3,獲取項目名稱 getContextPath()
4,獲取servlet路徑 getServletPath()
5,獲取請求路徑:getRequestURI()、getRequestURL()

public class TestClass extends HttpServlet {
	private static final long serialVersionUID = 1L;
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		String MethodName = request.getMethod();
		String HtttpType = request.getProtocol();
		String DemoName = request.getContextPath();
		String ServletName = request.getServletPath();
		String URI_add = request.getRequestURI();
		String URL_add = request.getRequestURL().toString();
		
		response.setContentType("text/html;charset=utf-8");
		response.getWriter().println("響應方法:"+ MethodName + "<br/>");
		response.getWriter().println("通信協議:"+ HtttpType+ "<br/>");
		response.getWriter().println("項目名稱:"+ DemoName+ "<br/>");
		response.getWriter().println("Servlet項目名:"+ ServletName+ "<br/>");
		response.getWriter().println("URI資源定位"+ URI_add+ "<br/>");
		response.getWriter().println("URL路徑定位"+ URL_add+ "<br/>");
	}
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}
}

獲取結果

URI:/項目名稱/servlet路徑
URL:http://localhost:8080/項目名稱/servlet路徑
在這裏插入圖片描述

請求消息頭的獲取

1,根據消息頭獲取值 String refererName = response.getHeader(“Referer”);

2,獲取所有的消息頭 enumeration e = response.getHeadernames()

在這裏插入圖片描述

防盜鏈

防盜鏈其實就是一個匹配將獲取到的Reffer是否包含當前服務器名的過程

public class TestClass extends HttpServlet {
	private static final long serialVersionUID = 1L;
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		response.setContentType("text/html;charset=utf-8");
		//獲取到請求頭referer,其實referer="http://localhost:8080/Demo04/TestClass"
		String refererName = response.getHeader("Referer");
		//獲取到主機域名
		String serveName = request.getServerName();
		if(refererName!=null && refererName.contains(serveName)) {
			response.getWriter().write("是本站域名發起");
		}else {
			response.getWriter().write("不是本站域名發起,正在跳轉百度首頁<br/>");
			response.sendRedirect("/Demo_04/test.html");
		}
	}
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}
}

獲取請求參數相關的方法

1,根據name屬性值,獲取用戶輸入的值:String value = getParameter(name屬性對應的值)

2,根據name屬性值,獲取用戶選擇的值:String [] values = getParameterValues(name屬性對應的值);

3,無參數,獲取所有值:Map<String,String[]>map = getParameter

測試類:

public class GetValueTest extends HttpServlet {
	private static final long serialVersionUID = 1L;
    public GetValueTest() {
        super();
    }
	protected void doGet(HttpServletRequest request, HttpServletResponse response) 
			throws ServletException, IOException {
		String name = request.getParameter("un");
		String pw = request.getParameter("pw");
		String[] valus = request.getParameterValues("hobby");
		
		System.out.println("賬號:"+name);
		System.out.println("密碼:"+pw);
		System.out.print("愛好:");
		/*for(String s : valus) {
			System.out.print(s + "、");
		}*/
		System.out.print(Arrays.toString(valus));
	}
	protected void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doGet(request, response);
	}
}
<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title>Insert title here</title>
	</head>
	<body>
		<form action="http://localhost:8080/Demo_04/valuetest" method="post">
			用戶名:<input type="text" name="un"><br>
			密  碼:<input type="password" name="pw"><br>
			愛好:
			<input type="checkbox" name="hobby" value="sing">唱歌
			<input type="checkbox" name="hobby" value="dance">跳舞
			<input type="checkbox" name="hobby" value="football">足球<br>
			<input type="submit" value="提交">
		</form>
	</body>
</html>

測試結果:
在這裏插入圖片描述
使用map類來進行收集

public class GetValueTest extends HttpServlet {
	private static final long serialVersionUID = 1L;
    public GetValueTest() {
        super();
    }
	protected void doGet(HttpServletRequest request, HttpServletResponse response) 
			throws ServletException, IOException {
		String name = request.getParameter("un");
		String pw = request.getParameter("pw");
		String[] valus = request.getParameterValues("hobby");
		
		Map<String, String[]> map = request.getParameterMap();
		Set<String> set = map.keySet();
		for(String key : set) {
			String[] value = map.get(key);
			System.out.println("name屬性值" + key + " " + Arrays.toString(value));
		}
		//System.out.print(Arrays.toString(valus));
	}
	protected void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doGet(request, response);
	}
}

在這裏插入圖片描述

解決請求參數的中文亂碼問題

當用戶在表單中提交了中文,然後直接輸出回到網頁內容的話,就會發生亂碼的問題

get請求亂碼問題解決方案

使用String類自帶的更改編碼的方法,將ISO-8859-1編碼改成utf-8

public class GetValueTest extends HttpServlet {
	private static final long serialVersionUID = 1L;
    public GetValueTest() {
        super();
    }
	protected void doGet(HttpServletRequest request, HttpServletResponse response) 
			throws ServletException, IOException {
		String name = request.getParameter("un");
		String pw = request.getParameter("pw");
		String[] valus = request.getParameterValues("hobby");
		
		response.setContentType("text/html;charset=utf-8");
		String s = new String(name.getBytes("ISO-8859-1"),"utf-8");
		response.getWriter().write(s);
		
		}
		//System.out.print(Arrays.toString(valus));
	
	protected void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doGet(request, response);
	}
}

post請求亂碼問題解決方案

在請求與響應部分都需要設置編碼格式,而且一定要在獲取前寫上。

protected void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		request.setCharacterEncoding("utf-8");
		response.setContentType("text/html;charset=utf-8");
		String name = request.getParameter("un");
		String pw = request.getParameter("pw");
		String[] valus = request.getParameterValues("hobby");
		//PrintWriter pww = response.getWriter();
		//pww.print(name);
		response.getWriter().print(name);
		
	}

通過request對象來傳遞數據

域對象:在一定範圍內,可以存值和取值

存值:setAttribute(String key,object obj)
取值:Object obj = getAttribute(String key)
移除:removeAttribute(String key)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章