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

1、为何要进行验证?

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

1、安全性java

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

 

2、如何验证?

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

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

3、实例:

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

 

效果如图所示:jsp

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

页头将提示信息显示出来post

 

 

 

 

 

有可能出现的问题:ui

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

相关文章
相关标签/搜索