According to TLD or attribute directive in tag file

xiaoxiao2022-06-12  32

应用部署运行的时候出现JSP异常, 发生在使用JSTL库的时候: According to TLD or attribute directive in tag file, attribute value does not accept any expressions, 可能是因为使用了JSP2.0版本, 同时又没有使用JSTL core库的备用版本(RT库), 以下有两种处理方法: 1. 如果不想使用web-app_2_4.xsd 和jstl1.1 那么可以按照下面两种方式修改 1). 修改web.xml. <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"> 改为2.3版本的 <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd"> <web-app> 2). 使用JSTL core RT库 JSTL core库的有两种taglib伪指令, 其中RT库即是依赖于JSP传统的请求时属性值, 而不是依赖于EL来实现(称为EL库.JSP2.0将支持EL) JSP中使用<%@ taglib uri=http://java.sun.com/jstl/core prefix="c"%>在2.3版本都可以,在2.4就不行了, 这是版本不兼容引起的,稍后将介绍servlet的版本。 只要将 <%@ taglib uri="http://java.sun.com/jstl/core" prefix="c"%> 改为 <%@ taglib uri=http://java.sun.com/jstl/core_rt prefix="c"%> 2:如果要使用jstl1.1(推荐) 则按照一下修改,很简单的。 jstl存在1.0和1.1的差异问题,用EL建议需要在1.1的版本下, 使用jstl1.1 只需要将 1.0的为 <%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %> 换成: <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> 注意,1.0版本没有/jsp/ 附录: jsp servlet j2ee tomcat jdk的版本差别 一 JSP2.0与JSP1.2比较 JSP 2.0是对JSP 1.2的升级,新增功能: 1. Expression Language 2. 新增Simple Tag和Tag File 3.web.xml新增<jsp:config>元素 特别说明web.xml. web.xml新增<jsp:config>元素 <jsp-config> 元素主要用来设定JSP相关配置,<jsp-config> 包括<taglib>和<jsp-property-group> 子元素。 (1)其中<taglib>以前的Jsp1.2中就有的,taglib主要作用是作为页面taglib标签中的uri和tld文件的一个映射关系 (2)其中<jsp-property-group>是JSP2.0种新增的元素。 <jsp-property-group> 主要包括8个子元素,它们分别是: <jsp-property-group> <description> 设定的说明 </description> <display-name>设定名称</display-name> <url-pattern>设定值所影响的范围</url-pattern> <el-ignored>若为true则不支持EL语法</el-ignored> <page-encoding>ISO-8859-1</page-encoding> <scripting-invalid> 若为true则不支持<% scripting%> 语法</scripting-invalid> <include-prelude>设置JSP网页的抬头,扩展名为.jspf </include-prelude> <include-coda>设置JSP网页的结尾,扩展名为.jspf</include-coda> </jsp-property-group> 例如: 其中抬头程序: prelude.jspf <br> <center> 文本内容 </center> <hr> 结尾程序: coda.jspf <br> <center> 文本内容 </center> <hr> 二、Servlet个版本比较 servlet 2.3 新增功能: 2000年10月份出来 Servlet API 2.3中最重大的改变是增加了filters servlet 2.4 新增功能: 2003年11月份出来 1、web.xml DTD改用了XML Schema; Servlet 2.3之前的版本使用DTD作为部署描述文件的定义,其web.xml的格式为如下所示: <?xml version="1.0" encoding="IS0-8859-1"?> <!DOCTYPE web-app PUBLIC "-//sunMicrosystems,Inc.//DTD WebApplication 2.3f//EN" "http://java.sun.com/j2ee/dtds/web-app_2.3.dtd"> <web-app> ....... </web-app> Servlet 2.4版首次使用XML Schema定义作为部署描述文件,这样Web容器更容易校验web.xml语法。同时XML Schema提供了更好的扩充性,其web.xml中的格式如下所示: <?xml version="1.0" encoding="UTF-8"?> <web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:workflow="http://www.workflow.com" xmins: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"> ......... </web-app> 注意: 改为Schema后主要加强了两项功能: (1) 元素不依照顺序设定 (2) 更强大的验证机制 主要体现在: a.检查元素的值是否为合法的值 b.检查元素的值是否为合法的文字字符或者数字字符 c.检查Servlet,Filter,EJB-ref等等元素的名称是否唯一 2.新增Filter四种设定:REQUEST、FORWARD、INCLUDE和ERROR。 3.新增Request Listener、Event和Request Attribute Listener、Enent。 4.取消SingleThreadModel接口。当Servlet实现SingleThreadModel接口时,它能确保同时间内,只能有一个thread执行此Servlet。 5.<welcome-file-list>可以为Servlet。 6.ServletRequest接口新增一些方法。 public String getLocalName() public String getLocalAddr() public int getLocalPort() public int getRemotePort() Servlet 2.5的新特征 2005年9月发布Servlet 2.5 Servlet2.5一些变化的介绍: 1) 基于最新的J2SE 5.0开发的。 2) 支持annotations 。 3) web.xml中的几处配置更加方便。 4) 去除了少数的限制。 5) 优化了一些实例 servlet的各个版本对监听器的变化有: (1)servlet2.2和jsp1.1 新增Listener:HttpSessionBindingListener 新增Event: HttpSessionBindingEvent (2)servlet2.3和jsp1.2 新增Listener:ServletContextListener,ServletContextAttributeListener ,HttpSessionListener,HttpSessionActivationListener,HttpSessionAttributeListener 新增Event: ServletContextEvent,ServletContextAttributeEvent,HttpSessionEvent (3)servlet2.4和jsp2.0 新增Listener:ServletRequestListener,ServletRequestAttribureListener 新增Event: ServletRequestEvent,ServletRequestAttributeEvent 三、J2EE规范版本比较 1.J2EE的发展 1997年Servlet技术的产生以及紧接着JSP的产生,为Java对抗PHP,ASP等等服务器端语言带来了筹码。1998年,Sun发布了EJB1.0标准,至此J2EE平台的三个核心技术都已经出现。于是,1999年,Sun正式发布了J2EE的第一个版本。并与1999年底发布了J2EE1.2,在2001年发布了J2EE1.3,2003年发布了J2EE1.4。 2.J2EE1.3 J2EE1.3的架构,其中主要包含了Applet容器,Application Client容器,Web容器和EJB容器,并且包含了Web Component,EJB Component,Application Client Component,以JMS,JAAS,JAXP,JDBC,JAF,JavaMail,JTA等等技术做为基础。 1.3中引入了几个值得注意的功能:Java消息服务(定义了JMS的一组API),J2EE连接器技术(定义了扩展J2EE服务到非J2EE应用程序的标准),XML解析器的一组Java API,Servlet2.3,JSP1.2也都进行了性能扩展与优化,全新的CMP组件模型和MDB(消息Bean)。 3.J2EE1.4 J2EE1.4大体上的框架和J2EE1.3是一致的,1.4增加了对Web服务的支持,主要是Web Service,JAX-RPC,SAAJ,JAXR,还对EJB的消息传递机制进行了完善(EJB2.1),部署与管理工具的增强(JMX),以及新版本的Servlet2.4和JSP2.0使得Web应用更加容易。 四、Tomcat版本比较 Tomcat 3.x servlet2.2和jsp1.1标准 Tomcat 4.x Servlet 2.3 和 JSP 1.2 版本 Tomcat 5.x Servlet 2.4或2.5 和 JSP 2.0 版本 五、JDK版本比较 已发行的版本: 版本号 名称 中文名 发布日期 JDK 1.1.4 Sparkler 宝石 1997-09-12 JDK 1.1.5 Pumpkin 南瓜 1997-12-13 JDK 1.1.6 Abigail 阿比盖尔--女子名 1998-04-24 JDK 1.1.7 Brutus 布鲁图--古罗马政治家和将军 1998-09-28 JDK 1.1.8 Chelsea 切尔西--城市名 1999-04-08 J2SE 1.2 Playground 运动场 1998-12-04 J2SE 1.2.1 none 无 1999-03-30 J2SE 1.2.2 Cricket 蟋蟀 1999-07-08 J2SE 1.3 Kestrel 美洲红隼 2000-05-08 J2SE 1.3.1 Ladybird 瓢虫 2001-05-17 J2SE 1.4.0 Merlin 灰背隼 2002-02-13 J2SE 1.4.1 grasshopper 蚱蜢 2002-09-16 J2SE 1.4.2 Mantis 螳螂 2003-06-26 J2SE 5.0 (1.5.0) Tiger 老虎 J2SE 5.1 (1.5.1) Dragonfly 蜻蜓 J2SE 6.0 (1.6.0) Mustang 野马 相关资源:Java 面经手册·小傅哥(公众号:bugstack虫洞栈).pdf
转载请注明原文地址: https://www.6miu.com/read-4932298.html

最新回复(0)