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

下載本文檔

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

文檔簡介

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

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

在安裝MySQL過程中弄清每一步的選項(xiàng)含義,重點(diǎn)注意數(shù)據(jù)庫編碼、端口、root用戶口令等參數(shù)設(shè)定環(huán)節(jié),安裝完成后需要進(jìn)行測(cè)試確保MySQL數(shù)據(jù)庫服務(wù)正常啟動(dòng)。MySQL數(shù)據(jù)庫的使用MySQL測(cè)試安裝完成后,測(cè)試MySQL服務(wù)是否成功安裝。如圖1.13所示,從開始菜單中選擇MySQL程序組,選擇【MySQL5.5CommandLineClient】進(jìn)入命令行登錄窗口,輸入安裝過程中的預(yù)留密碼后進(jìn)入MySQL命令行控制狀態(tài)。MySQL數(shù)據(jù)庫的使用MySQL管理工具Navicat是一套快速、可靠的數(shù)據(jù)庫管理工具,專為簡化數(shù)據(jù)庫管理及降低系統(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)和訪問項(xiàng)目創(chuàng)建完成后,可以通過發(fā)布將項(xiàng)目部署到Tomcat服務(wù)器中,啟動(dòng)服務(wù)器就可以訪問項(xiàng)目頁面。MyEclipse有自帶的tomcat服務(wù)器,但一般都用外置的tomcat6.0服務(wù)器。項(xiàng)目的發(fā)布、啟動(dòng)和訪問外置tomcat6.0的配置Window->preferences進(jìn)入配置環(huán)境界面,MyEclipse->servers->tomcat項(xiàng)目的發(fā)布、啟動(dòng)和訪問發(fā)布項(xiàng)目項(xiàng)目的發(fā)布、啟動(dòng)和訪問啟動(dòng)服務(wù)器項(xiàng)目的發(fā)布、啟動(dòng)和訪問啟動(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ù)庫設(shè)計(jì)序號(hào)字段名字段描述類型長度主鍵外鍵空備注1id用戶ID號(hào)Int

Y

N自增列2userName用戶名Varchar50

3userPass登錄口令Varchar50

4userType用戶類型Char1

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

0-無效1-有效6bz備注Varchar100

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

Y

N自增列2userId用戶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)系電話Varchar50

12contractMan聯(lián)系人Varchar50

13area房屋面積Float

14cellName小區(qū)名稱Varchar50

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

Y

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

N

3detailInfo求租信息Varchar200

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

5sdate發(fā)布日期Varchar

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

7cellName聯(lián)系人Varchar50

JSP應(yīng)用開發(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(庫)管理。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)目的訪問地址,當(dāng)項(xiàng)目重命名后,WebContextRoot中的名稱并不能自動(dòng)更新,需要開發(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的方法直接在頁面中加入Javascript代碼<head>…...<scripttype="text/javascript">……</script></head>引用外部JS文件<scriptsrc=“url”type=“text/javascript”></script>Html相關(guān)知識(shí)用戶注冊(cè)界面的JS校驗(yàn)Html相關(guān)知識(shí)functionpass(){varpass=false;if(document.form1.uname.value==""){alert("用戶名不能為空!");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í)用戶登錄界面的JS校驗(yàn)Html相關(guān)知識(shí)個(gè)人房屋信息管理頁面多導(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>提交按鈕類動(dòng)作<inputname="addbutton"type="submit"value="增加"><formname="form1"method="post"action="sendinfo.html">普通按鈕類動(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í)兩種頁面跳轉(zhuǎn)方式的區(qū)別超鏈接方式不能提交頁面表單中的數(shù)據(jù),數(shù)據(jù)要用參數(shù)的形式傳遞ahref=‘sendinfo.jsp?username=aa&userid=123’提交按鈕可以將表單中的各個(gè)字段作為參數(shù)將數(shù)據(jù)一起提交到服務(wù)器端Html相關(guān)知識(shí)引用CSS的方法寫在頁面上<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布局頁面<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)用開發(fā)項(xiàng)目化教程第3章JSP基礎(chǔ)知識(shí)計(jì)算機(jī)與通信工程學(xué)院55本章目標(biāo)JSP基礎(chǔ)知識(shí)JSP動(dòng)作標(biāo)簽JSP中訪問數(shù)據(jù)庫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頁面第一次被請(qǐng)求的時(shí)候,服務(wù)器的JSP編譯器會(huì)把JSP頁面編譯成對(duì)應(yīng)的Java代碼,根據(jù)動(dòng)態(tài)Java代碼執(zhí)行的結(jié)果,生成對(duì)應(yīng)的純HTML的字符串返回給瀏覽器,這樣就可以把動(dòng)態(tài)程序的結(jié)果展示給用戶。JSP基礎(chǔ)知識(shí)JSP頁面元素主要分為模版元素(HTML標(biāo)簽)、Java腳本元素、頁面注釋和頁面指令組成。模板元素:指JSP頁面中的靜態(tài)HTML內(nèi)容。注釋顯式注釋隱藏注釋java片段注釋Java腳本元素聲明表達(dá)式j(luò)ava腳本代碼指令標(biāo)識(shí):page、include、taglibJSP基礎(chǔ)知識(shí)顯示注釋<!--注釋內(nèi)容-->這種注釋在客戶端通過查看頁面的源代碼能夠顯示出來隱藏注釋<%--隱藏注釋--%>這種注釋在JSP頁面編譯時(shí)被忽略,并且不能夠在客戶端看到注釋內(nèi)容。Java片斷注釋只能用在JSP頁面中<%%>中的Java代碼上。//注釋/*注釋*//**注釋*/ex1.jspJSP基礎(chǔ)知識(shí)聲明標(biāo)識(shí)(Declaration)在JSP頁面中可以聲明變量或方法,格式為:<%!聲明變量或方法的代碼%>在頁面中聲明的變量和方法,在整個(gè)頁面內(nèi)都有效,它們將成為jsp頁面被轉(zhuǎn)換為類文件后類中的屬性和方法。并且會(huì)被多個(gè)用戶共享。任何一個(gè)用戶的修改都會(huì)改變他們?cè)瓉淼臓顟B(tài)。聲明部分不可以嵌入java代碼片斷和使用JSP內(nèi)置對(duì)象。ex2.jspJSP基礎(chǔ)知識(shí)JSP表達(dá)式(Expression)表達(dá)式用于向頁面中輸出信息,使用格式為:<%=變量/可以返回值的方法/java表達(dá)式%>

注:<%與=之間沒有空格變量或表達(dá)式后面沒有分號(hào)<%Stringname="aaa";%>用戶名:<%=name%><%Stringpath="index.jsp";%><ahref=<%=path%>>鏈接到index.jsp頁面</a><%Stringpath="index.jsp";%><formaction=<%=path%>></form>ex3.jspJSP基礎(chǔ)知識(shí)Java腳本代碼(scriptlet)在JSP頁面中使用<%與%>標(biāo)記起來的一段Java代碼。在腳本中可以定義變量、調(diào)用方法和進(jìn)行各種表達(dá)式運(yùn)算,可以使用JSP的內(nèi)置對(duì)象。且每行語句后面要加入分號(hào)。在腳本中定義變量在當(dāng)前整個(gè)頁面內(nèi)有效,但不會(huì)被其他的線程共享,當(dāng)前用戶對(duì)該變量的操作不會(huì)影響到其他用戶。當(dāng)變量所在的頁面關(guān)閉后就會(huì)被銷毀。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頁面中輸入用戶名和密碼,在登錄處理頁面rec_login.jsp中將用戶名和密碼輸出。創(chuàng)建left.jsp頁面。(在left.html上改進(jìn))創(chuàng)建rec_login.jsp頁面。接收數(shù)據(jù)。Stringname=request.getParameter("uname");Stringpass=request.getParameter("upass");輸出數(shù)據(jù)。System.out.println("用戶名:"+name);System.out.println("密碼:"+pass);out.println("用戶名:"+name);out.println("密碼:"+pass);用戶名:<%=name%><br>

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

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

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

id="name"scope=""

class="package.class"/>創(chuàng)建一個(gè)由class屬性指定的類的實(shí)例,然后把它綁定到名字由id屬性給出的變量上。定義一個(gè)scope屬性可以讓Bean關(guān)聯(lián)到更多的頁面。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)頁中,若用戶轉(zhuǎn)換到下一網(wǎng)頁或單擊刷新按鈕,則JavaBean對(duì)象失效。Request:JavaBean對(duì)象生命周期是當(dāng)用戶“請(qǐng)求”網(wǎng)頁的時(shí)候產(chǎn)生,在進(jìn)行網(wǎng)頁重定向后JavaBean對(duì)象便自動(dòng)消失。Session:該JavaBean對(duì)象生命周期是session存在的時(shí)候。即從session建立時(shí)開始,在系統(tǒng)默認(rèn)的時(shí)間里JavaBean對(duì)象有效。Application:表示該JavaBean對(duì)象生命周期是application存在的時(shí)候,從application建立時(shí)開始,到application結(jié)束時(shí)JavaBean也隨著結(jié)束。JSP動(dòng)作標(biāo)簽-了解JavaBean<jsp:setProperty>動(dòng)作指令

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

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

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

name=“beanInstanceName”property=“propertyName”

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

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

通過value變量,動(dòng)態(tài)傳值給beanInstanceName中的屬性JSP動(dòng)作標(biāo)簽-了解JavaBean<jsp:getProperty>動(dòng)作指令jsp:getProperty動(dòng)作提取指定Bean屬性的值,轉(zhuǎn)換成字符串,然后輸出到JSP頁面上。jsp:getProperty有兩個(gè)必需的屬性,屬性name表示Bean的名字;屬性property表示要提取哪個(gè)屬性的值。<jsp:getPropertyname="beanInstanceName"property="propertyName"/>JavaBean實(shí)例化對(duì)象存在某個(gè)隱式范圍中,可以通過相關(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頁面向跳轉(zhuǎn)到另一個(gè)JSP頁面,跳轉(zhuǎn)過程中可以將請(qǐng)求中的參數(shù)繼續(xù)傳遞到第二個(gè)頁面,實(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頁面向跳轉(zhuǎn)到另一個(gè)JSP頁面,跳轉(zhuǎn)過程中可以將請(qǐng)求中的參數(shù)繼續(xù)傳遞到第二個(gè)頁面,實(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)用開發(fā)項(xiàng)目化教程第4章JSP隱式對(duì)象及其應(yīng)用計(jì)算機(jī)與通信工程學(xué)院83本章目標(biāo)JSP隱式對(duì)象JSP隱式對(duì)象應(yīng)用中常見問題83JSP隱式對(duì)象JSP隱式對(duì)象(內(nèi)置對(duì)象)是可以不加聲明就在JSP頁面腳本(java程序片斷和java表達(dá)式)中使用的默認(rèn)對(duì)象。JSP隱式對(duì)象不需要開發(fā)人員實(shí)例化,在JSP頁面初始化的時(shí)候生成,在所有的JSP頁面都能使用。JSP隱式對(duì)象存在于服務(wù)器的內(nèi)存中,實(shí)現(xiàn)對(duì)臨時(shí)數(shù)據(jù)的存儲(chǔ),應(yīng)用程序可以利用JSP的各種隱式對(duì)象完成后臺(tái)數(shù)據(jù)與前臺(tái)頁面的交換功能。不同的隱式對(duì)象的作用范圍不一樣。

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

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

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

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

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

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

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

StringuserName=request.getParameter("username");userName=newString(userName.getBytes("iso8859-1"),"gb2312");使用Session處理個(gè)人信息session對(duì)象指的是客戶端與服務(wù)器的一次會(huì)話,從客戶連到服務(wù)器的一個(gè)WebApplication開始,直到客戶端與服務(wù)器斷開連接為止,它是HttpSession類的實(shí)例。會(huì)話數(shù)據(jù)保存在服務(wù)器端對(duì)應(yīng)的Session對(duì)象中,由服務(wù)器來統(tǒng)一維護(hù),這樣一定程度保證了會(huì)話數(shù)據(jù)安全性,但增加了服務(wù)器端的內(nèi)存開銷。我們把用戶打開一個(gè)瀏覽器訪問某個(gè)應(yīng)用開始,到關(guān)閉瀏覽器為止的交互過程稱為一個(gè)“會(huì)話”。在一個(gè)“會(huì)話”過程中,可能會(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)銷毀sessionvoidinvalidate()使用Session處理個(gè)人信息使用session處理個(gè)人信息session.setAttribute("userid",userid);session.setAttribute("username",username);response.sendRedirect("afterlogin.jsp");//獲取session中存儲(chǔ)的用戶名Stringusername=(String)session.getAttribute("username");session.removeAttribute("username");session.removeAttribute("userid");JSP應(yīng)用開發(fā)項(xiàng)目化教程第5章MVC模式與Servlet計(jì)算機(jī)與通信工程學(xué)院115本章目標(biāo)JSP隱式對(duì)象JSP隱式對(duì)象應(yīng)用中常見問題115開發(fā)模式與MVC三層結(jié)構(gòu)從JSP的發(fā)展過程來看,JSP的開發(fā)模式經(jīng)歷了三個(gè)階段的變遷:階段1:JSP頁面獨(dú)立完成所有的任務(wù)模塊

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

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

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

Servlet類的基礎(chǔ)上進(jìn)行了一些針對(duì)HTTP特點(diǎn)的擴(kuò)充。為了充分利用HTTP協(xié)議的功能,Servlet類繼承HttpServlet類。了解ServletServlet的創(chuàng)建了解Servlet了解Servlet了解ServletServlet中的常用方法:(1)init()方法在Servlet的生命期中,僅執(zhí)行一次init()方法。它是在服務(wù)器裝入Servlet時(shí)執(zhí)行的。無論有多少客戶機(jī)訪問Servlet,都不會(huì)重復(fù)執(zhí)行init()。缺省的init()方法通常是符合要求的,但也可以用定制init()方法來覆蓋它。(2)service()方法service()方法是Servlet的核心。每當(dāng)一個(gè)客戶請(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è)客戶通過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è)客戶通過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)程的一部分來關(guān)閉。缺省的destroy()方法通常是符合要求的,但也可以覆蓋它。了解Servlet了解Servlet復(fù)習(xí)servlet的創(chuàng)建JSP開發(fā)模式JSPmodel1JSPmodel2servlet的創(chuàng)建過程回顧MVC三層架構(gòu)模型視圖控制器Servlet的創(chuàng)建創(chuàng)建過程Web.xml文件6.2.3創(chuàng)建一個(gè)簡單的Servlet使用Servlet實(shí)現(xiàn)用戶登錄LoginCheck的主要工作:接收界面輸入調(diào)用JavaBean中的方法訪問數(shù)據(jù)庫根據(jù)訪問數(shù)據(jù)庫的情況進(jìn)行頁面跳轉(zhuǎn)JSP頁面視圖層(View)LoginServlet登錄校驗(yàn)Servlet控制層(C)Java業(yè)務(wù)類模型層(M)ViewControlModel創(chuàng)建一個(gè)簡單的Servlet實(shí)現(xiàn)步驟:1.創(chuàng)建login.jsp、index.jsp、error.jsp。2.編寫業(yè)務(wù)類查詢數(shù)據(jù)庫,判斷用戶是否存在。3.創(chuàng)建Servlet,定義Servlet中的doGet()方法或doPost()方法,用于接收請(qǐng)求數(shù)據(jù)并調(diào)用后臺(tái)類檢驗(yàn)用戶登錄信息。4.修改登錄頁面登錄請(qǐng)求地址,將請(qǐng)求地址改為映射的Servlet地址。創(chuàng)建一個(gè)簡單的Servlet1.login.jsp頁面2.LoginCheck.java類(loginCheck()方法)3.LoginServlet.java類定義接收變量(用戶名、密碼)實(shí)例化后臺(tái)模型類,通過模型對(duì)象調(diào)用業(yè)務(wù)方法根據(jù)業(yè)務(wù)方法的執(zhí)行結(jié)果,進(jìn)行相應(yīng)的導(dǎo)航用戶存在:設(shè)置session(username、userid、isLogined)跳轉(zhuǎn)到index.jsp頁面用戶不存在:跳轉(zhuǎn)到相應(yīng)的錯(cuò)誤信息提示頁面創(chuàng)建一個(gè)簡單的ServletLoginServlet.java的創(chuàng)建過程創(chuàng)建一個(gè)簡單的ServletLoginServlet.java的創(chuàng)建過程創(chuàng)建一個(gè)簡單的ServletLoginServlet.java的創(chuàng)建過程創(chuàng)建一個(gè)簡單的Servlet4.修改登錄頁面登錄請(qǐng)求地址,將請(qǐng)求地址改為映射的Servlet地址。注:在Servlet開發(fā)過程中若是修改了Web.xml中的Servlet的配置信息,要重新發(fā)布、啟動(dòng)服務(wù)器重新加載配置信息。6.2.3創(chuàng)建一個(gè)簡單的Servlet5.創(chuàng)建error.jsp頁面。6.2.3創(chuàng)建一個(gè)簡單的Servlet6.改進(jìn)index.jsp頁面。回顧Servlet的創(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ì)去銷毀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)的資源。重定向的訪問過程結(jié)束后,瀏覽器地址欄中顯示的URL會(huì)發(fā)生改變,由初始的URL地址變成重定向的目標(biāo)URL;而請(qǐng)求轉(zhuǎn)發(fā)過程結(jié)束后,瀏覽器地址欄保持初始的URL地址不變。重定向?qū)g覽器的請(qǐng)求直接作出響應(yīng),響應(yīng)的結(jié)果就是告訴瀏覽器去重新發(fā)出對(duì)另外一個(gè)URL的訪問請(qǐng)求。重定向調(diào)用者與被調(diào)用者使用各自的request對(duì)象和response對(duì)象,它們屬于兩個(gè)獨(dú)立的訪問請(qǐng)求和響應(yīng)過程。請(qǐng)求轉(zhuǎn)發(fā)的調(diào)用者與被調(diào)用者之間共享相同的request對(duì)象和response對(duì)象,它們屬于同一個(gè)訪問請(qǐng)求和響應(yīng)過程。請(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)站為了辨別用戶身份、進(jìn)行session跟蹤而儲(chǔ)存在用戶本地終端上的數(shù)據(jù),是由Web服務(wù)器保存在用戶瀏覽器上的小文本文件,它包含有關(guān)用戶的信息。Servlet是服務(wù)端應(yīng)用。Session是在服務(wù)端用于保存用戶信息機(jī)一種容器Servlet中讀寫Cookie在服務(wù)端Servlet中操作Cookie一般可分為三個(gè)步驟:1)服務(wù)器向?yàn)g覽器發(fā)送一組Cookie;2)瀏覽器將這些信息存儲(chǔ)在內(nèi)存或本地計(jì)算機(jī)上,以備將來使用;3)當(dāng)下一次瀏覽器向Web服務(wù)器發(fā)送任何請(qǐng)求時(shí),瀏覽器會(huì)把這些Cookie信息發(fā)送到服務(wù)器,服務(wù)器將使用這些信息來識(shí)別用戶。Servlet中

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論