信息第四章-p JSP應(yīng)用編程_第1頁(yè)
信息第四章-p JSP應(yīng)用編程_第2頁(yè)
信息第四章-p JSP應(yīng)用編程_第3頁(yè)
信息第四章-p JSP應(yīng)用編程_第4頁(yè)
信息第四章-p JSP應(yīng)用編程_第5頁(yè)
已閱讀5頁(yè),還剩22頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

任務(wù):用戶登錄及

控制設(shè)計(jì)登錄頁(yè)login.jsp及處理登錄提交的登錄驗(yàn)證頁(yè)dologin.jsp。進(jìn)入 的操作過程是:–(1)從首頁(yè)99main.jsp上點(diǎn)擊

到lonig.jsp頁(yè),輸入用戶名及“進(jìn)入系統(tǒng)”,進(jìn)行登錄,程序?qū)⑻峤坏卿洷韱蔚降卿涷?yàn)證頁(yè)dologin.jsp。如果用戶

驗(yàn)證通過,就設(shè)置登錄成功標(biāo)志及登主界面;驗(yàn)證不通過,轉(zhuǎn)回登錄頁(yè)錄用戶信息,轉(zhuǎn)到–(2)如果用戶login.jsp,重新登錄。登錄頁(yè)面其它功能要求登錄失敗原因:登錄驗(yàn)證不通過,轉(zhuǎn)回登錄頁(yè)時(shí),傳回失敗原因(例如:login.jsp?errmsg=

不正確),在login.jsp頁(yè)中取到errmsg內(nèi)容,并顯示出來。登錄有效期:用客戶端瀏覽器的 功能,保存登錄的有效期,在login.jsp頁(yè)中取得客戶端瀏覽器傳來的信息,取出上次登錄的有效期信息,判斷是否需要登錄。如果現(xiàn)時(shí)是在有效期內(nèi),不需要再輸入登錄信息,從

直接轉(zhuǎn)入中取得用戶信息,作為登錄信息,驗(yàn)證后主頁(yè)。登錄檢查控制:在系統(tǒng)內(nèi)的各頁(yè),程序的開始部分都要判斷用戶是否已登錄,如果是用戶沒有經(jīng)過登錄而請(qǐng)求系統(tǒng)內(nèi)的頁(yè),則應(yīng)終止申請(qǐng)頁(yè)的執(zhí)行,轉(zhuǎn)向登錄頁(yè)

login.jsp。方案:技術(shù)分析與設(shè)計(jì)要點(diǎn)JSP執(zhí)行及response對(duì)象登錄信息及HTML表單登錄提交及request對(duì)象登錄有效期及

技術(shù)登錄鑒別控制及Session對(duì)象連接數(shù)據(jù)庫(kù)及登錄驗(yàn)證JSP執(zhí)行及response對(duì)象Web服務(wù)器接收到頁(yè)面請(qǐng)求,在服務(wù)器端,程序要做各種響應(yīng)處理,如:取得向發(fā)向客戶端的HTML流并寫入信息、設(shè)置html的head信息等。這些常用的響應(yīng)相關(guān)處理方法已被封裝在現(xiàn)存的類javax.servlet.http.HttpServletResponse中。系統(tǒng)為每次請(qǐng)求生成HttpServletResponse類的一個(gè)上下文相關(guān)的實(shí)例對(duì)象response。JSP程序通過調(diào)用內(nèi)置對(duì)象response的各方法,實(shí)現(xiàn)各種響應(yīng)功能。JSP執(zhí)行及response對(duì)象例如:在login.jsp頁(yè)中,實(shí)現(xiàn):如果之前的登錄還在有效期內(nèi),不需輸入登錄信息,直接重定向到dologin.jsp。重定向到

dologin.jsp的語(yǔ)句是:

response.sendRedirect("dologin.jsp");登錄信息及HTML表單<form

name=”theform”

method="post"

action="dologin.jsp">...帳號(hào):<INPUT

type=text

name=”loginID”value=""size=10><br>:<INPUT

type=password

name=”loginPWD”

value=""><br><input

type="submit"

name="bn_login"

value="登錄">...<div>本次登錄的有效期:</div><br><input

type="radio"name="loginExpire"value="0"checked>每次都登錄<input

type="radio"name="loginExpire"

value="1">當(dāng)天不用登錄<inputtype="radio"name="loginExpire"

value="7">7天不用登錄<input

type="radio"name="loginExpire"

value="30">30天不用登錄...</form>登錄提交及request對(duì)象login.jsp頁(yè)以表單(FORM)方式向dologin.jsp頁(yè)發(fā)出請(qǐng)求時(shí),登錄表單信息作為“請(qǐng)求信息”的一部分,與URL同時(shí)傳到Web服務(wù)器。Web服務(wù)器收到請(qǐng)求,分析請(qǐng)求,從中取出傳來的表單(Form)數(shù)據(jù)、

數(shù)據(jù)、其它客戶端信息,填充到生成的內(nèi)置對(duì)象request中,供被請(qǐng)求JSP頁(yè)的程序使用。例如:從request取得表單的用戶登錄名

String

username=

request.getParameter("username");登錄有效期及

技術(shù)用戶的之前登錄信息及其有效期可以在客戶端本地的,采用稱為的技術(shù)。每次瀏覽器向Web服務(wù)器發(fā)出請(qǐng)求時(shí),從本地的集中檢索出目標(biāo)Web站點(diǎn)相關(guān)的,作為“網(wǎng)頁(yè)請(qǐng)求”信息的一部分,一起發(fā)送到Web服務(wù)器。可以編程在服務(wù)器端取出信息,進(jìn)行處理。在服務(wù)器端響應(yīng)請(qǐng)求時(shí),可以設(shè)置 信息,即,編程把某些數(shù)據(jù)按要求作為響應(yīng)信息的一部分,傳到客戶端,自動(dòng)寫到客戶端本地的集中,供下次請(qǐng)求時(shí)再傳回Web服務(wù)器。技術(shù)發(fā)送

s=

new

("loginuser","liao74");.setMaxAge(7*24*60*60);//有效期為7天newnewresponse.add(new

);獲取s();s[]

gameloginif

(games=

request.get=

null;s!=null)for(int

i=0;

i<game{ //按名稱檢索s.length;

i++)集中的信息if

("loginuser".equals(game

s[i].getName())){login =

game

s[i];}}if

(login !=null

&&login

.getMaxAge()>0)廳{ //跳過本頁(yè),直接轉(zhuǎn)向到gamehome.jsp,進(jìn)行

response.sendRedirect("gamehome.jsp");}登錄鑒別控制及Session對(duì)象如何控制用戶的

,防止非經(jīng)驗(yàn)證的用戶跳過登錄驗(yàn)證,直接相關(guān)

頁(yè)呢?JSP解決此類問題的方法是用內(nèi)置的會(huì)話對(duì)象Session來保存用戶在一次

中,多次網(wǎng)頁(yè)請(qǐng)求間的狀態(tài)。在本案例,

把“當(dāng)前登錄用戶的用戶名”添加到Session對(duì)象的集

合屬性中,也就是,定義名為theuser一個(gè)Session屬性項(xiàng)。具體做法是:在登錄驗(yàn)證頁(yè)dologin.jsp中,通過登錄驗(yàn)證后,執(zhí)行下面代碼。session.setAttribute("theuser",

loginuser);在所有的需要檢查是否已登錄的頁(yè)的開始處,加入如下控制程序:String

currUser=(String)session.getAttribute("theuser");if(currUser==null)//沒有經(jīng)過登錄驗(yàn)證{response.sendRedirect("login.jsp");//重定向到登錄頁(yè)}連接數(shù)據(jù)庫(kù)及登錄驗(yàn)證如何連接到數(shù)據(jù)庫(kù),并從用戶數(shù)據(jù)表中檢索到用戶信息呢?這要用到JAVA的JDBC技術(shù)。連接數(shù)據(jù)庫(kù)//連接服務(wù)器和數(shù)據(jù)庫(kù)gamedbString

dbURL

=

"jdbc:sqlserver://localhost:1433;DatabaseName=gamedb";String

userName="sa"; //默認(rèn)用戶名

String

userPwd="123456";//

Connection

dbConn=null;try{Class.forName("com.

.sqlserver.jdbc.SQLServerDriver");dbConn

=DriverManager.getConnection(dbURL,userName,userPwd);}catch

(Exception

e){e.printStackTrace();}驗(yàn)證用戶信息Statement

stmt=conn.createStatement();String

sql="select

userid,password

from

userinf

where

userid=’”+login_id+”’";ResultSet

rs

=

stmt.executeQuery(sql);If(rs.next()){String

user_id=rs.

Getstring(1);String

user_pwd

=

rs.

Getstring(2);if

(login_id.

Equals(user_id)

&&

login_pwd.

Equals(user_pwd)){//驗(yàn)證通過…

…}elseresponse.sendRedirect("login.jsp?msg=

錯(cuò)誤");}elseresponse.sendRedirect("login.jsp?msg=用戶不存在");實(shí)踐:實(shí)現(xiàn)登錄及控制login.jspdologin.jsp提交Form表單gamehome.jsp驗(yàn)證通過,重定向驗(yàn)證錯(cuò)誤返回JSP內(nèi)置對(duì)象對(duì)象類型描述作用域requestjavax.servlet.ServletRequest用戶端傳來的請(qǐng)求,封裝了用戶提交的信息,通過調(diào)用該對(duì)象相應(yīng)的方法可以獲取封裝的信息,即使用該對(duì)象可以獲取用戶提交信息,包括來自GET/POST請(qǐng)求的參數(shù)Request用戶請(qǐng)求期responsejavax.servlet.ServletResponse傳回用戶端的響應(yīng),對(duì)客戶的請(qǐng)求做出動(dòng)態(tài)的響應(yīng),向客戶端發(fā)送數(shù)據(jù)、重定向網(wǎng)頁(yè)等Page頁(yè)面執(zhí)行期pageContextjavax.servlet.jsp.PageContext通過上下文,管理網(wǎng)頁(yè)的屬性Page頁(yè)面執(zhí)行期pagejava.lang.Object指向JSP網(wǎng)頁(yè)本身,相當(dāng)于thisPage頁(yè)面執(zhí)行期sessionjavax.servlet.http.HttpSession會(huì)話,完成會(huì)話期管理,用于會(huì)話的多次請(qǐng)求間保持狀態(tài)。不同的用戶,擁有各自的會(huì)話session,用戶只能 到自已的session對(duì)象。Session會(huì)話期applicationjavax.servlet.ServletContext用于保持應(yīng)用程序的全局狀態(tài),服務(wù)器啟動(dòng)后就產(chǎn)生了這個(gè)application對(duì)象,,直到服務(wù)器關(guān)閉在 的各個(gè)頁(yè)面之間瀏覽時(shí),對(duì)于所有的客戶,這個(gè)application對(duì)象都是同一個(gè)。application整個(gè)Web應(yīng)用程序運(yùn)行期outjavax.servlet.jsp.JspWriter傳回客戶端的輸出流,用來傳送回應(yīng)的輸出Page頁(yè)面執(zhí)行期configjavax.servlet.ServletConfigServlet配置管理,封裝了servlet的結(jié)構(gòu)信息Page頁(yè)面執(zhí)行期exceptionjava.lang.ThrowableJSP網(wǎng)頁(yè)錯(cuò)誤時(shí),拋出的例外,可以從中取得錯(cuò)信息。Page頁(yè)面執(zhí)行期對(duì)象的作用域?qū)ο蟮?/p>

周期和可

性稱為作用域(scope)。JSP有4種類型的作用域:頁(yè)面域請(qǐng)求域回話域應(yīng)用域內(nèi)置request對(duì)象objectgetAttribute(Stringname),返回指定屬性的屬性值。int

getContentLength(),返回請(qǐng)求體的長(zhǎng)度(以字節(jié)數(shù))。ServletInputStream

getInputStream(),得到請(qǐng)求體中一行的二進(jìn)制流。StringgetParameter(String

name),返回name指定參數(shù)的參數(shù)值。String[]getParameterValues(Stringname),返回包含參數(shù)name的所有值的數(shù)組。String

getRemoteAddr(),返回發(fā)送此請(qǐng)求的客戶端IP地址。String

getRemoteHost(),返回發(fā)送此請(qǐng)求的客戶端主機(jī)名。String

getRealPath(String

path),返回一虛擬路徑的真實(shí)路徑。內(nèi)置response對(duì)象void

addHeader(String

name,

String

value),添加網(wǎng)頁(yè)頭的名字/值對(duì)),添加客戶端的void

add

(ServletOutputStream

getOutputStream(),返回響應(yīng)的一個(gè)二進(jìn)制輸出流PrintWriter

getWriter(),返回可以向客戶端輸出字符的一個(gè)對(duì)象void

setContentLength(int

len),設(shè)置響應(yīng)頭長(zhǎng)度void

setContentType(String

type),設(shè)置響應(yīng)的MIME類型sendRedirect(java.lang.String

location),重新定向客戶端的請(qǐng)求內(nèi)置session對(duì)象void

setAttribute(String

name,object

value),設(shè)置屬性項(xiàng)object

getAttribute(String

name),返回屬性項(xiàng)public

String

getId(),返回SESSION創(chuàng)建時(shí)JSP引擎為它設(shè)的惟一ID號(hào)voidinvalidate(),取消SESSION,使SESSION不可用void

removeValue(String

name),刪除SESSION中指定的屬性內(nèi)置application對(duì)象Object

getAttribute(String

name)

返回給定名的屬性值void

setAttribute(String

name,Object

obj)設(shè)定屬性的屬性值void

removeAttribute(String

name)

刪除一屬性及其屬性值內(nèi)置out對(duì)象out內(nèi)置對(duì)象是對(duì)輸出流的,一般在程序中使用。程序用out對(duì)象把數(shù)據(jù)寫入響應(yīng)并發(fā)送回客戶端。out對(duì)象是JspWriter類的實(shí)例,是向客戶端輸出內(nèi)容常用的對(duì)象。out.print(String

s),輸出內(nèi)容到流void

clear(),清除緩沖區(qū)的內(nèi)容void

flush(),把緩沖區(qū)內(nèi)容送出,直到清空booleanisAutoFlush(),返回緩沖區(qū)滿時(shí),是自動(dòng)清空還是拋出異常void

close(),關(guān)閉輸出流內(nèi)置config對(duì)象String

getInitParameter(String

name)

返回初始化參數(shù)的值例4-9config.jsp<%@

page

language="java"

contentType="text/html;

charset=utf-8"pageEncoding="utf-8"%><!DOCTYPE

HTML

PUBLIC

"-//W3C//DTD

HTML

4.01

Transitional//EN"><html><head><meta

http-equiv="Content-Type"

content="text/html;

charset=utf-8"><title>meg.jsp</title></head><body><table

align="center"

border="0"

cellPadding="0"

cellSpacing="0"width="730"><tr><td><divalign="center"><br>客戶服務(wù)信箱:<%=config.getInitParameter("

")%>客戶服務(wù)

:<%=config.getInitParameter("phone")%><br>客戶服務(wù)

:<%=config.getInitParameter("

")%><br></div></td></tr></table></body></html>例4-9在web.xml的</we

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論