这是我当前的情况:我已经使用以下命令从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
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-1.2.jar
$TOMCAT_HOME/lib
那是什么问题呢?
编辑:要运行JSTL,我需要在容器和项目上进行哪些配置?我做的还不够吗?
我认为这不是JSTL的问题。这个符号:${emp.role}EL(Expression Language),它不起作用。
${emp.role}
您没有isELIgnored="true"在JSP文件中设置一些内容吗?像这样:
isELIgnored="true"
<%@ page isELIgnored="true" %>
或者也许在web.xml:
web.xml
<el-ignored>true</el-ignored>
false默认情况下应该是默认值,但是如果您使用的Servlet版本早于2.4,则默认值为true,因此在这种情况下,您需要将其设置为falsein web.xml:
false
true
<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为:
3.1
2.3
<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版本)