struts中tdl文件的引入方式
来源:互联网 发布:centos 7.2 snmp 编辑:程序博客网 时间:2024/05/16 14:55
部署一个 Web 应用到 WebSphere Application Server 中,浏览 index.jsp 页面时而正常,时而出现500错误,查看服务器输出日志可以看到以下错误,
E SRVE0026E: [Servlet Error]-[This absolute uri (http://jakarta.apache.org/struts/tags-logic) cannot be resolved in either web.xml or the jar files deployed with this application]: org.apache.jasper.JasperException: This absolute uri (http://jakarta.apache.org/struts/tags-logic) cannot be resolved in either web.xml or the jar files deployed with this application
at org.apache.jasper.compiler.TagLibraryInfoImpl.<init>(TagLibraryInfoImpl.java:224)
at org.apache.jasper.compiler.TagLibraryInfoImpl.<init>(TagLibraryInfoImpl.java:189)
..........
很明显示是因为标签库的问题,index.jsp 中使用了 logic 标签,引入标签是这样写的:
<%@ taglib uri="http://jakarta.apache.org/struts/tags-logic" prefix="logic" %>
对于这个问题,我这边是因为 logic.tld 损坏,偶然用 Eclipse3.2+MyEclipse5.0 打开这个文件,发现不能正常显示要,关闭再次打开,又没问题了,保存它,替换掉服务器上的这个文件,运行正常。难道我在访问 index.jsp 时也是有时候能正常解析 logic.tld 文件,有时候又不行,读入 logic.tld 配置也应该是一次性完成啊。
下面叙述我对这个问题寻求解决的过程。
怎么会找不到标签呢,在 web.xml 中没有关于 taglib 的配置,这也是可行的,在 WEB-INF 下有相应的 struts-logic.tld 文件啊,只要该标签说明文件中的 uri 属性说明是 http://jakarta.apache.org/struts/tags-logic 就行。
为什么有时是好的,有时又有问题呢?要是总是出错还说得过去。
于是在网上大搜了一把,有许多解释使用 jstl 标签库时会出现类似的错误。
有说要放在支持 Servlet 2.4 规范的容器中运行,那不可能,原来我这个 web 应用在 WAS 5.1 下跑得好好的啊,WAS5.1 也只支持 Servlet 2.3 规范。
有说必须在 web.xml 文件中配置标签库说明,比如:
<taglib> <taglib-uri>/WEB-INF/struts-logic.tld</taglib-uri> <taglib-location>/WEB-INF/struts-logic.tld</taglib-location></taglib>
那也是用不着的,因为我在 Eclipse3.2+MyEclipse5.0 下建一个 web 应用,都不需要这样配置都可以正常使用 logic 标签。
还有说应把 struts-logic.tld 拷贝到 WEB-INF 目录中,也不一定,这样做只是基于上面那种 web.xml 配置方式才需要的,我自己实验的 web 应用,只需要引入 struts.jar 就行,在 WEB-INF 都不要放置 struts 的 tld 文件。
因为 WEB-INF 下可以不要 tld 文件,web.xml 中也可以不用 taglib 的配置,只要在 jsp 文件中用代码
<%@ taglib uri="http://jakarta.apache.org/struts/tags-logic" prefix="logic" %>
引入 logic 标签就能使用它了,为此还琢磨了一下,应用是如何加载标签描述的。打开 struts.jar 包发现在 META-INF.tlds 中有 strtus-logic.tld 文件,并且属性 uri 为 http://jakarta.apache.org/struts/tags-logic,可见 jsp文件就是通过这个 uri 在struts.jar的适当地方定位哪个标签库实现的。只要 jsp 中和 tld 中的 uri 属性一致即可。
而在 web.xml 配置
<taglib>
<taglib-uri>/WEB-INF/struts-logic.tld</taglib-uri>
<taglib-location>/WEB-INF/struts-logic.tld</taglib-location>
</taglib>
却给自己添更多麻烦了,首先需要从 struts.jar 解出 tld 文件放到 WEB-INF 下,在 jsp 文件中引入 taglib 要写成与在 web.xml 中配置的 uri 一致了,如:
<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %>
通过这一问题的解决过程,也加深了jsp自定义标签库的两种配置方法:
1. 把 tld 文件放在 jar 包的 META-INF.tlds (WEB-INF/classes/目录的 META-INF.tlds 目录中应该也行),jsp 文件引入标签库时用与 tld 文件中一样的 uri。
2. 把 tld 文件放在某个地方,一般是 /WEB-INF/ 目录下,然后在 web.xml 中自定义出一个 taglib-uri 属性,jsp 文件引入标签库时就用这个配置的 uri 属性。
- struts中tdl文件的引入方式
- php中引入文件方式及引入的优先级
- Eclipse中struts的引入
- 引入easyui文件的方式
- FreeMarker中引入公共文件的两种方式
- PHP中引入文件的四种方式及区别
- 引入js文件的几种方式
- dtd约束文件的引入方式
- andriod中引入jar包的方式
- js中引入图片的方式
- css的4中引入方式
- JSP页面tdl自定义标签的做法
- 关于WEB开发中引入javascript文件方式的一点建议
- 在spring配置文件中引入properties文件--引出加载配置文件的对应方式
- struts配置文件l中使用include 标签 引入另外一个在jar中的struts文件
- struts配置文件l中使用include 标签 引入另外一个在jar中的struts文件
- Jmeter中引入class文件的方法
- Struts中标签的引入
- VC ADO "IDispatch error #3092"
- C经典面试试题二
- PyCairo, PyGobject & PyGTK for Python GUI (Ubuntu)
- Install Status.net CMS.
- iOS文档预览功能教程
- struts中tdl文件的引入方式
- C笔试三
- Window文件转移备份覆盖 和 增量备份
- opencv 从摄像头读取检测圆(霍夫变化)
- ubuntu 安装xampp
- 网页几秒自动跳转
- Windows 消息分流器-HANDLE_MSG【转自别人,附上自己的实验代码】
- android 线程之AsyncTask
- c++ 实例对象 ,区别