Struts2+DAO层实现实例01——搭建Struts2基本框架

实例内容

  利用Strust2实现一个登陆+注册功能的登陆系统。

  实现基础流程:

实现代码

  JSP页面部分:

<%--
    登陆页面
  Created by IntelliJ IDEA.
  User: Richard
  Date: 2017/6/21
  Time: 12:36
  To change this template use File | Settings | File Templates.
    
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
    <title>Login</title>
</head>
<style>
    body{
        padding: 0;
        margin:0;
    }
    h1{
        background-color: black;
        color: white;
    }
    .subform{
        width:200px;
        border-style:solid;
        border-color: black;
        border-radius: 2px;
        padding: 10px;
        margin-left: 40px;
        margin-top: 70px;

    }


</style>

<body>
<h1>Login For My Struts</h1>
<hr>

<div class="subform">
    <form method="post" action="loginuser.action" name="pform" >

        <p>用户名:</p><br>
        <input type="text" name="username" id="name"><br>
        <br>
        <p>密码:</p><br>
        <input type="password" name="password" id="key"><br>
        <br>
        <s:actionmessage></s:actionmessage>
        <input type="submit" value="登陆" onclick="return check(this);"/>

        <a href="register.jsp">点我注册</a>

    </form>
</div>





</body>
<script>
    function check(form) {
        if(document.forms.pform.username.value==""){
            alert("用户名不能为空!")
            document.forms.pform.username.focus();
            return false;
        }


        if(document.forms.pform.password.value==""){
            alert("密码不能为空!")
            document.forms.pform.password.focus();
            return false;
        }
    }
</script>

</html>
<%--
  注册页面
  Created by IntelliJ IDEA.
  User: Richard
  Date: 2017/6/21
  Time: 13:04
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
    <title>Register</title>
</head>

<style>
    body{
        padding:0;
        margin:0;
    }
    h1{
        background-color: black;
        color:white;
    }
    .form{
        width: 400px;
        border-radius: 2px;
        padding:10px;
        border-style: solid;
        border-color: black;
        margin:0 auto;
    }

</style>
<body>
<H1>Register up for My Struts</H1>
<hr>
<form method="post" action="*reguser.action" name="rform" class="form">

    <p>请输入用户名:</p><br>
    <input type="text" name="username" id="name"><br>
    <br>
    <p>请输入密码:</p><br>
    <input type="password" name="password" id="key"><br>
    <p>请再次输入密码:</p><br>
    <input type="password" name="compassword" id="comkey"><br>
    <br>
    <s:actionmessage></s:actionmessage>
    <input type="submit" value="注册" onclick="return recheck(this);" />
    <a href="login.jsp">登陆</a>

</form>
</body>
<script>
    function recheck(form) {
        if(document.forms.rform.username.value==""){
            alert("用户名不能为空!");
            document.forms.rform.username.focus();
            return false;
        }
        if(document.forms.rform.password.value==""||document.forms.rform.compassword.value==""){
            alert("密码不能为空!");
            document.forms.rform.password.focus();
            return false;
        }
        if(document.forms.rform.password.value!=document.forms.rform.compassword.value){
            alert("两次输入的密码不相同!")
            document.forms.rform.password.focus();
            return false;
        }
    }
</script>

</html>
<%--
  欢迎页面
  Created by IntelliJ IDEA.
  User: Richard
  Date: 2017/6/16
  Time: 21:38
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Welcome</title>
</head>
<body>
<h1>WelCome to My Struts Page</h1>
<hr>
当前登录的用户:${param.username}<br>
</body>
</html>

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.devMode" value="true"/>
        <constant name="struts.enable.DynamicMethodInvocation" value="true"></constant>

    <!--利用通配符配置Action需要调用的方法-->
    <package name="user" namespace="/" extends="struts-default">
        <action name="*user" class="UserBlock.UserAction" method="{1}">
            <result name="index">in.jsp</result>
            <result name="login">login.jsp</result>
            <result name="register">register.jsp</result>
        </action>
    </package>
</struts>

Action

package UserBlock;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;

import java.util.ArrayList;
import java.util.Map;
import java.util.logging.LogManager;

/**
 * Created by Richard on 2017/6/16.
 * 继承ActionSupport实现一个Action
 * 登陆界面通过loginuser.action调用login()方法来处理数据
 *          login()方法中通过ActionContext调用Session对象,存入输入错误的数据
 *          通过addActionMessage()方法向页面输出相关信息
 * 注册页面通过reguser.action调用reg()方法来处理数据
 */
public class UserAction extends ActionSupport {
    private String INDEX="index";
    private String LOGIN="login";
    private  String REG="register";
    private String username;
    private String password;

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }


    public String login(){
        try{
            if(username.equals("rekent")){
                if(password.equals("root")){
                    /*登陆成功*/
                    return INDEX;
                }else{
                    ActionContext applicton=ActionContext.getContext();
                    Map session=applicton.getSession();
                    int count;
                    if(session.get("count")==null){
                        count=0;
                    }else{
                        count= (int) session.get("count");
                    }
                    if(count>=3){
                        addActionMessage("错误次数过多");
                        count=0;
                        session.put("count",count);
                        return LOGIN;
                    }else{
                        count++;
                        addActionMessage("您输入的用户名或密码错误"+count);
                        session.put("count",count);
                        return LOGIN;
                    }

                }
            }else{
                addActionMessage("该用户不存在,已经跳转到注册页面");
                return REG;
            }
        }catch (Exception e){
            addActionError(e.getMessage());
        }

        return LOGIN;
    }


    public String reg(){
        try{
            if(username.equals("rekent"))
            {
                addActionMessage("该用户已经存在");
                return REG;
            }
            else{
                return INDEX;
            }
        }catch (Exception e){
                addActionError(e.getMessage());
        }
        return REG;
    }
}

实例代码

示例代码,持续更新

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏FreeBuf

浅谈拒绝服务攻击的原理与防御(3)| 反射DDOS攻击利用代码

0×01 前言 之前发了一篇关于反射DDOS攻击原理以及反射资源扫描的文章,本来今天的这个应该并到那篇文章里,共称为反射DDOS攻击扫描与利用,但是我怕这样做会...

30390
来自专栏JackieZheng

RabbitMQ入门-从HelloWorld开始

从读者的反馈谈RabbitMQ 昨天发完《RabbitMQ入门-初识RabbitMQ》,我陆陆续续收到一些反馈。鉴于部分读者希望结合实例来讲 期待下篇详细,最好...

21390
来自专栏LEo的网络日志

tempfile.NamedTemporaryFile创建临时文件在windows没有权限打开

51180
来自专栏Python

使用python的email、smtplib、poplib模块收发邮件

https://blog.csdn.net/weixin_35955795/article/details/52881044

8000
来自专栏漏斗社区

Android逆向之静态分析

想必打过CTF的小伙伴多多少少都触过Android逆向,所以斗哥将给大家整一期关于Android逆向的静态分析与动态分析。本期先带来Android逆向的静态分析...

24810
来自专栏JackieZheng

RabbitMQ入门-从HelloWorld开始

从读者的反馈谈RabbitMQ 昨天发完《RabbitMQ入门-初识RabbitMQ》,我陆陆续续收到一些反馈。鉴于部分读者希望结合实例来讲 期待下篇详细,最好...

23750
来自专栏小樱的经验随笔

CTF---Web入门第十四题 忘记密码了

忘记密码了分值:20 来源: Justatest 难度:中 参与人数:7706人 Get Flag:2232人 答题人数:2386人 解题通过率:94% 找...

41580
来自专栏芋道源码1024

熔断器 Hystrix 源码解析 —— 执行结果缓存

本文主要基于 Hystrix 1.5.X 版本 1. 概述 2. 好处 3. Observable#defer(...) 4. AbstractCommand#...

39570
来自专栏学习力

《Java从入门到放弃》框架入门篇:Struts2的拦截器基本语法

261110
来自专栏程序员Gank

【译】使用RxJava从多个数据源获取数据

试想,需要一些动态数据的时候,只要每次都请求网络就可以了。但是,更有效率的做法是,把联网得到的数据,缓存到磁盘或内存。

16120

扫码关注云+社区

领取腾讯云代金券