struts2+redirectAction与token的区别

来源:互联网 发布:javascript精通 编辑:程序博客网 时间:2024/05/01 10:11

 

struts2中关于添加验证,我们一般添加完就转到另一个action,以免数据重复添加,struts2中常用的验证方法有两种redirectAction和token。对于这两种方法之间肯定是有区别的,下面我们来看看关于redirectAction和token 这两种方法在struts2的区别。

当使用type=“redirectAction” 提交到一个action并且需要传递一个参数时。

login.jsp

 <form action="login2">
                    id:<input type="text" name="id"/><br/>
                   username:<input type="text" name="username"/><br/>
                   password:<input type="password" name="password"/><br/>
                   <input type="submit" value="submit">
        </form>

login.action

private int id;
 
        private String username;

private String password;

        public int getId() {
          return id;
         }

        public void setId(int id) {
          this.id = id;
         }

        public String getUsername() {
        return username;
        }

        public void setUsername(String username) {

        this.username=username
        }

        public String getPassword() {
        return password;
         }

        public void setPassword(String password) {
        this.password = password;
        }

loginDto dto = new loginDto(); 
        public String execute()
         {
          if(dto.getPassword().equals("") && dto.getUsername().equals(""))
          {
           return "input";
          }
          int id=dto.getId();
          String username=dto.getUsername();
          String password=dto.getPassword();
          loginDao login=new loginDaoImpl();
          System.out.println(id);
          System.out.println(username);
          System.out.println(password);
          login.insertLogin(id, username, password);
          return SUCCESS;
         }

struts.xml

<action name="login2" class="com.struts2.login.login2">
                    <result name="success" type="redirectAction">
                    <param name="ActionName">login.action</param>//要转到action的名字
                    <param name="id">${id}</param>//带参数传递给下一个action
                    <param name="username">${username}</param>//带参数传递给下一个action
                   <param name="password">${password}</param>//带参数传递给下一个action
                  </result>

</action>

result.jsp

id:${requestScope.id }<br> 
       username:${requestScope.username }<br>
       passwrod:${requestScope.password }<br>

 

方法都写完运行服务器,添加一条记录后在result.jsp页面就显示出刚刚添加的数据。而当你页面刷新时仍然是显示这条记录(等于刷新login.action)。

退一步在添加新的记录时,可以显示新添加的记录。而在token中就跟redirectAction有很大的区别,下面看下token的实现方式。


使用token时,代码如下:

login.jsp

<s:form action="login1">

 username: <s:textfield key="id"/>
         username: <s:textfield key="username"/>
         password<s:password key="password" />
         <s:token></s:token>//这行代码必须添加,实现token隐藏域验证码
         <s:submit/>
</s:form>

loginToken.action

 

 private int id;
 
 private String username;
 
 public int getId() {
  return id;
 }

 public void setId(int id) {
  this.id = id;
 }

 public String getUsername() {
  return username;
 }

 public void setUsername(String username) {
  this.username = username;
 }

 public String getPassword() {
  return password;
 }

 public void setPassword(String password) {
  this.password = password;
 }

 private String password;
 
 
 loginDto dto = new loginDto();
 public loginDto getModel() {
  // TODO Auto-generated method stub
  
  return dto; 
 }
 public String execute() throws Exception {
  // TODO Auto-generated method stub
  int id=dto.getId();
  String username=dto.getUsername();
  String password=dto.getPassword();
  loginDao login=new loginDaoImpl();
  System.out.println(id);
  System.out.println(username);
  System.out.println(password);
  login.insertLogin(id, username, password);
  System.out.println(dto.getPassword());
  System.out.println(dto.getUsername());
  return SUCCESS;
 }

 

struts.xml

<action name="login1" class="com.struts2.login.loginToken">
             <result name="success">/result.jsp</result>
            <result name="invalid.token">/token.jsp</result>
            <interceptor-ref name="defaultStack"></interceptor-ref>
            <interceptor-ref name="token"></interceptor-ref>
       </action>

result.jsp

<s:property value="id"></s:property>
        <br>
          <s:property value="username"></s:property>
          <br>
          <s:property value="password"></s:property>
          <br>

 

token.jsp

 不能重复添加 <br>

方法都写完运行服务器,添加一条记录后在result.jsp页面就显示出刚刚添加的数据。而当你页面刷新时就会跳转到token.jsp。

退一步在添加新的记录时,也是会跳转到token.jsp。因为token在添加数据时它会自动生成<input type="hidden" name="struts.token.name" value="struts.token" />
<input type="hidden" name="struts.token" value="IABWXQ7L7JFSCDWDMYB78PAKW9F4X47Y" />当你在刷新和重新添加数据时都会与struts.token中的value做比较。如果一样的就跳转到成功页面,不一样就跳转到token.jsp