1. 程式人生 > >關於request的細節使用,解決中文亂碼問題

關於request的細節使用,解決中文亂碼問題

----關於防盜鏈---
Referer


String ref=request.getHeader("Referer");
//判斷請求頭中的referer是否為空或者沒東西或者不來自163網站,那麼就是盜鏈行為,直接重定向到原網頁
if(ref==null||"".equals(ref)||!ref.startsWith("http://www.163.com"));
response.sendRedirect(request.getContextPath()+"index.jsp");




--------獲取客戶機的資訊
    getRequestURL方法返回客戶端發出請求完整URL
    !!getRequestURI方法返回請求行中的資源名部分
    getQueryString 方法返回請求行中的引數部分
    !!getRemoteAddr方法返回發出請求的客戶機的IP地址
    !!getMethod得到客戶機請求方式
    !!getContextPath 獲得當前web應用虛擬目錄名稱


-----遍歷jsp頁面的所以請求引數


Enumeration<String> enumeration=request.getParameterNames();
while(enumeration.hasMoreElements)
{
String name=enumeration.nextElement();
String values=request.getParameter(name);
System.out.println(name+":"+value);
}



[中文亂碼問題]

---------獲取請求引數 
//在JSP頁面上模擬響應頭,設定字元編碼為UTF-8
<meta http-equiv="content-type" content="text/html;charset=UTF-8">
亂碼問題:
利用request獲取的請求引數,是根據開啟jsp頁面的瀏覽器用的什麼編碼讀取,那麼
就用什麼編碼傳輸,模擬響應頭的話相當於固定設定瀏覽器的讀取編碼格式
但是在伺服器上,預設解析編碼的是用的ISO8859-1,
這樣就會導致解析中文位元組出現亂碼。
//通過設定伺服器的解析編碼方式為UTF-8,這樣就可以避免亂碼了
(這只是適用在post請求,因為post請求的請求引數在實體內容當中;get請求不在實體內容當中,在URL後面)
request.setCharacterEncoding("UTF-8");


對於get請求方式,出現亂碼的話,只能手動解決
假設前端獲取的 usename是亂碼 ,
username =new String (username.getBytes("iso8859-1"),"utf-8");
先把從伺服器上錯誤解析的亂碼username通過iso8859-1的方式重新解析回去;
在利用utf-8的編碼格式去重新解析它。這樣就可以達到手動解析,解決亂碼了。


response.getWriter().write("中文");
這種情況輸出會有亂碼的話,就需要設定
①response.setContentType("text/html;charset=utf-8");
但是這種情況務必把①放在write內容前面!!!!!


以下這種使用OutputStreamwrite輸出,設定放在前後都可以
response.getOutputStream().write("中文國歌".getBytes("utf-8"));
response.setContentType("text/html;charset=utf-8");


----------request的請求轉發


this.getServletContext().getRequestDispatcher("/RequestTest2").forward(request, response);
request.getRequestDispatcher("/RequestTest2").forward(request, response);




--------request的請求包含
request.getRequestDispatcher("/RequestTest2").include(request, response);






請求轉發的話,當前的servlet的輸出資訊是隻能進入伺服器的緩衝區,但是一旦執行轉發
時,就會清除掉實體內容,請求頭資訊不會清除,但是這樣當前的servlet的資訊就輸出不了
;而使用請求包含的話就可以順帶輸出當前servlet的東西。