Java Web開發技術項目式教程(微課版)(AIGC拓展版)課件 工作單元5新聞發布系統-Servlet技術實現_第1頁
Java Web開發技術項目式教程(微課版)(AIGC拓展版)課件 工作單元5新聞發布系統-Servlet技術實現_第2頁
Java Web開發技術項目式教程(微課版)(AIGC拓展版)課件 工作單元5新聞發布系統-Servlet技術實現_第3頁
Java Web開發技術項目式教程(微課版)(AIGC拓展版)課件 工作單元5新聞發布系統-Servlet技術實現_第4頁
Java Web開發技術項目式教程(微課版)(AIGC拓展版)課件 工作單元5新聞發布系統-Servlet技術實現_第5頁
已閱讀5頁,還剩237頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

JavaWeb應用開發技術主講:

新聞發布系統Servlet技術實現目錄05請求與響應06Cookie技術

07Session技術08過濾器與監聽器

01Servlet體系結構CONTENTS

02Servlet生命周期

03ServletConfig

04ServletContext素質目標技能目標知識目標掌握Servlet體系結構及生命周期掌握Servlet編寫及配置方法掌握ServletConfig、ServletContext、請求和響應對象的使用方法掌握Cookie、Session技術的使用方法掌握過濾器、監聽器的使用方法能夠創建和部署Servlet類能夠獲取請求信息能夠獲取網絡連接信息能夠利用請求域屬性傳遞信息具備借助AI工具開發項目的能力培養AI素養具備嚴謹、認真的工作態度具備社會責任感提高自主學習能力提高認識問題、分析問題和解決問題的能力培養團隊合作能力學習目標重難點解析難點知識重點知識Servlet體系結構及生命周期Servlet編寫及配置方法ServletConfig接口的用法ServletContext接口的用法請求和響應對象的使用方法Cookie、Session技術過濾器、監聽器的使用方法HttpServletRequest應用ServletConfig接口ServletContext接口Session技術過濾器技術使用Servlet技術完成新聞發布系統,重點任務為:用戶注冊用戶登錄統計訪問用戶數量本節案例感謝聆聽任務5.1實現新聞發布系統用戶注冊功能主講:

新聞發布系統—Servlet技術實現任務實施01Servlet實現用戶注冊新聞發布系統中,管理員用戶登錄后方可對新聞后臺系統進行管理。如果用戶沒有賬戶信息,則需要先進行注冊,注冊成功后方可進行登錄。本任務使用Servlet技術實現用戶注冊功能。注冊功能時序圖用戶瀏覽器注冊頁面數據庫操作1:輸入用戶名與密碼等注冊信息2:調用DoRegisterUserDao4:調用register(Useruser)5:注冊成功DoRegister3:獲取表單數據并驗證成功6:注冊成功,生成成功響應注冊頁面任務實施1.明確數據庫中用戶表的設計在工作單元1中明確了數據庫中用戶表(NRC_USER)的設計,如表5-7所示。編號主鍵名稱描述數據類型大小空外鍵自動遞增默認值1√U_ID用戶編號int11××√×2×U_USERNAME登錄用戶名varchar25××××3×U_USERPWD登錄密碼varchar25××××4×U_NAME用戶昵稱varchar25××××表5-7

用戶表(NRC_USER)任務實施2.新建新聞發布系統Web項目打開IntelliJIDEA,創建一個普通的Java項目,命名為news_servlet,添加WebApplication框架支持,升級為JavaWeb項目。設計并創建項目的目錄結構,如圖5-13所示。①

在src目錄下創建com.sdcet.news包,創建子包servlet(用于存放servlet類)、dao(用于存放數據庫操作的接口與實現類)、entity(用于存放實體類)、utils(用于存放數據庫連接類)。②

在web目錄下創建目錄img(用于存放網頁上的圖片)、js(用于存放js文件)、layui(用于存放layui框架文件等)、Style(用于存放項目樣式表文件)。任務實施③

在Web目錄下創建目錄manager,用于存放后臺管理界面的相關JSP文件等,同時在manager中創建news目錄、Style目錄。④

在web目錄下存放前臺界面相關JSP文件。任務實施3.設計并實現用戶注冊頁面根據用戶表的設計,在manager目錄下設計并實現用戶注冊頁面register.jsp,如圖所示。同時創建一個login.jsp頁面,用于在注冊成功后跳轉,當前login.jsp頁面內容可空白。單擊“注冊”按鈕時,提交數據至后臺名稱為DoRegister的Servlet,完成注冊。任務實施register.jsp參考實現代碼如下。<%@pagelanguage="java"contentType="text/html;charset=UTF-8"pageEncoding="UTF-8"%><!DOCTYPEhtml><htmllang="en"><head><metacharset="utf-8"><linkrel="stylesheet"href="../layui/css/layui.css"><linkrel="stylesheet"href="Style/layui_register.css"></head><body><formclass="layui-form"action="/news_servlet_war_exploded/manager/DoRegister"method="post"><divclass="container"><divclass="logo"><label>新聞發布系統用戶注冊</label></div><divclass="layui-form-item"><labelclass="layui-form-label">用戶名</label><divclass="layui-input-block"><inputtype="text"name="u_username"requiredlay-verify="required"placeholder="請輸入用戶名"autocomplete="off"class="layui-input"></div></div><divclass="layui-form-item"><labelclass="layui-form-label">密碼</label><divclass="layui-input-block"><inputtype="password"name="u_userpwd"requiredlay-verify="required"placeholder="請輸入密碼"autocomplete="off"class="layui-input"></div></div>

<divclass="layui-form-item"><labelclass="layui-form-label">確認密碼</label><divclass="layui-input-block"><inputtype="password"name="confirm_pwd"requiredlay-verify="required"placeholder="請再次輸入密碼"autocomplete="off"class="layui-input"></div></div><divclass="layui-form-item"><labelclass="layui-form-label">昵稱</label><divclass="layui-input-block"><inputtype="text"name="u_name"requiredlay-verify="required"placeholder="請輸入昵稱"autocomplete="off"class="layui-input"></div></div><divclass="layui-form-item"><divclass="layui-input-block"><buttonclass="layui-btn"lay-submitlay-filter="registerForm">注冊</button></div></div><ahref="login.jsp"class="font-set">已有賬號?立即登錄</a></div></form></body></html>任務實施4.在UserDao接口中新建注冊用戶方法,在接口實現類中實現該方法示例代碼如下。publicclassUserDaoImplextendsBaseDaoimplementsUserDao{ publicbooleanregister(Useruser){booleanflag=false;Stringsql="insertintonrc_user(u_username,u_userpwd,u_name)values(?,?,?)";try{super.getConnection();pstm=con.prepareStatement(sql);pstm.setString(1,user.getU_username());pstm.setString(2,user.getU_userpwd());pstm.setString(3,user.getU_name());intn=pstm.executeUpdate();

if(n>0){flag=true;}}catch(Exceptione){e.printStackTrace();}finally{super.closeAll();}returnflag;}}任務實施5.創建一個Servlet,用于實現注冊功能在servlet包中創建一個Servlet來接收和處理前端的請求,命名為DoRegister,繼承自HttpServlet,重寫doGet()和doPost()方法,通過注解@WebServlet進行配置。要求注冊成功后重定向到登錄頁面,而注冊失敗時請求轉發回注冊頁面。示例代碼如下。任務實施@WebServlet("/manager/DoRegister")publicclassDoRegisterextendsHttpServlet{protectedvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{//獲取前端傳遞的請求參數Stringu_username=request.getParameter("u_username");Stringu_userpwd=request.getParameter("u_userpwd");Stringconfirm_pwd=request.getParameter("confirm_pwd");Stringu_name=request.getParameter("u_name");//簡單的表單驗證if(!u_userpwd.equals(confirm_pwd)){//回注冊頁面request.getRequestDispatcher("/register.jsp").forword(request,response);}任務實施Useruser=newUser();user.setU_username(u_username);user.setU_userpwd(u_userpwd);user.setU_name(u_name);UserDaouserDao=newUserDaoImpl();booleanisRegistered=userDao.register(user);response.setContentType(“text/html;charset=utf-8”);if(isRegistered){response.sendRedirect(request.getContextPath()+"/login.jsp");//重定向

}else{request.getRequestDispatcher("/register.jsp").forword(request,response);//請求轉發

}}protectedvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{doPost(request,response);}}任務實施6.注冊功能測試新聞發布系統注冊功能編程實現后需要進測試。①

啟動Tomcat服務器,在瀏覽器地址欄輸入http://localhost:8080/news_servlet_war_exploded/manager/register.jsp后按Enter鍵。②

在注冊頁面輸入注冊相關信息,若兩次輸入的密碼相同,注冊成功后跳轉至登錄頁面(login.jsp);若兩次輸入的密碼不同,跳轉至注冊頁面(register.jsp)。任務實訓--實現新聞評論添加功能并測試任務要求:1.明確新聞評論信息表的設計;2.設計并創建新聞評論表單;3.在ReviewDao接口中創建添加新聞評論的方法,并在接口實現類中實現該方法;4.創建一個Servlet,用于完成新聞評論的添加功能和測試。感謝聆聽任務5.1實現新聞發布系統用戶注冊功能主講:

新聞發布系統—Servlet技術實現任務描述知識準備總結目錄CONTENTS任務描述01Servlet實現用戶注冊新聞發布系統中,管理員用戶登錄后方可對新聞后臺系統進行管理。如果用戶沒有賬戶信息,則需要先進行注冊,注冊成功后方可進行登錄。本任務使用Servlet技術實現用戶注冊功能。知識準備02Servlet體系結構及生命周期Servlet編寫及配置ServletConfigServletContext請求與響應Servlet是由服務器端調用和執行、按照Servlet自身規范用Java語言編寫的運行在服務器端的應用程序;Servlet能夠接收客戶端的請求,并能對客戶端進行響應;Servlet通常是通過HTTP協議進行工作的;Servlet的運行需要有Servlet容器的支持,Servlet容器為Servlet提供了運行時的環境,并負責在適當的時刻加載和調用Servlet。什么是ServletServlet優點持久的快速的與平臺無關的可擴展的安全的為什么使用ServletServlet運行流程Servlet體系結構Servlet是一個Java類,該Java類必須實現Javax.servlet.Servlet接口或其子接口;若實現和協議無關的通用Servlet,可以直接繼承GenericServlet,GenericServlet是Servlet接口的實現類;若實現一個基于HTTP協議工作的Servlet,可以直接繼承Javax.servlet.http.HttpServlet類,HttpServlet是一個抽象類,繼承自GenericServlet類,提供了處理HTTP請求和響應的方法,并且擴展了服務的方法。Servlet體系結構(1)實現Servlet接口如果自定義Servlet類實現了Servlet接口,則必須實現該接口中的所有方法,即需要實現下面5個方法init(ServletConfigconfig)service(ServletRequestreq,ServletResponseres)destroy()getServletConfig()getServletInfo()Servlet體系結構(2)擴展GenericServlet類如果自定義Servlet類擴展了GenericServlet類,則必須實現service()方法。這個方法有兩個參數:ServletRequest和ServletResponse。Servlet容器將用戶的請求信息封裝在ServletRequest對象中,然后傳遞給service()方法;service()方法將響應客戶端的結果通過ServletResponse對象傳給客戶端。service()方法的聲明如下。publicabstractvoidservice(ServletRequestrequest,ServletResponseresponse)throwsServletException,IOExceptionServlet體系結構(3)擴展HttpServlet類如果自定義Servlet類擴展了HttpServlet類,通常不必去實現service()方法,因為HttpServlet已經實現了這個方法。HttpServlet的service()方法首先從HttpServletRequest對象中獲取HTTP的請求方式,然后再根據請求方式調用相應的方法。HTTP的請求方式包括DELETE、GET、OPTIONS、POST、PUT和TRACE,在HttpServlet類中分別提供了相應的方法,它們是doDelete()、doGet()、doOptions()、doPost()、doPut()和doTrace()。Servlet體系結構Servlet體系結構如圖所示JSP技術主要用來表現頁面,Servlet技術主要是用來完成大量的邏輯處理JSP本身沒有任何的業務處理邏輯,它只是簡單地檢索Servlet創建的JavaBean或者對象,再將動態的內容插入到預定義的模塊中Servlet創建JSP需要的JavaBean和對象,再根據用戶的行為,決定處理哪個JSP頁面并發送給用戶Servlet與JSP的關系

生命周期有廣義與狹義之分。

狹義為生命科學術語,指包括人類在內的一切動物由出生到死亡經歷的生命全程。廣義的生命周期泛指自然界與人類社會各種客觀事物的階段性變化及規律,如家庭生命周期、產品生命周期等。Servlet的生命周期Servlet的生命周期就是Servlet從創建到銷毀的過程。Servlet的生命周期由Servlet容器管理,主要分為3個階段,分別是初始化階段、運行時(服務/請求處理)階段和銷毀階段。Servlet運行在Servlet容器中,其生命周期由容器來管理。Servlet的生命周期通過javax.servlet.Servlet接口中相關方法表示:init()service()destroy()

Servlet的生命周期1.初始化--加載和實例化階段當客戶端向Servlet容器發出HTTP請求,要求訪問Servlet時,Servlet容器首先會解析請求,檢查內存中是否已經有了該Servlet對象,如果存在直接使用該Servlet對象,如果不存在,則需要加載Servlet類,創建Servlet對象,然后調用init()方法實現Servlet的初始化工作。Servlet的生命周期2.運行時-請求處理階段這是Servlet生命周期中最重要的階段,在這個階段,Servlet容器會針對本次客戶端請求創建代表HTTP請求的ServletRequest對象和代表HTTP響應的ServletResponse對象,然后將它們作為參數傳遞給Servlet的service()方法。service()方法從ServletRequest對象中獲得客戶請求信息并根據客戶端的請求方式調用doGet()或者doPost()方法,service()方法運行結束后生成響應結果,Servlet容器將響應結果發回客戶端。Servlet的生命周期3.銷毀階段當服務器關閉或web應用被移除出容器時,Servlet隨著web應用的銷毀而銷毀。在銷毀Servlet之前,Servlet容器會調用Servlet的destroy()方法,以便讓Servlet對象釋放它所占用的資源。Servlet的生命周期Servlet的生命周期Servlet的生命周期如圖所示Servlet生命周期方法被服務器自動調用。init()方法:用于初始化destroy()方法:用于釋放資源service()方法:服務類方法,對用戶的請求進行處理,并對用戶進行響應,幾乎所有的功能都在這里完成。在Servlet的整個生命周期內,對于Servlet的每一次訪問請求,Servlet容器都會調用一次Servlet的service()方法,并且創建新的ServletRequest和ServletResponse對象。Servlet的生命周期在Servlet的整個生命周期中,只被調用一次在Servlet的整個生命周期中,會被調用多次軟件工程師的生命周期當用戶編寫自己的Servlet時,可以編寫一個類,使其實現Servlet接口或擴展GenericServlet類或擴展HttpServlet類,官方推薦使用擴展HttpServlet類的方式。方法一:實現javax.servlet包中的Servlet接口方法二:繼承javax.servlet.GenericServlet類方法三:繼承javax.servlet.http包下的HttpServletServlet編寫及配置

Servlet編寫Servlet編寫首先要保證已創建好JavaWeb項目,在該項目下創建一個類,使其繼承自HttpServlet,重寫其doGet()、doPost()方法。

Servlet編寫【例5-1】創建一個名為HelloServlet的Servlet類,將其放置在cn.sdcet.servlet包中,使HelloServlet類繼承自HttpServlet類,然后重寫doGet()、doPost()方法,在方法體內輸出部分信息。案例技能點:doGet()、doPost()方法。實現步驟如下。①

在IDEA中新建一個JavaWeb項目,命名為ServletProj。②

在項目結構的src目錄下新建cn.sdcet.servlet包。③

在cn.sdcet.servlet包中新建一個Servlet類,命名為HelloServlet。④

重寫doGet()、doPost()方法。

Servlet編寫具體實現示例代碼:packagecn.sdcet.servlet;importjava.io.IOException;importjavax.servlet.ServletException;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;publicclassHelloServletextendsHttpServlet{@OverrideprotectedvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{doPost(request,response);}@OverrideprotectedvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{//獲取輸出流對象PrintWriterout=response.getWriter();//通過輸出流對象將數據輸出到客戶端瀏覽器out.print("WelcomeHelloServlet!");//關閉PrintWriter類型的對象outout.close();}}Servlet配置Servlet編寫完成后,如果用戶要訪問該Servlet,則必須對該Servlet進行配置,對Servlet進行配置主要有兩種方式:一是通過web.xml文件進行配置;二是通過@WebServlet注解進行配置;Servlet的配置主要包括Servlet的名字、Servlet類、初始化參數、啟動裝入的優先級和Servlet映射等內容。Servlet配置(1)在web.xml文件中進行配置Servlet是在web.xml文件的<servlet>和<servlet-mapping>元素中進行配置的。這兩個元素的約束規則及具體說明如下。<!ELEMENTservlet(icon?,servlet-name,display-name?,description?,(servlet-class|jsp-file),init-param*,load-on-startup?,run-as?,security-role-ref*)><!ELEMENTservlet-mapping(servlet-name,url-pattern)>Servlet配置①<servlet>:用于注冊Servlet,即給Servlet起一個獨一無二的名字。<servlet>包含兩個主要的子元素<servlet-name>和<servlet-class>,分別用于指定Servlet的名稱和Servlet的完整限定名(包名+類名)。在web.xml中配置Servlet時,必須指定這個Servlet的名稱和Servlet類。Servlet配置①<servlet>:除此之外,還可以在配置時為Servlet添加描述信息及在發布時顯示的名稱。<description>元素的內容是Servlet的描述信息,<display-name>元素用于為Servlet指定一個簡短的名稱,這個名稱可以被一些工具所顯示。初始化參數在<init-param>元素中定義,它包含<param-name>和<param-value>兩個必需的子元素。Servlet配置①<servlet>:Servlet的創建和銷毀是由Web容器控制的。默認情況下,Web容器在客戶端請求Servlet時才創建它的實例。如果需要Web應用程序啟動時就加載Servlet,可以使用load-on-starup元素。load-on-starup元素的內容必須是一個整型值。如果這個元素的值是一個負數或者沒有設置這個元素,Servlet容器就在客戶端首次請求Servlet時加載它;如果這個值是正數或0,容器將在Web應用程序啟動時加載和初始化Servlet。這個整型值越小,Servlet就越先初始化。Servlet配置②<servlet-mapping>:用于定義Servlet與URL之間的映射。<servlet-mapping>包含兩個子元素<servlet-name>和<url-pattern>,分別用于指定Servlet的名稱和提供給客戶端訪問的虛擬路徑,虛擬路徑必須以/開頭(特殊情況除外,如通過擴展名匹配等情況)。<servlet-name>中指定的名稱必須是<servlet>中已設置的<servlet-name>。<url-pattern>子元素可以配置多個,這使得客戶端可以通過多個路徑實現對同一個Servlet的訪問。虛擬路徑<url-pattern>的配置可以使用通配符*,如配置為<url-pattern>*.do</url-pattern>則匹配所有以.do結尾的請求。Servlet配置在web.xml文件中對例5-1中的HelloServlet進行配置,具體配置如下。<?xmlversion="1.0"encoding="UTF-8"?><Web-appxmlns:xsi="/2001/XMLSchema-instance"xmlns="/xml/ns/javaee"xsi:schemaLocation="/xml/ns/javaee/xml/ns/javaee/Web-app_3_1.xsd"id="WebApp_ID"version="3.1"><welcome-file-list><welcome-file>index.jsp</welcome-file><welcome-file>default.jsp</welcome-file></welcome-file-list><servlet><description>ThisisaHelloServlet</description><display-name>MyHelloWorldServlet</display-name><servlet-name>HelloServlet</servlet-name><servlet-class>cn.sdcet.servlet.HelloServlet</servlet-class>etProj_war_exploded/HelloServlet。Servlet配置<init-param><param-name>username</param-name><param-value>javaWeb</param-value></init-param><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>HelloServlet</servlet-name><url-pattern>/HelloServlet</url-pattern></servlet-mapping></Web-app>將項目部署到Tomcat并啟動Tomcat之后,用戶可以通過瀏覽器對HelloServlet進行訪問,訪問地址為http://localhost:8080/ServletProj_war_exploded/HelloServlet。默認情況下,服務器啟動后web.xml文件是只讀的,一般每次修改完web.xml文件要重新啟動服務器。Servlet配置(2)通過@WebServlet注解進行配置Servlet3.0中增加了注解支持,如:@WebServlet、@WebInitParm、@WebFilter和@WebLitener。與XML不同,注解不需要依賴于配置文件,它可以直接在類中使用,其配置只對當前類有效,避免了集中管理造成的配置冗長問題。@WebServlet用于將一個類聲明為Servlet,該注解會在部署時被容器處理,容器根據其具體的屬性配置將相應的類部署為Servlet。@WebServlet屬于類級別的注解,標注位置在繼承了HttpServlet的類之上。@WebServlet

注解的常用屬性如表5-1所示。Servlet配置常用的寫法是將Servlet的相對請求路徑(即value)直接寫在注解內。Servlet配置表5-1

@WebServlet注解常用屬性屬性名類型對應web.xml標簽描述是否必需nameString<servlet-name>指定Servlet的name屬性。如果沒有顯式指定,則取值為該Servlet的完全限定名,即包名+類名否valueString[]<url-pattern>該屬性等價于urlPatterns屬性,兩者不能同時指定。如果同時指定,通常忽略value的取值是urlPatternsString[]<url-pattern>指定一組Servlet的URL匹配模式是loadOnStartupint<load-on-startup>指定Servlet的加載順序否initParamsWebInitParam[]<init-param>指定一組Servlet初始化參數否【例5-2】使用注解對例5-1中的HelloServlet進行配置。案例技能點:@WebServlet注解。實現步驟如下。①

使用注解配置HelloServlet,代碼示例如下。Servlet配置@WebServlet("/HelloServlet")publicclassHelloServletextendsHttpServlet{@OverrideprotectedvoiddoGet(HttpServletRequestreq,HttpServletResponseresp)throwsServletException,IOException{doPost(req,resp);}@OverrideprotectedvoiddoPost(HttpServletRequestreq,HttpServletResponseresp)throwsServletException,IOException{PrintWriterout=response.getWriter();out.print("WelcomeHelloServlet!");out.close();}}②

為項目配置Tomcat服務器,并將項目部署到Tomcat服務器。③

啟動Tomcat服務器,在瀏覽器地址欄輸入http://localhost:8080/ServletProj_war_exploded/HelloServlet后按Enter鍵。輸出結果如圖5-3所示。Servlet配置如果@WebServlet中需要設置多個屬性,則屬性之間必須用逗號隔開,如下所示。@WebServlet(name="HelloServlet",loadOnStartup=1,urlPatterns={"/HelloServlet","*.action"},initParams={@WebInitParam(name="uname",value="admin"),@WebInitParam(name="charset",value="utf-8")})publicclassHelloServletextendsHttpServlet{}Servlet配置ServletConfig位于javax.servlet包中,ServletConfig接口類型的對象是Servlet的配置對象,封裝了<servlet>標簽中的配置信息。它是一個接口,在Servlet的生命周期中,由服務器(如Tomcat)負責創建和初始化。當Servlet容器初始化Servlet時,會為這個Servlet創建一個ServletConfig對象,并將ServletConfig對象作為參數傳遞給Servlet。通過ServletConfig對象即可獲得當前Servlet的初始化參數信息,即在web.xml中配置的<init-param>信息。ServletConfig接口的常用方法如表5-2所示。ServletConfig接口ServletConfig接口表5-2

ServletConfig接口的常用方法返回值類型方法功能描述StringgetInitParameter(Stringname)返回名稱為name的初始化參數的值,初始化參數在web.xml配置文件中進行配置。如果參數不存在,返回nullEnumerationgetInitParameterNames()返回Servlet所有初始化參數的名稱的枚舉集合ServletContextgetServletContext()返回Servlet上下文對象的引用StringgetServletName()返回Servlet實例的名稱,這個名稱在Web應用程序的部署描述符中指定。如果是一個沒有登記的Servlet實例,該方法返回的將是Servlet的類名可以通過以下兩種方式獲取ServletConfig對象。①Servlet接口中存在一個帶參數ServletConfig的init(ServletConfigconfig)方法,可以直接從該方法中獲取ServletConfig對象。②

通過GenericServlet類的getServletConfig()方法獲取ServletConfig對象。一個Web應用程序中可以存在多個ServletConfig對象。每個Servlet對象對應一個ServletConfig對象,且這個ServletConfig對象不能被其他Servlet對象共享。ServletConfig接口【例5-3】使用ServletConfig對象獲取配置信息中的初始化參數。案例技能點:ServletConfig對象、getServletConfig()方法、getInitParameter()方法。實現步驟如下。①

在項目ServletProj的src目錄的cn.sdcet.servlet包中新建一個Servlet類,命名為TestServlet01。②

使用注解配置TestServlet01,配置名稱為uname和charset的初始化參數和值。③

在TestServlet01類中重寫doGet()、doPost()方法,調用getServletConfig()方法獲取ServletConfig對象,調用getInitParameter()方法獲取配置信息中參數uname和charset對應的值。具體實現示例代碼如下。ServletConfig接口@WebServlet(name="TestServlet01",loadOnStartup=1,urlPatterns={"/TestServlet01","*.action"},initParams={@WebInitParam(name="uname",value="admin"),@WebInitParam(name="charset",value="utf-8")})publicclassTestServlet01extendsHttpServlet{@OverrideprotectedvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{PrintWriterout=response.getWriter();//獲取ServletConfig對象ServletConfigconfig=this.getServletConfig();//獲取配置信息中的初始化參數Stringuname=config.getInitParameter("uname");Stringcharset=config.getInitParameter("charset");out.println("uname="+uname);out.println("charset="+charset);out.close();}@OverrideprotectedvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{doGet(request,response);}}ServletConfig接口④

啟動Tomcat服務器,在瀏覽器地址欄中輸入http://localhost:8080/ServletProj_war_exploded/TestServlet01后按Enter鍵。輸出結果如圖5-4所示。ServletConfig接口一個ServletContext對象代表一個Web應用程序的上下文,為整個Web應用程序提供一個全局的共享區域。當Web容器(如Tomcat)啟動時,它會為每個Web應用程序創建一個對應的ServletContext對象。這個對象在Web應用程序的生命周期內全局唯一,且所有Servlet和JSP頁面都可以訪問它。當Web應用程序被卸載或服務器關閉時,ServletContext對象會被銷毀。ServletContext接口中的常用方法如表5-3所示,Servlet容器提供了這個接口所有方法的具體實現。ServletContext接口ServletContext接口返回值類型方法功能描述ObjectgetAttribute(Stringname)根據給定的屬性名返回設定的值EnumerationgetAttributeNames()返回一個Enumeration對象,它包含了存儲在ServletContext對象中的所有屬性名voidsetAttribute(Stringname,Objectobject)把一個對象和一個屬性名綁定,將這個對象存儲在ServletContext中voidremoveAttribute(Stringname)根據給定的屬性名從ServletContext中刪除相應的屬性表5-3ServletContext接口中的常用方法ServletContext接口返回值類型方法功能描述StringgetInitParameter(Stringname)根據給定的參數名獲取初始化參數的值。可以在web.xml中使用<context-param>元素定義上下文的初始化參數,這些參數被整個Web應用程序所使用RequestDispatchergetRequestDispatcher(Stringpath)返回一個RequestDispatcher對象,作為給定路徑下源的封裝。可以使用RequestDispatcher對象將一個請求轉發給其他資源進行處理,或在響應中包含資源URLgetResource(Stringpath)返回被映射到指定路徑的資源的URLInputStreamgetResourceAsStream(Stringpath)與getResource()方法類似,不同之處在于該方法返回資源的輸入流對象voidlog(Stringmsg)將指定消息寫入日志文件,在不指定日志文件時輸出到Console控制臺可以通過setAttribute(Stringname,Objectobj)方法向ServletContext中添加數據,并通過getAttribute(Stringname)方法獲取數據。可以通過以下兩種方式獲取ServletContext對象。①Servlet容器在Servlet初始化期間向其傳遞一個ServletConfig對象,可以通過這個ServletConfig對象的getServletContext()方法來獲取ServletContext對象。②

通過GenericServlet類的getServletContext()方法來獲取ServletContext對象。Web應用程序中的所有Servlet共享同一個ServletContext對象,不同Servlet之間可以通過ServletContext對象實現數據通信,因此ServletContext對象也稱為Context域對象。JSP技術中講到的隱式對象application即ServletContext類型的對象。ServletContext接口【例5-4】使用ServletContext對象獲取Web應用程序中的初始化參數。案例技能點:ServletContext對象、getServletContext()方法、getInitParameter()方法實現步驟如下。①

在項目ServletProj的src目錄的cn.sdcet.servlet包中新建一個Servlet類,命名為TestServlet02。②

在web.xml配置文件中配置初始化信息,將<context-param>元素置于根元素<web-app>中,使用子元素<param-name>和<param-value>分別指定參數名和參數值。ServletContext接口<web-appxmlns="/xml/ns/javaee"xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/xml/ns/javaee/xml/ns/javaee/web-app_4_0.xsd"version="4.0"><context-param><param-name>weburl</param-name><param-value></param-value></context-param></web-app>【注】該配置信息屬于整個Web應用程序的初始化信息,不屬于某個Servlet的初始化信息。ServletContext接口③

使用注解配置TestServlet02,重寫doGet()和doPost()方法,使用ServletContext接口獲取Web應用程序的初始化參數。@WebServlet("/TestServlet02")publicclassTestServlet02extendsHttpServlet{@OverrideprotectedvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{//獲取ServletContext對象ServletContextcontext=getServletContext();PrintWriterout=response.getWriter();//根據給定的參數名,返回Web應用范圍內匹配的初始化參數值out.println("URL:"+context.getInitParameter("weburl"));out.close();}@OverrideprotectedvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{doGet(request,response);}}ServletContext接口④

啟動Tomcat服務器,在瀏覽器地址欄輸入http://localhost:8080/ServletProj_war_exploded/TestServlet02后按Enter鍵。輸出結果如圖5-5所示。ServletContext接口在Web服務器運行階段,Servlet容器收到HTTP瀏覽器或者其他HTTP客戶端發出的請求后,會創建一個HttpServletRequest請求對象和HttpServletResponse響應對象,專門用于封裝HTTP請求消息和HTTP響應消息。請求與響應1.請求:HttpServletRequest接口客戶端通過瀏覽器發送HTTP請求來訪問服務器的資源,Servlet主要用來處理HTTP請求并做出響應。ServletAPI中提供了一個HttpServletRequest接口,它繼承自ServletRequest接口,ServletRequest中定義了一系列獲取請求參數的方法。HttpServletRequest對象專門用于封裝HTTP請求消息(又稱request對象)。HTTP請求消息分為請求行、請求消息頭和請求消息體3部分,所以HttpServletRequest接口中定義了獲取請求行、請求頭和請求消息體的相關方法,并從父類ServletRequest中繼承了請求相關方法。ServletRequest及HttpServletRequest中的常用方法如表5-4所示。請求:HttpServletRequest接口請求:HttpServletRequest接口表5-4

ServletRequest及HttpServletRequest中的常用方法返回值類型方法功能描述StringgetParameter(Stringname)返回指定參數的值String[]getParameterValues(Stringname)以字符串數組的形式返回指定參數的所有值(HTTP請求中可以有多個相同名稱的參數)EnumerationgetParameterNames()以枚舉集合的形式返回請求中所有參數的名稱MapgetParameterMap()用于將請求中的所有參數及其值裝入一個Map對象中返回voidsetAttribute(Stringname,Objectobject)把一個Java對象與一個屬性名綁定,并將它作為一個屬性存放到request中。參數name為屬性名,參數object為屬性值ObjectgetAttribute(Stringname)根據指定的屬性名name返回request中對應的屬性值voidremoveAttribute(Stringname)從request中移除名稱為name的屬性請求:HttpServletRequest接口表5-4

ServletRequest及HttpServletRequest中的常用方法返回值類型方法功能描述StringgetMethod()用于獲取HTTP請求方式(如GET、POST等)StringgetContextPath()返回當前Servlet所在的應用的名稱(上下文)。對于默認(ROOT)上下文中的Servlet,此方法返回空字符串StringgetRequestURI()用于獲取請求行中的資源名稱部分,即位于URL的主機和端口之后,參數部分之前的部分StringgetRemoteAddr()用于獲取客戶端的IP地址voidsetCharacterEncoding(Stringcharset)用于設置請求消息的字符集編碼RequestDispatchergetRequestDispatcher(Stringpath)用于獲取RequestDispatcher對象,通過RequestDispatcher對象的forward()方法可以實現請求轉發HttpSessiongetSession()用于獲取與此請求關聯的當前會話,如果該請求沒有會話,則創建一個會話HttpSessiongetSession(booleancreate)返回與此請求關聯的當前HttpSession。如果沒有當前會話并且create為true,則返回一個新會話。如果create為false并且該請求沒有有效的HttpSession,則返回null(1)獲取請求行信息(2)獲取請求頭信息(3)獲取請求參數(4)請求轉發(5)傳遞數據請求:HttpServletRequest接口(1)獲取請求行信息訪問Servlet時,請求消息的請求行中包含請求方法、請求資源名、請求路徑等信息,通過HttpServletRequest對象可以方便地獲取到請求行的相關信息。請求:HttpServletRequest接口【例5-5】通過HttpServletRequest對象獲取請求行的相關信息。案例技能點:HttpServletRequest獲取請求行信息的常用方法實現步驟如下。①

在項目ServletProj的src目錄的cn.sdcet.servlet包中新建一個Servlet類,命名為TestServlet03。②

使用注解配置TestServlet03,重寫doGet()和doPost()方法,獲取請求行信息,代碼示例如下。請求:HttpServletRequest接口@WebServlet("/TestServlet03")publicclassTestServlet03extendsHttpServlet{

@Override

protectedvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{

response.setContentType("text/html;charset=utf-8");

PrintWriterout=response.getWriter();

//獲取HTTP請求消息中的請求方式(如GET、POST)

out.println("請求方式:"+request.getMethod()+"<br>");

//獲取請求行中的資源名部分

out.println("資源名部分:"+request.getRequestURI()+"<br>");

//獲取請求行中的參數部分

out.println("參數部分:"+request.getQueryString()+"<br>");

//獲取請求行中的協議名和版本

out.println("協議名和版本:"+request.getProtocol()+"<br>");

//獲取請求URL所屬Web應用程序的路徑

out.println("Web應用程序的路徑:"+request.getContextPath()+"<br>");

//獲取Servlet所映射的路徑

out.println("Servlet所映射的路徑:"+request.getServletPath()+"<br>");

out.close();

}

@Override

protectedvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{

doGet(request,response);

}}請求:HttpServletRequest接口③

啟動Tomcat服務器,在瀏覽器地址欄輸入http://localhost:8080/ServletProj_war_exploded/TestServlet03?name=admin后按Enter鍵。輸出結果如圖5-6所示。請求:HttpServletRequest接口(2)獲取請求頭信息訪問Servlet時,需要通過請求頭向服務器傳遞附加信息,通過HttpServletRequest對象可以方便地獲取到請求頭的相關信息。請求

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論