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.onload=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.javaUser赋值的方式

同理,

注册模块的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

猜你喜欢

转载自blog.csdn.net/clmmei_123/article/details/81408373