新版本struts2的注册和登录校验

1.导入jar包。下载struts2.3文件,在apps解压一个struts2-blank.war的文件找到 struts-2.3.24\apps\struts2-blank\WEB-INF\lib这个路径下的所有jar包导入到项目中。

2.编写User.java文件。封装所有的表单数据 ,注意一定要实现serializable接口和get,set方法满足javabean规范

package com.lovo.bean;
import java.io.Serializable;
import java.util.Date;

public class User implements Serializable {
    private int id;

    private String name;

    private String pwd;

    private String gender;

    private Date birthday;

    private String tel;

    private String plane;

    private String email;

3.编写action类:FormAction。struts2会自动获取客户端的数据进行类型转换并封装到对象身上.
注意写的类必须继承actionsupport类。为对象提供get,set方法。因为使用的是xml的方式进行校验所以不用重写validate()。

package com.lovo.action;
import com.lovo.bean.User;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;

public class FormAction extends ActionSupport {
    private User user;
    //这个字段只针对验证使用,所以不要封装到对象中
    private String repassword;

    public User getUser() {
        return user;
    }

    public void setUser(User user) {
        this.user = user;
    }

    public String getRepassword() {
        return repassword;
    }

    public void setRepassword(String repassword) {
        this.repassword = repassword;
    }

    public String login() throws Exception {
        System.out.println("进入登录action");
    }

    public String execute() throws Exception {
        System.out.println("进入默认action");

        return super.execute();

    }

    public String regist() throws Exception {
        System.out.println("进入注册action");
        //返回的字符串是"success",在xml配置的时候用指定name属性
        return super.execute();
    }

}

4.编写配置文件:
为web.xml添加sturts2的过滤器
struts.xml文件。存放到src目录下。这个路径可以修改,修改后要修改web.xml的配置。

这是web.xml的配置信息

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://java.sun.com/xml/ns/javaee"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
    id="WebApp_ID" version="2.5">
    <display-name>struts</display-name>
    <welcome-file-list>
        <welcome-file>index.html</welcome-file>
        <welcome-file>index.htm</welcome-file>
        <welcome-file>index.jsp</welcome-file>
        <welcome-file>default.html</welcome-file>
        <welcome-file>default.htm</welcome-file>
        <welcome-file>default.jsp</welcome-file>
    </welcome-file-list>
    <filter>
        <filter-name>struts2</filter-name>
        <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
    </filter>

    <filter-mapping>
        <filter-name>struts2</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

</web-app>

这个是struts.xml的配置

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
    "http://struts.apache.org/dtds/struts-2.3.dtd">

<struts>
    <!-- 动态方法调用 -->
    <constant name="struts.enable.DynamicMethodInvocation" value="true" />
    <!--打开开发模式 -->
    <constant name="struts.devMode" value="true" />
    <!--关闭浏览器缓存 -->
    <constant name="browserCache" value="false" />
    <!--设置修改配置文件后不用重启服务器就生效 -->
    <constant name="struts.configuration.xml.reload" value="true" />
    <!-- 必须继承struts-default包 ,包内元素会区分顺序,编写时注意查看-->
    <package name="default" namespace="/" extends="struts-default">

        <action name="regist" class="com.lovo.action.FormAction" method="regist">
        <!--input是当检验不过会返回到的逻辑视图,会打印错误信息-->
            <result name="input">/regist.jsp</result>
            <result>/login.jsp</result>
        </action>
        <action name="login" class="com.lovo.action.FormAction" method="login">
            <result name="input">/login.jsp</result>
            <result>index.jsp</result>
        </action>
    </package>
</struts>
  1. 编写校验文件:格式为 action类名-要校验action名-validation。FormAction-login-validation.xml,FormAction-regist-validation.xml 这是针对指定方法的校验,如果配置为FormAction-validation.xml会对这个action类里的所有方法进行校验产生不必要的麻烦。
    注意:xwork-validator-1.0.3.dtd必须和你当前的struts版本相对应

FormAction-regist-validation.xml

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE validators PUBLIC
        "-//Apache Struts//XWork Validator 1.0.3//EN"
        "http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd">
<validators>
    <field name="user.name">
        <!--短路校验只显示一个提示信息 -->
        <field-validator type="requiredstring" short-circuit="true">
            <param name="trim">true</param>
            <message key="请输入姓名" />
        </field-validator>
        <field-validator type="regex">
            <param name="regexExpression"><![CDATA[(\w{5,17}$)]]></param>
            <!--message键可以指定key属性输出错误信息,也可以通过值的方式输出-->
            <message key="用户只能是字母和数字,长度必须在5到17之间" />
        </field-validator>
    </field>
    <field name="user.pwd">
        <field-validator type="requiredstring">
            <param name="trim">true</param>
            <message>请输入密码</message>
        </field-validator>
        <!--在高版本中使用正则表达式 param name的值要改为regexExpression-->
        <field-validator type="regex">
            <param name="regexExpression"><![CDATA[(\w{5,17}$)]]></param>
            <message>用户名只能是字母和数字,长度必须在5到17之间</message>
        </field-validator>
    </field>

    <field name="user.tel">
        <field-validator type="regex">
            <param name="trim">true</param>
            <param name="regexExpression"><![CDATA[(\d{11})]]></param>
            <message>电话号码必须为11位数字!</message>
        </field-validator>
    </field>

    <field name="user.plane">
        <field-validator type="regex">
            <param name="regexExpression"><![CDATA[(\d{3}-\d{8}|\d{4}-d{7})]]></param>
            <message>座机号码必须以区号开头</message>
        </field-validator>
    </field>

<!--在低版本的火狐中可能会出现date类型的值设置不进去的问题,升级火狐可解决-->
    <field name="user.birthday">
        <field-validator type="date">
            <param name="min">1900-01-01</param>
            <param name="max">2010-12-31</param>
            <message>出生日期必须在${min}到${max}之间</message>
        </field-validator>
    </field>

    <field name="user.email">
        <!-- type值为校验器名,requiredstring:非空字符串校验器 -->
        <field-validator type="requiredstring">
            <message>邮箱不能为空</message>
        </field-validator>
        <!-- email:校验邮箱格式 这是struts自带的邮箱校验器-->
        <field-validator type="email">
            <message>邮箱格式不正确</message>
        </field-validator>
    </field>
</validators>

FormAction-login-validation.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC
        "-//Apache Struts//XWork Validator 1.0.3//EN"
        "http://struts.apache.org/dtds/xwork-validator-1.0.3.dtd">
<validators>
    <field name="user.name">
        <field-validator type="requiredstring">
            <param name="trim">true</param>
            <message key="请输入用户名" />
        </field-validator>
        <field-validator type="regex">
            <param name="regexExpression"><![CDATA[(\W{6,12})]]></param>
            <message>用户只能是字母和数字,长度必须在6到12之间</message>
        </field-validator>
    </field>

    <field name="user.pwd">
        <field-validator type="requiredstring">
            <param name="trim">true</param>
            <message>请输入密码</message>
        </field-validator>
        <field-validator type="regex">
            <param name="regexExpression"><![CDATA[(\W{6,12})]]></param>
            <message>用户名只能是字母和数字,长度必须在6到12之间</message>
        </field-validator>
    </field>
    <field name="repassword">
        <field-validator type="regex">
            <!-- 表达式要写在 <![CDATA[]]> 内 -->
            <param name="regexExpression"><![CDATA[repassword==password]]></param>
            <message>两次密码不一至</message>
        </field-validator>
    </field>

</validators>

6.编写login.jsp和regist.jsp
因为使用taglib标签会产生大量的table,tr标签不方便进行样式设计
所以页面使用html编写
register.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@taglib prefix="s" uri="/struts-tags"%>
<!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>欢迎来到注册页面</title>
</head>
<body>
    <form action="regist.action" method="post">
        <p>
            姓名:<input type="text" name="user.name">
                <!-- 用于输出指定字段的错误信息 -->
            <s:fielderror fieldName="user.name" />
        </p>
        <p>
            密码:<input type="password" name="user.pwd">
            <s:fielderror fieldName="user.pwd" />
        </p>
        <p>
            生日:<input type="text" name="user.birthday">
            <s:fielderror fieldName="user.birthday" />
        </p>
        <p>
            电话:<input type="text"  name="user.tel">
            <s:fielderror fieldName="user.tel" />
        </p>
        <p>
            座机:<input type="text"  name="user.plane">
            <s:fielderror fieldName="user.plane" />
        </p>
        <p>
            性别: <input type="radio" name="user.gender" value="G" /><input
                type="radio" name="user.gender" value="M" /></p>
        <p>
            邮箱: <input type="text" name="user.email">
            <s:fielderror fieldName="user.email" />
        </p>
        <br />
        <input type="submit" value="注册">
    </form>
</body>
</html>

login.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@taglib prefix="s" uri="/struts-tags"%>
<!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>欢迎来到登录页面</title>
</head>
<body>
    <form action="login.action" method="post">
        <p>
            用户名: <input type="text" name="user.name" />
            <s:fielderror fieldName="user.name" />
        </p>

        <p>
            密码: <input type="password" name="user.pwd" />
            <s:fielderror fieldName="user.pwd" />
        </p>
        <p>
            请重复密码: <input type="password" name="repassword" />
            <s:fielderror fieldName="repassword" />
        </p>
        <br /> <input type="submit" value="登录" />
    </form>
</body>
</html>

打完收工。

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值