java - 如何使 Tomcat 7 类的实例保持 Activity 状态

标签 java eclipse tomcat servlets

我在 Java 中创建了具有 3 层(客户端、服务器、数据库)的信息系统。我正在使用客户端和服务器 Tomcat 7 服务器ServletHTTP 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>

Solution

最佳答案

这就是 Java Servlet 的工作方式。看这张图片:enter image description here

总体而言:

  • ServletContext 与 webapp 一样存在。它已经 在所有 session 中的所有请求之间共享。
  • HttpSession 只要客户端与 webapp 交互就存在 浏览器实例并且 session 在服务器端没有超时 然而。它已在同一 session 中的所有请求之间共享。
  • HttpServletRequestHttpServletResponse 与 客户端发送它直到完整的响应(网页)是 到达的。它不会在其他地方共享。
  • 任何Servlet、过滤器和 只要 webapp 存在,Listener 就会存在。他们正在分享 在所有 session 的所有请求中。
  • 您在其中设置的任何属性 ServletContext、HttpServletRequest 和 HttpSession 将作为 只要所讨论的对象存在。

为什么要在应用程序中将数据存储在数组中?

为了提高性能??使用缓存,所以值将存储在缓存中,并且方法不会查询指定时间范围的数据库。

如果您想要更新信息,请使用Transactions 更改数据库中的值。当 user A 更新值时,下一个用户将直接从 DB 中获取新值。

关于java - 如何使 Tomcat 7 类的实例保持 Activity 状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34421896/

相关文章:

tomcat - 从 Intellij 在 tomcat 中将 Web 应用程序部署为 ROOT.war 应用程序

java - RxJava 无限重试新的可观察对象

java - 将可序列化对象存储到文件中,并排除一些数据

java - JDBC 连接和语句类

java - Android - 如何将文档打包到应用程序中

eclipse 调试器 : attaching source-code of maven dependencies?

java - 玩家坠落系统(基本上是重力)

java - 从另一个方法调用变量

eclipse更新站点: HTTP Proxy Authentication Required error

java - 实例化 servlet 类时出错 [org.ran.FristServlet]