【发布时间】:2021-04-13 17:42:51
【问题描述】:
我有 servlet,代码如下:
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
Person p = new Person("Mike");
req.setAttribute("person", p);
RequestDispatcher view = req.getRequestDispatcher("/result.jsp");
view.forward(req, resp);
}
在 result.jsp 中打印人名有两种选择。使用<jsp:getProperty> 或Expression language。
简单的EL代码:
<!DOCTYPE html>
<html><body>
Welcome ${person.name}
</body></html>
或者像这样使用 jsp:getProperty:
<!DOCTYPE html>
<html><body>
<jsp:useBean id="person" type="com.example.Person" class="com.example.Person" scope="request"/>
Welcome <jsp:getProperty name="person" property="name"/>
</body></html>
据我了解,这两个用于通过${person.name} 或<jsp:getProperty name="person" property="name"/> 获取名称的代码都调用findAttribute()。但有一个主要区别。用 EL 编写的代码不需要<jsp:useBean>,而<jsp:getProperty> 只能与<jsp:useBean> 结合使用。
我们可能会问${person.name} 如何知道“人”是什么类型的对象。好吧,它使用类似this 的东西。我的问题是<jsp:getProperty> 怎么不能像给定链接中所述的 EL 一样工作?为什么它不能调用 getClass(),getMethod() 并“省去”我们键入 class,type 的困难强>,id
在<jsp:useBean> 里面?是因为 EL 较新,因此为我们提供了更少的输入代码,还是隐藏在这背后的其他东西我没有看到?
【问题讨论】: