Jsp java会话跟踪

Jsp java会话跟踪,jsp,Jsp,可能重复: 我想在某个页面第一次调用该页面时转到该页面,然后在会话仍处于活动状态时一直转到另一个页面。我已经有了一个登录机制。我提出了另一个主题,有人建议在会话层上设置一个标志。我不知道如何实现这一点 基本上,当他们按下一个按钮进入一个页面时,它称之为: public int show(Action action) throws Exception { HttpServletRequest request = action.getRequest(); action.setJsp

可能重复:

我想在某个页面第一次调用该页面时转到该页面,然后在会话仍处于活动状态时一直转到另一个页面。我已经有了一个登录机制。我提出了另一个主题,有人建议在会话层上设置一个标志。我不知道如何实现这一点

基本上,当他们按下一个按钮进入一个页面时,它称之为:

public int show(Action action) throws Exception {
    HttpServletRequest request = action.getRequest();
    action.setJspURI("objects/objects_guidlines.jsp");
    return FORWARD;
}

如果他们是第一次来这里就好了。我如何实现一个检查,看看这是否是第一次,然后发送到另一个页面?

您需要一个静态变量或一个单例类来检查这一点

在servlets中,您可以声明一个静态变量来强制执行此检查,如果您无权访问该变量,则可以使用单例


答案还取决于您的体系结构。

HTTP是一种无状态协议,因此如果您希望在请求之间保持状态(例如用户以前是否在这里),则需要使用cookie或会话之类的工具

如果要使用会话,可以从HttpServletRequest获取会话,并执行以下操作:

public int show(Action action) throws Exception{
    HttpServletRequest request = action.getRequest();
    if (request.getSession().getAttribute("has_visited_previously")!=true)
    {
        //User has not been here before so record that they are visiting.
        request.getSession().setAttribute("has_visited_previously", true);
        action.setJspURI("objects/objects_guidlines.jsp");
        return FORWARD;
    }
    else
    {
        //User has been here before.
        action.setJspURI("objects/user_has_visited_before.jsp");
        return FORWARD;
    }
}

当答案不令人满意时,你不应该再问同样的问题。相反,通过在答案上发表评论和/或编辑和改进问题来提供反馈,以进一步澄清你真正的问题。我做了……但在一次讨论后没有人回应hour@DocHoliday哇,你等了整整一个小时,stack overflow上的志愿者都没有回答你的问题(事实并非如此,他们回答了)没有,我在他们回答后发表了评论,之后没有得到回复。我想也许他们认为答案是肯定的,不管怎样,我决定再问一次,再解释一下。下面的杰克·爱德蒙(Jack Edmonds)给了我一个很好的例子,这就是我所需要的……你有什么问题?@DocHoliday已经说过问题是什么;他的答案和你原来帖子上的答案一样。期望在一个全是志愿者的网站上立即扭转局面是愚蠢的。我没有投票否决你的第二个帖子,但我投票关闭了它。我想我明白你的意思了…Thanx man…我现在正在运行这个…我在这里得到了一个不兼容的数据类型如果(request.getSession().getAttribute(“has_visted_previous”)!=true)我应该能够绕过这个问题,一个静态变量将在所有用户之间共享,与单例相同。用户特定数据的正确位置在会话中。是的,你是对的,我错过了会话信息部分。