在 JSP 中使用 class

Using class in JSP

我有一个class

public class MyServlet extends HttpServlet {

...

       private static MyObject myobject;

       public static MyObject getMyObject(){
           return myobject;
       }
}

和一个jsp,其中我有

<%! MyObject my_jsp_object = MyServlet.getMyObject();%>

我的对象有一个初始状态,我可以修改和保存。

当我在服务器上修改我的对象时出现问题。我希望,如果我修改 myobject 然后重新加载 jsp,my_jsp_object 也会被修改,但事实并非如此。

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

编辑

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

  1. 启动服务器
  2. 获取jsp,myobject的初始值存储在my_jsp_object
  3. 某人在某处修改了 myobject
  4. 当我重新加载 jsp 时,我将 myobject 的新值存储在 my_jsp_object

直到现在,当我重新加载 jsp 时,我仍然将 myobject 的旧值存储在 my_jsp_object

JSP是客户端技术,Servlet是服务器端技术。您无法通过这种方式与此技术进行通信。

用户 RequestDispatcher 将数据从 Servlet 发送到 JSP。

RequestDispatcher rd = getServletContext().getRequestDispatcher("/path/to/page.jsp");
request.setAttribute("myobject", myobject); rd.forward(request, response);

JSP 中使用 request.getAttribute("myobject") 方法获取对象。

 <% MyObject myobject = request.getAttribute("myobject") %>

你也可以使用cookies,session。

你需要知道

  • <%! ... %> 用于在 servlet 中创建成员 (field/method),它将由 JSP 代码生成(并在请求 jps 页面时执行)。
  • 在大多数情况下,服务器创建一个 servlet 实例,这意味着 <%! ... %> 中的代码将只执行一次(在构造函数中),您将重复使用同一个实例来处理许多请求。

您似乎需要的是每次请求您的 jps 时都会执行 MyServlet.getMyObject(); 的代码。在这种情况下,您要确保此代码将在 service() 方法中执行,这意味着您需要使用 <% ... %>(注意缺少 !)。

但最好的选择是避免在 JSP 中使用 Java 代码。有关更多信息,请阅读: How to avoid Java code in JSP files?