序
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)