Java servlet中的页面生成时间

Java servlet中的页面生成时间,java,servlets,Java,Servlets,我有一个登录servlet,它使用用户名和密码参数处理post请求,并执行如下操作: Instant pageGenStart = Instant.now(); String username = req.getParameter("username"); String password = req.getParameter("password"); resp.setContentType("text/html;charset=utf-8"); Us

我有一个登录servlet,它使用用户名和密码参数处理post请求,并执行如下操作:

    Instant pageGenStart = Instant.now();

    String username = req.getParameter("username");
    String password = req.getParameter("password");

    resp.setContentType("text/html;charset=utf-8");

    User user = null;
    try {
        user = userService.getByUsername(username);
    } catch (SQLException e) {
        e.printStackTrace();
    }
    if (user == null && !password.equals("")) {
        try {
            user = new User(username, password);
            user.setId(userService.addNewUser(username, password));

            charactersService.addNewCharacter(user);
            sessionsService.add(req.getSession().getId(), user.getId());
        } catch (SQLException e) {
            e.printStackTrace();
        }
        resp.setContentType("text/html;charset=utf-8");
        resp.setStatus(HttpServletResponse.SC_OK);
        Duration time = Duration.between(pageGenStart, Instant.now());

        resp.sendRedirect("/main");
    }

若在数据库中找不到用户,则创建新用户并将其重定向到主页。通常我会将这个“时间”变量放入页面中,但我会将响应重定向到调用doGet方法的另一个servlet。如何让其他servlet知道登录servlet处理post请求需要多长时间?

您可以通过以下多种方式将值从一个servlet传递到另一个servlet:

  • 在会话中存储值(您必须注意会话管理)
  • 创建具有静态ConcurrentHashMap的类,存储每个用户会话的时间间隔,并使用会话ID获取它(在清除缓存时需要注意相同的问题)
  • 使用已经定义的lib(最好的选择,因为您不需要担心会话管理和缓存清除)

  • 我建议使用EH缓存处理此类问题。您可以从中看到一个很好的示例。

    将其添加到您的请求或session@ScaryWombat有什么方法可以包括它吗?或者我只是像resp.sendRedirect(“/main”+time.toMillis())那样将其添加为字符串?因为如果我这样做,它就不会被包括在参数中。你想用时间做什么?一般来说,如果您执行外部重定向,您需要将其存储在会话中,或者将其包含在重定向的请求参数中(但是您必须接受,它可能会被用户操纵,除非您对数据进行签名)@ErwinBolwidt一般来说,我只想显示每个页面的页面生成时间
    resp.sendRedirect(“/main?generationTime=“+time.toMillis())
    谢谢你的建议!呃,缓存不是我在这个项目中想要的,但我稍后会研究它。