在JSP中使用类

时间:2015-01-10 19:15:32

标签: java jsp

我有一个班级

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也会被修改,但事实并非如此。

我哪里错了?我怎样才能获得这种行为?感谢

修改

为了清楚起见,这是我想要获得的行为

  1. 启动服务器
  2. 获取存储在my_jsp_object
  3. 中的myobject初始值的jsp
  4. 有人在某处修改myobject
  5. 当我重新加载jsp时,我将myobject的新值存储在my_jsp_object中
  6. 到现在为止,当我重新加载jsp时,我仍然将myobject的旧值存储在my_jsp_object中

2 个答案:

答案 0 :(得分:1)

你需要知道

  • <%! ... %>用于在servlet中创建成员(字段/方法),它将从JSP代码生成(并且只要您的jps页面被请求就会执行)。
  • 在大多数情况下,服务器创建一个servlet实例,这意味着<%! ... %>中的代码只执行一次(在构造函数中),并且您将重用相同的实例来处理许多请求。

您似乎需要的是每次请求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,会话。