会话显示消息和后退按钮

时间:2012-01-07 12:49:42

标签: java jsp servlets web

我有3个jsp: -

  1. a.jsp
  2. b.jsp
  3. c.jsp
  4. 从a.jsp我要去b.jsp来显示一些结果。当用户更新其中一条记录时,我会调用实际更新它的c.jsp。因此,在更新之后,它会转发到a.jsp,并显示“已成功更新”消息。我在会话中设置此消息。并在显示此消息后的a.jsp中。我使会话无效。

    问题是,当我按下浏览器后退按钮时,它仍会显示该消息。 我怎么能解决这个问题。 请帮我。 感谢

2 个答案:

答案 0 :(得分:1)

我建议采取一些措施......

当您单击后退按钮时,浏览器将从缓存中获取页面...因此将JSP页面Expires日期设置为某个前一天/时间,以便从服务器(原点)而不是缓存中获取它。这可以通过编写Custom标记来完成,并在Expires对象上设置HttpServletRequest标头,并将该标记添加到JSP页面即可。

要使页面无效并在没有有效会话时重定向到a.jsp,请为该作业写一个Filter

标签可以像这样写

public class ExpiryTag extends SimpleTagSupport{

    @Override
    public void doTag() throws JspException, IOException {

        PageContext pageContext = (PageContext) getJspContext(); 
        Calendar instance = Calendar.getInstance();
        instance.add(Calendar.DAY_OF_MONTH, -1);
        HttpServletResponse response = (HttpServletResponse) pageContext.getResponse();
        response.addHeader("Expires", instance.getTime().toString());

    }

}

在tld文件中映射标记,如下所示

<tag>
            <name>expired</name>
            <tag-class>com.analysis.mvc.tags.ExpiryTag</tag-class>
            <body-content>empty</body-content>
        </tag>

然后像这样使用JSP中的标签

<prefix:expired/>

对于会话处理,您可以通过this进行基本了解。

答案 1 :(得分:0)

如果a.jsp,b.jsp和c.jsp是单个部分进程,请尝试将它们放在单个页面上(例如abc.jsp)。现在使用一些属性显示a.jsp / b.jsp / c.jsp的内容,类似于向导。