• java struts2入门学习实例--使用struts进行验证


    一、为什么要进行验证?

    验证几乎是注册登录的必须前提,验证的主要作用有两点:

    1、安全性

    2、对用户提供差异化服务。

    二、如何验证?

    ActionSupport类中有一个validate()方法,这是为开发者使用struts提供的一个接口,初始时是没有任何验证的。所以要使用此方法首先要进行重写该方法。

    举注册为例,调用顺序为setUsername()方法--》validate()方法--->register()方法。所以一旦验证不过那么将无法执行后续方法,即后面的功能将被隔离!

    三、实例:

    UserAction.java

    package com.amos.web.action;
    
    import com.opensymphony.xwork2.ActionSupport;
    
    /**
     * @ClassName: UserAction
     * @Description: 用户管理,将相关的action封装到一个类中
     * @author: amosli
     * @email:amosli@infomorrow.com
     * @date Jan 8, 2014 1:06:00 AM
     */
    public class UserAction extends ActionSupport {
        private static final long serialVersionUID = -6275534406709255984L;
        private String username;
        private String password;
    
        public String getUsername() {
            return username;
        }
    
        public void setUsername(String username) {
            System.out.println("执行setUserName()方法!");
            if (username != null & username.trim().length() > 0) {
                this.username = username;
            }
    
        }
    
        public String getPassword() {
            return password;
        }
    
        public void setPassword(String password) {
            this.password = password;
        }
    
        // 检验方法
         public void validate() {
         System.out.println("执行validate()方法!");
         if (username != null && username.trim().length() > 0) {
        
         }else{
         this.addFieldError("username", "用户名为必填!");
         }
        
         if (password != null && password.trim().length() > 0) {
        
         }else{
         this.addFieldError("password", "密码为必填!");
         }
         }
        // 用户注册
        public String register() throws Exception {
            System.out.println("执行注册方法!");
            return "toRegisterJsp";
        }
    
        // 用户登录
        public String login() throws Exception {
            System.out.println("执行登录方法!");
            return "toLoginJsp";
        }
    
    }
    View Code

    效果如图所示:

    直接点击提交,不输入用户名和密码

    页头将提示信息显示出来

    有可能出现的问题:

    1、下面这个是因为没有验证通过,要在user_struts.xml中进行配置,如果出错,将采措施进行回避这样的问题。

    <s:fielderror/>

    使用标签取出Action中所有的出错提示信息,这里必须定义为this.fielderror才能取到值。

    <s:fielderror fieldName="password"/>,取出Action中具体的出错提示信息。

    一旦使用struts2的标签那么就不要用EL表达式。

     根据提示信息表明要对配置一个name为"input"的属性来对出错信息进行捕获。user_struts.xml部分内容截选:

        <action name="UserRegister" class="com.amos.web.action.UserAction"
                method="register">
                <result name="toRegisterJsp" type="dispatcher">
                /register_success.jsp
                </result>
                <result name="input" type="dispatcher">
                /user_register.jsp
                </result>
            </action>

    将result属性配置为user_register.jsp,即如果验证不通过的话那么页将跳转回user_register.jsp页面。

    其中user_register.jsp为:

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
        <%@ taglib uri="/struts-tags"  prefix="s" %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
    
        <form name="register" action="/struts2/UserRegister" method="post">
            <table border="2" align="center">
                <caption>新用户注册</caption>
                <tr>
                    <th>用户名:</th>
                    <td><input name="username" id="username" type="text" /></td>
                    <td><s:fielderror fieldName="username"/></td>
                </tr>
                <tr>
                    <th>密码:</th>
                    <td><input name="password" id="password" type="password" /></td>
                    <td><s:fielderror fieldName="password"/></td>
                </tr>
    
                <tr>
                    <td colspan="2" align="center"><input type="submit" value="提交"
                        width="120ppx" /></td>
                </tr>
    
            </table>
        </form>
    </body>
    </html>
    View Code

    register_success.jsp为:

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <%@ taglib uri="/struts-tags" prefix="s"  %>
        
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
    注册成功<br/>
    <hr>
    用户名:<s:property value="username" />
    密码:<s:property value="password"/>
    </body>
    </html>
    View Code

    验证不通过的效果如下图所示:

    验证通过的效果图如下所示:

    同样可类似对用户登录进行配置,user_struts.xml部分内容截选:

        <action name="UserLogin" class="com.amos.web.action.UserAction"
                method="login">
                <result name="toLoginJsp" type="dispatcher">
                /login_success.jsp            
                </result>
                <result name="input" type="dispatcher">
                /user_login.jsp
                </result>
            </action>

     其中login_success.jsp如下:

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <%@ taglib uri="/struts-tags" prefix="s" %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
    登录成功!
    <hr>
    用户名:<s:property value="username"/>
    </body>
    </html>
    View Code

    user_login.jsp如下:

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <%@taglib uri="/struts-tags" prefix="s" %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
    
        <form name="register" action="/struts2/UserLogin" method="post">
            <table border="2" align="center">
                <caption>用户登录</caption>
                <tr>
                    <th>用户名:</th>
                    <td><input name="username" id="username" type="text" /></td>
                    <td><s:fielderror/></td>
                </tr>
                <tr>
                    <td colspan="2" align="center"><input type="submit" value="提交"
                        width="120ppx" /></td>
                </tr>
            </table>
        </form>
    </body>
    </html>
    View Code

    2.如何验证指定方法?

    比如只想login,不想验证register方法。

    那么只需要将validate()方法改名为validateLogin()方法即可,这里只验证指定方法格式为validate+大写指定方法名首字母,例如如果只想验证register方法,那么只需要将validate()方法改为validateRegister()即可。这里就不再演示了。

    本文源码链接:https://github.com/amosli/strust2   struts2 validate 

     

     

  • 相关阅读:
    C语言 递归 汉诺塔问题 最大公约数问题
    程序的健壮性及代码风格
    C程序练习
    专题——条件控制循环 猜数游戏 随机种子
    C语言 分支与循环 递推思想 穷举 流程的转移控制
    C指针 指针和数组 二维数组的指针 指针应用
    C语言实现的排序
    数组查找算法的C语言 实现-----线性查找和二分查找
    图片转成base64 跨域等安全限制及解决方案
    移动开发那些坑之——safari mobile click事件的冒泡bug
  • 原文地址:https://www.cnblogs.com/amosli/p/3511575.html
Copyright © 2020-2023  润新知