abi*_*rto 4 java jsp tomcat jstl maven
这是我目前的情况:我使用以下命令从我的shell创建了一个Maven项目:
mvn archetype:generate -DgroupId=it.my.current.package.example -DartifactId=Example -DarchetypeArtifactId=maven-archetype-webapp -DinteractiveMode=false
mvn package
Run Code Online (Sandbox Code Playgroud)
然后我打开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>
Run Code Online (Sandbox Code Playgroud)
然后我创建了一个JSP和一个Servlet.
我的servlet只设置了一些变量,我的JSP使用它们和一些JSTL.
我在JSP上添加了这个标签:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
Run Code Online (Sandbox Code Playgroud)
我的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>
Run Code Online (Sandbox Code Playgroud)
我的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);
Run Code Online (Sandbox Code Playgroud)
员工是一个简单的Bean.
当我尝试从我的Servlet运行这个应用程序时,它实际上在我的JSP上显示了这个:
${emp.id} ${emp.name} ${emp.role}
Run Code Online (Sandbox Code Playgroud)
而且它没有显示我在Servlet上设置的值.
我是JSTL的新手,所以我先搜索了我的问题.我尝试添加jstl-1.2.jar我的$TOMCAT_HOME/lib目录,但它没有用.
那有什么问题呢?
编辑:我需要对我的容器和项目运行JSTL进行哪些配置?我做的还不够吗?
我认为这不是JSTL的问题.这种表示法:${emp.role}是EL(表达语言),它不起作用.
你不是isELIgnored="true"在JSP文件中设置了一些吗?像这样:
<%@ page isELIgnored="true" %>
Run Code Online (Sandbox Code Playgroud)
或许在web.xml:
<el-ignored>true</el-ignored>
Run Code Online (Sandbox Code Playgroud)
它应该是false默认,但如果你使用的servlet版本低于2.4,则默认为true,所以在这种情况下,你需要将其设置为false在web.xml:
<jsp-config>
<jsp-property-group>
<url-pattern>*.jsp</url-pattern>
<el-ignored>true</el-ignored>
</jsp-property-group>
</jsp-config>
Run Code Online (Sandbox Code Playgroud)
您有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>
Run Code Online (Sandbox Code Playgroud)
同时删除:
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
Run Code Online (Sandbox Code Playgroud)
(这是2.3版本)