1、HttpServletRequest概述:
我們在創建Servlet時,會重寫service()方法、doGet()\、doPost()方法,這些方法都有兩個參數request(請求)和response(響應),service中的request是ServletRequset,而
doGet()和doPost()方法中的是:HttpServletRequest,HttpServletRequest是ServletRequest的子接口。
2、request的運行流程:
3、通過request獲得請求行
(1)獲得客戶端的請求方式:
String method=request。getMethod()
(2)獲得請求資源:
String URI=request。getRequestURI();
String URL=request.getRequestURL();
(3)獲得WEB應用的名稱
String webname=request.getContextPath();
(4)get提交url地址后的參數字符串
String queryString=request.getQueryString();
(5)獲得訪問的客戶端IP地址
String ip=request.getRemoteAddr();
4.通過request獲得請求頭
(1)獲取請求頭
String agent=request.getHeader("User-Agent");
(2)
獲取所有請求頭名稱
Enumeration<String> headerNames=request.getHeaderNames();
while(headerNames.hasMoreElements()){
//獲取每個請求頭名稱
String headerName=headerNames.nextElement();
//跟距請求頭獲取請求值
String value=request.getHeader(headerName);
System.out.println(headerName);
System.out.println(value);
referer頭的作用:執行該此訪問的的來源
做防盜鏈跳轉
package servlet; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class ReferServlet extends HttpServlet { //防盜鏈 public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //獲取請求頭中的referer String referer=request.getHeader("referer"); //不是以"http://localhosr:8080"開頭的不能訪問 if(referer!=null&&referer.startsWith("http://localhosr:8080")){ //認為可以正常訪問 //結覺中文亂碼 response.setContentType("text/html;charset=utf-8"); response.getWriter().write("啊啊啊啊啊啊啊啊"); }else{ response.setContentType("text/html;charset=utf-8"); response.getWriter().write("不不不不不不不不不不不不不不不不不不不不不不不不"); } } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
5.通過request獲得請求體解決中文亂碼等問題
獲取表單元素的值:String username=request.getParameter("username");
獲取表單所有元素的值:Map<String,String[]> map=request.getParameterMap();
package servlet; import java.io.IOException; import java.util.Map; import java.util.Set; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class BodyServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //post方式解決中文亂碼 request.setCharacterEncoding("utf-8"); //獲取表單元素的值、 //get方式結覺中文亂碼問題 String username=request.getParameter("username"); //username=new String //(username.getBytes("iso8859-1"),"utf-8"); String password=request.getParameter("password"); System.out.println(username+"..."+password); //獲取表單所有元素的值 Map<String,String[]> map=request.getParameterMap(); Set<String> set=map.keySet(); for(String s:set){ String key=s; String[] value=map.get(s); //遍歷數組 for(String s1:value){ System.out.println(s+":"+s1); } } } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
6、request是一個域對象
request對象也是一個存儲數據的區域對象,所以也具有如下方法:
setAttribute(xxxx, xxxxxxxxxxx)
getAttribute(String name)
removeAttribute(String name)
注意:request域的作用范圍:一次請求中
7、request完成請求轉發
獲得請求轉發器----path是轉發的地址
RequestDispatcher getRequestDispatcher(String path)
通過轉發器對象轉發
requestDispathcer.forward(ServletRequest request, ServletResponse response)
轉發:
package servlet; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class Servlet01 extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //向request中內放值 request.setAttribute("name","小紅帽"); //請求轉發 request.getRequestDispatcher("/Servlet02").forward(request, response); response.getWriter().write("servlet01"); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
package servlet; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class Servlet02 extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String name=(String) request.getAttribute("name"); //解決中文亂碼 response.setContentType("text/html;charset=utf-8"); response.getWriter().write("servlet02"+name); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }