一尘不染

不能在一个简单的示例上使用JSTL

jsp

这是我当前的情况:我已经使用以下命令从Shell创建了一个Maven项目:

mvn archetype:generate -DgroupId=it.my.current.package.example -DartifactId=Example -DarchetypeArtifactId=maven-archetype-webapp -DinteractiveMode=false
mvn package

然后我打开Eclipse,将项目作为Maven导入。我将那些依赖项添加到我的 pom.xml

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.1.0</version>
</dependency>
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>jstl</artifactId>
    <version>1.2</version>
    <scope>provided</scope>
</dependency>

然后,我创建了一个JSP和一个Servlet。

我的servlet仅设置了一些变量,而我的JSP将它们与一些JSTL一起使用。

我在JSP上添加了以下标签:

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

而且我的JSP上的代码非常简单:

<c:forEach items="${requestScope.empList}" var="emp">
    <tr>
        <td><c:out value="${emp.id}"></c:out></td>
        <td><c:out value="${emp.name}"></c:out></td>
        <td><c:out value="${emp.role}"></c:out></td>
    </tr>
</c:forEach>

我的Servlet正在这样做:

List<Employee> empList = new ArrayList<Employee>();
Employee emp1 = new Employee();
emp1.setId(1); emp1.setName("Sam");emp1.setRole("Developer");
Employee emp2 = new Employee();
emp2.setId(2); emp2.setName("John");emp2.setRole("Manager");
empList.add(emp1);empList.add(emp2);
request.setAttribute("empList", empList);
RequestDispatcher rd = getServletContext().getRequestDispatcher("/home.jsp");
rd.forward(request, response);

员工是一个简单的Bean。

当我尝试从Servlet运行此应用程序时,它实际上在JSP上向我显示了这一点:

${emp.id}      ${emp.name}      ${emp.role}

而且它没有显示我在Servlet上设置的值。

我是JSTL的新手,所以我首先用Google搜索了我的问题。我尝试jstl-1.2.jar$TOMCAT_HOME/lib目录中添加,但没有成功。

那是什么问题呢?

编辑:要运行JSTL,我需要在容器和项目上进行哪些配置?我做的还不够吗?


阅读 325

收藏
2020-06-10

共1个答案

一尘不染

我认为这不是JSTL的问题。这个符号:${emp.role}EL(Expression Language),它不起作用。

您没有isELIgnored="true"在JSP文件中设置一些内容吗?像这样:

<%@ page isELIgnored="true" %>

或者也许在web.xml

<el-ignored>true</el-ignored>

false默认情况下应该是默认值,但是如果您使用的Servlet版本早于2.4,则默认值为true,因此在这种情况下,您需要将其设置为falsein
web.xml

<jsp-config>
    <jsp-property-group>
        <url-pattern>*.jsp</url-pattern>
        <el-ignored>true</el-ignored>
    </jsp-property-group>
</jsp-config>

您具有3.1依赖项中的版本,但使用的是web.xml文件2.3版本。要使用Servlet,请3.1尝试将其更改web.xml为:

<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">

    rest of the TAGs
</web-app>

同时删除:

<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">

(用于2.3版本)

2020-06-10