版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
Servlet編程技術(shù)
本章目標(biāo)Servlet簡(jiǎn)介Servlet與JSP的關(guān)系JavaServletAPIServlet的生命周期創(chuàng)建一個(gè)ServletHTML和Servlet的交互JSP和Servlet的通信MVC設(shè)計(jì)模式Servlet簡(jiǎn)介Servlet是服務(wù)器端的Java小程序,通常被稱為服務(wù)器小應(yīng)用程序,是運(yùn)行在服務(wù)器端的應(yīng)用程序。ServletServlet接受來(lái)自客戶端的請(qǐng)求,并把處理的結(jié)果以HTML的形式返回,在客戶端形成動(dòng)態(tài)網(wǎng)頁(yè)。Servlets和客戶端協(xié)作是通過request/response來(lái)進(jìn)行處理的。Web瀏覽器Web服務(wù)器ServletHTTP請(qǐng)求HTTP響應(yīng)Servlet與JSP的關(guān)系執(zhí)行JSP文件的時(shí)候,首先JSPContainer會(huì)將其轉(zhuǎn)譯為Servlet(*.java)文件第一次JSP執(zhí)行需要花較長(zhǎng)的時(shí)間,而后JSP執(zhí)行時(shí),直接運(yùn)行Java的執(zhí)行碼,從而大大提高的JSP的執(zhí)行速度。在JSP中,更加注重頁(yè)面的表現(xiàn),而在Servlet中則更注重業(yè)務(wù)邏輯的實(shí)現(xiàn)。當(dāng)編寫的頁(yè)面顯示效果比較復(fù)雜時(shí),首選是JSP。而我們?cè)谔幚順I(yè)務(wù)邏輯時(shí),首選則是Servlet。JavaServletAPIServletAPI為Servlet提供了統(tǒng)一的編程接口。編寫Servlet不必關(guān)心一個(gè)Servlet樣被裝載;ServIet運(yùn)行的服務(wù)器環(huán)境是什么;或者用來(lái)傳輸數(shù)據(jù)的協(xié)議是什么等等,Servlet可以融合在不同的Web服務(wù)器中。ServletAPI在下面兩個(gè)Java擴(kuò)展包中定義:javax.servlet包含了被用來(lái)實(shí)現(xiàn)和擴(kuò)展的通用接口和類,稱為GenericServlet。javax.servlet.http是被用于特定的HTTP協(xié)議的,稱為HttpServletServlet接口GenericServlet抽象類HttpServlet抽象類應(yīng)用程序定義Servlet圖6-2ServletAPI類的繼承關(guān)系Servlet一般從Javax包的HttpServlet類擴(kuò)展而來(lái),在HttpServlet中加入了一些附加的方法,這些方法可以被協(xié)助處理HTTP基本請(qǐng)求的HttpServlet類中的方法service自動(dòng)地調(diào)用。這些方法有:doGet、doPost、doPut、doDelete、doHead、doOptions、doTrace。doGet用來(lái)處理HTTP的GET請(qǐng)求。這個(gè)GET操作僅僅允許客戶從HTTPserver上取得GET資源。重載此方法的用戶自動(dòng)允許支持方法HEAD。這個(gè)GET操作被認(rèn)為是安全的,沒有任何的負(fù)面影響,對(duì)用戶來(lái)說是很可靠的。doGet方法格式為:protectedvoiddoGet(HttpServletResquestrequest,HttpServletResponseresponse)throwsServletException,IOException;doPost用來(lái)處理HTTP的POST請(qǐng)求。這個(gè)POST操作包含了在必須通過此Servlet執(zhí)行的請(qǐng)求中的數(shù)據(jù)。由于它不能立即取得資源,所以對(duì)于那些涉及到安全性的用戶來(lái)說,通過POST請(qǐng)求操作會(huì)有一些副作用。doPost方法格式為:protectedvoiddoPost(HttpServletResquestrequest,HttpServletResponseresponse)throwsServletException,IOException;注意:doGet和doPost方法分別對(duì)應(yīng)Form表單的屬性method屬性,method屬性有兩種Get和Post。doPost()只在Post請(qǐng)求時(shí)被執(zhí)行,doGet只在Get請(qǐng)求時(shí)被執(zhí)行。利用Get方法提交的總數(shù)據(jù)量不能超過2K,否則將提交失敗,利用Post方法則沒有容量方面的限制。Servlet的生命周期Servlet的生命周期主要由3個(gè)過程組成:init()方法:服務(wù)器初始化Servlet。service()方法:初始化完畢,Servlet對(duì)象調(diào)用該方法相應(yīng)客戶的請(qǐng)求。destroy()方法:調(diào)用該方法消滅Servlet對(duì)象。其中,init()方法只在Servlet第一次被請(qǐng)求加載的時(shí)候被調(diào)用一次,當(dāng)有客戶再請(qǐng)求Servlet服務(wù)時(shí),Web服務(wù)器將啟動(dòng)一個(gè)新的線程,在該線程中,調(diào)用service方法響應(yīng)客戶的請(qǐng)求。1.init()方法init()方法是servlet生命周期的開始。這個(gè)方法在servlet被實(shí)例化后立即執(zhí)行,它只被調(diào)用一次,用來(lái)創(chuàng)建和初始化請(qǐng)求中用到的資源。
init()方法聲明:publicvoidinit(ServletConfigconfig)throwsServletException;一個(gè)比較通用的做法是調(diào)用超類的init()方法super.init()。2.service()方法service()方法處理來(lái)自客戶端的所有請(qǐng)求。service()方法表示如下:publicvoidservice(ServletRequestreq,ServletResponseres)throwsServletException,IOException;service()方法有兩個(gè)參數(shù):ServletRequest:封裝來(lái)自客戶端的請(qǐng)求信息ServletResponse:返回客戶端的信息3.destroy()方法卸載Servlet時(shí),調(diào)用destroy()方法,釋放獲得的資源;服務(wù)器在完成所有服務(wù)調(diào)用之后,或者在經(jīng)過服務(wù)器特定的秒數(shù)之后調(diào)用destroy()方法,這時(shí)在init()方法中被創(chuàng)建的資源被釋放。創(chuàng)建一個(gè)Servlet
Servlet是一個(gè)標(biāo)準(zhǔn)的Java類,它符合Java類的一般規(guī)則。和一般Java類不同之處就在于Servlet可以處理HTTP請(qǐng)求。1.編寫Servlet程序【程序代碼】FirstServlet.javapackagebookshop;importjavax.servlet.*;importjavax.servlet.http.*;importjava.io.*;publicclassFirstServletextendsHttpServlet{ protectedvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse) throwsServletException,IOException {//設(shè)置返回的內(nèi)容類型與字符集
response.setContentType("text/html;charset=GBK");//獲取PrintWriter對(duì)象
PrintWriterout=response.getWriter();//利用PrintWriter類的println()方法向客戶端輸出信息
out.println("<html><body><B>歡迎使用Servlet!</B></body></html>"); out.close(); } }【程序說明】
作為Servlet程序,F(xiàn)irstServlet需要繼承HttpServlet類。在本例中,實(shí)現(xiàn)了doGet()方法,這樣有GET請(qǐng)求達(dá)到Servlet時(shí),doGet()方法就會(huì)被執(zhí)行;HttpServletRequest和HttpServletResponse對(duì)象作為參數(shù)由系統(tǒng)傳入doGet()方法,HttpServletRequest對(duì)象包含的是來(lái)自客戶端的信息,HttpServletResponse包含的是返回客戶端的信息。注意: 在編譯該Java文件時(shí),把[Tomcat目錄]\common\lib目錄下的jsp-api.jar與servlet-api.jar放到系統(tǒng)類的搜索路徑內(nèi),比如把它們加入到環(huán)境變量的CLASSPATH中?!境绦虼a】web.xml<web-appxmlns="/xml/ns/j2ee"version="2.4"><servlet><servlet-name>FirstServlet</servlet-name><servlet-class>bookshop.FirstServlet</servlet-class></servlet><servlet-mapping><servlet-name>FirstServlet</servlet-name><url-pattern>/FirstServlet</url-pattern></servlet-mapping></web-app>【程序說明】下面語(yǔ)句給bookshop包FirstServlet類一個(gè)別名FirstServlet:<servlet-name>FirstServlet</servlet-name><servlet-class>bookshop.FirstServlet</servlet-class>下面語(yǔ)句表示別名為FirstServlet的Servlet的網(wǎng)址為[當(dāng)前應(yīng)用目錄]/FirstServlet:<servlet-name>FirstServlet</servlet-name><url-pattern>/FirstServlet</url-pattern>以上配置實(shí)際上建立起Servlet與網(wǎng)址的關(guān)系,即bookshop.FirstServlet—>FirstServlet
/FirstServlet3.部署圖6-3文件夾結(jié)構(gòu)HTML和Servlet的交互和Jsp文件類似,Servlet可以接收Html提交過來(lái)的數(shù)據(jù),并將其顯示在頁(yè)面中。
1.編寫Sevlet類【程序代碼】MyServlet.javapackagebookshop;importjavax.servlet.*;importjavax.servlet.http.*;importjava.io.*;publicclassMyServletextendsHttpServlet{ publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse) throwsServletException,IOException{ StringuserName,password; userName=newString(request.getParameter("userName").getBytes( "ISO8859_1"),"GBK"); password=newString(request.getParameter("password").getBytes( "ISO8859_1"),"GBK"); response.setContentType("text/html;charset=GBK"); PrintWriterout=response.getWriter(); out.println("<html><body>"); out.println("姓名為:"+userName); out.println("口令為:"+password); out.println("</body></html>"); out.close(); }}2.修改web.xml文件實(shí)現(xiàn)路徑映射【程序代碼】web.xml<web-appxmlns="/xml/ns/j2ee"version="2.4"><servlet><servlet-name>MyServlet</servlet-name><servlet-class>bookshop.MyServlet</servlet-class></servlet><servlet-mapping><servlet-name>MyServlet</servlet-name><url-pattern>/MyServlet</url-pattern></servlet-mapping></web-app>3.編寫JSP文件調(diào)用Servlet【程序代碼】6-2.html<html><head><meta"content=text/html;charset=gb2312"></head><bodybgcolor="#FFFFFF"><formmethod="get"action="MyServlet"><p>姓名:<inputname="userName"type="text"id="name"></p><p>口令:<inputname="password"type="password"id="password"></p><p><inputtype="submit"name="submit"value="登錄"></p></form></body></html>提示: 為了在Servlet中避免中文亂碼,在向用戶輸出時(shí)的編碼部分用response對(duì)象的setContentType("text/html;charset=GBK");來(lái)設(shè)置輸出編碼格式;而在讀取表單數(shù)據(jù)時(shí),用request.setCharacterEncoding("GBK")來(lái)設(shè)置編碼,也可以象本例中讀取后再進(jìn)行字符集的轉(zhuǎn)化,如語(yǔ)句userName=newString(request.getParameter("userName").getBytes("ISO8859_1"),"GBK");把讀入的userName從系統(tǒng)默認(rèn)的ISO8859_1轉(zhuǎn)化為GBK編碼,以免亂碼。JSP和Servlet的通信1.從JSP跳轉(zhuǎn)到Servlet本例利用forward動(dòng)作調(diào)用例6-2中的MyServlet,并通過jsp:param動(dòng)作傳遞userName和password的值。例6-3下面例子演示了從JSP跳轉(zhuǎn)到Servlet【程序代碼】fromJspToServlet.jsp<html><body><jsp:forwardpage="/MyServlet"> <jsp:paramname="userName"value="dave"/> <jsp:paramname="password"value="1234"/></jsp:forward></body></html>2.從Servlet跳轉(zhuǎn)到JspServlet也可以跳轉(zhuǎn)到Jsp頁(yè)面,一種方法利用Response對(duì)象的sendRedirect()方法,另一種RequestDispatcher對(duì)象的forward()方法來(lái)跳轉(zhuǎn),這種跳轉(zhuǎn)后的頁(yè)面與Servlet屬同一個(gè)Request,因此request中的數(shù)據(jù)在forward后的頁(yè)面中可以讀取。例6-4下面例子演示了從Servlet跳轉(zhuǎn)到Jsp【程序代碼】ServletToJsp.javapackagebookshop;importjava.io.*;importjavax.servlet.*;importjavax.servlet.http.*;publicclassServletToJspextendsHttpServlet{ publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse){ try{//向request存入數(shù)據(jù)
request.setAttribute("userName","dave");//跳轉(zhuǎn)到hello.jsp RequestDispatcherrd=request.getRequestDispatcher("/hello.jsp"); rd.forward(request,response); }catch(Exceptione){ e.printStackTrace(); } }}【程序代碼】Web.xml<web-appxmlns="/xml/ns/j2ee"version="2.4"><servlet><servlet-name>ServletToJsp</servlet-name><servlet-class>bookshop.ServletToJsp</servlet-class></servlet><servlet-mapping><servlet-name>ServletToJsp</servlet-name><url-pattern>/ServletToJsp</url-pattern></servlet-mapping></web-app>【程序代碼】hello.jsp<%@pagecontentType="text/html;charset=GBK"%><html><body>
當(dāng)前用戶為:<%=request.getAttribute("userName")%></body></html>圖6-8文件夾結(jié)構(gòu)JSP設(shè)計(jì)模式JSP設(shè)計(jì)模式包括Model1(JSP+JavaBean)設(shè)計(jì)模式和Model2(MVC)設(shè)計(jì)模式。模式一JSP+JavaBean模式Model1是以JSP為中心的開發(fā)模型。JSP頁(yè)面中可以非常容易地結(jié)合業(yè)務(wù)邏輯(jsp:useBean)、服務(wù)端處理過程(jsp:scriplet)和HTML(<html>),在JSP頁(yè)面中同時(shí)實(shí)現(xiàn)顯示,業(yè)務(wù)邏輯和流程控制,從而可以快速地完成應(yīng)用開發(fā)。大量地使用這種模
溫馨提示
- 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 養(yǎng)老護(hù)理中級(jí)老年康復(fù)護(hù)理
- 機(jī)器學(xué)習(xí)在護(hù)理決策支持中的應(yīng)用
- 2025年便攜式超聲系統(tǒng)租賃合同
- 2025年白酒區(qū)域獨(dú)家合作協(xié)議
- 基因水平轉(zhuǎn)移的系統(tǒng)發(fā)育分析
- 婦科常用中成藥的合理使用
- 地球在宇宙中的位置2課件
- DB36∕T 1485-2025“贛出精 品”品牌建設(shè)通 用要求
- 在線教育的可擴(kuò)展性和資源共享性研究
- 歷屆4級(jí)考試真題及答案
- 2025年大學(xué)康復(fù)治療學(xué)(運(yùn)動(dòng)療法學(xué))試題及答案
- 胎膜早破的診斷與處理指南
- 進(jìn)出口貨物報(bào)關(guān)單的填制教案
- 被壓迫者的教育學(xué)
- 2025年科研倫理與學(xué)術(shù)規(guī)范期末考試試題及參考答案
- 上市公司財(cái)務(wù)舞弊問題研究-以國(guó)美通訊為例
- 2025年國(guó)家開放電大行管本科《公共政策概論》期末考試試題及答案
- 2025年紀(jì)檢監(jiān)察知識(shí)試題庫(kù)(含答案)
- CJT 288-2017 預(yù)制雙層不銹鋼煙道及煙囪
- 2024年西安市政道橋建設(shè)集團(tuán)有限公司招聘筆試參考題庫(kù)含答案解析
- 《彈性波動(dòng)力學(xué)》課程教學(xué)大綱
評(píng)論
0/150
提交評(píng)論