我有3个jsp: -
从a.jsp我要去b.jsp来显示一些结果。当用户更新其中一条记录时,我会调用实际更新它的c.jsp。因此,在更新之后,它会转发到a.jsp,并显示“已成功更新”消息。我在会话中设置此消息。并在显示此消息后的a.jsp中。我使会话无效。
问题是,当我按下浏览器后退按钮时,它仍会显示该消息。 我怎么能解决这个问题。 请帮我。 感谢
答案 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的内容,类似于向导。