必威体育Betway必威体育官网
当前位置:首页 > IT技术

Struts2实现简单的登陆 / 注册功能

时间:2019-09-25 20:42:09来源:IT技术作者:seo实验室小编阅读:86次「手机版」
 

struts2

我 是用idea写的。

需求分析

用户进入首页,选择登陆,跳转到登陆 / 注册页面登陆模块,如有账户,登陆成功跳转首页,并显示用户名如没有账户,注册一个账户成功后,跳回登陆模块。在这里没有实现用户存储功能

                  

1、首页的效果

2、登陆/注册页面的效果

登陆成功后

一、准备工作

1、导入jar包。下面是struts2的核心jar包

                                       

2、web.xml 和 struts.xml

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-APP xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">
    
    <welcome-file-list>
        <welcome-file>index.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(我放在src目录下)

<?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>
  <!--在这里设置好每一个Action-->

</struts>

下面开始码代码

二、开始

我准备好了三个页面                                                           class文件

                     

创建一个LoginAction.javaRegisterAction.java还有一个Model类User.java。MapData.java是模拟数据库,存储一些用户数据

Action类都继承ActionSupport类

LoginAction.java

  • 验证用户名,密码
public class LoginAction extends ActionSupport {

    private User user=new User();

    public User getUser() {
        return user;
    }

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

    @Override
    public String execute() throws Exception {
        System.out.println("zhixing");

        if (Info(user)){
            return SUCCESS;
        }else {
            return ERROR;
        }

    }

    public boolean Info(User user){
        boolean flag=false;
        //这里只写了一个用户的验证方式
        if(user.getUsername().equals("clmmei")&&user.getPassword().equals("123456")){
            flag=true;
        }

        return flag;
    }
}

RegisterAction.java

  • 验证用户名,密码是否已经存在
public class RegisterAction extends ActionSupport {

    private User user=new User();
    private String errorMsg="";

    public User getUser() {
        return user;
    }

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

    @Override
    public String execute() throws Exception {
        MapData mapData=new MapData();
        mapData.addMapDate(user);
        if (mapData.errorMsg==""&&mapData.errorEmail==""){
            return SUCCESS;
        }else {
            this.errorMsg=mapData.errorMsg+","+mapData.errorEmail;
            return ERROR;
        }

    }
}

注意到 每个Action类都有一个自动执行的execute()方法

 @Override
    public String execute() throws Exception {
        //实现的功能
        //...
        return SUCCESS;
       //return ERROR;
}

完整的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>
    <!--在这里设置好每一个Action-->
    <package name="musicLoRe" extends="struts-default">
        <action name="login" class="com.music.action.LoginAction">
            <result name="success">index.jsp</result>
        </action>
        <action name="register" class="com.music.action.RegisterAction">
            <result name="success">login_register.jsp</result>
            <result name="error">error.jsp</result>
        </action>
    </package>
</struts>

<package>标签是区别每一个包(可随意区别)

<action>标签代表每一个Action类,<result>代表execute()方法返回的结果,

例如 :

<action name="login" class="com.music.action.LoginAction">
    <result name="success">index.jsp</result><!--返回SUCCESS,默认转发到index.jsp页面-->
</action>

<result name=" "  type="dispatcher(默认) /redirect/redirectAction/...">

1) dispatcher:转发(默认的,可不写)

2) redirect :重定向

3)redirectAction :( 请求重定向到指定的Action,注意当前路径和重定向的路径 )

4)chain :用于把相关的几个action连接起来,共同完成一个功能(处于chain中的action属于同一个http请求,共享一个actioncontext )

5) plaintextj :结果类型用于直接在页面上显示源代码

注意:

1)当注册成功时,将该用户的用户名显示在登陆模块上,这个效果我是用js实现的

login_register.js部分代码

window.onload=function () {
    var myUser=GetQueryString("User.username");
    if (myUser!=""&&myUser!=null){
        document.getelementbyid("username").value=myUser
    }
}


function GetQueryString(name)
{
    var reg = new RegExp("(^|&)"+ name +"=([^&]*)(&|$)");
    var r = window.location.search.substr(1).match(reg);//从问号 (?) 开始的 URL(查询部分)
    if(r!=null)return  unescape(r[2]);
    return null;
}

2)登陆成功后,用户名显示在index.jsp页面时也用js实现

index.js的部分代码

window.οnlοad=function () {
    var myUser=GetQueryString("User.username");
    if (myUser!=""&&myUser!=null){
        var a=document.getElementById("userId");
        a.innerHTML=myUser;
        a.href="#";
    }
}

function GetQueryString(name)
{
    var reg = new RegExp("(^|&)"+ name +"=([^&]*)(&|$)");
    var r = window.location.search.substr(1).match(reg);
    if(r!=null)return  unescape(r[2]);return null;
}

登陆模块的部分jsp中的代码:

 <form action="login">
                <ul>
                    <li>用户名:<input type="text" name="User.username" id="username" value=""></li>
                    <li>密&nbsp;&nbsp;&nbsp;码:<input type="text" name="User.password" id="password"></li>
                    <li><button type="submit">登陆</button>&nbsp;&nbsp;&nbsp;&nbsp;<button type="reset">重置</button></li>
                    <li class="lo_re2">还没有注册!请先注册</li>
                </ul>
            </form>

可以注意到,<input>的name值是User.username,这是直接给LoginAction.java的User赋值的方式

同理,

注册模块的JSP部分代码:

<form action="register">
                <ul>
                    <li>用&nbsp;&nbsp;户&nbsp;&nbsp;名:<input type="text" name="User.username" id="username0"></li>
                    <li>密&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;码:<input type="text" name="User.password" id="password0"></li>
                    <li>确认密码:<input type="text" name="password" id="password1"></li>
                    <li>邮&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;箱:<input type="email" name="User.email" id="email"></li>
                    <li>出生年月:</li>
                    <li><button type="submit">登陆</button>&nbsp;&nbsp;&nbsp;&nbsp;<button type="reset">重置</button></li>
                </ul>
            </form>

完整代码,请点击 登陆/注册 

我在GitHub上放了这个项目,提醒一下,我的 idea是 ideaIU-2017.3.4

相关阅读

excel2013自动填充颜色的方法步骤

在Excel中录入数据后需要进行数据统计,把符合条件的数据值都用不同颜色来标注,这个时候就需要用到条件格式了,这个方法在历代版本中

12月10口碑支付宝(口碑宝)怎么玩?拿1212现金红包!

2016年1212支付宝活动将于12月10日至12月12日举行。在此活动期间用户只要集齐“吃喝玩乐”四宝(口碑宝)就有机会获得1212现金红包

BLAKE2简介

关键词: 哈希碰撞 Birthday attack blake2 SHA-1存在严重的安全问题 这一次破解的只是SHA-1的抗碰撞性。类似HMAC-SHA-1(使用HM

2016淘宝双12亲亲节店铺红包攻略 教你抢1212元红包!

伴随着淘宝双12预热活动的开始,淘宝双12亲亲节店铺红包在12月1日的时候就已经开抢啦!淘宝买家不禁问道:“2016淘宝双12亲亲节店铺红

金斧子完成1.72亿Pre-D轮融资,正心谷创新资本领投

A5创业网(公众号:iadmin5)4月22日报道,金斧子宣布获得1.72亿的Pre-D轮融资,由正心谷创新资本领投,启诚资本跟投。金斧子已获得多轮融资

分享到:

栏目导航

推荐阅读

热门阅读