According to TLD or attribute directive in tag file, attribute value does not accept any expressions

        jsp出现异常, 发生在使用JSTL库<c:out value=”${name}” />的时候失败,错误信息如下:

严重: Servlet.service() for servlet jsp threw exception
org.apache.jasper.JasperException: /test.jsp(22,37) According to TLD or attribute directive in tag file, attribute value does not accept any expressions

        原因:servlet版本与jstl标签库的jar的版本不匹配,以下有三种处理方法:

一.修改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>

 

二.使用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就不行了, 难道是版本不兼容吗?

        只要将

<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c"%>

        改为

<%@ taglib uri=http://java.sun.com/jstl/core_rt prefix="c"%>

        就没有问题了。

 

三.确认servlet版本是2.4及以上版本,jsp代码引入jstl路径多了一个”jsp”

<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

 

PS:jstl与servlet的版本搭配

《According to TLD or attribute directive in tag file, attribute value does not accept any expressions》
        在Servlet2.3及以前,jsp代码

<%@taglib prefix="c" uri="http://java.sun.com/jstl/core" %>

        在servlet2.4及以后,jsp代码引入路径多了一个”jsp”

<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

 

点赞