2020-03-16

Servlet: Server? applet 概念:運行在服務(wù)器上的一個小程序(動態(tài)資源) Servlet是一個接口,定義了java類被瀏覽器訪問到的一套規(guī)則(接口)(有了這套規(guī)則,tomcat便可以識別和創(chuàng)建Servlet) 我們只需定義一個類并實現(xiàn)Servlet接口,復(fù)寫方法即可。 快速入門: ? ? 1.創(chuàng)建javaEE項目 ? ? 2.定義一個類并實現(xiàn)Servlet接口 ? ? 3.實現(xiàn)Servlet接口中的抽象方法 ? ? 4.配置Servlet Servlet執(zhí)行原理: 見圖 Servlet的生命周期: 1.被創(chuàng)建:執(zhí)行init()方法只執(zhí)行一次。 Servlet對象什么時候被創(chuàng)建? 默認狀態(tài)下該Servlet第一次被訪問時創(chuàng)建該對象。 如何更改Servlet被創(chuàng)建的時機? 在<Servlet>標簽中設(shè)置<load-on-startup> 負數(shù):第一次被訪問時創(chuàng)建。 0或正數(shù):在服務(wù)器啟動時創(chuàng)建。 2.提供服務(wù): 執(zhí)行service()方法,執(zhí)行多次。 ? 每次訪問Servlet時,service()方法都會被調(diào)用一次。 3.被銷毀:執(zhí)行destroy()方法,只執(zhí)行一次。 注意: ? 1.服務(wù)器關(guān)閉時Servlet被銷毀。 ? 2.只有服務(wù)器正常關(guān)閉時才會執(zhí)行destroy()方法。 ? 3.一般用于關(guān)閉資源。 Servlet3.0 好處:支持注解配置。可以不需要web.xml 1.在Servlet實現(xiàn)類上定義注解 @WebServlet("資源路徑") 2.無需配置web.xml即可訪問。 了解: ? String name() default ""; //相當于<Servlet-name> ? String[] value() default {};//代表urlPatterns()屬性配置 ? String[] urlPatterns() default {};//相當于<url-pattern> ? int loadOnStartup() default -1;//相當于<load-on-startup> 動態(tài)web項目的目錄結(jié)構(gòu): -- 根目錄 --WEB-INFO目錄 --web.xml:web項目的核心配置文件 --classes目錄:放置字節(jié)碼文件的目錄 --lib目錄:放置依賴的jar包Servlet的體系結(jié)構(gòu): Servlet(接口) |實現(xiàn) GenericServlet(抽象類) |繼承 HttpServlet(抽象類)GenericServlet: 將Servlet中其它的方法做了空實現(xiàn),繼承自GenericServlet, 只需要重寫service()方法即可。HttpServlet:對Http協(xié)議進行了封裝,簡化了操作。 步驟: ? 1.定義一個類并繼承自HttpServlet ? 2.重寫doGet()或doPost()方法。Servlet的相關(guān)配置: urlpattern:servlet的訪問路徑。 1.一個Servlet可以配置多個訪問路徑。 ? @webServlet({"/a","/b"}); 2.路徑規(guī)則 ? 1) /xxx 路徑匹配 ? ? 2) ? /xxx/xxx 多重路徑 3) ? *.do 另: /* 所有url都可訪問該servlet 注意:具有最低優(yōu)先級Request對象 1.Request和Response對象的基本原理。 1)Request對象和Response對象都是服務(wù)器創(chuàng)建的。我們只是來使用他們。 2)Request對象用來獲取請求消息。Response對象用來設(shè)置響應(yīng)消息。 2.Request對象的繼承體系。 ServletRequest(接口) | 繼承 HttpServletRequest(接口) | 實現(xiàn) ? ? org.apache.catalina.connector.RequestFacade(實現(xiàn)類:由Tomcat實現(xiàn)) 3.Request的具體功能 1)獲取請求消息數(shù)據(jù) 1.請求行 GET /day12_http/myhttpservlet1?username=zhangsan HTTP/1.1 相關(guān)方法: ? ? a.獲取請求方式 ? ? String getMethod(); ? ? b.獲取虛擬目錄 ? ? String getContextPath(); ? ? c.獲取Servlet路徑 ? ? String getServletPath(); ? ? d.獲取GET請求參數(shù) ? ? String getQueryString(); ? ? e.獲取URI: 虛擬路徑+資源路徑 ? ? 如: day12_http/myhttpservlet1 ? ? String? getRequestURI():? day12_http/myhttpservlet1? (范圍更大)? ? 共和國 ? ? StringBuffer? getRequestURL():? http://localhost:8080/day12_http/myhttpservlet1(范圍相對較小)? 朝鮮人民民主主義共和國 ? ? f.獲取協(xié)議版本: HTTP/1.1 ? ? String getProtocol(); ? ? g.獲取客戶機的ip地址。 ? ? String? getRemoteAddr(); 2.請求頭 a.獲取所有請求頭名稱 Enumeration<String>? getHeaderNames() b.通過請求頭的名稱獲取請求頭的值?。?! String getHeader(String name) 3.請求體:只有Post方法才有請求體,在請求體中封裝了請求參數(shù)。 步驟: ? 1.獲取流對象 ? BufferedReader? getReader(): 獲取字符輸入流 ? ServletInputStream? getInputStream():獲取字節(jié)輸入流。 ? 2.從流對象中拿到數(shù)據(jù) 2)其它功能 1.獲取請求參數(shù)數(shù)據(jù):不論get方法還是post方法,都可以使用下列方法來獲取請求參數(shù)。 a.根據(jù)參數(shù)名稱獲取參數(shù)值 username=zhangsan&password=123; String? getParameter(String name); b.根據(jù)參數(shù)名稱獲取參數(shù)的數(shù)組。 hobby=xx&hobby=game.... String[] getParameterValues(String name); c.獲取所有請求參數(shù)的名稱 Enumeration<String>? getParameterNames(); d.獲取所有參數(shù)的Map集合 Map<String,String[]> getParameterMap(); 注意:Request的中文亂碼問題。 get: tomcat8 已將get中文亂碼問題解決。 post: 會中文亂碼 解決: ? 在獲取請求參數(shù)前設(shè)置request的請求編碼。 ? request.setCharacterEncoding("編碼格式"); ? 注意:編碼格式和前端頁面一致即可。 2.請求轉(zhuǎn)發(fā):服務(wù)器內(nèi)部的資源跳轉(zhuǎn)方式。 步驟: ? 1.通過request獲取轉(zhuǎn)發(fā)器對象: RequestDispater ? RequestDispater? getRequestDispater(); ? 2.使用轉(zhuǎn)發(fā)器對象進行轉(zhuǎn)發(fā) forward(request,response); 特點: ? ? 1.瀏覽器地址欄不會發(fā)生改變。 ? ? 2.只能轉(zhuǎn)發(fā)到當前服務(wù)器內(nèi)部資源。 ? 3.轉(zhuǎn)發(fā)只是一次請求。 3.共享數(shù)據(jù) 域?qū)ο螅阂粋€有作用范圍的對象,可以在范圍內(nèi)共享數(shù)據(jù)。 request域: ? ? 代表一次請求的范圍,一般用于請求轉(zhuǎn)發(fā)的多個資源共享數(shù)據(jù)。 方法: ? a.存儲數(shù)據(jù) ? void? setAttribute(String name,Object obj) ? b.通過鍵來獲取數(shù)據(jù) ? Object getAttribute(String name); ? c.通過鍵來移除鍵值對 ? ? void? removeAttribute(String name); 4.獲取ServletContext ServletContext域?qū)ο螅捍碚麄€項目中有效(后邊詳細講解) 獲取方法: ServletContext? getServletContext();


?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Servlet: Server applet 概念:運行在服務(wù)器上的一個小程序(動態(tài)資源) Servlet是...
    H_5a8d閱讀 193評論 0 0
  • Servlet: Server applet 概念:運行在服務(wù)器上的一個小程序(動態(tài)資源) Servlet是...
    小湯源O閱讀 305評論 0 0
  • Servlet: Server applet 概念:運行在服務(wù)器上的一個小程序(動態(tài)資源) Servlet是...
    董宇浩閱讀 228評論 0 0
  • Servlet: Server applet 概念:運行在服務(wù)器上的一個小程序(動態(tài)資源) Servlet是一個...
    01_ff7c閱讀 318評論 0 0
  • JSP總結(jié)(經(jīng)典) day1 JSP 定義: 1)Java Server Page, Java EE 組件,本...
    91數(shù)據(jù)閱讀 3,644評論 0 13

友情鏈接更多精彩內(nèi)容