我在 Java
中创建了具有 3 层(客户端、服务器、数据库)的信息系统。我正在使用客户端和服务器 Tomcat 7 服务器
、Servlet
、HTTP restfull API
之间的通信。服务器中的 Obchod
类创建与数据库通信的数据类的新实例。
局部地,当我启动服务器时,没有创建数据类的实例,当客户端发送数据请求时,服务器创建数据类的实例并将所有数据从数据库加载到本地数组,然后将请求的数据发送到客户端,在此请求之后所有数据丢失,服务器等待请求...
所以我需要这个将数据存储在数组中的实例为下一个请求保持 Activity 状态。
类 Obchod
@Path("/obchod")
public class Obchod
{
int size = 20;
// Data classes
Uzivatel u = new Uzivatel(size);
Zbozi z = new Zbozi(size);
Skladem s = new Skladem(size);
ProdaneZbozi p = new ProdaneZbozi(size);
KoupeneZbozi k = new KoupeneZbozi(size);
@POST
@Path("/addUser")
@Consumes(MediaType.APPLICATION_JSON)
public void addUser(String str)
{
JSONObject obj = new JSONObject(str);
u.pridej(Integer.toString(u.maxID() + 1), obj.getString("Jmeno"), obj.getString("Prijmeni"), obj.getString("Datum_Narozeni"), obj.getString("Pozice"));
}
...
//next methods
...
}
Web.xml
动态网页项目(Eclipse)
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">
<display-name>WSdemo</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>JAVA WS</servlet-name>
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>jersey.config.server.provider.packages</param-name>
<param-value>obchod</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>JAVA WS</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
</web-app>
最佳答案
总体而言:
ServletContext
与 webapp 一样存在。它已经 在所有 session 中的所有请求之间共享。HttpSession
只要客户端与 webapp 交互就存在 浏览器实例并且 session 在服务器端没有超时 然而。它已在同一 session 中的所有请求之间共享。- 的
HttpServletRequest
和HttpServletResponse
与 客户端发送它直到完整的响应(网页)是 到达的。它不会在其他地方共享。 - 任何
Servlet、过滤器和 只要 webapp 存在,Listener
就会存在。他们正在分享 在所有 session 的所有请求中。 - 您在其中设置的任何
属性
ServletContext、HttpServletRequest 和 HttpSession
将作为 只要所讨论的对象存在。
为什么要在应用程序中将数据存储在数组中?
为了提高性能??使用缓存
,所以值将存储在缓存中,并且方法不会查询指定时间范围的数据库。
如果您想要更新信息,请使用Transactions
更改数据库中的值。当 user A
更新值时,下一个用户将直接从 DB 中获取新值。
关于java - 如何使 Tomcat 7 类的实例保持 Activity 状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34421896/