我没有能够在我的书面采访中回答这两个问题,大家可以帮助我吗?
问题1)假设您希望Servlet将持久数据发送到JSP页面,以便不同的用户获得不同的数据,以下哪个句子是真的?
- a)您可以使用以下指令:request.getSession()。setAttribute(E,F); JSP页面将使用动作jsp:useBean读取信息,其中scope =" page"和id =" E"。
- b)您可以使用以下指令:request.getSession()。setAttribute(E,F); JSP页面将使用动作jsp:useBean读取信息,其中scope =" session"和id =" E"。
我认为b)可能是正确的答案,但我不确定我是否完全理解了什么"持久数据"是指..
问题2)如果servlet将bean发送到JSP页面,那么在JSP页面内对bean进行的可能更改将始终对将来访问该bean的其他JSP页面或servlet可见。对错吗?
我认为这是假的,但我无法得到一个很好的解释..
先谢谢你们!
答案 0 :(得分:2)
问题1:以上都不是。没有理由将bean存储在会话属性中。它应该存储在请求属性中。并且视图不应该使用jsp:useBean。这是17年前做到这一点的方法。应该使用JSP EL。但是,当然,尝试在页面范围内查找bean将无法正常工作,因为它已存储在会话范围内。
问题2:首先,JSP不应该修改从servlet接收的bean。 JSP是一个视图,应该显示它从控制器接收的模型。不要修改它。即使它确实修改了bean,它也取决于bean的范围。如果bean已由servlet创建,存储在请求属性中并传递给JSP,则它不会从任何其他组件中看到,并且一旦处理完请求就有资格使用GC。如果它是由servlet传递给多个页面的单例,那么所有页面都将获得相同的单例对象,因此对所有JSP都可以看到更改(假设正确使用了同步)。
坦率地说,这些问题更多地说明雇主关于雇主的答案:雇主似乎并不了解他在做什么,并使用其工具,好像自1999年以来没有任何改变。
答案 1 :(得分:0)
对于问题1: 指令:request.getSession()。setAttribute(E,F); 这是会话范围,属性在会话中设置,因此正确的答案是B. 我认为持久性数据意味着只要会话
,这些数据就会持久存在