浏览器要求在重新加载页面时重新发送数据

时间:2016-02-24 13:17:59

标签: java jsp design-patterns struts2 post-redirect-get

我正在使用struts2编写应用程序。我在登录部分遇到问题。执行登录时,它将重定向到index.jsp页面。现在出现问题。问题是在登录后,重新加载了index.jsp,浏览器要求我重新发送数据。我不知道为什么会这样? 这是我的struts.xml代码,用于验证操作: -

<action name="authenticate" class="com.action.LoginAction">  
    <result name="success">index.jsp</result>
    <result name="failure">loginerror.jsp</result> 
</action>

以下是登录操作类的代码: -

public String execute() {
    if(sessionMap.containsKey("project_user")){
        return "success";
    }

    Project_User project_User=Login.checkCredentials(email_id,password);

    if(project_User!=null) {
        sessionMap.put("project_user", project_User);
        return "success";
    } else
        return "failure";
}

当index.jsp到来时,浏览器的url区域保持不变,浏览器的url字段中的链接仍然显示动作名称,如: - localhost:8084 / Tek-Hub / authenticate / 如果有人知道它,plzzz帮助我。 Thanxx

1 个答案:

答案 0 :(得分:1)

您需要使用名为PRG (Post / Redirect / Get)的模式。

这样,在执行第一个动作结果时会执行第二个请求(因为重定向),并且刷新登陆页面(例如按下F5)将触及第二个动作(GET一个),而不是登录操作(POST一个)。

改变这个:

<action name="authenticate" class="com.action.LoginAction">  
    <result name="success">index.jsp</result>
    <result name="failure">loginerror.jsp</result> 
</action>

到此:

<action name="authenticate" class="com.action.LoginAction">  
    <result name="success" type="redirectAction">index.action</result>
    <result name="failure">loginerror.jsp</result> 
</action>

<action name="index" class="com.action.IndexAction">  
    <result name="success">index.jsp</result>
</action>

enter image description here