假设你有这样的东西:
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<table>
<c:forEach items="${products}" var="product">
<tr>
<td>${product.name}</td>
<td>${product.description}</td>
</tr>
</c:forEach>
</table>
如何查看此
name
对象还有哪些其他键(例如键:description
或 "product"
)?我主要是一名 JavaScript 工程师,所以 JSP 对我来说仍然很陌生。
举例来说,我想要将
price
放入新的 <td>
中,但是 product.price
不起作用,而且我无法找出访问其真实名称的正确键。
尝试在网上寻找答案,但没有看到。
类似这样的东西是使用 JSTL 标记的 JSP 代码片段。 JSTL 在其标签中大量使用 EL 表达式。这是代码中的
<c:forEach>
标签。即使定义了整个 JSP 页面,您也可能不知道其中使用的属性。如果您尝试在浏览器中访问此类页面,则会失败并显示空内容或返回 404 错误代码。如果您的 JSP 页面位于 WEB-INF
文件夹下,则确定最后一种情况。
什么原因仍然无法访问视图目录中的JSP页面?
事实是
WEB-INF
是服务器上的受保护目录;从外部访问文件是不可能的。应用程序可以将其文件存储在此目录中,以确保用户无法访问它们。这主要适用于配置文件和其他内部文件。一些 MVC 框架中的 JSP 文件开始放置在那里,以限制绕过控制器对视图的直接访问。同样的事情也适用于使用调度程序实现 MVC 模式的 servlet。由于这些JSP如果没有在控制器上初始化就无法运行,直接访问这些页面会抛出异常。
初始化由控制器执行的 JSP 页面,其中准备好所有属性并将其放入 JSP 范围中。一旦“准备好”显示,控制器就会使用调度程序将其请求转发到 JSP 页面。所有属性都转移到新请求中,并且可以通过 JSTL 标记中的 EL 表达式找到。因此,您应该查看控制器代码以查找它作为属性传递给 JSP 的对象。通常控制器不关心对象结构,因为它将它们保存为 Object
。 EL 表达式使用内省机制来研究对象并找出其属性。