我在Java
中创建了3层(客户端,服务器,数据库)的信息系统。我用于客户端和服务器Tomcat 7 server
,Servlet
,HTTP restfull API
之间的通信。服务器中的类Obchod
创建与数据库通信的新数据类实例。
当我启动服务器时,没有创建数据类的实例,当客户端发送数据请求时,服务器创建数据类的实例,并将所有数据从数据库加载到本地数组,然后将请求的数据发送到客户端,在此请求之后所有数据丢失,服务器等待请求......
所以我需要这个存储数据的实例,以便为下一个请求保持活跃状态。
班级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项目(Eclipse)中的 Web.xml
<?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>
答案 0 :(得分:1)
整体而言:
ServletContext
就会存在。它已经
在所有会话中的所有请求中共享。HttpSession
就会存在
浏览器实例和会话没有在服务器端超时
然而。它在同一会话中的所有请求中共享。HttpServletRequest
和HttpServletResponse
只要活过{。}}
客户端已将其发送到完整响应(网页)
到达。它没有在别处分享。Servlet, Filter and
Listener
都会存在。他们正在分享
在所有会议的所有请求中。attribute
ServletContext, HttpServletRequest and HttpSession
将生活为
只要有问题的物体存在。为什么要在应用程序中的数组中存储数据?
提高性能?? 使用caching
,因此值将存储在缓存中,并且方法不会在指定的时间范围内查询数据库。
如果您想获得更新信息,请使用Transactions
更改数据库中的值。当user A
更新值时,下一个用户将直接从DB获取新值。
答案 1 :(得分:0)
在web.xml中,我只需添加listener
:
<listener>
<listener-class>obchod.Obchod</listener-class>
</listener>
在Obchod.java中:
@Path("/obchod")
public class Obchod implements ServletContextListener
{
int size = 20;
public void contextInitialized(ServletContextEvent event)
{
ServletContext sc = event.getServletContext();
sc.setAttribute("Uzivatel", new Uzivatel(size));
sc.setAttribute("Zbozi", new Zbozi(size));
sc.setAttribute("Skladem", new Skladem(size));
sc.setAttribute("ProdaneZbozi", new ProdaneZbozi(size));
sc.setAttribute("KoupeneZbozi", new KoupeneZbozi(size));
}
@POST
@Path("/addUser")
@Consumes(MediaType.APPLICATION_JSON)
public void addUser(@Context ServletContext context, String str)
{
Uzivatel u = (Uzivatel) context.getAttribute("Uzivatel");
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"));
}