程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> JSP編程 >> 關於JSP >> 使用JSP標簽庫驗證用戶的輸入(2)完

使用JSP標簽庫驗證用戶的輸入(2)完

編輯:關於JSP

使用jsp(SUN企業級應用的首選)標簽庫驗證用戶的輸入(2)

驗證jsp(SUN企業級應用的首選)視圖

通常要添加驗證,程序員需要一個獨立的jsp(SUN企業級應用的首選)頁面,它看起來象原來的表單頁面,但是有錯誤信息,而且當表單域有問題時能被服務器(重定向)顯示出來。我簡單的在原jsp(SUN企業級應用的首選)頁面中加入了錯誤邏輯。當表單第一次被顯示時,錯誤檢查不會執行。在提交行為上,表單被提交給自己,域被jsp(SUN企業級應用的首選)標簽所驗證(在服務器端,jsp(SUN企業級應用的首選)被編譯為Servlets)。如果所有的都正確,數據被提交到主控制器Servlet。如果不是都正確,用戶將會在同一個jsp(SUN企業級應用的首選)頁面中看到一個錯誤消息。

在jsp(SUN企業級應用的首選)頁面中,我用Java腳本創建了一個boolean標志變量 "validate"。如果有一個 "validate" 參數被提交到jsp(SUN企業級應用的首選)就設置它為 true 。

<% boolean validate = ("true".equals((String)request.getParameter("validate"))); %>

基於這個Boolean變量的值,jsp(SUN企業級應用的首選)將使用我的標簽進行驗證。當頁面第一次被裝載,這個變量是false 的,驗證不會執行。

要提交頁面到它自己然後重定向到主控制器Servlet,我改變了表單行為來指向 <%=request.getRequestURI()%> 並添加了默認的轉發標簽<jsp(SUN企業級應用的首選):forward page="../MainServlet" />。

當用戶提交這個表單時,它提交所有的值到同一個jsp(SUN企業級應用的首選),然後設置 validate 變量為true,並使用標簽進行檢查工作。如果數據審核通過,jsp(SUN企業級應用的首選)轉發所有的值到控制器Servlet。

如果途中遇到問題,標簽體將會執行,並告訴jsp(SUN企業級應用的首選)重新提交值給它自己,伴隨的是根據錯誤而顯示錯誤信息。請注意,標簽體中的另一個Boolean變量“success”。這個變量初始設置為true,僅僅是用來檢查是否有標簽體被執行。只有當表單轉發的 "validate" 和"success" 變量都true時,這個才能確定。具體請看Listing 2。

在有多個域需要驗證的情況下,來自標簽體的錯誤消息將顯示這個不正確的域,從而減少了每次用戶糾正錯誤和重新提交的時間。(這裡的域就是表單中的域,如文本域等)

錯誤的郵政編碼結果:

正確的郵政編碼結果:

結論

我放入jsp(SUN企業級應用的首選)中的額外邏輯,在同一頁面中使用標簽來執行驗證,從而使得我創建了一個簡單的高度可重用的服務器端數據驗證解決方案,而不需要多個jsp(SUN企業級應用的首選)或者Servlet來執行驗證。一個標簽是需要驗證各種類型的域的;例如,e-mail,電話,或者只允許整數值的域。這種設計擴展了MVC項目中的jsp(SUN企業級應用的首選)視圖層。通過使用標簽,也可以增加表示層和邏輯層的分離。在標簽代碼被修改的情況下,使用jsp(SUN企業級應用的首選)標簽來驗證數據的Web設計者和開發者們不用改變任何jsp(SUN企業級應用的首選)代碼;而且,他們甚至不用知道驗證的細節和任何使用到的JAVA語法。他們要做的事情就是簡單的包含一個類似HTML的標簽到他們的jsp(SUN企業級應用的首選)頁面中。

Code Listings

Listing 1

public int doStartTag() throws jsp(SUN企業級應用的首選)Exception {(標准化越來越近了):NAMESPACE PREFIX = O />

// retrun code of 1 will cause tag body to execute

if (value == null)

return this.EVAL_BODY_INCLUDE; //check if we have zip code

if (value.equals(null))

//check if value is not null

return this.EVAL_BODY_INCLUDE;

if (value.length() == 5)

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved