带有内存字典的Java servlet是线程安全的,并且可以重新初始化

带有内存字典的Java servlet是线程安全的,并且可以重新初始化,java,tomcat,servlets,thread-safety,Java,Tomcat,Servlets,Thread Safety,我想构建一个非常简单的servlet,它将在单个url端点读取http发布的数据,如: http://localhost:8080/post 然后它必须: 1. authenicate the request based appId and userId that was posted 2. if authentication went ok, gather the form fields and save it to the db. 这将是一个非常简单的servlet,不需要任何繁重的框架

我想构建一个非常简单的servlet,它将在单个url端点读取http发布的数据,如:

http://localhost:8080/post
然后它必须:

1. authenicate the request based appId and userId that was posted
2. if authentication went ok, gather the form fields and save it to the db.
这将是一个非常简单的servlet,不需要任何繁重的框架

我可能有10K-50K用户,我不想执行数据库查找来进行身份验证

我只想将这些信息存储在字典/散列中,这必须是线程安全的

如果一个新用户注册,我必须能够使这个内存字典失效,并从mysql重新加载应用程序/用户数据,但前提是一个新用户注册

技术规格要求在高达每秒5K请求的重载下工作

我是java新手,正在试验如何在java/servlet中实现这一点

我怎么能让这个字典作为一个静态类型字段,可供servlet的doGet方法访问,同时又能在新用户加入时重新初始化它呢

下面是一个简单的servlet,我想在此基础上构建它:

package test;

import java.io.*;

import javax.servlet.http.*;
import javax.servlet.*;

public class HelloServlet extends HttpServlet {
  public void doGet (HttpServletRequest req,
                     HttpServletResponse res)
    throws ServletException, IOException
  {
    PrintWriter out = res.getWriter();

    out.println("Hello, world!");
    out.close();
  }
}
请不要从我这里假设太多,对于如何设置这本词典,代码片段非常感谢


我想了解的关键是如何设置这个字典,它可以在我的servlet中用于响应请求和执行查找,最初从mysql加载它,然后能够以线程安全的方式重新初始化它。

您的文章对您遇到的具体问题有点了解,但您可能会对该类感兴趣


这可以是一个静态字段,然后您可以使用
get
put
方法存储和检索所需的信息。

这篇文章的内容和标题之间似乎存在很大的脱节。您的权利,标题似乎来自它保存的另一篇文章,正在修复它。我如何声明它,并在servlet的doGet方法中引用它。它可以被其他servlet共享吗?@codecompleting像任何地图一样引用它?是的,它可以被共享——但是如果它要在整个应用程序中共享,它应该在应用程序上下文中——这就是它的用途。@code完成它取决于它。您希望存储哪些信息?正如DaveNewton提到的,HelloServlet中的任何代码都可以通过HelloServlet.mapName访问它,但是如果这是与其他servlet共享的,那么HelloServlet可能不是最好的地方。