教學(xué)課件-JSP應(yīng)用開(kāi)發(fā)項(xiàng)目化教程(王志勃)_第1頁(yè)
教學(xué)課件-JSP應(yīng)用開(kāi)發(fā)項(xiàng)目化教程(王志勃)_第2頁(yè)
教學(xué)課件-JSP應(yīng)用開(kāi)發(fā)項(xiàng)目化教程(王志勃)_第3頁(yè)
教學(xué)課件-JSP應(yīng)用開(kāi)發(fā)項(xiàng)目化教程(王志勃)_第4頁(yè)
教學(xué)課件-JSP應(yīng)用開(kāi)發(fā)項(xiàng)目化教程(王志勃)_第5頁(yè)
已閱讀5頁(yè),還剩238頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

JSP應(yīng)用開(kāi)發(fā)項(xiàng)目化教程第1章JSP開(kāi)發(fā)環(huán)境搭建與項(xiàng)目需求分析2本章目標(biāo)JDK的安裝與配置Tomcat服務(wù)器的安裝與配置MyEclipse環(huán)境的安裝掌握WEB項(xiàng)目的創(chuàng)建與發(fā)布了解web項(xiàng)目的結(jié)構(gòu)2JDK的安裝

什么是JDKJDK的全稱(chēng)是JavaDevelopmentKit,最早是SUN公司提供的一組用于開(kāi)發(fā)Java程序的工具。009年4月20日,Oracle公司宣布正式以74億美元的價(jià)格收購(gòu)Sun公司JDK的下載和安裝網(wǎng)址:/安裝JDK后產(chǎn)生的目錄結(jié)構(gòu):\bin目錄:Java開(kāi)發(fā)工具,包括Java編譯器、解釋器等\demo目錄:一些實(shí)例程序\lib目錄:Java開(kāi)發(fā)類(lèi)庫(kù)\jre目錄:Java運(yùn)行環(huán)境,包括Java虛擬機(jī)、運(yùn)行類(lèi)庫(kù)等

…JDK的安裝環(huán)境變量的配置在桌面“我的電腦”圖標(biāo)上單擊右鍵,選擇“屬性”菜單。JDK的安裝環(huán)境變量的配置在“高級(jí)”選項(xiàng)卡中單擊“環(huán)境變量”按鈕。將出現(xiàn)“環(huán)境變量”設(shè)置界面JDK的安裝環(huán)境變量的配置在“系統(tǒng)變量”框中選擇“Path”,然后單擊“編輯”按鈕,在出現(xiàn)的“編輯系統(tǒng)變量”對(duì)話(huà)框中,在“變量值”欄的命令前添加“C:\ProgramFiles\Java\jdk1.6.0_02\bin;”命令,如圖所示。各個(gè)環(huán)境變量間用“;”號(hào)相隔。JDK的安裝環(huán)境變量的配置設(shè)置環(huán)境變量classpath,新建一個(gè)環(huán)境變量名:classpath,其值為“.;C:\ProgramFiles\Java\jdk1.6.0_02\lib\tools.jar”classpath環(huán)境變量是java虛擬機(jī)尋找類(lèi)文件的路徑,比如程序需要調(diào)用的類(lèi)庫(kù)文件等,一般常用的類(lèi)庫(kù)都包含在tools.jar里?!?”表示當(dāng)前目錄,一定要加。JDK的安裝環(huán)境變量的配置設(shè)置完成后,單擊“開(kāi)始”→“所有程序”→“附件”→“命令提示符”打開(kāi)DOS窗口,在命令提示符下輸入“java”或“javac”,回車(chē)后,如果出現(xiàn)其用法參數(shù)提示信息,則安裝正確。Tomcat6.0的安裝Tomcat是JavaWeb開(kāi)發(fā)的必備軟件,它為B/S系統(tǒng)提供Web服務(wù)器,如同windows下的IIS。Tomcat的下載地址:/Tomcat的安裝運(yùn)行安裝文件。安裝完成后運(yùn)行bin目錄下的startup.bat,啟動(dòng)Tomcat服務(wù)打開(kāi)IE瀏覽器,在地址欄輸入:http://localhost:8080/,啟動(dòng)Tomcat主頁(yè),正常顯示如圖所示。Tomcat6.0的安裝Tomcat服務(wù)器目錄結(jié)構(gòu)\bin\tomcat中的一些可執(zhí)行文件和批處理文件用于啟動(dòng)、停止服務(wù)等。\conf\存放tomcat中的各種全局配置文件\lib\tomcat運(yùn)行庫(kù)文件\logs\運(yùn)行日志\temp\臨時(shí)目錄\webapps\項(xiàng)目發(fā)布目錄\work\存放jsp編譯后生成java代碼和class類(lèi)MyEclipse開(kāi)發(fā)工具M(jìn)yEclipse是眾多Java開(kāi)發(fā)工具之一,早期MyEclipse做為eclipse的插件為J2EE應(yīng)用程序開(kāi)發(fā)提供IDE環(huán)境,目前MyEclipse6.0做為獨(dú)立安裝文件存在。MyEclipse是功能豐富的J2EE集成開(kāi)發(fā)環(huán)境,包括了完備的編碼、調(diào)試、測(cè)試和發(fā)布功能,完整支持html、jsf、css、javascript、struts、hibernate。MyEclipse6.0以后的版本安裝時(shí)不需要安裝Eclipse。MyEclipse開(kāi)發(fā)工具M(jìn)yEclipse的注冊(cè)MyEclipse開(kāi)發(fā)工具M(jìn)ySQL數(shù)據(jù)庫(kù)的使用MySQL安裝

在安裝MySQL過(guò)程中弄清每一步的選項(xiàng)含義,重點(diǎn)注意數(shù)據(jù)庫(kù)編碼、端口、root用戶(hù)口令等參數(shù)設(shè)定環(huán)節(jié),安裝完成后需要進(jìn)行測(cè)試確保MySQL數(shù)據(jù)庫(kù)服務(wù)正常啟動(dòng)。MySQL數(shù)據(jù)庫(kù)的使用MySQL測(cè)試安裝完成后,測(cè)試MySQL服務(wù)是否成功安裝。如圖1.13所示,從開(kāi)始菜單中選擇MySQL程序組,選擇【MySQL5.5CommandLineClient】進(jìn)入命令行登錄窗口,輸入安裝過(guò)程中的預(yù)留密碼后進(jìn)入MySQL命令行控制狀態(tài)。MySQL數(shù)據(jù)庫(kù)的使用MySQL管理工具Navicat是一套快速、可靠的數(shù)據(jù)庫(kù)管理工具,專(zhuān)為簡(jiǎn)化數(shù)據(jù)庫(kù)管理及降低系統(tǒng)管理成本而設(shè)。web項(xiàng)目的創(chuàng)建創(chuàng)建或選擇工作空間:創(chuàng)建的web項(xiàng)目都將保存在這個(gè)工作空間中。web項(xiàng)目的創(chuàng)建File->New->webProject項(xiàng)目的發(fā)布、啟動(dòng)和訪(fǎng)問(wèn)項(xiàng)目創(chuàng)建完成后,可以通過(guò)發(fā)布將項(xiàng)目部署到Tomcat服務(wù)器中,啟動(dòng)服務(wù)器就可以訪(fǎng)問(wèn)項(xiàng)目頁(yè)面。MyEclipse有自帶的tomcat服務(wù)器,但一般都用外置的tomcat6.0服務(wù)器。項(xiàng)目的發(fā)布、啟動(dòng)和訪(fǎng)問(wèn)外置tomcat6.0的配置Window->preferences進(jìn)入配置環(huán)境界面,MyEclipse->servers->tomcat項(xiàng)目的發(fā)布、啟動(dòng)和訪(fǎng)問(wèn)發(fā)布項(xiàng)目項(xiàng)目的發(fā)布、啟動(dòng)和訪(fǎng)問(wèn)啟動(dòng)服務(wù)器項(xiàng)目的發(fā)布、啟動(dòng)和訪(fǎng)問(wèn)啟動(dòng)IE瀏覽器,輸入地址:http://localhost:8080/first/index.jsp階段項(xiàng)目:房屋租賃信息發(fā)布網(wǎng)站項(xiàng)目需求分析功能需求分析階段項(xiàng)目:房屋租賃信息發(fā)布網(wǎng)站項(xiàng)目需求分析數(shù)據(jù)庫(kù)設(shè)計(jì)序號(hào)字段名字段描述類(lèi)型長(zhǎng)度主鍵外鍵空備注1id用戶(hù)ID號(hào)Int

Y

N自增列2userName用戶(hù)名Varchar50

3userPass登錄口令Varchar50

4userType用戶(hù)類(lèi)型Char1

0-普通用戶(hù)1-管理員5states狀態(tài)Char1

0-無(wú)效1-有效6bz備注Varchar100

階段項(xiàng)目:房屋租賃信息發(fā)布網(wǎng)站項(xiàng)目需求分析數(shù)據(jù)庫(kù)設(shè)計(jì)序號(hào)字段名字段描述類(lèi)型長(zhǎng)度主鍵外鍵空備注1id信息ID號(hào)Int

Y

N自增列2userId用戶(hù)ID號(hào)Int

N

3title信息標(biāo)題Varchar200

4address地址Varchar100

5floor樓層Int

6room幾室Int

7hall幾廳Int

8price售價(jià)decimal

9title信息標(biāo)題Varchar

10sdate發(fā)布日期Varchar

11telephone聯(lián)系電話(huà)Varchar50

12contractMan聯(lián)系人Varchar50

13area房屋面積Float

14cellName小區(qū)名稱(chēng)Varchar50

階段項(xiàng)目:房屋租賃信息發(fā)布網(wǎng)站項(xiàng)目需求分析數(shù)據(jù)庫(kù)設(shè)計(jì)序號(hào)字段名字段描述類(lèi)型長(zhǎng)度主鍵外鍵空備注1id信息ID號(hào)Int

Y

N自增列2userId用戶(hù)ID號(hào)Int

N

3detailInfo求租信息Varchar200

4title信息標(biāo)題Varchar200

5sdate發(fā)布日期Varchar

6telephone聯(lián)系電話(huà)Varchar50

7cellName聯(lián)系人Varchar50

JSP應(yīng)用開(kāi)發(fā)項(xiàng)目化教程第2章Web項(xiàng)目基礎(chǔ)知識(shí)計(jì)算機(jī)與通信工程學(xué)院王志勃30本章目標(biāo)Web項(xiàng)目相關(guān)知識(shí)Web.xml文件Html相關(guān)知識(shí)階段項(xiàng)目:房屋租賃信息網(wǎng)站規(guī)劃30Web項(xiàng)目相關(guān)知識(shí)Web項(xiàng)目結(jié)構(gòu)啟動(dòng)MyEclipse后進(jìn)入到IDE的主工作環(huán)境,選擇【File】→【new】→【webproject】創(chuàng)建新的Web項(xiàng)目Web項(xiàng)目相關(guān)知識(shí)Web項(xiàng)目結(jié)構(gòu)src為項(xiàng)目后臺(tái)代碼存放部分WebRoot目錄為項(xiàng)目的Web資源部分資源包Web項(xiàng)目相關(guān)知識(shí)項(xiàng)目屬性配置Web項(xiàng)目相關(guān)知識(shí)Javabuildpath配置選項(xiàng)中主要包括對(duì)項(xiàng)目引入外部Jar包的管理,即項(xiàng)目的Libraries(庫(kù))管理。Web項(xiàng)目相關(guān)知識(shí)WebContextRoot配置進(jìn)入項(xiàng)目屬性配置窗體后選擇【MyEclipse】下面的【W(wǎng)eb】項(xiàng),進(jìn)入到ContextRoot配置項(xiàng)。WebContextRoot中的映射地址為Web項(xiàng)目的訪(fǎng)問(wèn)地址,當(dāng)項(xiàng)目重命名后,WebContextRoot中的名稱(chēng)并不能自動(dòng)更新,需要開(kāi)發(fā)者手動(dòng)更新項(xiàng)目啟動(dòng)路徑。Web.xml文件WebRoot/WEB-INF/web.xml框架代碼Web.xml文件各個(gè)節(jié)點(diǎn)順序ContentModel:|

distributable|context-param|filter|filter-mapping|listener

|servlet|servlet-mapping|session-config|mime-mapping|

welcome-file-list|error|jsp-config|security-

constraint|login-config|security-roleHtml相關(guān)知識(shí)Html中常用標(biāo)記介紹form表單中主要包括下列元素:button——普通按鈕

radio——單選按鈕

checkbox——復(fù)選框

select——下拉式菜單

text——單行文本框

textarea——多行文本框

submit——提交按鈕

reset——重填按鈕Html相關(guān)知識(shí)引用JavaScript的方法直接在頁(yè)面中加入Javascript代碼<head>…...<scripttype="text/javascript">……</script></head>引用外部JS文件<scriptsrc=“url”type=“text/javascript”></script>Html相關(guān)知識(shí)用戶(hù)注冊(cè)界面的JS校驗(yàn)Html相關(guān)知識(shí)functionpass(){varpass=false;if(document.form1.uname.value==""){alert("用戶(hù)名不能為空!");pass=false;}elseif(document.form1.upass1.value==""){alert("密碼不能為空!");pass=false;}elseif(document.form1.upass1.value!=document.form1.upass2.value){alert("兩次密碼輸入不一致!");pass=false;}elsepass=true;

returnpass;}<formname="form1"method="post"action=""onsubmit="returnpass()">Html相關(guān)知識(shí)用戶(hù)登錄界面的JS校驗(yàn)Html相關(guān)知識(shí)個(gè)人房屋信息管理頁(yè)面多導(dǎo)航的JS實(shí)現(xiàn)<ahref=""><imgborder="0"src="images/del.gif"alt="刪除"></a><ahref=""><imgborder="0"src="images/edit.gif"alt="修改"></a><inputname="addbutton"type="button"value="增加"

>Html相關(guān)知識(shí)使用超鏈接標(biāo)簽實(shí)現(xiàn)導(dǎo)航<ahref="myinfodel.jsp"><imgborder="0"src="images/del.gif"alt="刪除"></a>提交按鈕類(lèi)動(dòng)作<inputname="addbutton"type="submit"value="增加"><formname="form1"method="post"action="sendinfo.html">普通按鈕類(lèi)動(dòng)作<inputname="addbutton"type="button"value="增加“

onclick=‘window.location=“sendinfo.html”’

>

<inputname="addbutton"type="button"value="增加“onclick=“add();”>functionadd(){with(document.form1){action="sendinfo.html";submit();}}Html相關(guān)知識(shí)兩種頁(yè)面跳轉(zhuǎn)方式的區(qū)別超鏈接方式不能提交頁(yè)面表單中的數(shù)據(jù),數(shù)據(jù)要用參數(shù)的形式傳遞ahref=‘sendinfo.jsp?username=aa&userid=123’提交按鈕可以將表單中的各個(gè)字段作為參數(shù)將數(shù)據(jù)一起提交到服務(wù)器端Html相關(guān)知識(shí)引用CSS的方法寫(xiě)在頁(yè)面上<head>…...<style>……</style></head>引用已經(jīng)定義好css文件<linkhref="css/style.css"rel="stylesheet"type="text/css">Html相關(guān)知識(shí)Html相關(guān)知識(shí)<linkhref="css/style.css"rel="stylesheet"type="text/css"><tableborder="0"width="100%"class="tablelist">階段項(xiàng)目:房屋租賃信息網(wǎng)站規(guī)劃項(xiàng)目原型設(shè)計(jì)階段項(xiàng)目:房屋租賃信息網(wǎng)站規(guī)劃項(xiàng)目原型設(shè)計(jì)階段項(xiàng)目:房屋租賃信息網(wǎng)站規(guī)劃項(xiàng)目原型設(shè)計(jì)階段項(xiàng)目:房屋租賃信息網(wǎng)站規(guī)劃使用Table+iFrame布局頁(yè)面<iframename="left"width="100%"height="100%"scrolling="no"frameborder="0"src="left.html"></iframe><iframename="main"width="100%"height="100%"scrolling="no"frameborder="0"src="main.html"></iframe>JSP應(yīng)用開(kāi)發(fā)項(xiàng)目化教程第3章JSP基礎(chǔ)知識(shí)計(jì)算機(jī)與通信工程學(xué)院55本章目標(biāo)JSP基礎(chǔ)知識(shí)JSP動(dòng)作標(biāo)簽JSP中訪(fǎng)問(wèn)數(shù)據(jù)庫(kù)JSP執(zhí)行原理55JSP基礎(chǔ)知識(shí)JSP就是把Java代碼嵌套在HTML中,JSP程序結(jié)構(gòu)分為兩大部分:靜態(tài)的HTML代碼動(dòng)態(tài)的Java代碼以及JSP本身的標(biāo)簽和指令當(dāng)JSP頁(yè)面第一次被請(qǐng)求的時(shí)候,服務(wù)器的JSP編譯器會(huì)把JSP頁(yè)面編譯成對(duì)應(yīng)的Java代碼,根據(jù)動(dòng)態(tài)Java代碼執(zhí)行的結(jié)果,生成對(duì)應(yīng)的純HTML的字符串返回給瀏覽器,這樣就可以把動(dòng)態(tài)程序的結(jié)果展示給用戶(hù)。JSP基礎(chǔ)知識(shí)JSP頁(yè)面元素主要分為模版元素(HTML標(biāo)簽)、Java腳本元素、頁(yè)面注釋和頁(yè)面指令組成。模板元素:指JSP頁(yè)面中的靜態(tài)HTML內(nèi)容。注釋顯式注釋隱藏注釋java片段注釋Java腳本元素聲明表達(dá)式j(luò)ava腳本代碼指令標(biāo)識(shí):page、include、taglibJSP基礎(chǔ)知識(shí)顯示注釋<!--注釋內(nèi)容-->這種注釋在客戶(hù)端通過(guò)查看頁(yè)面的源代碼能夠顯示出來(lái)隱藏注釋<%--隱藏注釋--%>這種注釋在JSP頁(yè)面編譯時(shí)被忽略,并且不能夠在客戶(hù)端看到注釋內(nèi)容。Java片斷注釋只能用在JSP頁(yè)面中<%%>中的Java代碼上。//注釋/*注釋*//**注釋*/ex1.jspJSP基礎(chǔ)知識(shí)聲明標(biāo)識(shí)(Declaration)在JSP頁(yè)面中可以聲明變量或方法,格式為:<%!聲明變量或方法的代碼%>在頁(yè)面中聲明的變量和方法,在整個(gè)頁(yè)面內(nèi)都有效,它們將成為jsp頁(yè)面被轉(zhuǎn)換為類(lèi)文件后類(lèi)中的屬性和方法。并且會(huì)被多個(gè)用戶(hù)共享。任何一個(gè)用戶(hù)的修改都會(huì)改變他們?cè)瓉?lái)的狀態(tài)。聲明部分不可以嵌入java代碼片斷和使用JSP內(nèi)置對(duì)象。ex2.jspJSP基礎(chǔ)知識(shí)JSP表達(dá)式(Expression)表達(dá)式用于向頁(yè)面中輸出信息,使用格式為:<%=變量/可以返回值的方法/java表達(dá)式%>

注:<%與=之間沒(méi)有空格變量或表達(dá)式后面沒(méi)有分號(hào)<%Stringname="aaa";%>用戶(hù)名:<%=name%><%Stringpath="index.jsp";%><ahref=<%=path%>>鏈接到index.jsp頁(yè)面</a><%Stringpath="index.jsp";%><formaction=<%=path%>></form>ex3.jspJSP基礎(chǔ)知識(shí)Java腳本代碼(scriptlet)在JSP頁(yè)面中使用<%與%>標(biāo)記起來(lái)的一段Java代碼。在腳本中可以定義變量、調(diào)用方法和進(jìn)行各種表達(dá)式運(yùn)算,可以使用JSP的內(nèi)置對(duì)象。且每行語(yǔ)句后面要加入分號(hào)。在腳本中定義變量在當(dāng)前整個(gè)頁(yè)面內(nèi)有效,但不會(huì)被其他的線(xiàn)程共享,當(dāng)前用戶(hù)對(duì)該變量的操作不會(huì)影響到其他用戶(hù)。當(dāng)變量所在的頁(yè)面關(guān)閉后就會(huì)被銷(xiāo)毀。JSP基礎(chǔ)知識(shí)例:定義一個(gè)數(shù)組,循環(huán)輸出數(shù)組中的數(shù)據(jù),并且每隔一行顯示一個(gè)數(shù)據(jù)。<%int[]value={60,70,80};

for(inti=0;i<3;i++){out.println(value[i]);%><br><%}%>JSP基礎(chǔ)知識(shí)例:在left.jsp頁(yè)面中輸入用戶(hù)名和密碼,在登錄處理頁(yè)面rec_login.jsp中將用戶(hù)名和密碼輸出。創(chuàng)建left.jsp頁(yè)面。(在left.html上改進(jìn))創(chuàng)建rec_login.jsp頁(yè)面。接收數(shù)據(jù)。Stringname=request.getParameter("uname");Stringpass=request.getParameter("upass");輸出數(shù)據(jù)。System.out.println("用戶(hù)名:"+name);System.out.println("密碼:"+pass);out.println("用戶(hù)名:"+name);out.println("密碼:"+pass);用戶(hù)名:<%=name%><br>

密碼:<%=pass%>JSP指令利用JSP指令可以使服務(wù)器按照指令的設(shè)置來(lái)執(zhí)行動(dòng)作和設(shè)置在整個(gè)JSP頁(yè)面范圍內(nèi)有效的屬性。在一個(gè)指令中可以設(shè)置多個(gè)屬性,這些屬性可以影響到整個(gè)頁(yè)面。指令通常以<%@標(biāo)記開(kāi)始,以%>標(biāo)記結(jié)束,通用格式:

<%@指令名稱(chēng)屬性1=“屬性值”屬性2=“屬性值”%>Page指令include指令taglib指令Page指令Page指令即頁(yè)面指令,可以定義在整個(gè)JSP頁(yè)面范圍內(nèi)有效的屬性。Page指令可以放在JSP頁(yè)面中的任意行,但習(xí)慣上放在文件的開(kāi)始部分。除import屬性外,其他屬性只能在指令中出現(xiàn)一次。<%@page

[language="java"]

[extends="package.class"]

[import="{package.class|package.*},..."]

[session="true|false"]

[buffer="none|8kb|sizekb"]

[autoFlush="true|false"]

[isThreadSafe="true|false"]

[info="text"]

[errorPage="relativeURL"]

[contentType="mimeType[;charset=characterSet]"|"text/html;charset=ISO-8859-1"]

[isErrorPage="true|false"]

%>include指令在當(dāng)前的JSP頁(yè)面中在當(dāng)前使用該指令的位置嵌入其他的文件,如果被包含的文件中有可以執(zhí)行的代碼,則顯示執(zhí)行后的結(jié)果。<%@includefile=“文件的絕對(duì)路徑或相對(duì)路徑”%>如果屬性值以“/”開(kāi)頭,在當(dāng)前應(yīng)用的根目錄下查找文件,如果以文件名或文件夾名開(kāi)頭,那么指定的是一個(gè)相對(duì)路徑,在當(dāng)前頁(yè)面目錄下查找文件。taglib指令引入系統(tǒng)標(biāo)簽或定義一個(gè)標(biāo)簽庫(kù)以及其自定義標(biāo)簽的前綴。必須在使用自定義標(biāo)簽之前使用taglib指令??梢栽谝粋€(gè)頁(yè)面中多次使用tablib指令,但前綴只能使用一次。<%@taglib=“/WEB-INF/struts-html.tld”prefix=“html”%>JSP動(dòng)作標(biāo)簽-了解JavaBeanJavaBean的設(shè)計(jì)規(guī)范要求:類(lèi)中有一個(gè)公共、顯式、無(wú)參數(shù)的構(gòu)造方法;類(lèi)中的成員變量使用private修飾,遵循Java的命名規(guī)范;為所有成員變量配置public的setXxx()/getXxx()方法,必須遵循Beans內(nèi)部的命名規(guī)則,Beans是根據(jù)這兩個(gè)方法來(lái)對(duì)成員進(jìn)行讀取,get和set方法必須有與成員變量相同的名稱(chēng),但是第一個(gè)字母要大寫(xiě)并以get和set開(kāi)頭;JSP動(dòng)作標(biāo)簽-了解JavaBeanJavaBean的設(shè)計(jì)JSP動(dòng)作標(biāo)簽-了解JavaBean調(diào)用userinfo類(lèi),設(shè)置username、userpass的值并輸出。<%@pageimport="beans.userinfo;"%><%Stringname=request.getParameter("uname");Stringpass=request.getParameter("upass");userinfouinfo=newuserinfo();uinfo.setUsername(name);uinfo.setUserpass(pass);out.println("用戶(hù)名:"+uinfo.getUsername()+"<br>"+"密碼:"+uinfo.getUserpass());%>JSP動(dòng)作標(biāo)簽-了解JavaBean<jsp:useBean>動(dòng)作指令

jsp:useBean動(dòng)作用來(lái)裝載一個(gè)將在JSP頁(yè)面中使用的JavaBean。jsp:useBean動(dòng)作指令最簡(jiǎn)單的語(yǔ)法為:<jsp:useBean

id="name"scope=""

class="package.class"/>創(chuàng)建一個(gè)由class屬性指定的類(lèi)的實(shí)例,然后把它綁定到名字由id屬性給出的變量上。定義一個(gè)scope屬性可以讓Bean關(guān)聯(lián)到更多的頁(yè)面。JSP動(dòng)作標(biāo)簽-了解JavaBean<jsp:useBeanid="user"scope=“page"class="com.bean.userinfo“/>在執(zhí)行的時(shí)候,web容器會(huì)檢查這個(gè)javaBeans的對(duì)象是否存在,如果存在就使用存在的JavaBeans對(duì)象,如果不存在生成一個(gè)新的JavaBeans對(duì)象。Scope默認(rèn)有效范圍為page。com.bean.userinfouser=null;if(pageContext.getAttribute(“user”)==null){user=newuserinfo();pageContext.setAttribute(“user”,user);}elseuser=(userinfo)pageContext.getAttribute(“user”);JSP動(dòng)作標(biāo)簽-了解JavaBean<jsp:useBean>動(dòng)作指令

Scope中指明JavaBean的生命周期范圍。Page:JavaBean對(duì)象生命周期僅限于目前網(wǎng)頁(yè)中,若用戶(hù)轉(zhuǎn)換到下一網(wǎng)頁(yè)或單擊刷新按鈕,則JavaBean對(duì)象失效。Request:JavaBean對(duì)象生命周期是當(dāng)用戶(hù)“請(qǐng)求”網(wǎng)頁(yè)的時(shí)候產(chǎn)生,在進(jìn)行網(wǎng)頁(yè)重定向后JavaBean對(duì)象便自動(dòng)消失。Session:該JavaBean對(duì)象生命周期是session存在的時(shí)候。即從session建立時(shí)開(kāi)始,在系統(tǒng)默認(rèn)的時(shí)間里JavaBean對(duì)象有效。Application:表示該JavaBean對(duì)象生命周期是application存在的時(shí)候,從application建立時(shí)開(kāi)始,到application結(jié)束時(shí)JavaBean也隨著結(jié)束。JSP動(dòng)作標(biāo)簽-了解JavaBean<jsp:setProperty>動(dòng)作指令

當(dāng)JavaBean加載之后,我們可以將JSP頁(yè)面中的字段數(shù)據(jù)通過(guò)<jsp:setProperty>操作寫(xiě)入到JavaBean中的屬性中。JSP動(dòng)作標(biāo)簽-了解JavaBean<jsp:setProperty>動(dòng)作指令name屬性是必需的,它表示要設(shè)置的屬性歸屬于哪個(gè)Bean對(duì)象。property屬性也是必需的。如果property的值是“*”,則所有名字與Bean屬性名字相同的請(qǐng)求參數(shù)的值,都將通過(guò)Set方法傳遞給相應(yīng)的屬性,value屬性是可選的。該屬性用來(lái)指定Bean屬性的值。param是可選項(xiàng),它指定用哪個(gè)請(qǐng)求參數(shù)作為Bean屬性的值。如果當(dāng)前請(qǐng)求沒(méi)有參數(shù),則什么事情也不做,系統(tǒng)不會(huì)把null傳遞給Bean屬性的set方法。JSP動(dòng)作標(biāo)簽-了解JavaBeansetProperty指令的使用方法:<jsp:setProperty

name="beanInstanceName"property="*">由JSP頁(yè)面?zhèn)鱽?lái)的參數(shù)值,通過(guò)java自省機(jī)制,設(shè)定所有的屬性。前提條件是頁(yè)面中的字段名稱(chēng)與JavaBean中的成員名稱(chēng)一樣<jsp:setProperty

name=“beanInstanceName”property=“propertyName”>通過(guò)自省機(jī)制,但有選擇的設(shè)定。只對(duì)指定的beanInstanceName實(shí)例中的propertyName屬性賦值。JSP動(dòng)作標(biāo)簽-了解JavaBeansetProperty指令的使用方法:<jsp:setProperty

name=“beanInstanceName”property=“propertyName”

param=“ParamName”>指定發(fā)起請(qǐng)求的JSP頁(yè)面中某個(gè)具體字段值傳遞給beanInstanceName中property指定屬性。<jsp:setProperty

name=“beanInstanceName”property=“propertyName”,value=“myvalue”>

通過(guò)value變量,動(dòng)態(tài)傳值給beanInstanceName中的屬性JSP動(dòng)作標(biāo)簽-了解JavaBean<jsp:getProperty>動(dòng)作指令jsp:getProperty動(dòng)作提取指定Bean屬性的值,轉(zhuǎn)換成字符串,然后輸出到JSP頁(yè)面上。jsp:getProperty有兩個(gè)必需的屬性,屬性name表示Bean的名字;屬性property表示要提取哪個(gè)屬性的值。<jsp:getPropertyname="beanInstanceName"property="propertyName"/>JavaBean實(shí)例化對(duì)象存在某個(gè)隱式范圍中,可以通過(guò)相關(guān)的隱式對(duì)象獲得到其中的數(shù)據(jù)。<%UserInfouserbean=(UserInfo)request.getAttribute(“user”);%>JSP動(dòng)作標(biāo)簽-<jsp:forward>動(dòng)作標(biāo)簽<jsp:forward>標(biāo)簽的作用是從一個(gè)JSP頁(yè)面向跳轉(zhuǎn)到另一個(gè)JSP頁(yè)面,跳轉(zhuǎn)過(guò)程中可以將請(qǐng)求中的參數(shù)繼續(xù)傳遞到第二個(gè)頁(yè)面,實(shí)現(xiàn)請(qǐng)求轉(zhuǎn)發(fā)功能。<jsp:forwardpage="forward2.jsp">

<jsp:paramvalue="1234"name="userName"/>

<jsp:paramvalue="123456"name="password"/></jsp:forward>JSP動(dòng)作標(biāo)簽-<jsp:include>動(dòng)作標(biāo)簽<jsp:forward>標(biāo)簽的作用是從一個(gè)JSP頁(yè)面向跳轉(zhuǎn)到另一個(gè)JSP頁(yè)面,跳轉(zhuǎn)過(guò)程中可以將請(qǐng)求中的參數(shù)繼續(xù)傳遞到第二個(gè)頁(yè)面,實(shí)現(xiàn)請(qǐng)求轉(zhuǎn)發(fā)功能。<jsp:forwardpage="forward2.jsp">

<jsp:paramvalue="1234"name="userName"/>

<jsp:paramvalue="123456"name="password"/></jsp:forward>JSP應(yīng)用開(kāi)發(fā)項(xiàng)目化教程第4章JSP隱式對(duì)象及其應(yīng)用計(jì)算機(jī)與通信工程學(xué)院83本章目標(biāo)JSP隱式對(duì)象JSP隱式對(duì)象應(yīng)用中常見(jiàn)問(wèn)題83JSP隱式對(duì)象JSP隱式對(duì)象(內(nèi)置對(duì)象)是可以不加聲明就在JSP頁(yè)面腳本(java程序片斷和java表達(dá)式)中使用的默認(rèn)對(duì)象。JSP隱式對(duì)象不需要開(kāi)發(fā)人員實(shí)例化,在JSP頁(yè)面初始化的時(shí)候生成,在所有的JSP頁(yè)面都能使用。JSP隱式對(duì)象存在于服務(wù)器的內(nèi)存中,實(shí)現(xiàn)對(duì)臨時(shí)數(shù)據(jù)的存儲(chǔ),應(yīng)用程序可以利用JSP的各種隱式對(duì)象完成后臺(tái)數(shù)據(jù)與前臺(tái)頁(yè)面的交換功能。不同的隱式對(duì)象的作用范圍不一樣。

JSP隱式對(duì)象JSP隱式對(duì)象JSP通過(guò)request對(duì)象控制客戶(hù)瀏覽器的請(qǐng)求,通過(guò)response對(duì)客戶(hù)瀏覽器進(jìn)行響應(yīng),而session就維持這個(gè)反反復(fù)復(fù)的過(guò)程中會(huì)話(huà)期間需要傳遞的數(shù)據(jù)。JSP隱式對(duì)象JSP通過(guò)request對(duì)象控制客戶(hù)瀏覽器的請(qǐng)求,通過(guò)response對(duì)客戶(hù)瀏覽器進(jìn)行響應(yīng),而session就維持這個(gè)反反復(fù)復(fù)的過(guò)程中會(huì)話(huà)期間需要傳遞的數(shù)據(jù)。JSP隱式對(duì)象——request對(duì)象request對(duì)象是從客戶(hù)端向服務(wù)器端發(fā)出請(qǐng)求,包括用戶(hù)提交的信息以及客戶(hù)端的一些信息??蛻?hù)端可以通過(guò)HTML表單或者在網(wǎng)頁(yè)地址后面帶參數(shù)的方法提交數(shù)據(jù)(duibi.jsp),再用request的相關(guān)方法來(lái)獲取提交的各種數(shù)據(jù)。JSP隱式對(duì)象——request對(duì)象JSP隱式對(duì)象——request對(duì)象訪(fǎng)問(wèn)請(qǐng)求參數(shù)(getParameter、getParameterValues)例:register.jspJSP隱式對(duì)象——request對(duì)象在作用域中管理屬性很多情況下,在請(qǐng)求轉(zhuǎn)發(fā)時(shí),把一些數(shù)據(jù)帶到轉(zhuǎn)發(fā)后的頁(yè)面處理。這時(shí)可以使用request對(duì)象的setAttribute()方法將數(shù)據(jù)設(shè)置在request范圍內(nèi)存取。在轉(zhuǎn)發(fā)后的頁(yè)面取數(shù)據(jù)時(shí),通過(guò)getAttribute()方法來(lái)獲取數(shù)據(jù)。request.setAttribute("pass","123");request.getAttribute("pass");rec_login.jspJSP隱式對(duì)象——request對(duì)象getParameter和getAttribute的區(qū)別request.getParameter()方法傳遞的數(shù)據(jù),會(huì)從Web客戶(hù)端傳到Web服務(wù)器端,代表HTTP請(qǐng)求數(shù)據(jù)。request.getParameter()方法返回String類(lèi)型的數(shù)據(jù)。request.setAttribute()和getAttribute()方法傳遞的數(shù)據(jù)只會(huì)存在于Web容器內(nèi)部,在具有轉(zhuǎn)發(fā)關(guān)系的Web組件之間共享。這兩個(gè)方法能夠設(shè)置Object類(lèi)型的共享數(shù)據(jù)。request.getAttribute()方法返回request范圍內(nèi)存在的對(duì)象,而request.getParameter()方法是獲取http提交過(guò)來(lái)的數(shù)據(jù),返回字符串。JSP隱式對(duì)象——request對(duì)象客戶(hù)使用的協(xié)議:request.getProtocol()獲取接受客戶(hù)提交信息的頁(yè)面:request.getServletPath()接受客戶(hù)提交信息的長(zhǎng)度request.getContentLength()客戶(hù)提交信息的方式:request.getMethod()獲取客戶(hù)的IP地址:request.getRemoteAddr()獲取客戶(hù)機(jī)的名稱(chēng):request.getRemoteHost()獲取服務(wù)器的名稱(chēng):request.getServerName()獲取服務(wù)器的端口號(hào):request.getServerPort()JSP隱式對(duì)象——response對(duì)象response對(duì)象包含了響應(yīng)客戶(hù)請(qǐng)求的有關(guān)信息,但在JSP中很少直接用到它,可以使用Response的sendRedirect(URL導(dǎo)航地址)方法實(shí)現(xiàn)客戶(hù)的重定向,response是HttpServletResponse類(lèi)的實(shí)例。

JSP隱式對(duì)象——response對(duì)象頁(yè)面重定向JSP隱式對(duì)象——session對(duì)象session對(duì)象指的是客戶(hù)端與服務(wù)器的一次會(huì)話(huà),從客戶(hù)連到服務(wù)器的一個(gè)WebApplication開(kāi)始,直到客戶(hù)端與服務(wù)器斷開(kāi)連接為止,它是HttpSession類(lèi)的實(shí)例。會(huì)話(huà)數(shù)據(jù)保存在服務(wù)器端對(duì)應(yīng)的Session對(duì)象中,由服務(wù)器來(lái)統(tǒng)一維護(hù),這樣一定程度保證了會(huì)話(huà)數(shù)據(jù)安全性,但增加了服務(wù)器端的內(nèi)存開(kāi)銷(xiāo)。我們把用戶(hù)打開(kāi)一個(gè)瀏覽器訪(fǎng)問(wèn)某個(gè)應(yīng)用開(kāi)始,到關(guān)閉瀏覽器為止的交互過(guò)程稱(chēng)為一個(gè)“會(huì)話(huà)”。在一個(gè)“會(huì)話(huà)”過(guò)程中,可能會(huì)向同一個(gè)應(yīng)用發(fā)出了多次請(qǐng)求,這些請(qǐng)求將共享一個(gè)Session對(duì)象,因?yàn)檫@些請(qǐng)求攜帶了相同的SessionID信息。Sessio對(duì)象的信息一般情況下置于服務(wù)器的內(nèi)存中,當(dāng)服務(wù)器由于故障重啟,或應(yīng)用重新加載時(shí)候,此時(shí)的Session信息將全部丟失。JSP隱式對(duì)象——session對(duì)象在session中存入對(duì)象VoidsetAttribute(Stringname,Objectval)從指定的session對(duì)象中提取數(shù)據(jù)ObjectgetAttribute(Stringname)刪除session中的指定對(duì)象voidremoveAttribute(Stringname)銷(xiāo)毀sessionvoidinvalidate()JSP隱式對(duì)象——session對(duì)象使用session處理個(gè)人信息session.setAttribute("userid",userid);session.setAttribute("username",username);response.sendRedirect("afterlogin.jsp");//獲取session中存儲(chǔ)的用戶(hù)名Stringusername=(String)session.getAttribute("username");session.removeAttribute("username");session.removeAttribute("userid");總結(jié)request對(duì)象request.getParameter()request.getParameterValues()request.setAttribute()request.getAttribute()response對(duì)象response.sendRedirect()session對(duì)象session.setAttribute()session.getAttribute()session.removeAttribute()JSP隱式對(duì)象——回顧request對(duì)象request.getParameter()request.getParameterValues()request.setAttribute()request.getAttribute()response對(duì)象response.sendRedirect()session對(duì)象session.setAttribute()session.getAttribute()session.removeAttribute()JSP隱式對(duì)象——application對(duì)象application對(duì)象用于保存所有應(yīng)用系統(tǒng)中的公有數(shù)據(jù),實(shí)現(xiàn)了用戶(hù)間數(shù)據(jù)的共享,可存放全局變量。服務(wù)器啟動(dòng)并且自動(dòng)創(chuàng)建application對(duì)象以后,只要沒(méi)有關(guān)閉服務(wù)器,application對(duì)象將一直存在,所有用戶(hù)可以共享application對(duì)象。這樣在用戶(hù)的前后連接或不同用戶(hù)之間的連接中,可以對(duì)此對(duì)象的同一屬性進(jìn)行操作;在任何地方對(duì)此對(duì)象屬性的操作,都將影響到其他用戶(hù)對(duì)此的訪(fǎng)問(wèn)。服務(wù)器的啟動(dòng)和關(guān)閉決定了application對(duì)象的生命周期。JSP隱式對(duì)象——application對(duì)象管理應(yīng)用程序的環(huán)境屬性在application對(duì)象中設(shè)置的屬性在整個(gè)應(yīng)用程序范圍內(nèi)是有效的,即使所有的用戶(hù)都不發(fā)送請(qǐng)求,只要不關(guān)閉應(yīng)用服務(wù)器,在其中設(shè)置的屬性仍然是有效的。VoidremoveAttribute(Stringname)從ServletContext的對(duì)象中去掉指定名稱(chēng)的屬性VoidsetAttribute(Stringname,objectobject)使用指定名稱(chēng)和指定對(duì)象在ServletContext的對(duì)象中進(jìn)行關(guān)聯(lián)ObjectgetAttribute(Stringname)從ServletContext的對(duì)象中獲取一個(gè)指定對(duì)象例:application.jspJSP隱式對(duì)象——out對(duì)象out對(duì)象主要用來(lái)向客戶(hù)端輸出各種數(shù)據(jù)類(lèi)型的內(nèi)容,并且管理應(yīng)用服務(wù)器上的輸出緩沖區(qū)。out對(duì)象最常用到的方法是out.println(Stringname)和out.print(Stringname),它們兩者最大的差別在于println()在輸出的數(shù)據(jù)后面會(huì)自動(dòng)加上換行的符號(hào)。JSP隱式對(duì)象——回顧request對(duì)象request.getParameter()request.getParameterValues()request.setAttribute()request.getAttribute()response對(duì)象response.sendRedirect()session對(duì)象session.setAttribute()session.getAttribute()session.removeAttribute()調(diào)試漢字亂碼現(xiàn)象問(wèn)題:在完成新用戶(hù)注冊(cè)、用戶(hù)登錄的過(guò)程中,常常會(huì)遇到提交的數(shù)據(jù)中包含有漢字的情況,這時(shí)接收類(lèi)中漢字會(huì)出現(xiàn)亂碼情況,最終導(dǎo)致于保存到數(shù)據(jù)庫(kù)中的漢字出現(xiàn)亂碼。原因:Java的內(nèi)核和class文件是基于unicode編碼調(diào)試漢字亂碼現(xiàn)象Java和JSP文件本身編譯時(shí)產(chǎn)生的亂碼問(wèn)題

Java(包括JSP)源文件中很可能包含有中文,而Java和JSP源文件的保存方式是基于字節(jié)流的,如果Java和JSP編譯成class文件過(guò)程中,使用的編碼方式與源文件的編碼不一致,就會(huì)出現(xiàn)亂碼。JSP頁(yè)面在文件頭加上如下代碼指令基本上就能解決這類(lèi)亂碼問(wèn)題。<%@pagecontentType="text/html;charset=GBK"%><%@pagecontentType="text/html;charset=gb2312"%>調(diào)試漢字亂碼現(xiàn)象Java程序與其他存儲(chǔ)媒介交換數(shù)據(jù)時(shí)產(chǎn)生的亂碼。很多存儲(chǔ)媒介,如數(shù)據(jù)庫(kù)、文件、流等的存儲(chǔ)方式都是基于字節(jié)流的,Java程序與這些媒介交換數(shù)據(jù)時(shí)就會(huì)發(fā)生字符(char)與字節(jié)(byte)之間的轉(zhuǎn)換。(1)從頁(yè)面提交數(shù)據(jù)到j(luò)ava程序

byte->char(2)從java程序到頁(yè)面顯示

char—>byte(3)從數(shù)據(jù)庫(kù)到j(luò)ava程序

byte—>char(4)從java程序到數(shù)據(jù)庫(kù) char—>byte(5)從文件到j(luò)ava程序

byte->char(6)從java程序到文件

char->byte(7)從流到j(luò)ava程序

byte->char(8)從java程序到流

char->byte調(diào)試漢字亂碼現(xiàn)象在JSP獲取頁(yè)面參數(shù)時(shí)一般采用系統(tǒng)默認(rèn)的編碼方式,如果頁(yè)面參數(shù)的編碼類(lèi)型和系統(tǒng)默認(rèn)的編碼類(lèi)型不一致,很可能就會(huì)出現(xiàn)亂碼。解決這類(lèi)亂碼問(wèn)題的基本方法是在頁(yè)面獲取參數(shù)之前,指定request獲取參數(shù)的編碼方式。request.setCharacterEncoding("GBK")request.setCharacterEncoding("gb2312")。如果在JSP將變量輸出到頁(yè)面時(shí)出現(xiàn)了亂碼,可以通過(guò)設(shè)置響應(yīng)對(duì)象response的編碼格式。response.setContentType(“text/html;charset=GBK”)

response.setContentType("text/html;charset=gb2312")。調(diào)試漢字亂碼現(xiàn)象強(qiáng)制類(lèi)型轉(zhuǎn)換。首先使用request隱式對(duì)象的getParameter()方法獲得請(qǐng)求數(shù)據(jù),再通過(guò)創(chuàng)建新字符串的方法強(qiáng)制將字符的編碼形式由ISO-8859-1轉(zhuǎn)換成gb2312格式,編碼類(lèi)型重新構(gòu)造。

StringuserName=request.getParameter("username");userName=newString(userName.getBytes("iso8859-1"),"gb2312");使用Session處理個(gè)人信息session對(duì)象指的是客戶(hù)端與服務(wù)器的一次會(huì)話(huà),從客戶(hù)連到服務(wù)器的一個(gè)WebApplication開(kāi)始,直到客戶(hù)端與服務(wù)器斷開(kāi)連接為止,它是HttpSession類(lèi)的實(shí)例。會(huì)話(huà)數(shù)據(jù)保存在服務(wù)器端對(duì)應(yīng)的Session對(duì)象中,由服務(wù)器來(lái)統(tǒng)一維護(hù),這樣一定程度保證了會(huì)話(huà)數(shù)據(jù)安全性,但增加了服務(wù)器端的內(nèi)存開(kāi)銷(xiāo)。我們把用戶(hù)打開(kāi)一個(gè)瀏覽器訪(fǎng)問(wèn)某個(gè)應(yīng)用開(kāi)始,到關(guān)閉瀏覽器為止的交互過(guò)程稱(chēng)為一個(gè)“會(huì)話(huà)”。在一個(gè)“會(huì)話(huà)”過(guò)程中,可能會(huì)向同一個(gè)應(yīng)用發(fā)出了多次請(qǐng)求,這些請(qǐng)求將共享一個(gè)Session對(duì)象,因?yàn)檫@些請(qǐng)求攜帶了相同的SessionID信息。Sessio對(duì)象的信息一般情況下置于服務(wù)器的內(nèi)存中,當(dāng)服務(wù)器由于故障重啟,或應(yīng)用重新加載時(shí)候,此時(shí)的Session信息將全部丟失。使用Session處理個(gè)人信息在session中存入對(duì)象VoidsetAttribute(Stringname,Objectval)從指定的session對(duì)象中提取數(shù)據(jù)ObjectgetAttribute(Stringname)刪除session中的指定對(duì)象voidremoveAttribute(Stringname)銷(xiāo)毀sessionvoidinvalidate()使用Session處理個(gè)人信息使用session處理個(gè)人信息session.setAttribute("userid",userid);session.setAttribute("username",username);response.sendRedirect("afterlogin.jsp");//獲取session中存儲(chǔ)的用戶(hù)名Stringusername=(String)session.getAttribute("username");session.removeAttribute("username");session.removeAttribute("userid");JSP應(yīng)用開(kāi)發(fā)項(xiàng)目化教程第5章MVC模式與Servlet計(jì)算機(jī)與通信工程學(xué)院115本章目標(biāo)JSP隱式對(duì)象JSP隱式對(duì)象應(yīng)用中常見(jiàn)問(wèn)題115開(kāi)發(fā)模式與MVC三層結(jié)構(gòu)從JSP的發(fā)展過(guò)程來(lái)看,JSP的開(kāi)發(fā)模式經(jīng)歷了三個(gè)階段的變遷:階段1:JSP頁(yè)面獨(dú)立完成所有的任務(wù)模塊

(房屋交易信息系統(tǒng)中登錄、注冊(cè)功能的實(shí)現(xiàn))階段2:JSPModel1:用JSP+JavaBean實(shí)現(xiàn)兩層的開(kāi)發(fā)模式。

(個(gè)人房屋信息管理、房屋信息查詢(xún)功能的實(shí)現(xiàn))階段3:JSPModel2:使用JSP+Servlet+JavaBean三層開(kāi)發(fā)模式進(jìn)行開(kāi)發(fā),這種模式實(shí)現(xiàn)了MVC三層結(jié)構(gòu),是一種規(guī)范的開(kāi)發(fā)模式。開(kāi)發(fā)模式與MVC三層結(jié)構(gòu)階段1:JSP文件同時(shí)負(fù)責(zé)生成網(wǎng)頁(yè)、控制到下一個(gè)網(wǎng)頁(yè)的流程以及完成業(yè)務(wù)邏輯。問(wèn)題:Html標(biāo)簽和Java邏輯代碼強(qiáng)耦合在一起,JSP文件的編寫(xiě)者必須既是網(wǎng)頁(yè)設(shè)計(jì)者,又是Java開(kāi)發(fā)者。頁(yè)面的可讀性差、調(diào)試?yán)щy、不利于維護(hù)更改業(yè)務(wù)邏輯或數(shù)據(jù)可能牽涉相關(guān)的多個(gè)網(wǎng)頁(yè)。開(kāi)發(fā)模式與MVC三層結(jié)構(gòu)階段2:Model1應(yīng)用了JavaWeb開(kāi)發(fā)當(dāng)中的兩種技術(shù)JSP:完成邏輯上的處理和顯示,接受用戶(hù)的請(qǐng)求和響應(yīng)給用戶(hù)數(shù)據(jù),同時(shí)還完成流程的控制處理JavaBean技術(shù):做輔助取得相應(yīng)數(shù)據(jù)。Model1模型實(shí)現(xiàn)了JSP開(kāi)發(fā)的兩層模型,JavaBean成為實(shí)現(xiàn)業(yè)務(wù)邏輯的主要場(chǎng)所。開(kāi)發(fā)模式與MVC三層結(jié)構(gòu)JSPModel1的優(yōu)點(diǎn):結(jié)構(gòu)很簡(jiǎn)單,開(kāi)發(fā)人員很容易上手,適合開(kāi)發(fā)一些小型的JavaWeb應(yīng)用。JSPModel1的缺點(diǎn):由于它是把顯示代碼和邏輯處理代碼都放在JSP頁(yè)面當(dāng)中,如果開(kāi)發(fā)大型的javaWeb應(yīng)用的話(huà),就顯得力不從心了既不便于開(kāi)發(fā)人員的維護(hù),也不便于美工人員的修改開(kāi)發(fā)模式與MVC三層結(jié)構(gòu)在Model1中引入Servlet就形成了Model2模式。利用Servlet實(shí)現(xiàn)對(duì)系統(tǒng)業(yè)務(wù)邏輯的控制,Servlet是整個(gè)業(yè)務(wù)過(guò)程的控制中心。MVC是Model-View-Controller的簡(jiǎn)稱(chēng),即模型-視圖-控制器。MVC是一種開(kāi)發(fā)模式,它把應(yīng)用程序分成三個(gè)核心模塊:模型、視圖、控制器,它們各自處理自己的任務(wù)。

開(kāi)發(fā)模式與MVC三層結(jié)構(gòu)視圖(View)是用戶(hù)看到并與之交互的界面。向用戶(hù)顯示相關(guān)的數(shù)據(jù)、接受用戶(hù)的輸入;不進(jìn)行任何實(shí)際的業(yè)務(wù)處理;視圖向模型查詢(xún)業(yè)務(wù)狀態(tài),接受數(shù)據(jù)更新事件對(duì)界面進(jìn)行同步更新。模型(Model)是應(yīng)用程序的主體部分,模型表示業(yè)務(wù)數(shù)據(jù)和業(yè)務(wù)邏輯。一個(gè)模型能為多個(gè)視圖提供數(shù)據(jù)。由于應(yīng)用于模型的代碼只需寫(xiě)一次就可以被多個(gè)視圖重用,所以提高了代碼的可重用性??刂破鳎⊿ervlet)接受用戶(hù)的輸入并調(diào)用模型完成用戶(hù)的需求,之后能夠根據(jù)不同要求導(dǎo)航到不同的視圖頁(yè)面或其他的Servlet控制中心??刂破鞴ぷ鬟^(guò)程如下:首先控制器接收用戶(hù)的請(qǐng)求,并決定應(yīng)該調(diào)用哪個(gè)模型來(lái)進(jìn)行處理;然后模型根據(jù)用戶(hù)請(qǐng)求進(jìn)行相應(yīng)的業(yè)務(wù)邏輯處理,并返回?cái)?shù)據(jù);最后控制器調(diào)用相應(yīng)的視圖格式化模型返回的數(shù)據(jù),并通過(guò)視圖呈現(xiàn)給用戶(hù)開(kāi)發(fā)模式與MVC三層結(jié)構(gòu)MVC三層模型優(yōu)點(diǎn):多個(gè)視圖能共享一個(gè)模型。同一個(gè)模型可以被不同的視圖重用,大大提高了代碼的可重用性。MVC的三個(gè)模塊相互獨(dú)立,改變其中一個(gè)不會(huì)影響其他兩個(gè),所以依據(jù)這種設(shè)計(jì)思想能構(gòu)造良好的松偶合的構(gòu)件??刂破魈岣吡藨?yīng)用程序的靈活性和可配置性??刂破骺梢杂脕?lái)聯(lián)接不同的模型和視圖去完成用戶(hù)的需求,這樣控制器可以為構(gòu)造應(yīng)用程序提供強(qiáng)有力的手段。了解ServletServlet技術(shù)是Sun公司提供的一種實(shí)現(xiàn)動(dòng)態(tài)網(wǎng)頁(yè)的解決方案,它是基于Java編程語(yǔ)言的WEB服務(wù)器端編程技術(shù),運(yùn)行在WEB服務(wù)器端,獲得客戶(hù)端的訪(fǎng)問(wèn)請(qǐng)求信息和動(dòng)態(tài)生成對(duì)客戶(hù)端的響應(yīng)消息。Servlet具有獨(dú)立于平臺(tái)和協(xié)議的特性,可以生成動(dòng)態(tài)的Web頁(yè)面。它擔(dān)當(dāng)客戶(hù)請(qǐng)求(Web瀏覽器或其他HTTP客戶(hù)程序)與服務(wù)器響應(yīng)(HTTP服務(wù)器上的數(shù)據(jù)庫(kù)或應(yīng)用程序)的中間層。與傳統(tǒng)的從命令行啟動(dòng)的Java應(yīng)用程序不同,Servlet由Web服務(wù)器進(jìn)行加載。Servlet運(yùn)行在服務(wù)器。了解Servlet一個(gè)Servlet程序就是一個(gè)實(shí)現(xiàn)了特殊接口的Java類(lèi),用于支持Servlet的Web服務(wù)器調(diào)用和運(yùn)行,只能運(yùn)行于具有Servlet引擎的Web服務(wù)器端。一個(gè)Servlet程序負(fù)責(zé)處理它所對(duì)應(yīng)的一個(gè)或一組URL地址的訪(fǎng)問(wèn)請(qǐng)求,接收訪(fǎng)問(wèn)請(qǐng)求信息和產(chǎn)生響應(yīng)內(nèi)容。Servlet與普通Java程序相比,只是輸入信息的來(lái)源和輸出結(jié)果的目標(biāo)不一樣。普通Java程序所能完成的大多數(shù)任務(wù)Servlet程序都可以完成。Servlet程序具有如下的一些基本功能:獲取客戶(hù)端請(qǐng)求及數(shù)據(jù);創(chuàng)建對(duì)客戶(hù)端的響應(yīng)消息內(nèi)容;訪(fǎng)問(wèn)服務(wù)器端的文件系統(tǒng);調(diào)用其它的Java類(lèi)。了解Servlet一個(gè)Servlet程序就是一個(gè)在Web服務(wù)器運(yùn)行的特殊Java類(lèi),這個(gè)特殊Java類(lèi)必須實(shí)現(xiàn)javax.servlet.Servlet接口,Servlet接口定義了Servlet容器與Servlet程序之間通信的協(xié)議約定。ServletAPI中還提供了一個(gè)專(zhuān)用于HTTP協(xié)議的Servlet類(lèi),其名稱(chēng)是javax.servlet.http.HttpServlet,它在Generic

Servlet類(lèi)的基礎(chǔ)上進(jìn)行了一些針對(duì)HTTP特點(diǎn)的擴(kuò)充。為了充分利用HTTP協(xié)議的功能,Servlet類(lèi)繼承HttpServlet類(lèi)。了解ServletServlet的創(chuàng)建了解Servlet了解Servlet了解ServletServlet中的常用方法:(1)init()方法在Servlet的生命期中,僅執(zhí)行一次init()方法。它是在服務(wù)器裝入Servlet時(shí)執(zhí)行的。無(wú)論有多少客戶(hù)機(jī)訪(fǎng)問(wèn)Servlet,都不會(huì)重復(fù)執(zhí)行init()。缺省的init()方法通常是符合要求的,但也可以用定制init()方法來(lái)覆蓋它。(2)service()方法service()方法是Servlet的核心。每當(dāng)一個(gè)客戶(hù)請(qǐng)求一個(gè)HttpServlet對(duì)象,該對(duì)象的service()方法就要被調(diào)用,而且傳遞給這個(gè)方法一個(gè)"請(qǐng)求"(ServletRequest)對(duì)象和一個(gè)"響應(yīng)"(ServletResponse)對(duì)象作為參數(shù)。在HttpServlet中已存在service()方法。缺省的服務(wù)功能是調(diào)用與HTTP請(qǐng)求的方法相應(yīng)的doXXX功能。例如,如果HTTP請(qǐng)求方法為GET,則缺省情況下就調(diào)用doGet()。了解Servlet(3)doGet()方法doGet()方法是Servlet中的方法之一,用于接受由get模式提交的數(shù)據(jù),與此對(duì)應(yīng)還有一個(gè)doPost()方法,用于接受由post模式提交的數(shù)據(jù)。當(dāng)一個(gè)客戶(hù)通過(guò)Html表單發(fā)出一個(gè)HTTPGET請(qǐng)求或直接請(qǐng)求一個(gè)URL時(shí),doGet()方法被調(diào)用。與GET請(qǐng)求相關(guān)的參數(shù)添加到URL的后面,并與這個(gè)請(qǐng)求一起發(fā)送。(4)doPost()方法當(dāng)一個(gè)客戶(hù)通過(guò)Html表單發(fā)出一個(gè)HTTPPOST請(qǐng)求時(shí),doPost()方法被調(diào)用。與POST請(qǐng)求相關(guān)的參數(shù)作為一個(gè)單獨(dú)的HTTP請(qǐng)求從瀏覽器發(fā)送到服務(wù)器。(5)destroy()方法destroy()方法僅執(zhí)行一次,即在服務(wù)器停止且卸裝Servlet時(shí)執(zhí)行該方法。典型的將Servlet作為服務(wù)器進(jìn)程的一部分來(lái)關(guān)閉。缺省的destroy()方法通常是符合要求的,但也可以覆蓋它。了解Servlet了解Servlet復(fù)習(xí)servlet的創(chuàng)建JSP開(kāi)發(fā)模式JSPmodel1JSPmodel2servlet的創(chuàng)建過(guò)程回顧MVC三層架構(gòu)模型視圖控制器Servlet的創(chuàng)建創(chuàng)建過(guò)程Web.xml文件6.2.3創(chuàng)建一個(gè)簡(jiǎn)單的Servlet使用Servlet實(shí)現(xiàn)用戶(hù)登錄LoginCheck的主要工作:接收界面輸入調(diào)用JavaBean中的方法訪(fǎng)問(wèn)數(shù)據(jù)庫(kù)根據(jù)訪(fǎng)問(wèn)數(shù)據(jù)庫(kù)的情況進(jìn)行頁(yè)面跳轉(zhuǎn)JSP頁(yè)面視圖層(View)LoginServlet登錄校驗(yàn)Servlet控制層(C)Java業(yè)務(wù)類(lèi)模型層(M)ViewControlModel創(chuàng)建一個(gè)簡(jiǎn)單的Servlet實(shí)現(xiàn)步驟:1.創(chuàng)建login.jsp、index.jsp、error.jsp。2.編寫(xiě)業(yè)務(wù)類(lèi)查詢(xún)數(shù)據(jù)庫(kù),判斷用戶(hù)是否存在。3.創(chuàng)建Servlet,定義Servlet中的doGet()方法或doPost()方法,用于接收請(qǐng)求數(shù)據(jù)并調(diào)用后臺(tái)類(lèi)檢驗(yàn)用戶(hù)登錄信息。4.修改登錄頁(yè)面登錄請(qǐng)求地址,將請(qǐng)求地址改為映射的Servlet地址。創(chuàng)建一個(gè)簡(jiǎn)單的Servlet1.login.jsp頁(yè)面2.LoginCheck.java類(lèi)(loginCheck()方法)3.LoginServlet.java類(lèi)定義接收變量(用戶(hù)名、密碼)實(shí)例化后臺(tái)模型類(lèi),通過(guò)模型對(duì)象調(diào)用業(yè)務(wù)方法根據(jù)業(yè)務(wù)方法的執(zhí)行結(jié)果,進(jìn)行相應(yīng)的導(dǎo)航用戶(hù)存在:設(shè)置session(username、userid、isLogined)跳轉(zhuǎn)到index.jsp頁(yè)面用戶(hù)不存在:跳轉(zhuǎn)到相應(yīng)的錯(cuò)誤信息提示頁(yè)面創(chuàng)建一個(gè)簡(jiǎn)單的ServletLoginServlet.java的創(chuàng)建過(guò)程創(chuàng)建一個(gè)簡(jiǎn)單的ServletLoginServlet.java的創(chuàng)建過(guò)程創(chuàng)建一個(gè)簡(jiǎn)單的ServletLoginServlet.java的創(chuàng)建過(guò)程創(chuàng)建一個(gè)簡(jiǎn)單的Servlet4.修改登錄頁(yè)面登錄請(qǐng)求地址,將請(qǐng)求地址改為映射的Servlet地址。注:在Servlet開(kāi)發(fā)過(guò)程中若是修改了Web.xml中的Servlet的配置信息,要重新發(fā)布、啟動(dòng)服務(wù)器重新加載配置信息。6.2.3創(chuàng)建一個(gè)簡(jiǎn)單的Servlet5.創(chuàng)建error.jsp頁(yè)面。6.2.3創(chuàng)建一個(gè)簡(jiǎn)單的Servlet6.改進(jìn)index.jsp頁(yè)面?;仡橲ervlet的創(chuàng)建與使用Servlet中session隱式對(duì)象的使用HttpSessionsession=request.getSession();Servlet生命周期1)當(dāng)Servlet第一次被調(diào)用的時(shí)候會(huì)觸發(fā)init方法,該方法會(huì)把servlet實(shí)例加載到內(nèi)存。該方法只會(huì)被調(diào)用一次;2)然后去調(diào)用servlet的service方法;3)當(dāng)?shù)诙伟ǖ诙我院缶椭苯诱{(diào)用service方法;4)當(dāng)web應(yīng)用需要reload或者是關(guān)閉tomcat或者關(guān)機(jī)都會(huì)去調(diào)用destroy方法。該方法就會(huì)去銷(xiāo)毀servlet。下面三種情況會(huì)調(diào)用destroy方法:第一種就是關(guān)閉tomcat,第二種就是web應(yīng)用reload,第三種情況就是關(guān)機(jī)。Request與Servlet容器相關(guān)的方法Request與Servlet容器相關(guān)的方法ServletContext容器ServletContext容器1)Tomcat服務(wù)器啟動(dòng)→讀入web.xml文件;2)Tomcat容器為這個(gè)應(yīng)用建立一個(gè)新的ServletContext實(shí)例,應(yīng)用的所有部分都共享這個(gè)上下文;

3)如果web.xml文件中有定義上下文的初始參數(shù),則容器首先創(chuàng)建初始參數(shù)實(shí)例;

4)把初始化參數(shù)實(shí)例的引用交給ServletContext上下文;5)容器創(chuàng)建servlet,這時(shí)建立一個(gè)新的ServletConfig對(duì)象,并且為這個(gè)ServletConfig對(duì)象提供一個(gè)ServletContext的引用;6)調(diào)用servlet的init()方法初始化servlet。請(qǐng)求轉(zhuǎn)發(fā)與重定向的區(qū)別請(qǐng)求轉(zhuǎn)發(fā)與重定向的區(qū)別請(qǐng)求轉(zhuǎn)發(fā)只能將請(qǐng)求轉(zhuǎn)發(fā)給同一個(gè)WEB應(yīng)用中的組件;而重定向還可以重定向到同一個(gè)站點(diǎn)上的其他應(yīng)用程序中的資源,甚至是使用絕對(duì)URL重定向到其他站點(diǎn)的資源。重定向的訪(fǎng)問(wèn)過(guò)程結(jié)束后,瀏覽器地址欄中顯示的URL會(huì)發(fā)生改變,由初始的URL地址變成重定向的目標(biāo)URL;而請(qǐng)求轉(zhuǎn)發(fā)過(guò)程結(jié)束后,瀏覽器地址欄保持初始的URL地址不變。重定向?qū)g覽器的請(qǐng)求直接作出響應(yīng),響應(yīng)的結(jié)果就是告訴瀏覽器去重新發(fā)出對(duì)另外一個(gè)URL的訪(fǎng)問(wèn)請(qǐng)求。重定向調(diào)用者與被調(diào)用者使用各自的request對(duì)象和response對(duì)象,它們屬于兩個(gè)獨(dú)立的訪(fǎng)問(wèn)請(qǐng)求和響應(yīng)過(guò)程。請(qǐng)求轉(zhuǎn)發(fā)的調(diào)用者與被調(diào)用者之間共享相同的request對(duì)象和response對(duì)象,它們屬于同一個(gè)訪(fǎng)問(wèn)請(qǐng)求和響應(yīng)過(guò)程。請(qǐng)求轉(zhuǎn)發(fā)與重定向的區(qū)別請(qǐng)求轉(zhuǎn)發(fā)與重定向的使用場(chǎng)合對(duì)于同一個(gè)WEB應(yīng)用程序的內(nèi)部資源之間的跳轉(zhuǎn),特別是跳轉(zhuǎn)之前要對(duì)請(qǐng)求進(jìn)行一些前期預(yù)處理,并要使用HttpServletRequest.setAttribute方法傳遞預(yù)處理結(jié)果,那就應(yīng)該使用forward方法進(jìn)行請(qǐng)求轉(zhuǎn)發(fā);不同WEB應(yīng)用程序之間的重定向,特別是要重定向到另外一個(gè)WEB站點(diǎn)上的資源的情況,都應(yīng)該使sendRedirect方法。通常情況下,請(qǐng)求轉(zhuǎn)發(fā)速度更快,而且能保持request內(nèi)的對(duì)象,要想在request對(duì)象中保存讀取的后臺(tái)數(shù)據(jù),應(yīng)該選用請(qǐng)求轉(zhuǎn)發(fā)導(dǎo)航。數(shù)據(jù)的保存

session.setAttribute("username",username);session.getAttribute("username");request.setAttribute("result",result);request.getAttribute("result");不要輕易的將數(shù)據(jù)保存到session作用域,那會(huì)增大服務(wù)器的負(fù)擔(dān)。而是要將數(shù)據(jù)保存到request中,使用請(qǐng)求轉(zhuǎn)發(fā)實(shí)現(xiàn)導(dǎo)航。Servlet與Cookie處理Cookie指網(wǎng)站為了辨別用戶(hù)身份、進(jìn)行session跟蹤而儲(chǔ)存在用戶(hù)本地終端上的數(shù)據(jù),是由Web服務(wù)器保存在用戶(hù)瀏覽器上的小文本文件,它包含有關(guān)用戶(hù)的信息。Servlet是服務(wù)端應(yīng)用。Session是在服務(wù)端用于保存用戶(hù)信息機(jī)一種容器Servlet中讀寫(xiě)Cookie在服務(wù)端Servlet中操作Cookie一般可分為三個(gè)步驟:1)服務(wù)器向?yàn)g覽器發(fā)送一組Cookie;2)瀏覽器將這些信息存儲(chǔ)在內(nèi)存或本地計(jì)算機(jī)上,以備將來(lái)使用;3)當(dāng)下一次瀏覽器向Web服務(wù)器發(fā)送任何請(qǐng)求時(shí),瀏覽器會(huì)把這些Cookie信息發(fā)送到服務(wù)器,服務(wù)器將使用這些信息來(lái)識(shí)別用戶(hù)。Servlet中

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論