




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、JSP快速入門教程第一講(參考Java Web程序設(shè)計基礎(chǔ)教程第1章)1 JSP 和 Java的關(guān)系 一般Java指的標注版 Java SE 另外兩個版本:Java EE 和 Java ME JSP屬于Java EE的一部分。 Java EE: 組件:Web層組件(JSPServlet)業(yè)務(wù)層組件(EJB) 服務(wù):JNDI JDBC RMI JAAS JavaMail等等 Java EE包括2個體系:標準(上面介紹的)流行(StrutsHibernateSpring) 兩套體系都是JSPServlet為基礎(chǔ)。2 JSP會涉及哪些內(nèi)容 JSP語法基礎(chǔ)(JavaHTML): 對于Java,需要掌握
2、Java的基本語法(類定義 對象定義和使用 常用類庫java.lang.*,java.util.*) 對于HTML,主要表單元素(輸入)表格(顯示信息)基本HTML JSTL,標準標簽庫,用于輸出和控制 EL,通常與JSTL一起使用,主要用于輸出 Servlet,幾乎所有介紹JSP的書和課程都包含Servlet,因為JSP實際上指的是Java Web開發(fā)。用Servlet主要是控制器。 JDBC,對數(shù)據(jù)庫的訪問。 JavaBean(Java類)3 JSP的運行環(huán)境 JDK 服務(wù)器:我們用Tomcat。其它的服務(wù)器:IBM Websphere + BEA WebLogic+ JBoss(免費的)
3、 + GlassFish(新出的Java EE 5服務(wù)器)4 JSP的開發(fā)環(huán)境 頁面:DreamWeaver開發(fā)頁面 代碼:本文編輯器 Eclipse NetBeans JBuilder 注:我們采用記事本。5 Tomcat文件夾 webapps主要各個應(yīng)用,編寫的每個應(yīng)用(網(wǎng)站)都可以放在這個位置 bin這個是啟動服務(wù)器的相關(guān)文件,tomcat6用于命令行方式的啟動,tomcat6w用于windows方式的啟動 conf用于配置,常用的是server.xml 另外一個是web.xml work 存放臨時文件 logs系統(tǒng)運行時候的日志信息6 實例:hello.jsp 創(chuàng)建一個應(yīng)用,實際上需要
4、在webapps中創(chuàng)建文件夾,bookstore,相當于應(yīng)用的名字 文件夾中要創(chuàng)建一個子文件夾WEB-INF,這個每個應(yīng)用web應(yīng)用都需要的。 在WEB-INF中需要web.xml,是web應(yīng)用的配置文件,還應(yīng)該有classes和lib子文件夾(存放類文件) JSP文件和HTML文件直接放在bookstore下面。 hello.jsp文件內(nèi)容如下: 第一個JSP程序 Hello,晚上好! 先啟動服務(wù)器: 訪問程序: HYPERLINK :8080/bookstore/hello.jsp t _blank :8080/bookstore/hello.jsp http表示協(xié)議 表示主機IP地址,也
5、可以寫主機名字 8080表示服務(wù)的端口,上網(wǎng)的時候不用輸入端口,因為采用了默認的端口,默認端口80。 bookstore表示應(yīng)用,是應(yīng)用的名字 hello.jsp就是資源7 JSP的運行原理 過程: 首先啟動服務(wù)器,并且要保證應(yīng)用在服務(wù)器上(把應(yīng)用放在webapps下面,會自動加載) 在客戶端通過瀏覽器發(fā)送請求(在地址欄中輸入地址) 服務(wù)器接收到請求之后,查找有沒有這個文件對應(yīng)的Java文件的對象。如果沒有這個對象,需要創(chuàng)建(先把JSP文件轉(zhuǎn)換成Java文件, 編譯成.class文件,加載類并創(chuàng)建對象),然后調(diào)用對象的相應(yīng)方法,方法完成對用戶的響應(yīng),通常是輸出的html代碼) 客戶端接收到的是
6、html代碼,瀏覽器解析這個代碼生成頁面。8 表格的語法 開始標志: 結(jié)束標志: 中間是行,每行是一個 每行之間是列,每一列對應(yīng) 之間的內(nèi)容就是每個表格中的信息*第一講結(jié)束 HYPERLINK /space.php?uid=10410 陽光2008-11-15 19:54:57 第二講(參考Java Web程序設(shè)計基礎(chǔ)教程第2章)1、form 只要是涉及向服務(wù)器提交信息,都應(yīng)該使用form。 基本語法結(jié)構(gòu): 各種表單元素 action屬性決定的目標文件來對用戶提交的信息進行處理。2、常用的表單元素 單行文本框:用于輸入少量的信息。 基本語法格式: type=text就說明這是單行文本框; na
7、me指出文本框的名字,最好不要用漢字,最好使用有意義的名字; value指出默認值,如果沒有默認值,可以不要value屬性,value屬性經(jīng)常在修改的時候使用。 注意:如果有格式要求,要明確的告訴用戶。 密碼框:用于輸入密碼。 基本的語法格式: 注意:設(shè)置密碼的時候,應(yīng)該使用確認密碼,應(yīng)該有兩個密碼框。 提交按鈕:當點擊它的時候,會把輸入的信息提交給服務(wù)器。 基本語法格式: type應(yīng)該為submit,value是顯示在按鈕上面的信息。 復(fù)位按鈕:當點擊它的時候,會把各個表單元素的值恢復(fù)到默認值。 基本語法格式: 普通按鈕:也可以完成提交,還可以完成方法的調(diào)用。 基本語法格式: 單選按鈕:通用
8、用于在多個選項中選擇一個。 基本語法格式: 這個表示一個單選按鈕,并且僅僅是一個按鈕。 例,選擇性別: 男 女 如果希望在多個選項中選擇一個(有互斥性),必須讓他們的名字一致。 復(fù)選框:用于多選。 基本的語法格式: 顯示給用戶的信息與提交給服務(wù)器的信息沒有關(guān)系。 如果希望多個選項是一組,應(yīng)該使用相同的名字。 下拉列表:用于選擇,可以單選,也可以多選。 基本語法格式: 1 2 . 每個選項使用一個option,使用value屬性指出該選項的值,在和之間是顯示給用戶的值。 文本域:用于輸入大量的信息。 基本語法格式: 默認值 要為這個文本域賦默認值,需要把值放在開始標志和結(jié)束標志之間,而不是使用v
9、alue屬性。3、完成輸入的時候應(yīng)該注意的問題 對格式的要求必須明確,包括長度、數(shù)字、日期、email、電話、必添。 能夠從系統(tǒng)中獲取的信息不要讓用戶提供,例如當前時間。 能夠選擇的信息不要讓用戶輸入。 按照信息的重要程度安排表單元素在界面中的位置。4、對用戶輸入信息進行驗證 要用JavaScript,使用下面的標記: /JavaScript代碼 要寫方法 function check() 方法可以不用定義返回值,但是可以有返回值 獲取用戶輸入的值: document.form1.username.value document表示當前文檔,form1表示表單的名字,username表示該表單中
10、表單元素的名字,value表示得到值 把表單提交與方法關(guān)聯(lián):可以使用表單的onSubmit事件。 例: function check() username = document.form1.username.value; if(username.length8) alert(用戶名長度不合適!); return false; else return true; 使用button的onClick事件進行驗證: 首先要把提交按鈕修改成普通按鈕; 在普通按鈕上增加事件:onClick=javascript:check() 在驗證成功的時候,提交表單:document.form1.submit();*
11、第二講結(jié)束 HYPERLINK /space.php?uid=10410 陽光2008-11-15 19:55:56 第三講(參考 HYPERLINK /JavaEETeacher/archive/2008/03/11/2168471.aspx t _blank Java Web程序設(shè)計基礎(chǔ)教程第3.4章)1、include指令 作用:把多個文件中需要共享的代碼放在單獨的文件中,然后在需要的時候使用該指令引入這個文件。典型的應(yīng)用,把網(wǎng)站的頭部和版權(quán)信息放在單獨的文件中,在其他文件中包含這兩部分。 基本的語法格式: file屬性指出目標文件。 例:把index.jsp和register.jsp中
12、的共同部分做成單獨的文件header.jsp(后綴名不一定是.jsp),然后在index.jsp和register.jsp中調(diào)用。 header.jsp中的內(nèi)容如下: 電子書店 注冊 最新圖書 最暢銷圖書 查詢圖書 修改密碼 查詢訂單購物車 在index.jsp中引入header.jsp的代碼: 用戶名: 口令: 歡迎光臨我們的書店! 運行過程:在轉(zhuǎn)換的時候,當遇到include指令的時候會把include指令指向的目標文件的內(nèi)容拷貝到當前位置,替換include指令,這樣最后形成一個文件。然后才編譯形成class文件,然后運行。2、標簽 我們使用登錄功能的模擬來介紹。 首先,使用Java代碼
13、完成判斷,使用完成跳轉(zhuǎn),代碼: 注意:不管跳轉(zhuǎn)到success.jsp還是index.jsp,地址欄都是處理文件的名字。 的語法格式: page屬性指出轉(zhuǎn)向的目標文件。最后的結(jié)束符為“/”,斜杠不能省略。 另外一個可以完成跳轉(zhuǎn)的方式是采用response.sendRedirect()。response和request一樣,都是內(nèi)容對象,可以直接訪問。修改上面的文件: 和response.sendRedirect的運行效果相同(針對上面的這個例子)。 相同點:都是轉(zhuǎn)向目標文件。 不同點:地址欄中顯示的內(nèi)容是不相同的,如果使用,地址欄顯示當前文件的名字,如果使用response,地址欄顯示的是轉(zhuǎn)向
14、后的文件的名字。執(zhí)行過程不同:使用相當于一次請求,使用response相當于兩次請求。 使用的情況: index.jsp中輸入用戶名和口令,提交給login_process.jsp,服務(wù)器保存用戶的輸入信息,使用轉(zhuǎn)向success.jsp之后,success.jsp還可以訪問用戶輸入的信息,因為輸入同一次請求。 使用response的請求: index.jsp中輸入用戶名和口令,提交給login_process.jsp,服務(wù)器保存用戶的輸入信息,使用response的sendRedirect方法相當于重新向服務(wù)器發(fā)送一次請求,這樣上次的請求內(nèi)容(用戶名和口令)就不能共享了。3、標簽 把inde
15、x.jsp中替換成 從運行效果上相同。 不同點:1、兩個文件,目標文件是單獨運行的,當前文件運行到標簽的時候,轉(zhuǎn)向執(zhí)行標簽所指向的目標文件,執(zhí)行之后返回繼續(xù)標簽之后的內(nèi)容。 2、指令是在編譯(轉(zhuǎn)換)的時候使用,在運行的時候起作用。 程序中如何選用:要導(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中的替換成: 運行效果是相同的。但是有不同點,修改代碼如下:處理文件的前半部分 處理文件的后半部分兩次運行結(jié)果
16、不相同。分析原因: :先執(zhí)行標簽之前的內(nèi)容,遇到標簽的時候轉(zhuǎn)向執(zhí)行目標文件,執(zhí)行完不返回,顯示的內(nèi)容為目標文件的內(nèi)容,標簽之前的內(nèi)容執(zhí)行,但是不顯示。標簽之后的內(nèi)容不會執(zhí)行,當然更不會顯示。 :先執(zhí)行標簽之前的內(nèi)容,遇到標簽轉(zhuǎn)向執(zhí)行目標文件,執(zhí)行完返回,繼續(xù)執(zhí)行標簽之后的內(nèi)容,顯示的內(nèi)容為:標簽之前的內(nèi)容+目標文件的內(nèi)容+標簽之后的內(nèi)容,標簽的前后都執(zhí)行,都顯示。5、使用標準標簽庫(JSTL)完成登錄的判斷過程 如何使用標簽標簽庫:(1)得到標簽庫的實現(xiàn)文件,jstl.jar和standard.jar,放在WEB-INF下面的lib子文件夾。(2)在JSP文件中要聲明標簽庫,通過tablib指
17、令進行聲明: (3)使用標簽: 要完成判斷,可以使用標簽標簽庫中的c:if標簽。標簽的基本格式: 條件成功要執(zhí)行的內(nèi)容 test表示測試條件,測試條件可以寫常量,可以是表達式語言(EL,主要用于輸出),主要使用表達式語言。 例如:要判斷用戶提交的用戶名和口令是否是zhangsan。 注意:添加完標準標簽庫之后,需要重新啟動服務(wù)器。6、使用session保存登錄后的信息 在網(wǎng)站中設(shè)置了application session request pageContext對象保存內(nèi)存中的信息。application是網(wǎng)站所有用戶共享的存儲變量的位置。session是網(wǎng)站為每個訪問網(wǎng)站的人創(chuàng)建的,每個用戶對
18、應(yīng)一個session,也是存放變量的位置。request是為每個用戶的每次請求設(shè)置的存儲信息的位置,每次訪問會有一個request。pageContext是每次訪問的每個頁面對應(yīng)一個。常用的session和request。多次訪問之間要共享信息可以使用session,如果在某次訪問的多個頁面之間共享信息使用request(例如,使用jsp:forwrad轉(zhuǎn)向的文件和當前文件就屬于同一次請求)。 登錄后的用戶信息應(yīng)該放在session中。 要在這些范圍中保存信息,可以使用標準標簽庫中的標簽完成。 的基本語法格式: 要把用戶名放到session中: *第三講結(jié)束 HYPERLINK /space.
19、php?uid=10410 陽光2008-11-15 19:57:13 第四講(參考 HYPERLINK /JavaEETeacher/archive/2008/03/11/2168471.aspx t _blank Java Web程序設(shè)計基礎(chǔ)教程第6章)1、對Servlet的理解 Servlet是一種Java類。 Servlet能夠完成與JSP相同的功能。能夠接收用戶的請求,能夠調(diào)用功能類的方法,可以對用戶進行響應(yīng)。 Servlet和JSP同屬于Java EE中Web層組件。2、如何編寫一個Servlet 假設(shè):該Servlet的功能為顯示歡迎信息。 Java文件的編寫過程:(1)聲明包
20、(2)引入用到的其他的類 (3)類的編寫 對于類:(1)類頭修飾符 class關(guān)鍵字 類名 繼承父類 實現(xiàn)接口 (2)類體成員變量 構(gòu)造方法 對屬性進行操作的方法 功能類方法 對于成員變量:修飾符類型 變量名(對象名) 對于方法(不包括構(gòu)造方法):修飾符 返回值類型 方法名 參數(shù)列表 異常列表 方法體 對于方法體:變量的聲明各種運算 調(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)類頭的定義 訪問控制符:public 類名:HelloServlet 繼承父類:javax.servlet.http.HttpServlet 實現(xiàn)接口:沒有要實現(xiàn)的接口public class HelloServlet extends HttpServlet (4)方法的定義 主要的方法:init方法(用于初始化) destroy方法(釋放資源) doGet或者doPost(完成主要功能) 通常主要實現(xiàn)doGet方法或者doPost方法,分別對應(yīng)客戶端的get請求和post請求。public void d
22、oGet(HttpServletRequest request,HttpServletResponse response) throws IOException,ServletException / 設(shè)置編碼方式GB2312,GBK,utf8 response.setContentType(text/html;charset=gb2312); / 得到輸出流對象 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.*,兩個包的實現(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中。 編譯:在命令行方式下進入到classes目錄,然后使用 javac -d . HelloServlet.java -d表示生成包的路徑,.表示在當前位置生成。4、配置Servlet 配置文件及位置:WEB-INF下面的web.xml。 配置包括兩個方面:Servlet的聲明 以及 Servlet訪問方式的聲明 Servlet的聲明: hello servlet.HelloServlet 其中,表示這個servlet的名字,可以隨便起。是對應(yīng)的Servlet類,應(yīng)該包含包的信
25、息。 Servlet訪問方式的聲明: hello /hello 其中,和Servlet聲明中的用法相同,并且應(yīng)該與Servlet聲明中的名字保持一致。表示訪問方式,決定了在客戶端如何訪問這個Servlet。5、訪問Servlet HYPERLINK :8080/bookstore/hello t _blank :8080/bookstore/hello6、用Servlet完成login_process.jsp的功能 login_process.jsp主要功能,判斷用戶輸入的用戶名和口令是否合法,然后根據(jù)判斷的結(jié)果選擇界面對用戶響應(yīng)。 對于JSP文件來說,優(yōu)勢在于顯示信息,login_proce
26、ss.jsp中的代碼都不是顯示信息的,主要用于控制。在Java Web應(yīng)用中存在大量的這種現(xiàn)象。是Java Web中的控制功能。主要使用Servlet完成控制。 login_process.jsp的基本功能:獲取用戶的輸入信息;進行判斷;轉(zhuǎn)向。 如果使用Servlet完成,功能代碼應(yīng)該寫在doGet或者doPost方法中。對應(yīng)上面的3個功能分別實現(xiàn)如下: 獲取用戶信息:用戶信息存儲在doGet或者doPost方法的第一個參數(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)向的頁面 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)到成功的頁面 rd.forward(request,response); / 完成跳轉(zhuǎn) else RequestDispatcher rd = request.getRequestDispatcher(index1.jsp);/ 跳
30、轉(zhuǎn)到登錄頁面 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 陽光2008-11-15 19:58:33 第五講(參考Java Web程序設(shè)計基礎(chǔ)教程第5、7章)1、JavaBean JavaBean是使用Java語言編寫的組件。組件是組成一個大的系統(tǒng)的一部分,并且組件能夠完成特定的功能,能夠共享。 可以認為JavaBean是Java類,但是具有特定的功能,并且這些功能是共享的。例如,連接數(shù)據(jù)庫的功能可以封裝單獨的Java類,常用處理方法可以封裝成JavaBean。2、早期的JSP中提供的對JavaBean的支持 標簽用于定義JavaBean的對象;標簽用于設(shè)置JavaBean的屬
32、性;用于獲取并輸出JavaBean的屬性。 因為Java Web中,很少在JSP中直接訪問JavaBean,所以實際上這些標簽幾乎沒有用?,F(xiàn)在主要在Servlet中訪問JavaBean。3、JavaBean的編寫和用法 例:以用戶信息驗證為例介紹JavaBean的編寫。 1)聲明包package bean; 2)引入相應(yīng)的類或者包import java.sql.*;/ java.sql是訪問數(shù)據(jù)庫所需要的包 3)類頭的定義public class UserBean 4)成員變量private String username;private String userpass; 5)構(gòu)造方法/ Ja
33、vaBean要求應(yīng)該提供一個無參數(shù)的構(gòu)造方法 public UserBean() public UserBean(String username,String userpass) this.username = username; this.userpass = userpass; 6)對屬性進行操作的方法 包括獲取屬性值的方法和對屬性進行賦值的方法。 命名方法: 對于普通屬性來說,如果屬性為a,應(yīng)該提供setA(屬性類型 a)方法和getA()方法。 對于布爾類型的屬性來說,應(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中編寫相應(yīng)的方法。 public boolean login() return username.equals(userpass); 8)編譯Jav
35、aBean 9)部署 所有的Java類都應(yīng)該放在WEB-INF下面的classes下面,所以該JavaBean也應(yīng)該放在這個地方。4、使用JDBC的準備工作 JDBC是Java DataBase Connectivity的縮寫,是一組標準的接口,用于完成Java應(yīng)用與各種數(shù)據(jù)庫之間的交互。 要使用JDBC需要做哪些準備工作? 1)創(chuàng)建數(shù)據(jù)庫 2)得到JDBC驅(qū)動程序,驅(qū)動程序是完成具體的交互過程的,每種數(shù)據(jù)庫有自己特定的驅(qū)動程序,從數(shù)據(jù)庫管理系統(tǒng)的提供商的網(wǎng)站下載 3)要知道數(shù)據(jù)庫的相關(guān)信息:JDBC驅(qū)動程序的名字、數(shù)據(jù)庫的位置、數(shù)據(jù)庫的端口、用戶名和口令、url的格式(建立連接的時候用) 注
36、意:我們使用JDBC-ODBC橋的方式連接數(shù)據(jù)庫。JDBC-ODBC橋是一種類型的驅(qū)動程序,共有4種類型的驅(qū)動程序,JDBC-ODBC橋是建立在ODBC數(shù)據(jù)源基礎(chǔ)上的。驅(qū)動是JDK中附帶的,不用下載。5、創(chuàng)建數(shù)據(jù)庫及測試數(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ù)源 在開始-設(shè)置-控制面
37、板-管理工具-數(shù)據(jù)源(ODBC)設(shè)置ODBC數(shù)據(jù)源的名字為bookstore7、修改login方法,通過數(shù)據(jù)庫進行驗證 1)使用JDBC連接數(shù)據(jù)庫的基本過程 加載驅(qū)動程序; 建立與數(shù)據(jù)庫之間的連接; 創(chuàng)建一個執(zhí)行SQL語句的語句對象; 編寫要執(zhí)行的SQL語句; 使用語句對象執(zhí)行SQL語句; 如果有結(jié)果,需要對結(jié)果進行處理; 關(guān)閉相關(guān)對象; 注意:異常處理。 2)修改login方法 public boolean login() throws Exception / return username.equals(userpass); / 第一步:加載驅(qū)動程序,如果使用其它的驅(qū)動程序,寫出相應(yīng)的名字
38、即可 Class.forName(sun.jdbc.odbc.JdbcOdbcDriver); / 第二步:建立連接,第一個參數(shù)是url(定位數(shù)據(jù)庫),第二個參數(shù)是用戶名,第三個參數(shù)是口令 Connection con = DriverManager.getConnection(jdbcdbc:bookstore,);/ bookstore是所創(chuàng)建的ODBC數(shù)據(jù)源的名字 / 第三步:創(chuàng)建SQL語句 String sql = select * from usertable where username=? and userpass=?; / 第四步:創(chuàng)建語句對象,用于執(zhí)行SQL語句的 Prepa
39、redStatement stmt = con.prepareStatement(sql); / 對變量賦值,第一個參數(shù)表示變量的序號(第幾個問號),第二個參數(shù)表示所賦的值 stmt.setString(1,username); stmt.setString(2,userpass); / 第五步:執(zhí)行SQL語句,因為有查詢結(jié)果,所以使用executeQuery方法,結(jié)果保存在rs中 ResultSet rs = stmt.executeQuery(); /rs相當于一個表格,有若干行、若干列組成,指針指向第一條記錄的前面 / 第六步:對結(jié)果進行處理,使用next方法進行遍歷,使用get方法得到
40、當前行的列 boolean b = rs.next(); / 第七步:關(guān)閉相關(guān)對象 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)建對象、初始化、然后調(diào)用方法 UserBean user = new UserBean(); user.setUsername(username); user.setUse
42、rpass(userpass); boolean b = false; try b = user.login(); catch(Exception e) / 當產(chǎn)生異常的時候,把異常信息輸出在界面上 / 設(shè)置編碼方式 response.setContentType(text/html;charset=gb2312); / 得到輸出流對象 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)到成功的頁面 rd.forward(request,response); / 完成跳轉(zhuǎn) else RequestDispatcher rd = request.getRequestDispatcher(index1.jsp);/ 跳轉(zhuǎn)到登錄頁面 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) / 當產(chǎn)生異常的時候,把異常信息輸出在界面上 / 設(shè)置編碼方式 response.setContentType(text/html;charset=gb2312); / 得到輸出流對象 PrintWriter out = response.getWriter(); out.println(e.toString(); return; HYPERLINK /spac
45、e.php?uid=10410 陽光2008-11-15 19:59:34 第六講(參考Java Web程序設(shè)計基礎(chǔ)教程第6、9章)1、分析登錄功能 界面:登錄界面index1.jsp;登錄成功的界面login_success.jsp。 功能:UserBean的login方法完成登錄的判斷。 Servlet:LoginServlet.java (1)接收用戶輸入的用戶名和口令(2)調(diào)用UserBean的login方法進行判斷(3)根據(jù)方法的返回值選擇界面響應(yīng)。2、MVC模式 M表示模型,主要表示系統(tǒng)中的功能處理部分。例如,上面的UserBean就是一個模型,描述用戶信息以及相關(guān)功能。 V表示視
46、圖,表示系統(tǒng)中與人進行交互的部分。例如,上面的index1.jsp和login_success.jsp。 C表示控制器,建立模型與視圖之間的關(guān)聯(lián)關(guān)系。例如,上面的LoginServlet.java。 輸入界面直接調(diào)用控制器,控制器接收用戶在輸入界面上輸入的信息,控制器把信息傳遞給模型,調(diào)用模型的方法,方法會給控制器返回一個值,控制器根據(jù)這個值選擇輸出界面對用戶響應(yīng)。 MVC模式把系統(tǒng)的每一個功能都分解成這個3個部分。然后分別實現(xiàn)。3、采用MVC模式實現(xiàn)注冊功能 一般先考慮V,包括輸入界面和輸出界面,對于注冊功能來說,輸入是注冊界面,輸出是注冊成功或者失敗的界面,通常使用JSP文件。 接下來考慮
47、M,功能如何實現(xiàn),對于注冊功能來說,需要把用戶提交的信息寫到數(shù)據(jù)庫中。需要在UserBean中編寫添加用戶的方法。 考慮C,如何協(xié)調(diào)M和V。需要編寫Servlet,在doGet或者doPost方法中主要完成:接收輸入;調(diào)用UserBean的方法;選擇界面響應(yīng)。4、創(chuàng)建注冊用的表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部分 采用原來的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ū)動 Class.forName(driverClass); / 第二步:建立連接 con = DriverManager.getConnection(url,); / 第三步:創(chuàng)建語句對象 stmt = con.prepareStatement(sql); / 第四步:對SQL語句中參數(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語句 int n = stmt.executeUpdate(); / 執(zhí)行沒有結(jié)果集返回的SQL語句使用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部分 編寫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 / 請求中采用的編碼方式是8859_1,當前的編碼是gb2312,需要轉(zhuǎn)換 request.setCharacterEncoding(gb2312); / 第一句話:獲取用戶輸入的信息 String username = request.getParameter(username); String userpass1 = request.getParameter(userpass1); String sex = request.getParameter(sex); / 因為允許多選,所以結(jié)果有
53、可能是多個,應(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)建對象、初始化、然后調(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(); / 第三句話:向頁面?zhèn)鬟f信息 if(b) request.setAttribute(info,注冊成功!); else request.setAttribute
55、(info,注冊失??!); / 第四句話:轉(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); 之后對Servlet進行配置,在web.xml中添加如下代碼: a
56、ddUser servlet.AddUserServlet addUser /addUser 需要修改register.jsp中的form的屬性action: 8、測試 編譯、啟動服務(wù)器,然后運行。 HYPERLINK /space.php?uid=10410 陽光2008-11-15 20:00:34 第七講(參考Java Web程序設(shè)計基礎(chǔ)教程第7章)1、共享連接數(shù)據(jù)庫的代碼 連接數(shù)據(jù)庫的基本過程: 1)加載驅(qū)動程序; 2)創(chuàng)建連接; 3)編寫SQL語句; 4)創(chuàng)建語句對象; 5)對參數(shù)賦值; 6)執(zhí)行SQL 語句; 7)對結(jié)果進行處理; 8)關(guān)閉對象。 對于不同的SQL的執(zhí)行,不同的地方
57、: SQL語句; 參數(shù); 結(jié)果的處理方式; 提取相同部分分別編寫成方法: Connection con = null; PreparedStatement stmt = null; ResultSet rs = null; String driverClass = sun.jdbc.odbc.JdbcOdbcDriver; String url = jdbcdbc:bookstore; / 完成連接的創(chuàng)建,相當于第1.2步 public Connection getConnection() throws Exception Class.forName(driverClass); / 加載驅(qū)動程
58、序 if(con = null) con = DriverManager.getConnection(url,); return con; / 創(chuàng)建語句對象 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í)行沒有結(jié)果集返回的方法 public int executeUpdate() throws Exception return stmt.executeUpdate(); / 關(guān)閉對象 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)建語句對象 createStatement(sql); / 對SQL語句中參數(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. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 亞美尼亞語與芬蘭語的語法對比分析論文
- 2025-2030全球及中國知識管理軟件行業(yè)市場現(xiàn)狀供需分析及市場深度研究發(fā)展前景及規(guī)劃可行性分析研究報告
- 2025年征信考試題庫(征信風險評估與防范)-征信業(yè)務(wù)基礎(chǔ)知識選擇題
- 2025年征信考試題庫:征信國際合作與交流案例分析題集
- 代謝工程器官構(gòu)建-全面剖析
- 2025-2030全球及中國沼氣和生物甲烷行業(yè)市場現(xiàn)狀供需分析及市場深度研究發(fā)展前景及規(guī)劃可行性分析研究報告
- 2025-2030全球及中國機場物流系統(tǒng)行業(yè)市場現(xiàn)狀供需分析及市場深度研究發(fā)展前景及規(guī)劃可行性分析研究報告
- 帶外數(shù)據(jù)融合分析-全面剖析
- 2025-2030全球及中國家用VR健身解決方案行業(yè)市場現(xiàn)狀供需分析及市場深度研究發(fā)展前景及規(guī)劃可行性分析研究報告
- 2025年消防安全知識培訓(xùn)考試題庫:消防設(shè)施操作應(yīng)急處理試題試卷
- 上海煙草機械有限責任公司招聘考試真題2024
- 吉林省吉林市2024-2025學(xué)年高三下學(xué)期3月三模試題 歷史 含答案
- 2023年河南單招職測真題(帶答案)
- 中學(xué)教育基礎(chǔ)(上)知到課后答案智慧樹章節(jié)測試答案2025年春陜西師范大學(xué)
- 工程機械租賃服務(wù)方案及保障措施投標方案文件
- 儲能站施工組織設(shè)計施工技術(shù)方案(技術(shù)標)
- 人工智能驅(qū)動的科學(xué)研究第五范式:演進、機制與影響
- 移動場景下TCP自適應(yīng)控制-洞察分析
- DB33T 841-2023 橋梁鋼結(jié)構(gòu)防腐蝕工程施工工藝及質(zhì)量驗收規(guī)范
- 2024年汽車滾裝運輸合同
- 2025中信建投證券股份限公司校園招聘高頻重點提升(共500題)附帶答案詳解
評論
0/150
提交評論