HttpServletRequest物件常用方法
公眾號檢視文章更清晰
HttpServletRequest物件常用方法
HttpServletRequest物件代表客戶端的請求,當客戶端通過HTTP協議訪問伺服器時,HTTP請求頭中的所有資訊都封裝在這個物件中,開發人員通過這個物件的方法,可以獲得客戶這些資訊。
獲得客戶端瀏覽器資訊
getRequestURL方法返回客戶端發出請求時的完整URL
getRequestURI方法返回請求行中的資源名部分
getQueryString 方法返回請求行中的引數部分
getRemoteAddr方法返回發出請求的客戶機的IP地址
getRemoteHost方法返回發出請求的客戶機的完整主機名
getRemotePort方法返回客戶機所使用的網路埠號
getLocalAddr方法返回WEB伺服器的IP地址
getLocalName方法返回WEB伺服器的主機名
獲得客戶機請求頭
getHeader方法
getHeaders方法
getHeaderNames方法
HttpServletRequest應用
防盜鏈
什麼是防盜鏈呢?比如:我伺服器中有我自己想分享出去的資源,想要拿到我的資源的。必須在我的指定連結訪問進去才能獲取資源。可能在這個連結頁面中我需要發一些廣告給訪問者,不能讓訪問者直接通過複製URL就直接進去獲取資源,反盜鏈就是不能被CRTL+C和CRTL+V。
想要我的資源,就必須經過我的首頁點進去看。想要實現這樣的效果,就要獲取Referer這個訊息頭,判斷Referer是不是從我的首頁來的。如果不是從我的首頁來的,跳轉回我的首頁。
下面通過複製URL,不是從首頁連結訪問的
跳轉回我的首頁。
@Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //獲取網頁從哪裡來的 String referer = req.getHeader("Referer"); //如果不是從我的首頁或從位址列直接訪問的 if(referer==null||referer.contains("localhost:8080/Servlet06/index.jsp")){ //回到首頁去 resp.sendRedirect("/index.jsp"); return; } resp.setContentType("text/html;charset=UTF-8"); resp.getWriter().write("獲取最新資源分享"); }
解決中文亂碼問題
String userName = req.getParameter("username");
如果在獲取username前面沒有加入 req.setCharacterEncoding("UTF-8");
,獲取而來的值就會出現亂碼。
亂碼的原因:
Tomcat伺服器預設編碼是ISO 8859-1,而瀏覽器使用的是UTF-8編碼。瀏覽器的中文資料提交給伺服器,Tomcat以ISO 8859-1編碼對中文編碼,所以獲取到的是亂碼,所在在獲取值之前,我們可以設定Tomcat伺服器的編碼格式來避免中文亂碼。
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("UTF-8");
String userName = req.getParameter("username");
System.out.println("userName: "+userName);
}
}