在 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 也会被修改,但事实并非如此。
我哪里错了?我怎样才能获得这种行为?谢谢
编辑
为了清楚起见,这是我想要获得的行为
- 启动服务器
- 获取jsp,myobject的初始值存储在my_jsp_object
- 某人在某处修改了 myobject
- 当我重新加载 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?
我有一个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 也会被修改,但事实并非如此。
我哪里错了?我怎样才能获得这种行为?谢谢
编辑
为了清楚起见,这是我想要获得的行为
- 启动服务器
- 获取jsp,myobject的初始值存储在my_jsp_object
- 某人在某处修改了 myobject
- 当我重新加载 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?