Web應(yīng)用chapter12.pptx_第1頁(yè)
Web應(yīng)用chapter12.pptx_第2頁(yè)
Web應(yīng)用chapter12.pptx_第3頁(yè)
Web應(yīng)用chapter12.pptx_第4頁(yè)
Web應(yīng)用chapter12.pptx_第5頁(yè)
已閱讀5頁(yè),還剩61頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、第十二章 高級(jí)Web應(yīng)用程序開發(fā),12.1 開發(fā)Servlet Servlet是用Java編寫的服務(wù)器端程序, 它使用了Java Servlet應(yīng)用程 序接口(javax.servelt.*, 簡(jiǎn)稱API)及相關(guān)類和方法. Java Servlet可以動(dòng)態(tài)地?cái)U(kuò)展Server的能力, 具有方便高效, 功能強(qiáng) 大, 可移植性好,易于維護(hù), 性能穩(wěn)定等優(yōu)點(diǎn). 12.1.1 在NetBeans中創(chuàng)建Servlet 點(diǎn)擊”文件新建項(xiàng)目”, 打開”新建項(xiàng)目”對(duì)話框, 見下圖, 點(diǎn)擊 ”下一步”, 打開”新建Web應(yīng)用程序”對(duì)話框.(page249),在”項(xiàng)目名稱”輸入”JSP_JavaBean_Servl

2、et_Login”, 如需更改項(xiàng)目位 置, 點(diǎn)擊”瀏覽”; 設(shè)置為主項(xiàng)目. 點(diǎn)擊 ”下一步”, 查看服務(wù) 器和上下 文路徑. 點(diǎn)擊”完成”. 這樣就建成了新項(xiàng)目.,12.1.2 Servelt使用實(shí)例登錄模塊 2. 在完成12.1.1的第一步后, 把11.6.5節(jié)項(xiàng)目”JSP_JavaBean_Login” 中的index.jsp, error.jsp, welcome.jsp, 以及images子目錄復(fù)制到 當(dāng)前項(xiàng)目的Web目錄下. 注意: 有可能需要先刪除默 認(rèn)的index.jsp, 才能拷貝 11.6.5節(jié)中的index.jsp, 或使用”刪除重命名”組合. 3. 右擊現(xiàn)項(xiàng)目, 選彈出菜

3、單 ”新建Java包”建一個(gè)包, 名為”login”. 右擊包”login”, 選彈出菜單”新建 Servlet”, 打開”新建 Servlet”對(duì)話框, 見圖.,在類名中輸入”LoginServlet”, 注意項(xiàng)目和源包名, 點(diǎn)擊”下一步” 打開”配置Servlet 部置”對(duì)話框, 如 圖, 對(duì)應(yīng)書中 圖12-2page250, 選中”將信息添加 到部置描述符” 這樣創(chuàng)建的 Servlet將自動(dòng)添 加到Web.xml文件 中,否則就必須手 工進(jìn)行添加. 注意Servlet的類 名, 名稱和URL.,URL的格式一般為: “http:/your-server/your-web-project/

4、your-servlet-URL”. 在”配置Servlet部置”對(duì)話框中, 有如下配置: “Servlet名稱”: 此文本框用于輸入Servlet的名, 可以和類名不同, 僅是NetBeanIDE自己使用. “URL模式”: 文本框用于輸入通過URL訪問Servlet的路徑, 例如”/LoginServlet”. 其中, your-server為服務(wù)器路徑 your-web-project為web項(xiàng)目路徑. your-servlet-URL為servlet的路徑. 點(diǎn)擊”完成”. 會(huì)生成如下代碼.,LoginServlet.java的”protected void processReques

5、t()”方法中所生成的 默認(rèn)代碼如下: response.setContentType(text/html;charset=UTF-8); PrintWriter out = response.getWriter(); try /* TODO output your page here. You may use following sample code. */ out.println(); out.println(); out.println(Servlet NewServlet); out.println(); out.println(); out.println(Servlet NewS

6、ervlet at + request.getContextPath() + ); out.println(); out.println(); finally out.close(); ,把上面代碼修改成如下代碼, 對(duì)應(yīng)書中page252頁(yè)源碼: response.setContentType(text/html;charset=UTF-8); / get the users name and his password. String username = request.getParameter(username); if (username = null) username = ; Str

7、ing password = request.getParameter(password); if (password = null) password = ; /*The following code is to use the JavaBean LoginBean to * check whether the uses input are OK. */ boolean loginflag = false; LoginBean bean = new LoginBean(); bean.setUsername(username); bean.setPassword(password); log

8、inflag = bean.checklogin(); if (loginflag) request.getSession().setAttribute(username, username); response.sendRedirect(welcome.jsp); else response.sendRedirect(error.jsp);,在把上面代碼寫完后, 會(huì)有提示錯(cuò)誤, 主要我 們沒有LoginBean這個(gè)類, 把11.6.5節(jié)創(chuàng)建的項(xiàng) 目”JSP_JavaBean_Login”中源碼LoginBean.java 拷貝到目前項(xiàng)目的源包”login”下: 右擊項(xiàng)目” JSP_JavaB

9、ean_Login”中 的源碼”LoginBean.java”,見右圖.選擇”復(fù)制”。 右擊項(xiàng)目”JSP_JavaBean_Servlet_Login” 下的源包”login”, 選擇”粘貼”, 就會(huì)把 LoginBean.java拷貝到新項(xiàng)目中來, 解決數(shù)據(jù) 庫(kù)的密碼驗(yàn)證問題. c.右擊項(xiàng)目”JSP_JavaBean_Servlet_Login” “測(cè)試”, 消除某些不一致性. 完成了Servlet的開發(fā).,4. 為了能夠讓Servlet處理用戶請(qǐng)求(書中page252頁(yè)), 這里要把 index.jsp文件中的下面兩行代碼: 請(qǐng)登錄系統(tǒng)! 替換為: 請(qǐng)登錄系統(tǒng)! 到此, 完成了Servle

10、t的登錄模塊的開發(fā). 在這個(gè)實(shí)例中, 用Servlet代替了logincheck.jsp文件的功能. 在Servlet中通過訪問數(shù)據(jù)庫(kù), 并根據(jù)訪問結(jié)果實(shí)現(xiàn)不同的頁(yè)面, 這樣進(jìn)一步把界面和控制邏輯繼行了分離, 從而實(shí)現(xiàn)了一個(gè)基本 的MVC框架. 5. 運(yùn)行測(cè)試: 先運(yùn)行數(shù)據(jù)庫(kù), 點(diǎn)擊”服務(wù)” ”數(shù)據(jù)庫(kù)Java DB啟動(dòng)服務(wù)器”, 見右圖 6.點(diǎn)擊” JSP_JavaBean_Servlet_Login運(yùn)行”.,12.2 使用過濾器,在Servlet2.3版中, 一個(gè)重要的功能就是支持能夠?yàn)镾ervlet和JSP頁(yè) 面定義過濾器. NetBeans提供了對(duì)Servlet2.3應(yīng)用程序編程接口的

11、支持, 可以在集成開發(fā)環(huán)境中快速創(chuàng)建過濾器. 12.2.1 NetBeans中創(chuàng)建過濾器的方法 在創(chuàng)建Web標(biāo)準(zhǔn)項(xiàng)目后 (仍然使用上節(jié)的項(xiàng)目 ”JSP_JavaBean_Servlet_Login”), 選擇”文件”新建文件” 命令, 打開”新建文件”對(duì) 話框. 在”類別”列表中選 擇”Web”節(jié)點(diǎn), 在右邊的”文件類型”列表中選擇”過濾器”節(jié)點(diǎn), 單擊”下一步”按鈕, 打開“新建 過濾器”對(duì)話框, 書中圖12-3page253.,在”類名”文本框中輸入過濾器的名字. 如果要對(duì)請(qǐng)求和響應(yīng)對(duì)象 進(jìn)行包裝, 則需要選中”包裝請(qǐng)求和響應(yīng)對(duì)象”復(fù)選框. 例如, 允許在將請(qǐng)求發(fā)送到過濾器鏈的其余部分之前

12、, 在請(qǐng)求上設(shè)置參數(shù). 跟蹤在響應(yīng)上設(shè)置的Cookie. 單擊”下一步”按鈕, 打開”配置過濾器部置”對(duì)話框, 如下圖所示 (圖12-4page260). 選中”將消息添加到部置描述符web.xml”復(fù)選框, 這樣創(chuàng)建的過濾器將自動(dòng)添加到web.xml文件中, 否則就必須手工 進(jìn)行添加. “過濾器名稱”文本框用于輸入過濾器的名字,可以與 類名不同.,單擊”新建”, 可以打開”過濾器映射” 對(duì)話框, 圖12-4page254, 選中”URL”單 選按鈕, 然后在后面的文本框中輸入 要被過濾的地址. 例如輸入”/*”則表 示項(xiàng)目目錄下的所有文件訪問都要被,過濾; 如果輸入”/data/*”, 則要

13、過濾data子目錄下的所有文件訪問. 如果要過濾Servlet, 則要選中Servlet單選按鈕, 然后在后面的下拉 列表框中選擇要過濾的Servlet. 單擊”下一步”按鈕, 打開”過濾器初始化參數(shù)”對(duì)話框, 如圖12-6 Page254, 單擊 ”新建”按鈕, 可以 為過濾器添加初 始化的一些參數(shù). 單擊”完成”按鈕, 創(chuàng)建過濾器, 創(chuàng)建 過濾器的代碼如 下所示.,import java.io.IOException; import java.io.PrintStream; import java.io.PrintWriter; import java.io.StringWriter; i

14、mport javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; public class NewSimpleFilter implements Filter private static final boolean debug = true;

15、 private FilterConfig filterConfig = null; public NewSimpleFilter() private void doBeforeProcessing(ServletRequest request, ServletResponse response) throws IOException, ServletException if (debug) log(NewSimpleFilter:DoBeforeProcessing); / Write code here to process the request and/or response befo

16、re the rest of the filter chain is invoked. private void doAfterProcessing(ServletRequest request, ServletResponse response) throws IOException, ServletException if (debug) log(NewSimpleFilter:DoAfterProcessing); / Write code here to process the request and/or response after the rest of the filter c

17、hain is invoked. ,public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException if (debug) log(NewSimpleFilter:doFilter(); doBeforeProcessing(request, response); Throwable problem = null; try chain.doFilter(request, response); catch (T

18、hrowable t) / If an exception is thrown somewhere down the filter chain, we still want to execute our after processing, / and then rethrow the problem after that. problem = t; t.printStackTrace(); doAfterProcessing(request, response); / If there was a problem, we want to rethrow it if it is a known

19、type, otherwise log it. if (problem != null) if (problem instanceof ServletException) throw (ServletException) problem; if (problem instanceof IOException) throw (IOException) problem; sendProcessingError(problem, response); ,/* Return the filter configuration object for this filter. */ public Filte

20、rConfig getFilterConfig() return (this.filterConfig); /*Set the filter configuration object for this filter.param filterConfig The filter configuration object.*/ public void setFilterConfig(FilterConfig filterConfig) this.filterConfig = filterConfig; /* Destroy method for this filter */ public void

21、destroy() /* Init method for this filter */ public void init(FilterConfig filterConfig) this.filterConfig = filterConfig; if (filterConfig != null) if (debug) log(NewSimpleFilter:Initializing filter); /* Return a String representation of this object. */ Override public String toString() if (filterCo

22、nfig = null) return (NewSimpleFilter(); StringBuffer sb = new StringBuffer(NewSimpleFilter(); sb.append(filterConfig); sb.append(); return (sb.toString(); ,private void sendProcessingError(Throwable t, ServletResponse response) String stackTrace = getStackTrace(t); if (stackTrace != null ,其中, 在doBef

23、oreProcessing()方法中, 可以添加過濾前的處理代碼; 在doAfterProcessing()方法中, 可以添加過濾后的處理代碼; doFilter()方法是過濾的主要方法, 過濾代碼應(yīng)該添加到這個(gè)方法 中; init()方法是過濾器的初始化代碼. sendProcessingError()方法用于發(fā)送處理過程中的錯(cuò)誤; getStackTrace()方法用于獲得跟蹤棧中的信息; log()方法用于 輸出過濾記錄; 變量debug用于控制是否輸出過濾記錄, 當(dāng)值為 true時(shí)(默認(rèn)值)輸出記錄.,12.2.2 過濾器使用實(shí)例-為登錄模塊提供安全保護(hù) 在前面幾個(gè)登錄模塊的實(shí)例中.

24、都只介紹了如何進(jìn)行登錄校驗(yàn), 并沒有增加任何的安全措施. 如果用戶知道要訪問網(wǎng)頁(yè)的網(wǎng)址, 在不登錄的情況下, 直接訪問這些頁(yè)面地址都是可以”繞過”登錄 檢驗(yàn)部分的. 本節(jié)將在12.1.2節(jié)實(shí)例基礎(chǔ) 上, 利用過濾器為登錄模塊 增加一個(gè)”防火墻”, 把沒有 登錄的非法訪問進(jìn)行屏蔽. 在”項(xiàng)目”窗口中, 右鍵單擊 12.1.2節(jié)創(chuàng)建的 JSP_JavaBean_Servlet_Login項(xiàng)目 節(jié)點(diǎn), 選擇彈出菜單中的”復(fù)制” 命令, 打開”復(fù)制項(xiàng)目”對(duì)話框,復(fù)制項(xiàng)目對(duì)話框, 圖12-7page258. 2. 在”項(xiàng)目位置”文本框中選擇新的 項(xiàng)目路徑, 在”項(xiàng)目名稱”文本框中 輸入”FilterDe

25、mo”, 單擊”復(fù)制”命令. 3. 在新項(xiàng)目的Web子目錄下創(chuàng)建 一個(gè)data子目錄, 后面創(chuàng)建的過濾 器將對(duì)這個(gè)目錄中所有文 件的訪問進(jìn)行過濾, 沒有登 錄的訪問將被屏蔽. 右擊”Web頁(yè)面”, 選擇”新建” ”文件夾”, 打開”新建文件 夾”對(duì)話框, 后頁(yè)圖, 點(diǎn)擊 ”完成”.,在data子目錄中, 創(chuàng)建一個(gè)名為 ProtectedPage.jsp 的頁(yè)面: 右擊項(xiàng)目”FilterDemo”下的目錄 “Web頁(yè)data”, 選擇”新建” ”JSP”, 打開”新建JSP”對(duì)話框. 見后頁(yè)圖.,在”文件名”文本框中填上”ProtectedPage”, 注意創(chuàng)建的文件和所 在的文件夾, 選擇”J

26、SP文件”單選按鈕, 點(diǎn)擊”完成”. ProtectedPage.jsp頁(yè)面, 用來模擬被保護(hù)的頁(yè)面.其內(nèi)容如下:, JSP Page 必須登錄后才能查看 你好, 你已經(jīng)登錄了, 謝謝! ,4. 在login包中, 按照上一小節(jié)的方法 創(chuàng)建一個(gè)過濾器, 過濾器的名字為 ”LoginFilter”. 右擊項(xiàng)目” FilterDemo”下的login包, 選擇”新建過濾器”, 打開 ”新建過濾器”對(duì)話框 b. 在類名框中輸入”LoginFilter”, 點(diǎn)擊”下一步”, 準(zhǔn)備配置過濾器.,c. 選擇將信息添加到 部置描述符(Web.xml), 點(diǎn)擊”編輯”按鈕, 打開”過濾器映射”對(duì)話框, 選中”

27、URL”單選按鈕, 在后面文本框中輸入要被過濾的地址, 在這里輸入”/data/*”, 則要過濾data子目錄下的所有文件訪問. 如果要過濾Servlet, 則要選中Servlet單選按鈕, 然后在后面的下拉列表框中選擇要過濾的Servlet. 點(diǎn)擊”確定”, 再點(diǎn)擊”下一步” 按鈕, 打開”過濾 器初始化參數(shù)” 對(duì)話框, 右邊圖對(duì)應(yīng)書中圖12 -5和圖12-4部分 Page254.,d. 此次過濾器的生成, 沒有初始化參數(shù), 見下圖(書中圖12-6page254) 點(diǎn)擊“完成”, 以便生成過濾器源碼.,對(duì)于過濾器, 所生成的源碼中有四個(gè)核心方法: Init(): 此方法是過濾器的初始化代碼.

28、 doBeforeProcessing(): 在此方法中可以添加過濾前的處理代碼. doFilter(): 此方法是過濾器的主要方法, 過濾器的業(yè)務(wù)邏輯代碼 應(yīng)該添加到這個(gè)方法中. doAfterProcessing():在此方法中可以添加過濾后的處理代碼. 可查看這四個(gè)方法,5. 在創(chuàng)建LoginFilter過濾器后, 在doFilter()方法中添加如下代碼, 進(jìn)行過濾. 首先從Session中讀取用戶名username, 如果用戶名不存在, 則說明用戶沒有登錄, 那么就把頁(yè)面重新定向到登錄頁(yè)面index.jsp. doBeforeProcessing(request, response)

29、; Throwable problem = null; HttpServletRequest httprequest = (HttpServletRequest)request; HttpServletResponse httpresponse = (HttpServletResponse)response; HttpSession session = httprequest.getSession(); String username = (String)session.getAttribute(username); if(username = null | username = ) http

30、response.sendRedirect(./index.jsp); if(debug) log(被攔截一個(gè)未認(rèn)證的請(qǐng)求); else try chain.doFilter(request, response); catch (Throwable t) / If an exception is thrown somewhere down the filter chain, we still want to /execute our after processing, and then rethrow the problem after that. problem = t; t.printSt

31、ackTrace(); doAfterProcessing(request, response);,6. 在部置項(xiàng)目后, 在地址欄輸入Http:/localhost:8084/FilterDemo/index.jsp, 會(huì)看到如下頁(yè)面, 在密碼框輸入正確密碼 ”111”后, 就會(huì)看到,如下 頁(yè)面, 此時(shí)過濾器未發(fā)生 作用.,右擊項(xiàng)目”FilterDemo部置”, 打開瀏覽器, 在IE中輸入 http:/localhost:8084/FilterDemo/data/ProtectedPage.jsp, 回車后馬上會(huì)顯示: Http:/localhost:8084/FilterDemo/index

32、.jsp 這表示非法的頁(yè)面訪問已經(jīng)被過濾到index.jsp頁(yè)面了.,此時(shí), 在NetBeans右下角輸出窗口中點(diǎn)擊Apache日志,如圖: 顯示如下信息: 十月 20, 2014 6:01:18 下午 org.apache.catalina.core.ApplicationContext log 信息: LoginFilter:Initializing filter 十月 20, 2014 6:04:15 下午 org.apache.catalina.core.ApplicationContext log 信息: LoginFilter:doFilter() 十月 20, 2014 6:04

33、:15 下午 org.apache.catalina.core.ApplicationContext log 信息: LoginFilter:DoBeforeProcessing 十月 20, 2014 6:04:15 下午 org.apache.catalina.core.ApplicationContext log 信息: 被攔截一個(gè)未認(rèn)證的請(qǐng)求 十月 20, 2014 6:04:15 下午 org.apache.catalina.core.ApplicationContext log 信息: LoginFilter:DoAfterProcessing,12.3 創(chuàng)建偵聽程序,在初始化或銷

34、毀Servlet上下文和會(huì)話時(shí),以及在上下文或會(huì)話 中添加或刪除屬性時(shí),偵聽程序都會(huì)通過生命周期事件獲知這 些操作。 在創(chuàng)建標(biāo)準(zhǔn)的Web應(yīng)用程序后”FilterDemo”, 選擇“文件”“新建文件”命令,打開 “新建文件”對(duì)話框。,在”類別”列表中選擇”Web”節(jié)點(diǎn),在右邊的“文件類型”列表中 選擇“Web應(yīng)用程序偵聽程序”節(jié)點(diǎn),單擊”下一步”按鈕打開 ”新建Web應(yīng)用程序偵聽程序”對(duì)話框(書中圖12-9page261),在 “類名”文本框中輸入監(jiān)聽器的名字。在”要實(shí)現(xiàn)的接口中”,可以 選中不同的 復(fù)選框,以 監(jiān)聽不同的 內(nèi)容。 單擊”完成” 按鈕,即可 創(chuàng)建監(jiān)聽器。,在選擇“上下文偵聽程序”

35、時(shí),所產(chǎn)生的源碼截圖如下:,在選擇”上下文屬性偵聽程序”時(shí),所產(chǎn)生的源碼截圖如下:,在選擇”HTTP會(huì)話偵聽程序”時(shí),所產(chǎn)生的源碼截圖如下:,在選擇”HTTP會(huì)話屬性偵聽程序”時(shí),所產(chǎn)生的源碼截圖如下:,在選擇”請(qǐng)求偵聽程序”時(shí),所產(chǎn)生的源碼截圖如下:,在選擇”請(qǐng)求屬性偵聽程序”時(shí),所產(chǎn)生的源碼截圖如下:,12.4 使用標(biāo)準(zhǔn)標(biāo)記庫(kù),JSP的一個(gè)優(yōu)勢(shì)就是可以使用標(biāo)準(zhǔn)標(biāo)記庫(kù),加快程序開發(fā)。 JSP 標(biāo)準(zhǔn)標(biāo)記庫(kù)JSTL全稱為Java ServerPages Standard Tag Library, 是一個(gè)不斷完善的開源JSP標(biāo)簽庫(kù)。本節(jié)將主要介紹NetBeans中 使用JSTL庫(kù)的方法,下一節(jié)將介

36、紹如何自己開發(fā)標(biāo)記庫(kù)。,12.4.1 JSTL概述以及NetBeans對(duì)標(biāo)準(zhǔn)標(biāo)記庫(kù)的支持,JSTL是一個(gè)已標(biāo)準(zhǔn)化的標(biāo)記庫(kù)集合, 其開發(fā)的API規(guī)范可以在 下載. JSTL主要包括如表12-1所示的四個(gè)基本標(biāo)記庫(kù). 表12-1 JSTL標(biāo)記庫(kù)集合(page262) 創(chuàng)建JSP頁(yè)面后, 可以在NetBeans組件面板中看到如圖12-10所示的 JSTL標(biāo)記庫(kù). 其中JSTL Choose, JSTL If, JSTL For Each包含在核心庫(kù)中; 數(shù)據(jù)庫(kù)分類下的幾個(gè)標(biāo)記包含在數(shù)據(jù)庫(kù)處理庫(kù)中.,創(chuàng)建JSP頁(yè)面后, 可以在NetBeans組件面板中看到如圖12-10所示 的J

37、STL標(biāo)記庫(kù). 其中JSTL Choose, JSTL If, JSTL For Each包含在核心 庫(kù)中;數(shù)據(jù)庫(kù)分類下的幾個(gè)標(biāo)記包含在數(shù)據(jù)庫(kù)處理庫(kù)中. 圖12-10(page262),如果要在項(xiàng)目中使用JSTL庫(kù), 那么需要在項(xiàng)目的庫(kù)路徑中添加 JSTL庫(kù)的路徑, 右擊項(xiàng)目,選擇”屬性”, 打開”項(xiàng)目屬性”對(duì)話框,在類別列表中選擇”庫(kù)”, 在”編譯”面板下選擇”添加庫(kù)”, 打開”添加庫(kù)”對(duì)話框.,拉動(dòng)”滾動(dòng)條”,選擇”JSTL1.1”, 點(diǎn)擊 ”添加庫(kù)” 如下面圖(書中圖12-11page262)所示.,同時(shí)要在使用JSTL標(biāo)記頁(yè)面開始的地方加上庫(kù)路徑的引用, 代碼 如下: 如要使用數(shù)據(jù)庫(kù),

38、 還得在頁(yè)面開始時(shí), 添加對(duì)數(shù)據(jù)庫(kù)的引用, 但在NetBeans7中不必添加數(shù)據(jù)庫(kù)驅(qū)動(dòng)程序, 查閱第七章. ,12.4.2 使用核心庫(kù)標(biāo)記,核心庫(kù)標(biāo)記包含, , , , 等標(biāo) 記, 分別用于輸出信息, 設(shè)置值, 選擇和迭代, 下面分別進(jìn)行介紹.,1. JSTL If 標(biāo)記 NetBeans工具組件面板中的JSTL If圖標(biāo)用于插入標(biāo)記, 進(jìn)行條件判斷. 在創(chuàng)建了JSP頁(yè)面后, 從NetBeans工具組件面板中, 拖拽JSTL If圖標(biāo)到JSP頁(yè)面中, 釋放鼠標(biāo)后會(huì)顯示如圖12-12所示的 ”插入 JSTL If”對(duì)話框. 輸入圖中參 數(shù)后,產(chǎn)生如下JSP代碼: 其中:條件用于判斷頁(yè)面請(qǐng)求URL

39、中 名字為name的參數(shù)是否存在; “變量名稱”文本框用于設(shè)置測(cè)試條 件結(jié)果值的變量名; “范圍”文本框用于設(shè)置作用范圍, 可有如下 幾個(gè)選項(xiàng): page: 當(dāng)前頁(yè)面范圍內(nèi)有效. request: 當(dāng)前請(qǐng)求范圍內(nèi)有效. session: 當(dāng)前會(huì)話范圍內(nèi)有效. application: 當(dāng)前應(yīng)用程序生命周期內(nèi)有效.,JSTL If 標(biāo)記的操作和演示 a. 通過“文件新建項(xiàng)目”, 打開新建項(xiàng)目對(duì)話框. b. 在”類別”列表中選擇”Java Web”, 項(xiàng)目列表中選擇”Web應(yīng)用程序”, 如右圖: c.點(diǎn)擊”下一步”, 得到新建”新建 Web應(yīng)用程序” 對(duì)話框, 在”項(xiàng)目 名稱”中輸入 ”JSTL_

40、Demo”, 且設(shè)置為主 項(xiàng)目, 見右 圖. 點(diǎn)擊 ”下一步”.,d. 注意”上下文”路徑, 點(diǎn)擊”完成”. 右擊”JSTL_Demo”項(xiàng)目下的”index.jsp”的默認(rèn)生成的文件, 選擇彈出菜單中的”重命名”以便打開 ”重命名”對(duì)話框, 輸入”JSTL_if”, 并把頁(yè)面中的Hello World! 改為: JSTL if.,f. 從組件面板中把 “JSTL If”拖拽到指定位置,見圖. 此圖是把”JSTL If”, “JSTL Choose”, “JSTL For Each” 拖到指定位置.,g. 在文件”JSTL_if.jsp”中的代碼為: JSP Page JSTL if Hello

41、 $! ,h. 運(yùn)行測(cè)驗(yàn). 運(yùn)行前按照12.4.2把JSTL1.1庫(kù)加進(jìn)來, 然后運(yùn)行項(xiàng)目, 在地址欄分別輸入下面地址, 就得到書中圖12-13, 12-14page263. http:/localhost:8084/JSTL_Demo/JSTL_if.jsp http:/localhost:8084/JSTL_Demo/JSTL_if.jsp?name=Robin 注意:由于此項(xiàng)目中 未有”index.jsp”, 如果 在地址欄中僅輸入: “http:/localhost:8084 /JSTL_Demo”會(huì)出現(xiàn) 錯(cuò)誤, 因?yàn)槟J(rèn)調(diào)用 “index.jsp”.,2. JST

42、L Choose標(biāo)記 NetBeans工具組件面板中的JSTL Choose圖標(biāo)用于插入 標(biāo)記, 進(jìn)行多個(gè)條件判斷.在創(chuàng)建了JSP頁(yè)面后, 從NetBeans 工具組件面板中, 拖拽JSTL Choose圖標(biāo)到JSP頁(yè)面中, 釋放鼠標(biāo)后 會(huì)顯示如圖12-15所示的”插入 JSTL Choose”對(duì)話框. (page264) 其中, “When條件數(shù)”文本框用于設(shè)置要處理的條件數(shù). 如果選中 ”生成Otherwise語句”復(fù)選框, 則會(huì)自動(dòng)生成 語句. 右邊圖將會(huì)自動(dòng)創(chuàng)建如下代碼: ,JSTL Choose標(biāo)記的演示和操作 下面的演示和操作是一個(gè)簡(jiǎn)單的標(biāo)記的使 用演示, 其作用根據(jù)URL鏈接中 名為name的參數(shù)值判斷用戶的 身份. 當(dāng)用戶為”Robin”時(shí)就顯示 系統(tǒng)管理員身份, 當(dāng)用戶為 ”Apple”時(shí)就顯示超級(jí)用戶身份; 其他用戶顯示為一般用戶. 右擊項(xiàng)目”JSTL_Demo”, 選擇 彈出菜單”新建其他”, 打開“新 建文件”對(duì)話框. 類別選擇”Web”, 文件類型選擇”JSP”, 點(diǎn)擊”下一步”.,c. 在”文件名”中輸入 “JSTL_choose”, 選擇”JSP文件(標(biāo)準(zhǔn)語法)”, 點(diǎn) 擊”完成”.,d. 把所生成的源”JSTL_choose.jsp”中的如下代碼 Hello World!改為 JSTL Choose e. 從

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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)論