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顯示頁面,整合JSTL和Struts標簽庫一起工作。 9.9.1 下載JSTL并配置
可以從http://java./products/jsp/jstl網(wǎng)址中下載JSTL1.1的最新版本。要使用這些標簽庫需要做3個步驟的工作。 (1)將下載的jstl.jar放置到Web應用的WEB-INF的lib目錄下。 (2)將下載的TLD文件放置到Web應用的WEB-INF目錄下。 (3)在需要使用的JSP頁面中聲明該標簽庫。 9.9.2 修改web.xml使其作為Servlet2.4的實現(xiàn)
在第三章的示例中所給出的web.xml是Servlet2.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> 修改的地方不多,僅僅是 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 三是當它為集合類型的 本示例既然要在替換后與替換前的工作一致,就應該對集合做兩個判斷: q 一是該集合不為null。 q 二是該集合中的對象數(shù)量不為0。 “!=null”的EL表達式實現(xiàn)了 在這里應該利用“<logic:notEmpty> |
|
|