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

下載本文檔

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

文檔簡介

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

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

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

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

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

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

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

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

dologin.jsp的語句是:

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

name=”theform”

method="post"

action="dologin.jsp">...帳號:<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對象login.jsp頁以表單(FORM)方式向dologin.jsp頁發(fā)出請求時,登錄表單信息作為“請求信息”的一部分,與URL同時傳到Web服務(wù)器。Web服務(wù)器收到請求,分析請求,從中取出傳來的表單(Form)數(shù)據(jù)、

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

String

username=

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

技術(shù)用戶的之前登錄信息及其有效期可以在客戶端本地的,采用稱為的技術(shù)。每次瀏覽器向Web服務(wù)器發(fā)出請求時,從本地的集中檢索出目標(biāo)Web站點(diǎn)相關(guān)的,作為“網(wǎng)頁請求”信息的一部分,一起發(fā)送到Web服務(wù)器??梢跃幊淘诜?wù)器端取出信息,進(jìn)行處理。在服務(wù)器端響應(yīng)請求時,可以設(shè)置 信息,即,編程把某些數(shù)據(jù)按要求作為響應(yīng)信息的一部分,傳到客戶端,自動寫到客戶端本地的集中,供下次請求時再傳回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)廳{ //跳過本頁,直接轉(zhuǎn)向到gamehome.jsp,進(jìn)行

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

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

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

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

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

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

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

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

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

周期和可

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

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

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

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

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

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

getRealPath(String

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

addHeader(String

name,

String

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

add

(ServletOutputStream

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

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

setContentLength(int

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

setContentType(String

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

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

setAttribute(String

name,object

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

getAttribute(String

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

String

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

removeValue(String

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

getAttribute(String

name)

返回給定名的屬性值void

setAttribute(String

name,Object

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

removeAttribute(String

name)

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

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

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

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

close(),關(guān)閉輸出流內(nèi)置config對象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. 本站所有資源如無特殊說明,都需要本地電腦安裝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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論