小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

JSTL與Struts的結合(十一)

 WindySky 2006-12-29

JSTL與Struts的結合(十一)

分類:我的著作

9.9  完整示例

在這一小節(jié)中,將修改在第三章中曾經(jīng)給出的Struts框架示例,以Struts框架和JSTL的協(xié)同工作來實現(xiàn)。

對于第三章的示例,要將JSTL整合進去,需要做以下幾步工作。

1)下載JSTL并配置。

1)修改原先的web.xml使其作為Servlet2.4的實現(xiàn)。

3)修改JSP顯示頁面,整合JSTLStruts標簽庫一起工作。

9.9.1  下載JSTL并配置

可以從http://java./products/jsp/jstl網(wǎng)址中下載JSTL1.1的最新版本。要使用這些標簽庫需要做3個步驟的工作。

1)將下載的jstl.jar放置到Web應用的WEB-INFlib目錄下。

2)將下載的TLD文件放置到Web應用的WEB-INF目錄下。

3)在需要使用的JSP頁面中聲明該標簽庫。

9.9.2  修改web.xml使其作為Servlet2.4的實現(xiàn)

在第三章的示例中所給出的web.xmlServlet2.3規(guī)范的,因此無法很好的支持JSTL1.1,要修改為符合Servlet2.4規(guī)范的代碼。使web.xml成為Servlet2.4規(guī)范是十分容易的,需要修改的是其頭部DTD聲明。

Servlet2.3之前,校驗和規(guī)范web.xml都是使用DTD,因此其頭部聲明如下:

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java./dtd/web-app_2_3.dtd">

<web-app>

</web-app>

而到了Servlet2.4規(guī)范,首此使用了xmlns來聲明web.xml,因此其頭部聲明為:

<?xml version="1.0" encoding="UTF-8"?>

<web-app version="2.4"

         xmlns="http://java./xml/ns/j2ee"

         xmlns:xsi="http://www./2001/XMLSchema-instance"

         xsi:schemaLocation="http://java./xml/ns/j2ee

         http://java./xml/ns/j2ee/web-app_2_4.xsd">

</web-app>

所以,為了支持Servlet2.4規(guī)范,應該將第三章示例的web.xml改成如例9.6的樣子。

9.6:修改后的web.xml

<?xml version="1.0" encoding="UTF-8"?>

<web-app version="2.4"

         xmlns="http://java./xml/ns/j2ee"

         xmlns:xsi="http://www./2001/XMLSchema-instance"

         xsi:schemaLocation="http://java./xml/ns/j2ee

         http://java./xml/ns/j2ee/web-app_2_4.xsd">

  <filter>

       <filter-name>Set Character Encoding</filter-name>

       <filter-class>struts.sample.cap1.sample3.util.SetCharacterEncodingFilter</filter-class>

       <init-param>

                 <param-name>encoding</param-name>

                 <param-value>UTF-8</param-value>

       </init-param>

  </filter>

  <filter-mapping>

       <filter-name>Set Character Encoding</filter-name>

       <url-pattern>*.do</url-pattern>

  </filter-mapping>

  <servlet>

    <servlet-name>action</servlet-name>

    <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>

    <init-param>

      <param-name>config</param-name>

      <param-value>/WEB-INF/struts-config.xml</param-value>

    </init-param>

    <init-param>

      <param-name>debug</param-name>

      <param-value>2</param-value>

    </init-param>

    <load-on-startup>1</load-on-startup>

  </servlet>

  <servlet-mapping>

    <servlet-name>action</servlet-name>

    <url-pattern>*.do</url-pattern>

  </servlet-mapping>

  <welcome-file-list>

    <welcome-file>setSolution.jsp</welcome-file>

  </welcome-file-list>

  <taglib>

    <taglib-uri>/WEB-INF/struts-template.tld</taglib-uri>

    <taglib-location>/WEB-INF/struts-template.tld</taglib-location>

  </taglib>

  <taglib>

    <taglib-uri>/WEB-INF/struts-bean.tld</taglib-uri>

    <taglib-location>/WEB-INF/struts-bean.tld</taglib-location>

  </taglib>

  <taglib>

    <taglib-uri>/WEB-INF/struts-html.tld</taglib-uri>

    <taglib-location>/WEB-INF/struts-html.tld</taglib-location>

  </taglib>

  <taglib>

    <taglib-uri>/WEB-INF/struts-logic.tld</taglib-uri>

    <taglib-location>/WEB-INF/struts-logic.tld</taglib-location>

  </taglib>

  <taglib>

    <taglib-uri>/WEB-INF/struts-template.tld</taglib-uri>

    <taglib-location>/WEB-INF/struts-template.tld</taglib-location>

  </taglib>

  <taglib>

    <taglib-uri>/WEB-INF/struts-tiles.tld</taglib-uri>

    <taglib-location>/WEB-INF/struts-tiles.tld</taglib-location>

  </taglib>

  <taglib>

    <taglib-uri>/WEB-INF/struts-nested.tld</taglib-uri>

    <taglib-location>/WEB-INF/struts-nested.tld</taglib-location>

  </taglib>

</web-app>

修改的地方不多,僅僅是頭部的聲明。其他地方完全不必改動,這樣的web.xml已經(jīng)支持了Servlet2.4規(guī)范了。

9.9.3  JSP部分:<logic:notEmpty><c:if>標簽

對于JSP顯示頁面的修改是整合的核心部分,在第三章示例的showAttackSolution.jsp中出現(xiàn)了這樣的語句:

<logic:notEmpty name="allAttackSolution">

...

</logic:notEmpty>

將類型為ArrayList的變量“allAttackSolution”從作用范圍中取出,利用<logic:notEmpty>標簽判斷該ArrayList是否為空。

根據(jù)之前討論的“所有判斷標簽被EL表達式和<c:if>標簽替換”,可以利用<c:if>標簽和EL表達式來修改該段JSP代碼。

修改后的結果如下:

<c:if test="${(requestScope.allAttackSolution != null)

&& fn:length(requestScope.allAttackSolution) != 0}">

...

</c:if>

<logic:notEmpty>標簽其本身具有多種功能:

q         一是判斷是否為null。

q         二是當它為String類型的變量時,判斷字符串長度是否為0。

q         三是當它為集合類型的變量時,利用集合類的isEmpty方法可以判斷是否是一個空的集合。

本示例既然要在替換后與替換前的工作一致,就應該對集合做兩個判斷:

q         一是該集合不為null。

q         二是該集合中的對象數(shù)量不為0。

!=null”的EL表達式實現(xiàn)了集合實例不為null的判斷;fn:length()函數(shù)實現(xiàn)了集合內對象數(shù)量不為0的判斷,兩個判斷用“&&”連接起來就實現(xiàn)了<logic:notEmpty>標簽對于集合判斷的工作。

在這里應該利用“<logic:notEmpty>標簽”,還是利用“EL表達式<c:if>標簽”呢?<logic:notEmpty>標簽相對來說可讀性更強些,EL表達式作為判斷條件則可讀性稍差些。然而,這些僅是就本示例的改動而言的,其他情況下,利用EL表達式和<c:if>標簽還是有其優(yōu)勢的。

    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內容均由用戶發(fā)布,不代表本站觀點。請注意甄別內容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內容,請點擊一鍵舉報。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多