1.首先我在Jsp页面中 定义一个User1 类,然后用EL来遍历这个类的集合userList
<%
class User1{
private String name;
private int age;
public User1(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
List<User1> userList = new ArrayList<>();
userList.add(new User1("zhanghao",22));
userList.add(new User1("zhangfan",23));
pageContext.setAttribute("userList",userList);
%>
<c:forEach var="user" items="${userList}">
${user.name} --- ${user.age}
</c:forEach>
好了,代码时没问题,但运行时,就会遇到异常。
异常截图如下:

可以看出,再JSP页面中定义类,属性(name,age)变为不可读的了。
看下在JSP翻译servlet过程中,JSP中定义的类User1,生成的字节码文件。

我的JSP叫做,04JSTL.jsp,那么生成了_04JSTL_jsp.java和_04JSTL_jsp.class这个没问题(jsp文件名以数字开头,自动加下划线。)
然后又生成了一个_04JSTL_jsp$User1.class,这是我们在JSP中定义的类。
原因:未知,欢迎探讨。
解决方案:如果想使用JSTL遍历类集合,不要在JSP中定义类。