HttpServletRequest請求是獲取請求行、請求頭和請求體;能夠經過這個方法設置防盜鏈,獲取地址。牢記解決亂碼的方式。html
怎麼選擇是重定向仍是轉發呢?一般狀況下轉發更快,並且能保持request內的對象,因此他是第一選擇。可是因爲在轉發以後,瀏覽器中URL仍然指向開始頁面,此時若是重載當前頁面,開始頁面將會被從新調用。若是你不想看到這樣的狀況,則選擇轉發。詳見https://www.cnblogs.com/wenanbang/p/4142415.htmljava
其實也能夠單純的認爲是如果帶數據的話就請求轉發了,若改地址的話就重定向了。web
1、HttpServletRequest:瀏覽器
概述和運行流程詳見HttpServletResponse!服務器
2、獲取HTTP請求:post
3、獲取請求行:性能
一、得到客戶端的請求方式:網站
getMethod() 得到String類型;ui
二、得到請求的資源:編碼
getContextPath() 得到String類型的 web應用的名稱(項目名)
getQueryString() 得到 get提交url 地址後的參數字符串;
getRequestURI() 獲取URI地址String類型
getRequestURL() 獲取URL地址StringBuffer類型
request.getRemoteAddr() 得到訪問的客戶端IP地址
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 獲取請求方式 String method = request.getMethod(); System.out.println("請求方式爲:" + method); // 獲取請求URI String URI = request.getRequestURI(); System.out.println("URI爲" + URI); // 獲取請求URL StringBuffer URL = request.getRequestURL(); System.out.println("URL爲:" + URL); // URI爲/WEB/LineServlet // URL爲:http://localhost:8080/WEB/LineServlet // 獲取WEB項目名稱 String name = request.getContextPath(); System.out.println("WEB項目名稱爲:" + name); // 獲取get請求後url後的字符串 String query = request.getQueryString(); System.out.println("get請求的參數爲:" + query); // 獲取客戶端的ip地址 String ip = request.getRemoteAddr(); System.out.println("ip地址爲:" + ip); }
4、獲取請求頭:
getHeader(String name)
referer 頭的做用:獲取該訪問的來源,作防盜鏈
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 獲取refere頭 String refere = request.getHeader("Referer"); String content = null; if(refere.startsWith("http://localhost:8080")){ content="真的離婚了!"; }else{ content="你是小偷!"; } //解決亂碼 response.setContentType("text/html;charset=utf-8"); response.getWriter().write(content); }
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<a href="/WEB/RefereServlet">宋仲基和宋慧喬分手了</a>
</body>
</html>
5、得到請求體:
一、解決post提交方式的亂碼:request.setCharacterEncoding("UTF-8");
二、解決get提交的方式的亂碼:
parameter = new String(parameter.getbytes("iso8859-1"),"utf-8");
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //解決中文亂碼問題(post請求) // request.setCharacterEncoding("UTF-8"); //獲取請求參數 //1.單個值的參數 String name=request.getParameter("username"); //get解決亂碼:得先將獲取到的信息用原來的編碼表進行解碼,而後再用後來的編碼表進行編碼 name=new String(name.getBytes("ISO-8859-1"),"UTF=8"); String sex=request.getParameter("sex"); System.out.println(name+" ......"+sex); //2.獲取多個值的 String[] hobbys=request.getParameterValues("hobby"); //遍歷 for(String s:hobbys){ System.out.println(s); } //3.獲取全部的請求參數MAP Map<String,String[]> map=request.getParameterMap(); //遍歷 Set<String> set=map.keySet(); for(String str:set){ String [] value=map.get(str); for(String v:value){ System.out.println(str+"..."+v); } }
6、request的其餘功能:
一、request 也是個域對象,也是具備如下功能:
setAttribute(
String name,
Object o)
getAttribute(
String name)
removeAttribute(
String name)
二、request完成請求轉發:
得到請求轉發器----path
是轉發的地址
RequestDispatcher
getRequestDispatcher(
String path)
經過轉發器對象轉發
requestDispathcher.forward(
ServletRequest request,
ServletResponse response)
7、ServletContext
域與
Request
域的生命週期比較
:
一、ServletContext
:
建立:服務器啓動
銷燬:服務器關閉
域的做用範圍:整個
web
應用
二、request
:
建立:訪問時建立
request
銷燬:響應結束
request
銷燬
域的做用範圍:一次請求中
8、轉發和重定向的區別:
一、
重定向兩次請求,轉發一次請求
二、
重定向地址欄的地址變化,轉發地址不變
三、
從新定向能夠訪問外部網站
轉發只能訪問內部資源
四、
轉發的性能要優於重定向
(須要帶數據的時候用請求轉發,由第一個
Servlet01
帶數據到
Servlet02
!
須要地址轉變的用重定向)
public class Servlet01 extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //向request域中存值 request.setAttribute("name", "張三" ); //請求轉發 request.getRequestDispatcher("/Servlet02").forward(request, response); }
public class Servlet02 extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //從request 域中取值 String name =(String)request.getAttribute("name"); //解決中文亂碼 response.setContentType("text/html;charset=utf-8"); response.getWriter().write("hello"+name); }