系统登陆页面为login.jsp,如图

一、实现数据访问层DAO

1.首先在com.netbank.dao包中创建UserDAO接口,然后再UserDAO接口中添加GetAccount(String username)方法,根据客户名获取账户对象。代码如下

package com.netbank.dao;
import com.netbank.entity.Account;
public interface UserDAO {//根据客户名获取账号对象public Account getAccount(String username);
}

2.在com.netbank.dao.impl包中创建UserDAO接口的实现类UserDAOImpl,实现getAccount(String username)方法

public class UserDAOImpl implements UserDAO {SessionFactory sessionFactory;public void setSessionFactory(SessionFactory sessionFactory) {this.sessionFactory = sessionFactory;}/** 根据客户名获取账号对象*/@Overridepublic Account getAccount(String username) {// TODO Auto-generated method stubSession session=sessionFactory.getCurrentSession();String hql="from Account where username='"+username+"'";Query query=session.createQuery(hql);return (Account) query.uniqueResult();}
}

3.在Spring配置文件中定义UserDAOImpl,并给类中的sessionFactory属性注入实例

    <!--定义UserDAOImpl,并给类中的sessionFactory属性注入实例  --><bean id="userDao"  class="com.netbank.dao.impl.UserDAOImpl"><property name="sessionFactory" ref="sessionFactory"></property></bean>

二、实现业务逻辑层

1.在com.netbank.biz包中创建UserBiz接口,在UserBiz接口中添加getAccount(String username)方法,根据客户名获取账号对象:

package com.netbank.biz;
import com.netbank.entity.Account;
public interface UserBiz {//根据客户名获取账号对象public Account getAccount(String username);
}

2.在com.netbank.biz.impl包中创建UserBiz接口的实现类UserBizImpl,实现getAccount(String username)方法:

//使用@Transaction注解实现事务管理
@Transactional
public class UserBizImpl implements UserBiz {//使用UserDao接口声明对象,并添加set方法,用于依赖注入UserDAO userDao;public void setUserDao(UserDAO userDao) {this.userDao = userDao;}@Overridepublic Account getAccount(String username) {// TODO Auto-generated method stubreturn userDao.getAccount(username);}

3.在Spring配置文件中定义UserBizImpl,并给其属性UserDao注入实例

    <!--定义UserBizImpl,并给其属性注入实例  --><bean id="userBiz" class="com.netbank.biz.impl.UserBizImpl"><property name="userDao" ref="userDao"></property></bean>

三、实现Action

    在com.netbank.action包中创建UserAction,继承ActionSupport类,实现RquestAware和SessionAware接口。

public class UserAction extends ActionSupport implements RequestAware, SessionAware {//定义通过@Resource注解注入的属性userBiz,可省略set方法@Resource private UserBiz userBiz;Map<String,Object> request;Map<String,Object> session;//定义Account类型对象,用于封装登陆表单参数private Account account;private Personinfo personinfo;private Password pwd;//省略account,personinfo和pwd三个属性的get和set方法//省略其他请求的处理方法@Overridepublic void setSession(Map<String, Object> session) {// TODO Auto-generated method stubthis.session=session;}@Overridepublic void setRequest(Map<String, Object> request) {// TODO Auto-generated method stubthis.request=request;}/** 登陆表单校验*/public void validateLogin(){Account a=userBiz.getAccount(account.getUsername());if(a==null){this.addFieldError("username", "用户名不存在");}else{if(!account.getPassword().equals(a.getPassword())){this.addFieldError("password", "密码不正确");}}account=a;}/** 执行页面客户登陆请求*/public String login(){//根据关联关系,从账户对象中获取个人信息对象 personinfo=(Personinfo) account.getPersoninfos().iterator().next();//将账户对象存入Sessionsession.put("user",account);//将该账户个人信息对象存入sessionsession.put("personinfo",personinfo);//页面转发return "success";}
}

    在UserAction类中,UserBiz接口声明的属性userBiz值得注入是通过基于Annotation注解方式完成的,如下所示

@Resource private UserBiz userBiz;

四、Spring配置

    在Spring配置文件中配置UserAction类,类中的userBiz属性注入通过Annotation注解方式完成,不再需要使用property标记,从而使得配置文件得以瘦身

<!-- 使用原型模式定义UserAction类,UserAction类的属性通过Annotation注解方式注入 -->
<bean name="user" class="com.netbank.action.UserAction" scope="prototype" ></bean>

    在Struts 2的Action委托给Spring容器管理时,考虑到Action是有状态的,因此需要通过设置scope=”prototype”,实现针对每个用户的请求生成一个全新的实例。
    在Spring中配置了UserAction类后,Struts 2的配置文件中就可以直接引用UserAction类的Bean实例名”user”,无须指定UserAction类的全名了。

五、Struts 2配置

    在Struts 2的配置文件struts.xml中配置UserAction类

    <!--定义一个名称为user的包,继承Struts2的默认包,指定命名空间为"/user"  --><package name="user" namespace="/user" extends="struts-default"><!--使用通配符实现动态方法调用  --><action name="user_*" class="user" method="{1}"><result name="success">/index.jsp</result><result name="login">/login.jsp</result><result name="input">/login.jsp</result></action>...</package>

    用户的请求,Action中的处理方法以及结果的展示视图之间的对应关系必须在Struts 2的配置文件中进行正确配置
    上述配置中,对于具有一定命名规则的用户请求可以使用通配符实现动态方法的调用,如“user_*”可表示以”user_”打头的Action请求。

六、登陆页面设计

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri='/struts-tags' prefix='s' %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><base href="<%=basePath%>"><title>login</title><meta http-equiv="pragma" content="no-cache"><meta http-equiv="cache-control" content="no-cache"><meta http-equiv="expires" content="0">    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"><meta http-equiv="description" content="This is my page"><link rel="stylesheet" type="text/css" href="style/style.css" ><link rel="stylesheet" type="text/css" href="style/default.css" ><!--<link rel="stylesheet" type="text/css" href="styles.css">-->
<script language="javascript" >function login(){var hidden=document.getElementById("hidden").value;if(document.getElementById("username"+hidden).value ==""){alert("用户名不能为空");return false;}else if(document.getElementById("password"+hidden).value ==""){alert("密码不能为空");return false;} else {return true;}}function adminlogin(){document.getElementById("username1").style.display="none";document.getElementById("password1").style.display="none";document.getElementById("username2").style.display="block";document.getElementById("password2").style.display="block";document.myform.action="admin/login"}function init(){document.getElementById("username1").style.display="block";document.getElementById("password1").style.display="block";document.getElementById("username2").style.display="none";document.getElementById("password2").style.display="none";document.myform.action="user/user_login";}function change(){var select=document.myform.type.value;if(select=="0"){var username2=document.getElementById("username2").value;var password2=document.getElementById("password2").value;init();document.getElementById("username1").value=username2;document.getElementById("password1").value=password2;}if(select=="1"){var username1=document.getElementById("username1").value;var password1=document.getElementById("password1").value;adminlogin();document.getElementById("username2").value=username1;document.getElementById("password2").value=password1;}}
</script></head><body onload="init()"><div align="center"><form method="post" name="myform" action="user/user_login" onsubmit="return login()"><table width="450" border="0" class="table"><tbody><tr><td colspan="2" align="center"></td></tr><tr><td>&nbsp;用户名:</td><td>&nbsp; <input id="username1" type="text" name="account.username" ><input id="username2" type="text" name="admin.username" ></td></tr><tr><td>&nbsp;密码:</td><td>&nbsp; <input id="password1" type="password" name="account.password"><input id="password2" type="password" name="admin.password"></td></tr><tr><td>&nbsp;用户类型:</td><td><select name="type" onchange="change()"><option value="0" selected>客户</option><option value="1">管理员</option></select></td></tr><tr><td></td><td>&nbsp; <input type="submit" value="登录" id="login"><input type="hidden" id="hidden"></td></tr></tbody></table><s:fielderror fieldName="username" cssStyle="color:red;"/><s:fielderror fieldName="password" cssStyle="color:red;"/></form> </div></body>
</html>

    剩下的功能如修改个人信息,修改密码和管理员功能模块等功能的实现与登陆功能实现的流程相似,不再赘述。

项目源码Github地址

网上银行系统5:系统登陆相关推荐

  1. 基于Java的电子作业提交系统_基于jsp的网上作业提交系统-JavaEE实现网上作业提交系统 - java项目源码...

    基于jsp+servlet+pojo+mysql实现一个javaee/javaweb的网上作业提交系统, 该项目可用各类java课程设计大作业中, 网上作业提交系统的系统架构分为前后台两部分, 最终实 ...

  2. 用win7系统如何登录ftp服务器,win7系统登陆 ftp服务器的操作方法

    很多小伙伴都遇到过对win7系统登陆 ftp服务器进行设置的困惑吧,一些朋友看过网上对win7系统登陆 ftp服务器设置的零散处理方法,并没有完完全全明白win7系统登陆 ftp服务器是如何设置的,今 ...

  3. 网上银行系统1:系统分析

    一.系统目标 用户能方便地进行存款.取款.转账等操作 用户能分页查看账户的所有交易记录,可以查看.修改个人信息 管理员可以方便地进行账户管理.包括开户,进行账户的启用和冻结(冻结状态下的账户将被限制交 ...

  4. 网上银行系统信息安全通用规范【学习笔记】

    0x00 背景 中华人民共和国金融行业标准JR/T 0068-2020 网上银行系统信息安全通用规范是2019年10月份推出代替 JR/T 0068-2012,在2020年2月5日开展实施执行,作为一 ...

  5. 探究2020版《网上银行系统信息安全通用规范》的新变化

    本文原文是 作者haiczh与2020-03-05发布于freebuf平台上的文章 本人基于等级保护工作的角度对文章加以评论并转正于此 如有同行或对此规范有高度认识的朋友可指出我的错误指出或提出建议  ...

  6. Java、JSP网上银行系统的设计与实现

    技术:Java.JSP等 摘要: 随着社会的发展,互联网已经成为人们日常生活.学习办公中不可缺少的一部分,并在各个领域发挥着越来越重要的作用.特别是在商业运营管理方面发展尤为迅速. 本系统的开发主要是 ...

  7. 基于JavaEE的网上银行系统的设计与实现

    科学技术日新月异的进步,让人类生活发生了巨大的变化,计算机技术的飞速发展,使各行各业在计算机技术应用方面得到了广泛的普及和使用.信息化时代的到来成为不可抗拒的潮流,人类文明正在进入一个崭新的时代.本系 ...

  8. Java项目:网上花店商城系统(java+jsp+servlert+mysql+ajax)

    源码获取:博客首页 "资源" 里下载! 一.项目简述 功能: 一套完整的网上花店商场系统,系统支持前台会员的注册 登陆系统留言,花朵的品种选择,详情浏览,加入购物 车,购买花朵等: ...

  9. 基于JavaWeb实现网上花店商城系统

    项目编号:BS-SC-015 开发工具:IDEA / ECLIPSE 数据库:MYSQL5.7 应用服务器:TOMCAT8.5.31 JDK: 1.8 开发技术:JSP/SERVLET/JDBC 前端 ...

最新文章

  1. linux kill杀死进程
  2. Qt Creator创建项目
  3. java如何知道需导入哪个包_怎么知道缺少哪个jar包,求助!!!
  4. 【网址收藏】VMware虚拟机安装Windows7
  5. Flatten Binary Tree to Linked List - LeetCode
  6. dijkstra算法和floyd算法(C语言)
  7. crontab 定时备份 出现permission:denied
  8. 常用算法之-快速排序
  9. 通俗易懂讲解什么是Java分布式
  10. 972_MISRA C 2004规范解读1
  11. ubuntu 制作gif 动态图片
  12. 如何去除2345好压的广告弹窗
  13. 关于用python爬取自如网信息的价格问题(已解决)
  14. SAP CO T-Code.
  15. PHP 获取手机号运营商
  16. 商品服务 - 销售属性维护,属性分组与属性关联
  17. 55. VUE 导航守卫
  18. SuperMap地图绘制线段
  19. Win10 文件管理器右侧pdf 无法预览
  20. 为openwrt 15.05(Chaos Calmer) 新增优酷土豆路由宝配置

热门文章

  1. PHP数据跨行跨列处理
  2. 如何使用IP摄像头进行电脑直播
  3. 含泪讲述拿到美团offer的心酸历程......
  4. ArcGIS导入xyz序列并绘制地形图(含等高线、面体积、点距离的计算)
  5. 手机链游撼动腾讯王者荣耀?Nova Battles更具潜力
  6. Centos7初始化网络配置
  7. General Algorithm
  8. github访问不了怎么办
  9. 如何注册和申请阿里云域名?
  10. 从蓄水池问题思考异步FIFO深度设计