Resin下使用jstl
在Resin2.x下使用jstl
Resin从2.1.2版本开始自己实现了JSTL的core和fmt两个TAGLIB。
使用Resin2.x自带的JSTL不需要拷贝JAR和TLD文件,也不需要配置web.xml。
只要在页面引用就可以了,注意与标准JSTL1.1的区别。
- <%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %>
- <%@ taglib uri="http://java.sun.com/jstl/fmt" prefix="fmt" %>
<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jstl/fmt" prefix="fmt" %>
需要注意的是:
<c:out value="${myvar}"/> 是 JSTL 语法 , resin2.1.x版本支持,
而 ${myvar} 是 JSP 2.0 语法 resin 3.0 之后支持
在resin2.1.x中使用会产生java.lang.NoClassDefFoundError: javax/servlet/jsp/el/VariableResolver错误
在Resin3.x下使用jstl(未经验证)
将resin.conf文件的:
- <servlet servlet-name="directory" servlet-class="com.caucho.servlets.DirectoryServlet"/>
改成:
- <servlet servlet-name="directory" servlet-class="com.caucho.servlets.DirectoryServlet">
- <init enable="false"/>
- </servlet>
在resin.conf文件中添加你的webapp的配置,注意要加上
- <jsp fast-jstl="false"/>
- <web-app id="/jstltest" document-directory="jstltest"><jsp fast-jstl="false"/></web-app>
在jsp引用中
- <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
使用标准的JSTL1.1
需要将JAR包(jstl.jar和standard.jar)拷贝到WEB-INF/lib目录下,不需要拷贝TLD文件,不需要配置web.xml。
在页面这样引用
- <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
- <%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
使用标准的JSTL1.0
需要将JAR包(jstl.jar和standard.jar)拷贝到WEB-INF/lib目录下,拷贝需要的TLD文件。
配置web.xml
- <taglib>
- <taglib-uri>/tags/jstl-c</taglib-uri>
- <taglib-location>/WEB-INF/tld/c.tld</taglib-location>
- </taglib>
- <taglib>
- <taglib-uri>/tags/jstl-fmt</taglib-uri>
- <taglib-location>/WEB-INF/tld/fmt.tld</taglib-location>
- </taglib>
在jsp引用
- <%@ taglib uri="/tags/jstl-c" prefix="c" %>
- <%@ taglib uri="/tags/jstl-fmt" prefix="fmt" %>
<%@ taglib uri="/tags/jstl-c" prefix="c" %>
<%@ taglib uri="/tags/jstl-fmt" prefix="fmt" %>
Tomcat下使用JSTL1.0
需要将JAR包(jstl.jar和standard.jar)拷贝到WEB-INF/lib目录下,拷贝需要的TLD文件。
配置web.xml
- <taglib>
- <taglib-uri>/tags/jstl-c</taglib-uri>
- <taglib-location>/WEB-INF/tld/c.tld</taglib-location>
- </taglib>
- <taglib>
- <taglib-uri>/tags/jstl-fmt</taglib-uri>
- <taglib-location>/WEB-INF/tld/fmt.tld</taglib-location>
- </taglib>
在jsp引用
- <%@ taglib uri="/tags/jstl-c" prefix="c" %>
- <%@ taglib uri="/tags/jstl-fmt" prefix="fmt" %>
<%@ taglib uri="/tags/jstl-c" prefix="c" %>
<%@ taglib uri="/tags/jstl-fmt" prefix="fmt" %>
Tomcat下使用JSTL1.1
需要将JAR包(jstl.jar和standard.jar)拷贝到WEB-INF/lib目录下,不需要拷贝TLD文件,不需要配置web.xml。
在页面这样引用
- <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
- <%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
需要注意的是:
JSTL1.0是需要Servlet2.3和JSP1.2的。
JSTL1.1是需要Servlet2.4和JSP2.0的。
${myvar} 是JSP 2.0 语法,tomcat5以后的版本都支持JSP2.0也就是都支持EL语言。
但是为什么我们的应用程序发布到tomcat5服务器上后还是不支持EL语言呢,而且甚至不能发布成功。
这里涉及到web.xml文件的迁移问题
使用
- <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
是JSP1.2的语法,不支持EL语言。
需要把文件头换成
- <web-app xmlns="http://java.sun.com/xml/ns/j2ee"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
- version="2.4">
或者在每个jsp页面添加
- <%@ page isELIgnored="false" %>
<%@ page isELIgnored="false" %>