httpservletrequest_了解HttpServletRequest 对象 基本应用
HttpServletRequest對(duì)象代表客戶端的請(qǐng)求,當(dāng)客戶端通過HTTP協(xié)議訪問服務(wù)器時(shí),HTTP請(qǐng)求頭中的所有信息都封裝在這個(gè)對(duì)象中,開發(fā)?員通過這個(gè)對(duì)象的?法,可以獲得客戶這些信息。簡(jiǎn)單來(lái)說(shuō),要得到瀏覽器信息,就找HttpServletRequest對(duì)象。
防盜鏈#
獲取Referer這個(gè)消息頭,判斷Referer是不是從指定頁(yè)面來(lái)的。如果不是從指定頁(yè)面的,跳轉(zhuǎn)回指定頁(yè)面。
這可以用于保證頁(yè)面廣告的觀看,瀏覽量等。
Copy@Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //獲取消息頭 String referer = req.getHeader("Referer"); //判斷訪問來(lái)源 if (referer == null || !referer.contains("/hello.jsp")){ resp.sendRedirect("/hello.jsp"); return ; } //確定來(lái)源自指定頁(yè)面后,開放資源 //設(shè)置頁(yè)面編碼 resp.setHeader("Content-Type","text/html;charset=UTF-8"); //輸出內(nèi)容 resp.getWriter().write("這是可以訪問的資源。。。"); }直接訪問資源
重定向到指定頁(yè)面
調(diào)試模式下可以看到 狀態(tài)碼 302 (被重定向)。
GET 方式提交數(shù)據(jù)#
Copy@Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //重定向 resp.sendRedirect("/request/getServlet?username=ling"); }?后接數(shù)據(jù)。
Copy@Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //請(qǐng)求重定向的 Servlet 為 demoHttpServlet String username = req.getParameter("username"); System.out.println(username); }用 Request 對(duì)象接收指定屬性的值,并打印驗(yàn)證。
POST 方式表單提交數(shù)據(jù)#
Copy @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //設(shè)置request 字符編碼 req.setCharacterEncoding("UTF-8"); //接收數(shù)據(jù) //接收單個(gè)值 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"); //接收多個(gè)值 String[] hobbies = req.getParameterValues("hobbies"); //接收隱藏域的值 String myname = req.getParameter("myname"); //控制臺(tái)輸出數(shù)據(jù),驗(yàn)證是否接受數(shù)據(jù) 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); }相關(guān)頁(yè)面可自行編寫一個(gè)表單
這里需要提醒的是,注意頁(yè)面的編碼問題,否則會(huì)出現(xiàn)亂碼問題。一般是因?yàn)榫幋a問題引起,需要統(tǒng)一編碼。
這里的編碼問題和 GET 方式的有所不同,POST方式提交的數(shù)據(jù)封裝在 Request 對(duì)象里,而 GET 方式則是保存在消息頭中傳遞到下一個(gè)Servlet或者頁(yè)面中的。因此 GET 方法的編碼問題相對(duì)來(lái)說(shuō)有些棘手,因?yàn)樯婕暗?Tomcat 編碼(默認(rèn)是 ISO 8859-1)和瀏覽器編碼之間的轉(zhuǎn)換,也可以通過修改Tomcat的編碼來(lái)實(shí)現(xiàn)等等,工作量遠(yuǎn)比 POST 方式直接設(shè)置 Request 對(duì)象的編碼繁瑣。 因此我給出下面一個(gè)建議(真不是我懶不寫了):
一般情況下提交數(shù)據(jù)能使用就使用 POST 方式提交。
實(shí)現(xiàn)轉(zhuǎn)發(fā)#
Copy@Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //獲取 RequestDispatcher 對(duì)象,用于實(shí)現(xiàn)轉(zhuǎn)發(fā)頁(yè)面 RequestDispatcher dispatcher = req.getRequestDispatcher("/forward.jsp"); //使用 RequestDispatcher 的 forward() 方法實(shí)現(xiàn)轉(zhuǎn)發(fā), 并傳入 Request 和 Response 對(duì)象 dispatcher.forward(req, resp); }轉(zhuǎn)發(fā)的同時(shí),還可傳遞數(shù)據(jù)。
Copy@Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //使用 Request 對(duì)象在轉(zhuǎn)發(fā)時(shí)傳遞數(shù)據(jù) req.setAttribute("username","ling"); //獲取 RequestDispatcher 對(duì)象,用于實(shí)現(xiàn)轉(zhuǎn)發(fā)頁(yè)面 RequestDispatcher dispatcher = req.getRequestDispatcher("/forward.jsp"); //使用 RequestDispatcher 的 forward() 方法實(shí)現(xiàn)轉(zhuǎn)發(fā), 并傳入 Request 和 Response 對(duì)象 dispatcher.forward(req, resp); }Copy Title這是轉(zhuǎn)發(fā)而來(lái)的頁(yè)面。。。。。。
這里使用 JSP 頁(yè)面,雖然現(xiàn)在新的項(xiàng)目一般不用了。
Servlet之間可以通過ServletContext實(shí)現(xiàn)通訊,ServletContext也能稱之為域?qū)ο蟆?request也可以稱之為域?qū)ο?#xff0c;只不過ServletContext的域是整個(gè)web應(yīng)?,?request的域僅僅代表?次http請(qǐng)求。
可以使?ServletContext和request實(shí)現(xiàn)Servlet之間的通訊,那么我們?哪?種呢?
?般的原則:可以使?request就盡可能使?request。因?yàn)镾ervletContext代表著整個(gè)web應(yīng)?,使?ServletContext會(huì)消耗?量的資源,?request對(duì)象會(huì)隨著請(qǐng)求的結(jié)束?結(jié)束,資源會(huì)被回收。使?request域進(jìn)?Servlet之間的通訊在開發(fā)中是?常頻繁的。
最后,咱給小編:
1. 點(diǎn)贊+關(guān)注
2. 點(diǎn)頭像關(guān)注后多多評(píng)論,轉(zhuǎn)發(fā)給有需要的朋友。
謝謝!!
《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結(jié)
以上是生活随笔為你收集整理的httpservletrequest_了解HttpServletRequest 对象 基本应用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: arcgis字段计算器赋值_ARCGIS
- 下一篇: 4n35光耦引脚图_在选择光耦继电器的过