假设有一个 servlet,其中包含代码:
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
foo.Person p = new foo.Person("Evan");
req.setAttribute("person", p);
RequestDispatcher view = req.getRequestDispatcher("/result.jsp");
view.forward(req, resp);
}
,这将转到result.jsp
打印名字(Evan)。下面是它的外观图片(来源 Head First Servlet 和 JSP):
![enter image description here](https://i.stack.imgur.com/vOtR0.png)
我知道<jsp:useBean>
通过调用返回相同的 Person 对象getAttribute()
- 因为他们在同一个请求范围。而在另一边,<jsp:getProperty>
将会通知findAttribute()
从字面上尝试找到值“person”的属性..并最终打印Evan.
但如果我不使用怎么办<jsp:useBean>
?这是否意味着我无法在范围内访问“person”属性request?我的意思是即使我不使用它仍然会在那里<jsp:useBean>.
那么为什么我必须有同样的value(“人”)在两者内id in <jsp:useBean>
and name inside <jsp:getProperty>
?简单去除<jsp:useBean>
破坏了我的程序。
知道<jsp:getProperty>
calls findAttribute()
,如果只有一个属性(比如属性名称),将用作在范围内查找属性的参数页面>请求>会话>申请?为什么我必须“捆绑”这两个标签:<jsp:useBean>
and <jsp:getProperty>
?
你觉得下面的代码怎么样?
public class Main {
public static void main(String[] args) {
System.out.println(person);
}
}
你一定已经猜对了不会编译成功.
现在,下面的代码怎么样?
public class Main {
public static void main(String[] args) {
Person person = new Person();// Declaring person
System.out.println(person);
}
}
Of course, it will be compiled successfully1 because now the compiler understands what person
is.
同样,使用
<jsp:getProperty name="person" property="name">
没有声明person
as
<!-- Declaring person -->
<jsp:useBean id="person" class="foo.Person" scope="request" />
不会编译成功.
1 Assuming Person.class
is there.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)