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

标签 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,不需要任何繁重的框架。

我可能会有 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 初始加载它然后能够在线程中重新初始化它-安全的方式。

最佳答案

除了 ConcurrentHashMap 之外,您的帖子对您​​遇到的具体问题略有说明。你可能会感兴趣。

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

关于具有内存中字典的 Java servlet,它是线程安全的,并且可以重新初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7930164/

相关文章:

java - (isUserInRole()) 是将用户权限/安全性附加到 JSF 按钮的最简单方法吗?

java - 应用程序架构: request processing

android - JSESSIONID=0000fWm58im_RcpQXmWI8LlDdvg :-1 what does ":-1" resembles to?

java - 比较2 ArrayList java

tomcat - spring security与Tomcat基本授权冲突

java - 二进制长除法算法

java - 我们如何决定在maven中使用哪个java版本来编译一个版本的库?

java - 升级tomcat 7到tomcat 8.5

java - 识别由于夏令时而重复的日期/时间

java swing - JLabel不旋转