JSP快速入門教程_第1頁(yè)
JSP快速入門教程_第2頁(yè)
JSP快速入門教程_第3頁(yè)
JSP快速入門教程_第4頁(yè)
JSP快速入門教程_第5頁(yè)
已閱讀5頁(yè),還剩98頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、JSP快速入門教程第一講(參考Java Web程序設(shè)計(jì)基礎(chǔ)教程第1章)1 JSP 和 Java的關(guān)系 一般Java指的標(biāo)注版 Java SE 另外兩個(gè)版本:Java EE 和 Java ME JSP屬于Java EE的一部分。 Java EE: 組件:Web層組件(JSPServlet)業(yè)務(wù)層組件(EJB) 服務(wù):JNDI JDBC RMI JAAS JavaMail等等 Java EE包括2個(gè)體系:標(biāo)準(zhǔn)(上面介紹的)流行(StrutsHibernateSpring) 兩套體系都是JSPServlet為基礎(chǔ)。2 JSP會(huì)涉及哪些內(nèi)容 JSP語(yǔ)法基礎(chǔ)(JavaHTML): 對(duì)于Java,需要掌握

2、Java的基本語(yǔ)法(類定義 對(duì)象定義和使用 常用類庫(kù)java.lang.*,java.util.*) 對(duì)于HTML,主要表單元素(輸入)表格(顯示信息)基本HTML JSTL,標(biāo)準(zhǔn)標(biāo)簽庫(kù),用于輸出和控制 EL,通常與JSTL一起使用,主要用于輸出 Servlet,幾乎所有介紹JSP的書(shū)和課程都包含Servlet,因?yàn)镴SP實(shí)際上指的是Java Web開(kāi)發(fā)。用Servlet主要是控制器。 JDBC,對(duì)數(shù)據(jù)庫(kù)的訪問(wèn)。 JavaBean(Java類)3 JSP的運(yùn)行環(huán)境 JDK 服務(wù)器:我們用Tomcat。其它的服務(wù)器:IBM Websphere + BEA WebLogic+ JBoss(免費(fèi)的)

3、 + GlassFish(新出的Java EE 5服務(wù)器)4 JSP的開(kāi)發(fā)環(huán)境 頁(yè)面:DreamWeaver開(kāi)發(fā)頁(yè)面 代碼:本文編輯器 Eclipse NetBeans JBuilder 注:我們采用記事本。5 Tomcat文件夾 webapps主要各個(gè)應(yīng)用,編寫(xiě)的每個(gè)應(yīng)用(網(wǎng)站)都可以放在這個(gè)位置 bin這個(gè)是啟動(dòng)服務(wù)器的相關(guān)文件,tomcat6用于命令行方式的啟動(dòng),tomcat6w用于windows方式的啟動(dòng) conf用于配置,常用的是server.xml 另外一個(gè)是web.xml work 存放臨時(shí)文件 logs系統(tǒng)運(yùn)行時(shí)候的日志信息6 實(shí)例:hello.jsp 創(chuàng)建一個(gè)應(yīng)用,實(shí)際上需要

4、在webapps中創(chuàng)建文件夾,bookstore,相當(dāng)于應(yīng)用的名字 文件夾中要?jiǎng)?chuàng)建一個(gè)子文件夾WEB-INF,這個(gè)每個(gè)應(yīng)用web應(yīng)用都需要的。 在WEB-INF中需要web.xml,是web應(yīng)用的配置文件,還應(yīng)該有classes和lib子文件夾(存放類文件) JSP文件和HTML文件直接放在bookstore下面。 hello.jsp文件內(nèi)容如下: 第一個(gè)JSP程序 Hello,晚上好! 先啟動(dòng)服務(wù)器: 訪問(wèn)程序: HYPERLINK :8080/bookstore/hello.jsp t _blank :8080/bookstore/hello.jsp http表示協(xié)議 表示主機(jī)IP地址,也

5、可以寫(xiě)主機(jī)名字 8080表示服務(wù)的端口,上網(wǎng)的時(shí)候不用輸入端口,因?yàn)椴捎昧四J(rèn)的端口,默認(rèn)端口80。 bookstore表示應(yīng)用,是應(yīng)用的名字 hello.jsp就是資源7 JSP的運(yùn)行原理 過(guò)程: 首先啟動(dòng)服務(wù)器,并且要保證應(yīng)用在服務(wù)器上(把應(yīng)用放在webapps下面,會(huì)自動(dòng)加載) 在客戶端通過(guò)瀏覽器發(fā)送請(qǐng)求(在地址欄中輸入地址) 服務(wù)器接收到請(qǐng)求之后,查找有沒(méi)有這個(gè)文件對(duì)應(yīng)的Java文件的對(duì)象。如果沒(méi)有這個(gè)對(duì)象,需要?jiǎng)?chuàng)建(先把JSP文件轉(zhuǎn)換成Java文件, 編譯成.class文件,加載類并創(chuàng)建對(duì)象),然后調(diào)用對(duì)象的相應(yīng)方法,方法完成對(duì)用戶的響應(yīng),通常是輸出的html代碼) 客戶端接收到的是

6、html代碼,瀏覽器解析這個(gè)代碼生成頁(yè)面。8 表格的語(yǔ)法 開(kāi)始標(biāo)志: 結(jié)束標(biāo)志: 中間是行,每行是一個(gè) 每行之間是列,每一列對(duì)應(yīng) 之間的內(nèi)容就是每個(gè)表格中的信息*第一講結(jié)束 HYPERLINK /space.php?uid=10410 陽(yáng)光2008-11-15 19:54:57 第二講(參考Java Web程序設(shè)計(jì)基礎(chǔ)教程第2章)1、form 只要是涉及向服務(wù)器提交信息,都應(yīng)該使用form。 基本語(yǔ)法結(jié)構(gòu): 各種表單元素 action屬性決定的目標(biāo)文件來(lái)對(duì)用戶提交的信息進(jìn)行處理。2、常用的表單元素 單行文本框:用于輸入少量的信息。 基本語(yǔ)法格式: type=text就說(shuō)明這是單行文本框; na

7、me指出文本框的名字,最好不要用漢字,最好使用有意義的名字; value指出默認(rèn)值,如果沒(méi)有默認(rèn)值,可以不要value屬性,value屬性經(jīng)常在修改的時(shí)候使用。 注意:如果有格式要求,要明確的告訴用戶。 密碼框:用于輸入密碼。 基本的語(yǔ)法格式: 注意:設(shè)置密碼的時(shí)候,應(yīng)該使用確認(rèn)密碼,應(yīng)該有兩個(gè)密碼框。 提交按鈕:當(dāng)點(diǎn)擊它的時(shí)候,會(huì)把輸入的信息提交給服務(wù)器。 基本語(yǔ)法格式: type應(yīng)該為submit,value是顯示在按鈕上面的信息。 復(fù)位按鈕:當(dāng)點(diǎn)擊它的時(shí)候,會(huì)把各個(gè)表單元素的值恢復(fù)到默認(rèn)值。 基本語(yǔ)法格式: 普通按鈕:也可以完成提交,還可以完成方法的調(diào)用。 基本語(yǔ)法格式: 單選按鈕:通用

8、用于在多個(gè)選項(xiàng)中選擇一個(gè)。 基本語(yǔ)法格式: 這個(gè)表示一個(gè)單選按鈕,并且僅僅是一個(gè)按鈕。 例,選擇性別: 男 女 如果希望在多個(gè)選項(xiàng)中選擇一個(gè)(有互斥性),必須讓他們的名字一致。 復(fù)選框:用于多選。 基本的語(yǔ)法格式: 顯示給用戶的信息與提交給服務(wù)器的信息沒(méi)有關(guān)系。 如果希望多個(gè)選項(xiàng)是一組,應(yīng)該使用相同的名字。 下拉列表:用于選擇,可以單選,也可以多選。 基本語(yǔ)法格式: 1 2 . 每個(gè)選項(xiàng)使用一個(gè)option,使用value屬性指出該選項(xiàng)的值,在和之間是顯示給用戶的值。 文本域:用于輸入大量的信息。 基本語(yǔ)法格式: 默認(rèn)值 要為這個(gè)文本域賦默認(rèn)值,需要把值放在開(kāi)始標(biāo)志和結(jié)束標(biāo)志之間,而不是使用v

9、alue屬性。3、完成輸入的時(shí)候應(yīng)該注意的問(wèn)題 對(duì)格式的要求必須明確,包括長(zhǎng)度、數(shù)字、日期、email、電話、必添。 能夠從系統(tǒng)中獲取的信息不要讓用戶提供,例如當(dāng)前時(shí)間。 能夠選擇的信息不要讓用戶輸入。 按照信息的重要程度安排表單元素在界面中的位置。4、對(duì)用戶輸入信息進(jìn)行驗(yàn)證 要用JavaScript,使用下面的標(biāo)記: /JavaScript代碼 要寫(xiě)方法 function check() 方法可以不用定義返回值,但是可以有返回值 獲取用戶輸入的值: document.form1.username.value document表示當(dāng)前文檔,form1表示表單的名字,username表示該表單中

10、表單元素的名字,value表示得到值 把表單提交與方法關(guān)聯(lián):可以使用表單的onSubmit事件。 例: function check() username = document.form1.username.value; if(username.length8) alert(用戶名長(zhǎng)度不合適!); return false; else return true; 使用button的onClick事件進(jìn)行驗(yàn)證: 首先要把提交按鈕修改成普通按鈕; 在普通按鈕上增加事件:onClick=javascript:check() 在驗(yàn)證成功的時(shí)候,提交表單:document.form1.submit();*

11、第二講結(jié)束 HYPERLINK /space.php?uid=10410 陽(yáng)光2008-11-15 19:55:56 第三講(參考 HYPERLINK /JavaEETeacher/archive/2008/03/11/2168471.aspx t _blank Java Web程序設(shè)計(jì)基礎(chǔ)教程第3.4章)1、include指令 作用:把多個(gè)文件中需要共享的代碼放在單獨(dú)的文件中,然后在需要的時(shí)候使用該指令引入這個(gè)文件。典型的應(yīng)用,把網(wǎng)站的頭部和版權(quán)信息放在單獨(dú)的文件中,在其他文件中包含這兩部分。 基本的語(yǔ)法格式: file屬性指出目標(biāo)文件。 例:把index.jsp和register.jsp中

12、的共同部分做成單獨(dú)的文件header.jsp(后綴名不一定是.jsp),然后在index.jsp和register.jsp中調(diào)用。 header.jsp中的內(nèi)容如下: 電子書(shū)店 注冊(cè) 最新圖書(shū) 最暢銷圖書(shū) 查詢圖書(shū) 修改密碼 查詢訂單購(gòu)物車 在index.jsp中引入header.jsp的代碼: 用戶名: 口令: 歡迎光臨我們的書(shū)店! 運(yùn)行過(guò)程:在轉(zhuǎn)換的時(shí)候,當(dāng)遇到include指令的時(shí)候會(huì)把include指令指向的目標(biāo)文件的內(nèi)容拷貝到當(dāng)前位置,替換include指令,這樣最后形成一個(gè)文件。然后才編譯形成class文件,然后運(yùn)行。2、標(biāo)簽 我們使用登錄功能的模擬來(lái)介紹。 首先,使用Java代碼

13、完成判斷,使用完成跳轉(zhuǎn),代碼: 注意:不管跳轉(zhuǎn)到success.jsp還是index.jsp,地址欄都是處理文件的名字。 的語(yǔ)法格式: page屬性指出轉(zhuǎn)向的目標(biāo)文件。最后的結(jié)束符為“/”,斜杠不能省略。 另外一個(gè)可以完成跳轉(zhuǎn)的方式是采用response.sendRedirect()。response和request一樣,都是內(nèi)容對(duì)象,可以直接訪問(wèn)。修改上面的文件: 和response.sendRedirect的運(yùn)行效果相同(針對(duì)上面的這個(gè)例子)。 相同點(diǎn):都是轉(zhuǎn)向目標(biāo)文件。 不同點(diǎn):地址欄中顯示的內(nèi)容是不相同的,如果使用,地址欄顯示當(dāng)前文件的名字,如果使用response,地址欄顯示的是轉(zhuǎn)向

14、后的文件的名字。執(zhí)行過(guò)程不同:使用相當(dāng)于一次請(qǐng)求,使用response相當(dāng)于兩次請(qǐng)求。 使用的情況: index.jsp中輸入用戶名和口令,提交給login_process.jsp,服務(wù)器保存用戶的輸入信息,使用轉(zhuǎn)向success.jsp之后,success.jsp還可以訪問(wèn)用戶輸入的信息,因?yàn)檩斎胪淮握?qǐng)求。 使用response的請(qǐng)求: index.jsp中輸入用戶名和口令,提交給login_process.jsp,服務(wù)器保存用戶的輸入信息,使用response的sendRedirect方法相當(dāng)于重新向服務(wù)器發(fā)送一次請(qǐng)求,這樣上次的請(qǐng)求內(nèi)容(用戶名和口令)就不能共享了。3、標(biāo)簽 把inde

15、x.jsp中替換成 從運(yùn)行效果上相同。 不同點(diǎn):1、兩個(gè)文件,目標(biāo)文件是單獨(dú)運(yùn)行的,當(dāng)前文件運(yùn)行到標(biāo)簽的時(shí)候,轉(zhuǎn)向執(zhí)行標(biāo)簽所指向的目標(biāo)文件,執(zhí)行之后返回繼續(xù)標(biāo)簽之后的內(nèi)容。 2、指令是在編譯(轉(zhuǎn)換)的時(shí)候使用,在運(yùn)行的時(shí)候起作用。 程序中如何選用:要導(dǎo)入的內(nèi)容是不是每次都執(zhí)行,如果每次都執(zhí)行的話,應(yīng)該使用,如果是在特定的條件下,應(yīng)該使用。例如,登錄之后要么轉(zhuǎn)向success.jsp要么轉(zhuǎn)向index.jsp,如果在程序中使用導(dǎo)入,應(yīng)該用。4、和區(qū)別 把login_process.jsp中的替換成: 運(yùn)行效果是相同的。但是有不同點(diǎn),修改代碼如下:處理文件的前半部分 處理文件的后半部分兩次運(yùn)行結(jié)果

16、不相同。分析原因: :先執(zhí)行標(biāo)簽之前的內(nèi)容,遇到標(biāo)簽的時(shí)候轉(zhuǎn)向執(zhí)行目標(biāo)文件,執(zhí)行完不返回,顯示的內(nèi)容為目標(biāo)文件的內(nèi)容,標(biāo)簽之前的內(nèi)容執(zhí)行,但是不顯示。標(biāo)簽之后的內(nèi)容不會(huì)執(zhí)行,當(dāng)然更不會(huì)顯示。 :先執(zhí)行標(biāo)簽之前的內(nèi)容,遇到標(biāo)簽轉(zhuǎn)向執(zhí)行目標(biāo)文件,執(zhí)行完返回,繼續(xù)執(zhí)行標(biāo)簽之后的內(nèi)容,顯示的內(nèi)容為:標(biāo)簽之前的內(nèi)容+目標(biāo)文件的內(nèi)容+標(biāo)簽之后的內(nèi)容,標(biāo)簽的前后都執(zhí)行,都顯示。5、使用標(biāo)準(zhǔn)標(biāo)簽庫(kù)(JSTL)完成登錄的判斷過(guò)程 如何使用標(biāo)簽標(biāo)簽庫(kù):(1)得到標(biāo)簽庫(kù)的實(shí)現(xiàn)文件,jstl.jar和standard.jar,放在WEB-INF下面的lib子文件夾。(2)在JSP文件中要聲明標(biāo)簽庫(kù),通過(guò)tablib指

17、令進(jìn)行聲明: (3)使用標(biāo)簽: 要完成判斷,可以使用標(biāo)簽標(biāo)簽庫(kù)中的c:if標(biāo)簽。標(biāo)簽的基本格式: 條件成功要執(zhí)行的內(nèi)容 test表示測(cè)試條件,測(cè)試條件可以寫(xiě)常量,可以是表達(dá)式語(yǔ)言(EL,主要用于輸出),主要使用表達(dá)式語(yǔ)言。 例如:要判斷用戶提交的用戶名和口令是否是zhangsan。 注意:添加完標(biāo)準(zhǔn)標(biāo)簽庫(kù)之后,需要重新啟動(dòng)服務(wù)器。6、使用session保存登錄后的信息 在網(wǎng)站中設(shè)置了application session request pageContext對(duì)象保存內(nèi)存中的信息。application是網(wǎng)站所有用戶共享的存儲(chǔ)變量的位置。session是網(wǎng)站為每個(gè)訪問(wèn)網(wǎng)站的人創(chuàng)建的,每個(gè)用戶對(duì)

18、應(yīng)一個(gè)session,也是存放變量的位置。request是為每個(gè)用戶的每次請(qǐng)求設(shè)置的存儲(chǔ)信息的位置,每次訪問(wèn)會(huì)有一個(gè)request。pageContext是每次訪問(wèn)的每個(gè)頁(yè)面對(duì)應(yīng)一個(gè)。常用的session和request。多次訪問(wèn)之間要共享信息可以使用session,如果在某次訪問(wèn)的多個(gè)頁(yè)面之間共享信息使用request(例如,使用jsp:forwrad轉(zhuǎn)向的文件和當(dāng)前文件就屬于同一次請(qǐng)求)。 登錄后的用戶信息應(yīng)該放在session中。 要在這些范圍中保存信息,可以使用標(biāo)準(zhǔn)標(biāo)簽庫(kù)中的標(biāo)簽完成。 的基本語(yǔ)法格式: 要把用戶名放到session中: *第三講結(jié)束 HYPERLINK /space.

19、php?uid=10410 陽(yáng)光2008-11-15 19:57:13 第四講(參考 HYPERLINK /JavaEETeacher/archive/2008/03/11/2168471.aspx t _blank Java Web程序設(shè)計(jì)基礎(chǔ)教程第6章)1、對(duì)Servlet的理解 Servlet是一種Java類。 Servlet能夠完成與JSP相同的功能。能夠接收用戶的請(qǐng)求,能夠調(diào)用功能類的方法,可以對(duì)用戶進(jìn)行響應(yīng)。 Servlet和JSP同屬于Java EE中Web層組件。2、如何編寫(xiě)一個(gè)Servlet 假設(shè):該Servlet的功能為顯示歡迎信息。 Java文件的編寫(xiě)過(guò)程:(1)聲明包

20、(2)引入用到的其他的類 (3)類的編寫(xiě) 對(duì)于類:(1)類頭修飾符 class關(guān)鍵字 類名 繼承父類 實(shí)現(xiàn)接口 (2)類體成員變量 構(gòu)造方法 對(duì)屬性進(jìn)行操作的方法 功能類方法 對(duì)于成員變量:修飾符類型 變量名(對(duì)象名) 對(duì)于方法(不包括構(gòu)造方法):修飾符 返回值類型 方法名 參數(shù)列表 異常列表 方法體 對(duì)于方法體:變量的聲明各種運(yùn)算 調(diào)用其他的方法 返回結(jié)果 (1)聲明包,假設(shè)包名為servletpackage servlet; (2)引入用到的類,javax.servlet.* javax.servlet.http.* java.io.*import java.io.*;import jav

21、ax.servlet.*;import javax.servlet.http.*; (3)類頭的定義 訪問(wèn)控制符:public 類名:HelloServlet 繼承父類:javax.servlet.http.HttpServlet 實(shí)現(xiàn)接口:沒(méi)有要實(shí)現(xiàn)的接口public class HelloServlet extends HttpServlet (4)方法的定義 主要的方法:init方法(用于初始化) destroy方法(釋放資源) doGet或者doPost(完成主要功能) 通常主要實(shí)現(xiàn)doGet方法或者doPost方法,分別對(duì)應(yīng)客戶端的get請(qǐng)求和post請(qǐng)求。public void d

22、oGet(HttpServletRequest request,HttpServletResponse response) throws IOException,ServletException / 設(shè)置編碼方式GB2312,GBK,utf8 response.setContentType(text/html;charset=gb2312); / 得到輸出流對(duì)象 PrintWriter out = response.getWriter(); out.println(歡迎學(xué)習(xí)JSP!);public void doPost(HttpServletRequest request,HttpServl

23、etResponse response) throws IOException,ServletException doGet(request,response);3、編譯存放 需要用到j(luò)avax.servlet.*和javax.servlet.http.*,兩個(gè)包的實(shí)現(xiàn)在tomcat下面的lib中,名字為servlet-api.jar。 放在(編譯后的Servlet):WEB-INF/classes 配置path: 把C:Program FilesJavajdk1.6.0bin添加到path中,但是不能破壞原有的路徑。 配置classpath:把C:Program FilesApache So

24、ftware FoundationTomcat 6.0libservlet-api.jar;添加到classpath中。 編譯:在命令行方式下進(jìn)入到classes目錄,然后使用 javac -d . HelloServlet.java -d表示生成包的路徑,.表示在當(dāng)前位置生成。4、配置Servlet 配置文件及位置:WEB-INF下面的web.xml。 配置包括兩個(gè)方面:Servlet的聲明 以及 Servlet訪問(wèn)方式的聲明 Servlet的聲明: hello servlet.HelloServlet 其中,表示這個(gè)servlet的名字,可以隨便起。是對(duì)應(yīng)的Servlet類,應(yīng)該包含包的信

25、息。 Servlet訪問(wèn)方式的聲明: hello /hello 其中,和Servlet聲明中的用法相同,并且應(yīng)該與Servlet聲明中的名字保持一致。表示訪問(wèn)方式,決定了在客戶端如何訪問(wèn)這個(gè)Servlet。5、訪問(wèn)Servlet HYPERLINK :8080/bookstore/hello t _blank :8080/bookstore/hello6、用Servlet完成login_process.jsp的功能 login_process.jsp主要功能,判斷用戶輸入的用戶名和口令是否合法,然后根據(jù)判斷的結(jié)果選擇界面對(duì)用戶響應(yīng)。 對(duì)于JSP文件來(lái)說(shuō),優(yōu)勢(shì)在于顯示信息,login_proce

26、ss.jsp中的代碼都不是顯示信息的,主要用于控制。在Java Web應(yīng)用中存在大量的這種現(xiàn)象。是Java Web中的控制功能。主要使用Servlet完成控制。 login_process.jsp的基本功能:獲取用戶的輸入信息;進(jìn)行判斷;轉(zhuǎn)向。 如果使用Servlet完成,功能代碼應(yīng)該寫(xiě)在doGet或者doPost方法中。對(duì)應(yīng)上面的3個(gè)功能分別實(shí)現(xiàn)如下: 獲取用戶信息:用戶信息存儲(chǔ)在doGet或者doPost方法的第一個(gè)參數(shù)中,所以從參數(shù)中獲取,獲取的代碼為 String username = request.getParameter(username); String userpass =

27、request.getParameter(userpass); 判斷: if( username.equals(zhangsan) & userpass.equals(zhangsan) ) 轉(zhuǎn)向響應(yīng)界面: 第一種方式:response.sendRedirect(index.jsp); 第二種方式:與功能相同 RequestDispatcher rd = request.getRequestDispatcher(index.jsp);/ 參數(shù)是要轉(zhuǎn)向的頁(yè)面 rd.forward(request,response); / 完成跳轉(zhuǎn)LoginProcessServlet.java代碼如下:pack

28、age servlet;import java.io.*;import javax.servlet.*;import javax.servlet.http.*;public class LoginProcessServlet extends HttpServletpublic void doGet(HttpServletRequest request,HttpServletResponse response) throws IOException,ServletException / 獲取用戶輸入的信息 String username = request.getParameter(userna

29、me); String userpass = request.getParameter(userpass); if( username.equals(zhangsan) & userpass.equals(zhangsan) ) RequestDispatcher rd = request.getRequestDispatcher(success.jsp);/ 跳轉(zhuǎn)到成功的頁(yè)面 rd.forward(request,response); / 完成跳轉(zhuǎn) else RequestDispatcher rd = request.getRequestDispatcher(index1.jsp);/ 跳

30、轉(zhuǎn)到登錄頁(yè)面 rd.forward(request,response); / 完成跳轉(zhuǎn) public void doPost(HttpServletRequest request,HttpServletResponse response) throws IOException,ServletException doGet(request,response);配置文件中添加如下代碼: login_process servlet.LoginProcessServlet login_process /login_process 修改index1.jsp的代碼(修改form所在行),修改前:修改后:*

31、第四講結(jié)束 HYPERLINK /space.php?uid=10410 陽(yáng)光2008-11-15 19:58:33 第五講(參考Java Web程序設(shè)計(jì)基礎(chǔ)教程第5、7章)1、JavaBean JavaBean是使用Java語(yǔ)言編寫(xiě)的組件。組件是組成一個(gè)大的系統(tǒng)的一部分,并且組件能夠完成特定的功能,能夠共享。 可以認(rèn)為JavaBean是Java類,但是具有特定的功能,并且這些功能是共享的。例如,連接數(shù)據(jù)庫(kù)的功能可以封裝單獨(dú)的Java類,常用處理方法可以封裝成JavaBean。2、早期的JSP中提供的對(duì)JavaBean的支持 標(biāo)簽用于定義JavaBean的對(duì)象;標(biāo)簽用于設(shè)置JavaBean的屬

32、性;用于獲取并輸出JavaBean的屬性。 因?yàn)镴ava Web中,很少在JSP中直接訪問(wèn)JavaBean,所以實(shí)際上這些標(biāo)簽幾乎沒(méi)有用?,F(xiàn)在主要在Servlet中訪問(wèn)JavaBean。3、JavaBean的編寫(xiě)和用法 例:以用戶信息驗(yàn)證為例介紹JavaBean的編寫(xiě)。 1)聲明包package bean; 2)引入相應(yīng)的類或者包import java.sql.*;/ java.sql是訪問(wèn)數(shù)據(jù)庫(kù)所需要的包 3)類頭的定義public class UserBean 4)成員變量private String username;private String userpass; 5)構(gòu)造方法/ Ja

33、vaBean要求應(yīng)該提供一個(gè)無(wú)參數(shù)的構(gòu)造方法 public UserBean() public UserBean(String username,String userpass) this.username = username; this.userpass = userpass; 6)對(duì)屬性進(jìn)行操作的方法 包括獲取屬性值的方法和對(duì)屬性進(jìn)行賦值的方法。 命名方法: 對(duì)于普通屬性來(lái)說(shuō),如果屬性為a,應(yīng)該提供setA(屬性類型 a)方法和getA()方法。 對(duì)于布爾類型的屬性來(lái)說(shuō),應(yīng)該提供類似于isA()方法。 public void setUsername(String username) th

34、is.username = username; public String getUsername() return username; public void setUserpass(String userpass) this.userpass = userpass; public String getUserpass() return userpass; 7)功能類方法 該JavaBean完成的功能是判斷用戶信息是否合法,需要在JavaBean中編寫(xiě)相應(yīng)的方法。 public boolean login() return username.equals(userpass); 8)編譯Jav

35、aBean 9)部署 所有的Java類都應(yīng)該放在WEB-INF下面的classes下面,所以該JavaBean也應(yīng)該放在這個(gè)地方。4、使用JDBC的準(zhǔn)備工作 JDBC是Java DataBase Connectivity的縮寫(xiě),是一組標(biāo)準(zhǔn)的接口,用于完成Java應(yīng)用與各種數(shù)據(jù)庫(kù)之間的交互。 要使用JDBC需要做哪些準(zhǔn)備工作? 1)創(chuàng)建數(shù)據(jù)庫(kù) 2)得到JDBC驅(qū)動(dòng)程序,驅(qū)動(dòng)程序是完成具體的交互過(guò)程的,每種數(shù)據(jù)庫(kù)有自己特定的驅(qū)動(dòng)程序,從數(shù)據(jù)庫(kù)管理系統(tǒng)的提供商的網(wǎng)站下載 3)要知道數(shù)據(jù)庫(kù)的相關(guān)信息:JDBC驅(qū)動(dòng)程序的名字、數(shù)據(jù)庫(kù)的位置、數(shù)據(jù)庫(kù)的端口、用戶名和口令、url的格式(建立連接的時(shí)候用) 注

36、意:我們使用JDBC-ODBC橋的方式連接數(shù)據(jù)庫(kù)。JDBC-ODBC橋是一種類型的驅(qū)動(dòng)程序,共有4種類型的驅(qū)動(dòng)程序,JDBC-ODBC橋是建立在ODBC數(shù)據(jù)源基礎(chǔ)上的。驅(qū)動(dòng)是JDK中附帶的,不用下載。5、創(chuàng)建數(shù)據(jù)庫(kù)及測(cè)試數(shù)據(jù)create table usertable( username varchar(10) primary key, userpass varchar(10)insert into usertable values(lisi,lisi);insert into usertable values(zhangsan,zhangsan);6、創(chuàng)建ODBC數(shù)據(jù)源 在開(kāi)始-設(shè)置-控制面

37、板-管理工具-數(shù)據(jù)源(ODBC)設(shè)置ODBC數(shù)據(jù)源的名字為bookstore7、修改login方法,通過(guò)數(shù)據(jù)庫(kù)進(jìn)行驗(yàn)證 1)使用JDBC連接數(shù)據(jù)庫(kù)的基本過(guò)程 加載驅(qū)動(dòng)程序; 建立與數(shù)據(jù)庫(kù)之間的連接; 創(chuàng)建一個(gè)執(zhí)行SQL語(yǔ)句的語(yǔ)句對(duì)象; 編寫(xiě)要執(zhí)行的SQL語(yǔ)句; 使用語(yǔ)句對(duì)象執(zhí)行SQL語(yǔ)句; 如果有結(jié)果,需要對(duì)結(jié)果進(jìn)行處理; 關(guān)閉相關(guān)對(duì)象; 注意:異常處理。 2)修改login方法 public boolean login() throws Exception / return username.equals(userpass); / 第一步:加載驅(qū)動(dòng)程序,如果使用其它的驅(qū)動(dòng)程序,寫(xiě)出相應(yīng)的名字

38、即可 Class.forName(sun.jdbc.odbc.JdbcOdbcDriver); / 第二步:建立連接,第一個(gè)參數(shù)是url(定位數(shù)據(jù)庫(kù)),第二個(gè)參數(shù)是用戶名,第三個(gè)參數(shù)是口令 Connection con = DriverManager.getConnection(jdbcdbc:bookstore,);/ bookstore是所創(chuàng)建的ODBC數(shù)據(jù)源的名字 / 第三步:創(chuàng)建SQL語(yǔ)句 String sql = select * from usertable where username=? and userpass=?; / 第四步:創(chuàng)建語(yǔ)句對(duì)象,用于執(zhí)行SQL語(yǔ)句的 Prepa

39、redStatement stmt = con.prepareStatement(sql); / 對(duì)變量賦值,第一個(gè)參數(shù)表示變量的序號(hào)(第幾個(gè)問(wèn)號(hào)),第二個(gè)參數(shù)表示所賦的值 stmt.setString(1,username); stmt.setString(2,userpass); / 第五步:執(zhí)行SQL語(yǔ)句,因?yàn)橛胁樵兘Y(jié)果,所以使用executeQuery方法,結(jié)果保存在rs中 ResultSet rs = stmt.executeQuery(); /rs相當(dāng)于一個(gè)表格,有若干行、若干列組成,指針指向第一條記錄的前面 / 第六步:對(duì)結(jié)果進(jìn)行處理,使用next方法進(jìn)行遍歷,使用get方法得到

40、當(dāng)前行的列 boolean b = rs.next(); / 第七步:關(guān)閉相關(guān)對(duì)象 rs.close(); stmt.close(); con.close(); return b; 3)修改LoginProcessServlet.java修改后的代碼為:package servlet;import java.io.*;import javax.servlet.*;import javax.servlet.http.*;import bean.*;public class LoginProcessServlet extends HttpServletpublic void doGet(HttpS

41、ervletRequest request,HttpServletResponse response) throws IOException,ServletException / 獲取用戶輸入的信息 String username = request.getParameter(username); String userpass = request.getParameter(userpass); / 調(diào)用JavaBean,創(chuàng)建對(duì)象、初始化、然后調(diào)用方法 UserBean user = new UserBean(); user.setUsername(username); user.setUse

42、rpass(userpass); boolean b = false; try b = user.login(); catch(Exception e) / 當(dāng)產(chǎn)生異常的時(shí)候,把異常信息輸出在界面上 / 設(shè)置編碼方式 response.setContentType(text/html;charset=gb2312); / 得到輸出流對(duì)象 PrintWriter out = response.getWriter(); out.println(e.toString(); return; / 轉(zhuǎn)向響應(yīng)界面 if(b) RequestDispatcher rd = request.getRequest

43、Dispatcher(success.jsp);/ 跳轉(zhuǎn)到成功的頁(yè)面 rd.forward(request,response); / 完成跳轉(zhuǎn) else RequestDispatcher rd = request.getRequestDispatcher(index1.jsp);/ 跳轉(zhuǎn)到登錄頁(yè)面 rd.forward(request,response); / 完成跳轉(zhuǎn) public void doPost(HttpServletRequest request,HttpServletResponse response) throws IOException,ServletException

44、doGet(request,response);找到: boolean b = user.login();修改為: boolean b = false; try b = user.login(); catch(Exception e) / 當(dāng)產(chǎn)生異常的時(shí)候,把異常信息輸出在界面上 / 設(shè)置編碼方式 response.setContentType(text/html;charset=gb2312); / 得到輸出流對(duì)象 PrintWriter out = response.getWriter(); out.println(e.toString(); return; HYPERLINK /spac

45、e.php?uid=10410 陽(yáng)光2008-11-15 19:59:34 第六講(參考Java Web程序設(shè)計(jì)基礎(chǔ)教程第6、9章)1、分析登錄功能 界面:登錄界面index1.jsp;登錄成功的界面login_success.jsp。 功能:UserBean的login方法完成登錄的判斷。 Servlet:LoginServlet.java (1)接收用戶輸入的用戶名和口令(2)調(diào)用UserBean的login方法進(jìn)行判斷(3)根據(jù)方法的返回值選擇界面響應(yīng)。2、MVC模式 M表示模型,主要表示系統(tǒng)中的功能處理部分。例如,上面的UserBean就是一個(gè)模型,描述用戶信息以及相關(guān)功能。 V表示視

46、圖,表示系統(tǒng)中與人進(jìn)行交互的部分。例如,上面的index1.jsp和login_success.jsp。 C表示控制器,建立模型與視圖之間的關(guān)聯(lián)關(guān)系。例如,上面的LoginServlet.java。 輸入界面直接調(diào)用控制器,控制器接收用戶在輸入界面上輸入的信息,控制器把信息傳遞給模型,調(diào)用模型的方法,方法會(huì)給控制器返回一個(gè)值,控制器根據(jù)這個(gè)值選擇輸出界面對(duì)用戶響應(yīng)。 MVC模式把系統(tǒng)的每一個(gè)功能都分解成這個(gè)3個(gè)部分。然后分別實(shí)現(xiàn)。3、采用MVC模式實(shí)現(xiàn)注冊(cè)功能 一般先考慮V,包括輸入界面和輸出界面,對(duì)于注冊(cè)功能來(lái)說(shuō),輸入是注冊(cè)界面,輸出是注冊(cè)成功或者失敗的界面,通常使用JSP文件。 接下來(lái)考慮

47、M,功能如何實(shí)現(xiàn),對(duì)于注冊(cè)功能來(lái)說(shuō),需要把用戶提交的信息寫(xiě)到數(shù)據(jù)庫(kù)中。需要在UserBean中編寫(xiě)添加用戶的方法。 考慮C,如何協(xié)調(diào)M和V。需要編寫(xiě)Servlet,在doGet或者doPost方法中主要完成:接收輸入;調(diào)用UserBean的方法;選擇界面響應(yīng)。4、創(chuàng)建注冊(cè)用的表create table usertable2( username varchar(10) primary key, userpass varchar(10), sex char(2), fav varchar(20), degree varchar(8), comment varchar(100), email var

48、char(30)5、V部分 采用原來(lái)的register.jsp和success.jsp。6、M部分 在UserBean中添加方法,add方法。方法代碼如下: public boolean add() / 定義變量 Connection con = null; PreparedStatement stmt = null; String driverClass = sun.jdbc.odbc.JdbcOdbcDriver; String url = jdbcdbc:bookstore; String sql = insert into usertable2 values(?,?,?,?,?,?,?

49、); boolean success = true; try / 第一步:加載驅(qū)動(dòng) Class.forName(driverClass); / 第二步:建立連接 con = DriverManager.getConnection(url,); / 第三步:創(chuàng)建語(yǔ)句對(duì)象 stmt = con.prepareStatement(sql); / 第四步:對(duì)SQL語(yǔ)句中參數(shù)賦值 stmt.setString(1,username); stmt.setString(2,userpass); stmt.setString(3,sex); stmt.setString(4,fav); stmt.setStr

50、ing(5,degree); stmt.setString(6,comment); stmt.setString(7,email); / 第五步:執(zhí)行SQL語(yǔ)句 int n = stmt.executeUpdate(); / 執(zhí)行沒(méi)有結(jié)果集返回的SQL語(yǔ)句使用executeUpdate方法,方法的返回值是整數(shù),表示操作成功的記錄數(shù) if(n=0) success = false; catch(Exception e) success = false; System.out.println(e.getMessage(); finally try stmt.close(); catch(Excep

51、tion ee) try con.close(); catch(Exception ee) return success; 7、C部分 編寫(xiě)Servlet,完成添加的控制??刂破鞯拇a如下:package servlet;import java.io.*;import javax.servlet.*;import javax.servlet.http.*;import bean.*;public class AddUserServlet extends HttpServletpublic void doGet(HttpServletRequest request,HttpServletResp

52、onse response) throws IOException,ServletException / 請(qǐng)求中采用的編碼方式是8859_1,當(dāng)前的編碼是gb2312,需要轉(zhuǎn)換 request.setCharacterEncoding(gb2312); / 第一句話:獲取用戶輸入的信息 String username = request.getParameter(username); String userpass1 = request.getParameter(userpass1); String sex = request.getParameter(sex); / 因?yàn)樵试S多選,所以結(jié)果有

53、可能是多個(gè),應(yīng)該使用數(shù)組接收。 String fav = request.getParameterValues(fav); String favStr = ; for(int i=0;ifav.length;i+) favStr += fav+; String degree = request.getParameter(degree); String comment = request.getParameter(content); String email = request.getParameter(email); / 第二句話:調(diào)用JavaBean,創(chuàng)建對(duì)象、初始化、然后調(diào)用方法 User

54、Bean user = new UserBean(); user.setUsername(username); user.setUserpass(userpass1); user.setSex(sex); user.setFav(favStr); user.setDegree(degree); user.setEmail(email); user.setComment(comment); boolean b = user.add(); / 第三句話:向頁(yè)面?zhèn)鬟f信息 if(b) request.setAttribute(info,注冊(cè)成功!); else request.setAttribute

55、(info,注冊(cè)失敗!); / 第四句話:轉(zhuǎn)向響應(yīng)界面 RequestDispatcher rd = request.getRequestDispatcher(success.jsp); rd.forward(request,response); / 完成跳轉(zhuǎn)public void doPost(HttpServletRequest request,HttpServletResponse response) throws IOException,ServletException doGet(request,response); 之后對(duì)Servlet進(jìn)行配置,在web.xml中添加如下代碼: a

56、ddUser servlet.AddUserServlet addUser /addUser 需要修改register.jsp中的form的屬性action: 8、測(cè)試 編譯、啟動(dòng)服務(wù)器,然后運(yùn)行。 HYPERLINK /space.php?uid=10410 陽(yáng)光2008-11-15 20:00:34 第七講(參考Java Web程序設(shè)計(jì)基礎(chǔ)教程第7章)1、共享連接數(shù)據(jù)庫(kù)的代碼 連接數(shù)據(jù)庫(kù)的基本過(guò)程: 1)加載驅(qū)動(dòng)程序; 2)創(chuàng)建連接; 3)編寫(xiě)SQL語(yǔ)句; 4)創(chuàng)建語(yǔ)句對(duì)象; 5)對(duì)參數(shù)賦值; 6)執(zhí)行SQL 語(yǔ)句; 7)對(duì)結(jié)果進(jìn)行處理; 8)關(guān)閉對(duì)象。 對(duì)于不同的SQL的執(zhí)行,不同的地方

57、: SQL語(yǔ)句; 參數(shù); 結(jié)果的處理方式; 提取相同部分分別編寫(xiě)成方法: Connection con = null; PreparedStatement stmt = null; ResultSet rs = null; String driverClass = sun.jdbc.odbc.JdbcOdbcDriver; String url = jdbcdbc:bookstore; / 完成連接的創(chuàng)建,相當(dāng)于第1.2步 public Connection getConnection() throws Exception Class.forName(driverClass); / 加載驅(qū)動(dòng)程

58、序 if(con = null) con = DriverManager.getConnection(url,); return con; / 創(chuàng)建語(yǔ)句對(duì)象 public PreparedStatement createStatement(String sql) throws Exception stmt = getConnection().prepareStatement(sql); return stmt; / 執(zhí)行有結(jié)果集返回的方法 public ResultSet executeQuery() throws Exception rs = stmt.executeQuery(); ret

59、urn rs; / 執(zhí)行沒(méi)有結(jié)果集返回的方法 public int executeUpdate() throws Exception return stmt.executeUpdate(); / 關(guān)閉對(duì)象 public void close() if(rs != null) try rs.close();catch(Exception e) if(stmt != null) try stmt.close();catch(Exception e) if(con != null) try con.close();catch(Exception e) 2、修改上一次課的添加功能,使用這些共享方法 S

60、tring sql = insert into usertable2 values(?,?,?,?,?,?,?); boolean success = true; try / 創(chuàng)建語(yǔ)句對(duì)象 createStatement(sql); / 對(duì)SQL語(yǔ)句中參數(shù)賦值 stmt.setString(1,username); stmt.setString(2,userpass); stmt.setString(3,sex); stmt.setString(4,fav); stmt.setString(5,degree); stmt.setString(6,comment); stmt.setString

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論