我有一个班级
public class MyServlet extends HttpServlet {
...
private static MyObject myobject;
public static MyObject getMyObject(){
return myobject;
}
}
和我有的jsp
<%! MyObject my_jsp_object = MyServlet.getMyObject();%>
myobject具有初始状态,我可以修改并保存。
当我在服务器上修改myobject时出现问题。我希望,如果我修改myobject然后重新加载jsp,my_jsp_object也会被修改,但事实并非如此。
我哪里错了?我怎样才能获得这种行为?感谢
修改
为了清楚起见,这是我想要获得的行为
到现在为止,当我重新加载jsp时,我仍然将myobject的旧值存储在my_jsp_object中
答案 0 :(得分:1)
你需要知道
<%! ... %>
用于在servlet中创建成员(字段/方法),它将从JSP代码生成(并且只要您的jps页面被请求就会执行)。 <%! ... %>
中的代码只执行一次(在构造函数中),并且您将重用相同的实例来处理许多请求。您似乎需要的是每次请求jps时都会执行MyServlet.getMyObject();
的代码。在这种情况下,您需要确保此代码将在service()
方法中执行,这意味着您需要使用<% ... %>
(请注意缺少!
)。
但最好的选择是避免在JSP中使用Java代码。欲了解更多信息,请阅读: How to avoid Java code in JSP files?
答案 1 :(得分:0)
JSP
是客户端技术,Servlet
是服务器端技术。您无法以这种方式与此技术进行通信。
用户RequestDispatcher
将数据从Servlet发送到JSP。
RequestDispatcher rd = 。getServletContext()方法的getRequestDispatcher( “/路径/到/ page.jsp”);
request.setAttribute(“myobject”,myobject); rd.forward(请求,回复);
在JSP
中使用request.getAttribute("myobject")
方法获取您的对象。
<% MyObject myobject = request.getAttribute("myobject") %>
你也可以使用cookies,会话。