一尘不染

jstl 标签在jsp文件中不起作用,在tomcat 7中出现错误

jsp

<c:if>在jsp文件中使用jstl标记时遇到问题。基本上,尽管它们是相关的,但我应该将其作为两个问题。

第一个问题:

在我的WEB-INF / lib中,我放了一个jstl 1.2.jar

在我的jsp文件中,放置了<%@ taglib prefix="c"uri="http://java.sun.com/jsp/jstl/core"%>

在我的jsp文件中,我使用<c:if>做一些事情。如果条件为真,则会显示一些特殊消息

基本上,里面的内容<c:if>不起作用,因为即使条件为真也不会显示该消息。

但是,如果我更改为使用旧的命名空间,则<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core"%>。其他变量未更改,则if标记起作用,因为显示了if标记内的消息。

我的第一个问题是为什么我必须在命名空间中使用/ jstl而不是/ jsp /
jstl。我正在使用jstl1.2.jar。因此,我应该使用1.2版的新版uri。但是,较旧的uri可以使用,但不适用于较新的用户。

第二个问题:

我忽略了我遇到的第一个问题,只是将/
jstl用作我的命名空间,只是因为它使我的Web应用程序按我想要的方式工作。但是,当我将Web应用程序部署到tomcat 7.X中时,它将显示以下异常:

org.apache.jasper.JasperException:/mywebapp.jsp(行:35,列:10)根据标签文件中的TLD或属性指令,属性测试不接受任何表达式org.apache.jasper.compiler.DefaultErrorHandler.jspError(
DefaultErrorHandler.java:42)

在/mywebapp.jsp行:35,列:10,即标记。

如果我将名称空间从<%@ taglib prefix =“ c” uri =“ http://java.sun.com/jstl/core”%>更改为<%@
taglib prefix =“ c” uri =“ http://java.sun.com/jsp/jstl/core“%>,它可以成功部署在tomcat中,但是标记内部的功能没有用。<c:if>标签之外的其他代码也可以。

所以我很困惑,真的很想知道如何解决这个问题。

顺便说一句,我正在使用servlet 2.5,jsp 2.0,jstl
1.2。我确实尝试将jsp2.0升级到jsp2.1,以查看是否可以解决第一个问题,但是我不知道如何升级jsp版本。


阅读 483

收藏
2020-06-08

共1个答案

一尘不染

但是,如果我更改为使用旧的命名空间,则<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core"%>。其他变量未更改,则if标签有效,因为显示了if标签内的消息。

如果您的中standard.jar包含JSTL 1.0,则可能会发生这种情况/WEB-INF/lib。摆脱它。另请参见我们的JSTL
Wiki页面。顺便说一句,我假设您没有碰过Tomcat和JRE自己的/lib文件夹,并且没有在其中放置任何与JSTL相关的JAR,或者没有认真地尝试解决问题就提取了JSTLJAR的内容。


顺便说一句,我正在使用servlet 2.5,jsp 2.0,jstl 1.2。
我确实尝试将jsp2.0升级到jsp2.1,以查看是否可以解决第一个问题,但是我不知道如何升级jsp版本。我对编程非常陌生。

您绝对不应/WEB-INF/lib自己提供任何Servlet或JSP库。Servlet容器(在您的情况下为Tomcat)已经附带了它。

您只需要确保web.xml根声明符合servlet容器支持的内容即可。Tomcat 7是与Servlet
3.0兼容的容器
,因此您的web.xml根声明应如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<web-app 
    xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
    version="3.0">

    <!-- Config here. -->

</web-app>
2020-06-08