1. 程式人生 > >HttpServletRequest物件常用方法

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);
    }
}

 

“掃碼關注“