JSP中出现According to TLD or attribute directive in tag file..

一下转帖别人博客的解决方式 [url]http://blog.youkuaiyun.com/f9inux/archive/2006/11/05/1368428.aspx[/url]
应用部署运行的时候出现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.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就不行了, 难道是版本不兼容吗?

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

改为
<%@ taglib uri=http://java.sun.com/jstl/core_rt prefix="c"%>
### 如何在 JSP 中配置 Servlet 并结合使用 JSTL 表达式 #### 配置 Servlet 的方式 在 Java Web 开发中,`Servlet` 是处理请求的核心组件之一。通过 `web.xml` 或者注解的方式可以在应用中注册并映射 `Servlet` 到特定 URL 路径。 1. **基于 XML 的配置** 在项目的 `WEB-INF/web.xml` 文件中声明 `Servlet` 和其对应的路径映射: ```xml <servlet> <servlet-name>MyServlet</servlet-name> <servlet-class>com.example.MyServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>MyServlet</servlet-name> <url-pattern>/my-servlet</url-pattern> </servlet-mapping> ``` 2. **基于注解的配置** 使用 `@WebServlet` 注解可以直接简化配置过程,无需修改 `web.xml` 文件: ```java @WebServlet("/my-servlet") public class MyServlet extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String message = "Hello from Servlet!"; request.setAttribute("message", message); RequestDispatcher dispatcher = request.getRequestDispatcher("/index.jsp"); dispatcher.forward(request, response); } } ``` #### 结合 JSTL 表达式的使用 `JSTL`(JavaServer Pages Standard Tag Library)提供了丰富的标签库来增强 JSP 页面的功能。其中最常用的是核心标签库 (`c`) 和表达式语言 (`EL`) 来访问数据模型中的属性。 1. **引入 JSTL 标签库** 在 JSP 文件顶部添加以下指令以导入 JSTL 核心标签库: ```jsp <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> ``` 2. **传递数据至 JSP 页面** 上述示例中,`Servlet` 将消息存储到请求作用域中: ```java request.setAttribute("message", "Hello from Servlet!"); ``` 3. **在 JSP 中显示数据** 使用 EL 表达式和 JSTL 标签读取并展示该数据: ```jsp <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>JSP Example</title> </head> <body> <h1>${message}</h1> <!-- 使用 EL 显示数据 --> <c:if test="${not empty message}"> <p>The message is not null.</p> </c:if> </body> </html> ``` 4. **注意事项** 如果遇到错误提示类似于 “According to TLD or attribute directive in tag file”,可能是由于未正确加载 JSTL 库或者版本不兼容[^3]。解决方法包括确保 Maven 依赖项已正确定义以及确认使用的 JSTL 版本支持当前环境下的功能需求。 ```xml <dependency> <groupId>jstl</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency> ``` --- ### 示例代码总结 以下是完整的流程实现: 1. **Servlet 类** ```java import javax.servlet.*; import javax.servlet.http.*; import java.io.IOException; @WebServlet("/example") public class ExampleServlet extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setAttribute("name", "World"); request.getRequestDispatcher("/greeting.jsp").forward(request, response); } } ``` 2. **JSP 页面 (greeting.jsp)** ```jsp <%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <html> <head><title>Greeting Page</title></head> <body> <h1>Hello ${name}!</h1> <c:choose> <c:when test="${empty name}"> <p>No name provided.</p> </c:when> <c:otherwise> <p>Welcome back, ${name}!</p> </c:otherwise> </c:choose> </body> </html> ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值