JSTL与Struts的结合(十一)分类:我的著作 9.9 完整示例
在这一小节中,将修改在第三章中曾经给出的Struts框架示例,以Struts框架和JSTL的协同工作来实现。 对于第三章的示例,要将JSTL整合进去,需要做以下几步工作。 (1)下载JSTL并配置。 (1)修改原先的web.xml使其作为Servlet2.4的实现。 (3)修改JSP显示页面,整合JSTL和Struts标签库一起工作。 9.9.1 下载JSTL并配置
可以从http://java./products/jsp/jstl网址中下载JSTL1.1的最新版本。要使用这些标签库需要做3个步骤的工作。 (1)将下载的jstl.jar放置到Web应用的WEB-INF的lib目录下。 (2)将下载的TLD文件放置到Web应用的WEB-INF目录下。 (3)在需要使用的JSP页面中声明该标签库。 9.9.2 修改web.xml使其作为Servlet2.4的实现
在第三章的示例中所给出的web.xml是Servlet2.3规范的,因此无法很好的支持JSTL1.1,要修改为符合Servlet2.4规范的代码。使web.xml成为Servlet2.4规范是十分容易的,需要修改的是其头部DTD声明。 在Servlet2.3之前,校验和规范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规范,首此使用了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规范,应该将第三章示例的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中出现了这样的语句: <logic:notEmpty name="allAttackSolution"> ... </logic:notEmpty> 将类型为ArrayList的变量“allAttackSolution”从作用范围中取出,利用<logic:notEmpty>标签判断该ArrayList是否为空。 根据之前讨论的“所有判断标签被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 二是该集合中的对象数量不为0。 “!=null”的EL表达式实现了 在这里应该利用“<logic:notEmpty> |
|