日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

httpservletrequest_了解HttpServletRequest 对象 基本应用

發布時間:2025/4/17 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 httpservletrequest_了解HttpServletRequest 对象 基本应用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

HttpServletRequest對象代表客戶端的請求,當客戶端通過HTTP協議訪問服務器時,HTTP請求頭中的所有信息都封裝在這個對象中,開發?員通過這個對象的?法,可以獲得客戶這些信息。簡單來說,要得到瀏覽器信息,就找HttpServletRequest對象。

防盜鏈#

獲取Referer這個消息頭,判斷Referer是不是從指定頁面來的。如果不是從指定頁面的,跳轉回指定頁面。

這可以用于保證頁面廣告的觀看,瀏覽量等。

Copy@Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //獲取消息頭 String referer = req.getHeader("Referer"); //判斷訪問來源 if (referer == null || !referer.contains("/hello.jsp")){ resp.sendRedirect("/hello.jsp"); return ; } //確定來源自指定頁面后,開放資源 //設置頁面編碼 resp.setHeader("Content-Type","text/html;charset=UTF-8"); //輸出內容 resp.getWriter().write("這是可以訪問的資源。。。"); }

直接訪問資源

重定向到指定頁面

調試模式下可以看到 狀態碼 302 (被重定向)。

GET 方式提交數據#

Copy@Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //重定向 resp.sendRedirect("/request/getServlet?username=ling"); }

?后接數據。

Copy@Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //請求重定向的 Servlet 為 demoHttpServlet String username = req.getParameter("username"); System.out.println(username); }

用 Request 對象接收指定屬性的值,并打印驗證。

POST 方式表單提交數據#

Copy @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //設置request 字符編碼 req.setCharacterEncoding("UTF-8"); //接收數據 //接收單個值 String username = req.getParameter("username"); String password = req.getParameter("password"); String gender = req.getParameter("gender"); String address = req.getParameter("address"); String textarea = req.getParameter("textarea"); //接收多個值 String[] hobbies = req.getParameterValues("hobbies"); //接收隱藏域的值 String myname = req.getParameter("myname"); //控制臺輸出數據,驗證是否接受數據 System.out.println(username); System.out.println(password); System.out.println(gender); for (String hobby : hobbies) { System.out.print(hobby); } System.out.println(" "); System.out.println(address); System.out.println(textarea); System.out.println(myname); }

相關頁面可自行編寫一個表單

這里需要提醒的是,注意頁面的編碼問題,否則會出現亂碼問題。一般是因為編碼問題引起,需要統一編碼

這里的編碼問題和 GET 方式的有所不同,POST方式提交的數據封裝在 Request 對象里,而 GET 方式則是保存在消息頭中傳遞到下一個Servlet或者頁面中的。因此 GET 方法的編碼問題相對來說有些棘手,因為涉及到 Tomcat 編碼(默認是 ISO 8859-1)和瀏覽器編碼之間的轉換,也可以通過修改Tomcat的編碼來實現等等,工作量遠比 POST 方式直接設置 Request 對象的編碼繁瑣。 因此我給出下面一個建議(真不是我懶不寫了):

一般情況下提交數據能使用就使用 POST 方式提交。

實現轉發#

Copy@Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //獲取 RequestDispatcher 對象,用于實現轉發頁面 RequestDispatcher dispatcher = req.getRequestDispatcher("/forward.jsp"); //使用 RequestDispatcher 的 forward() 方法實現轉發, 并傳入 Request 和 Response 對象 dispatcher.forward(req, resp); }

轉發的同時,還可傳遞數據。

Copy@Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //使用 Request 對象在轉發時傳遞數據 req.setAttribute("username","ling"); //獲取 RequestDispatcher 對象,用于實現轉發頁面 RequestDispatcher dispatcher = req.getRequestDispatcher("/forward.jsp"); //使用 RequestDispatcher 的 forward() 方法實現轉發, 并傳入 Request 和 Response 對象 dispatcher.forward(req, resp); }Copy Title

這是轉發而來的頁面。。。。。。



這里使用 JSP 頁面,雖然現在新的項目一般不用了。

Servlet之間可以通過ServletContext實現通訊,ServletContext也能稱之為域對象。?request也可以稱之為域對象,只不過ServletContext的域是整個web應?,?request的域僅僅代表?次http請求。

可以使?ServletContext和request實現Servlet之間的通訊,那么我們?哪?種呢?

?般的原則:可以使?request就盡可能使?request。因為ServletContext代表著整個web應?,使?ServletContext會消耗?量的資源,?request對象會隨著請求的結束?結束,資源會被回收。使?request域進?Servlet之間的通訊在開發中是?常頻繁的。

最后,咱給小編:

1. 點贊+關注

2. 點頭像關注后多多評論,轉發給有需要的朋友。

謝謝!!

《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的httpservletrequest_了解HttpServletRequest 对象 基本应用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。