关于网银项目完工总结

来源:互联网 发布:九子夺嫡 知乎 编辑:程序博客网 时间:2024/04/28 06:42

   8.6日,李翰文老师发布网银项目需求,发布需求后,看了一下需求文档,好像有难度,老师说,这个8.20号之前交,看着这个项目就首先想到的是数据库,数据库的逻辑设置,跟概要设计加详细设计差不多都由老师做了,抱着对PowerDesigner的崇拜之情,用PD创建并生成了SQL语句,在PD的帮助下我并没有很快的就把数据库的物理设计给完成,因为对它的操作的不熟练,导制的问题从从,最后,在8.8在借用PD生成的SQL和老师的设计把数据库改成了合乎标准的数据库。

   拿到需求文档把数据库建好之后,我并没有立刻动手按需求写代码,首先根据文档分析,我需要撑握MVC概念,作用,如何使用,三层模式之间的值的传递,从哪里开始到哪里结束,前台表单如何转换为后台的JavaBean,数据之间各种关系的处理,及数据库查询的知识,前台表单提交的数据的验证, EL表达示的运用,jstl标签的使用作为验证,接口的设计,servlet中的绝对路径和相对路径的设置。
    一、   在学习三层模式设计的时候,遇到了错误,
        (1)在JSP页面请求发送的时候多加了个“/”,然后所有的请求页面全部跳转到根路径下面,然后傻傻的把这个问题发给老师,最终因为问得太没水平。
        (2)在处理commons-beanUtils.jar包的时候,由于1.8.0版本跟1.6的版本的差别,因为这二个错误导制我一晚上失眠,第二天上课的时候,再看了二遍,最终发现是一个“/”的问题,第二个问题,苦问度娘,终于在论坛里面找到了犯了同样错误的哥们,然后换成了1.8.0版本的。
 
  二、 在学习FormBean的时候,困绕我二天的错误,是一个FormBean里面的一个属性生成的Getter和Setter方法的时候,因为中途改了一下属性的名字,在名字后面加了个S,而没有再重新生成Getter和Setter方法,请了好几个同学帮忙看了一下,最终还是没有找出来,然后,想到了李翰文老师说过,碰到Exception不要急躁,要用正确的心态去面对,一步一步来,一步一步排查,在红色字体显示的错误中老提示我属性找不到,而我回到FormBean寻找的时候发现属性名称是对的,为什么EL表达示就是不识别我的的属性类,最后在教室找呀找,硬是找不出来,刚好这天老师也没有来上课,郁闷,最后一恼火,把那个FormBean删掉,重新建了一个FormBean,人品爆发,通过了,哈哈,最后回去看了一下EL表达示的原理,原来它不是去查看属性,而是去调用属性的Getter方法,而我却没有再一次生成Getter方法,所以throw 了一个Exception 困绕了我二天的错啊。
    要点:
         在将前台获得的数据转换为FormBean的方法,通过BeanUtils.setProperty(bean, name, value);/方法去设置FormBean的值
    public static <T> T request2Bean(HttpServletRequest request,
Class<T> beanClass) {
// 传递一个registerForm(FormBean名称,里面的属性名称必须和前台获取的参数的名称一致)
T bean = null;
try {
// 1.创建要封闭数据的Bean
bean = beanClass.newInstance();
// 2.把request中的数据整到bean中
Enumeration e = request.getParameterNames();
while (e.hasMoreElements()) {
String name = (String) e.nextElement();// 比如里面username password....s
String value = request.getParameter(name);//获得参数对应的值 aaa 123 aaaa
BeanUtils.setProperty(bean, name, value);//将值设置到FormBean里面的对应的属性值
}
 
} catch (Exception e) {
throw new RuntimeException(e);
}
return bean;
}
        在FormBean和JavaBean之间转换数据要使用到commons-beanUtils.jar里面的一个方法,叫BeanUtils.copyProperties(desc, src);把源Bean里面的属性值复制到目的Bean里面值,里面的属性名称必须一致。
    public static void copyBean(Object src, Object desc) {
//注册日期转化器  日期转换器使用的commons-beanUtils.jar必须是1.8.0的包,否则会直接报错。
ConvertUtils.register(new Converter() {
@Override
public Object convert(Class type, Object value) {
Date date= null;
if (value == null) {
date = null;
}
String str = (String) value;
if (str.trim().equals("")) {
date = null;
}
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
try {
date = df.parse(str);
} catch (ParseException e) {
// TODO Auto-generated catch block
throw new RuntimeException(e);
}
return date;
}
}, Date.class);
try {
BeanUtils.copyProperties(desc, src);
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvocationTargetException e) {
// TODO Auto-generated catch block
throw new RuntimeException(e);
}
 
}
    
 
 三、在数据库设计的时候报的错
       日期处理函数问题,由于获取的都是字符串,所以在插入的时候偷了个懒,没有在业务员就把String转化为Date类型,只在SQL执行的时候用Oracle里面的to_date();方法去转化了一下。
 
四、日期选择控件的下载,与调试,在网上下了一个日期控件的JS文件,然后引用进来,在经过辛苦调试,百般测试,终于让我加载进去了。
 
五、JSTL的标签和EL的使用,其中使用到了IF,FOREACH,CHOSSE标签来方便的处理数据的展示,我神奇的EL表达示,这个时候给我展现了最神奇的一面,让我的代码优雅起来了,不再像以前那样写好多的JAVA代码和HTML代码来混合使用,用很小的一段代码就把我需要的都表达出来了。
 
六、FITLTE(过滤器的使用)由老师提供的模板处理了中文编码的问题。通过Web.xml设置加载进去就OK。
 
七、各个页面这间的传递值的问题,及serVlet中处理接收请求,及业务层的逻辑处理。
 
                在搞完这个时候,差不多是8.10号的样子,8.11号放假休息了一天,
 
        8.12号正式开始写代码,在学完前面的知识的时候,基本上的我的第一个注册页面要出来了。Dao层的设计,分析前台页面需要使用到的数据,或者是前面页面数据需要存放进数据库的数据,设计好处理的方法,获得返回的值,其中的值通过Bussiness层来经过处理再传到Dao层,执行方法插入数据库,View层用来表示数据和收取数据, MVC模式其实就是一个INPUT->Processing->OutPut的一个过程,在input可以是通过JSP页面来获取数据,然后经过Bussiness层将数据加工,然后传到Dao层来进行数据库的操作。由Dao层的数据返回数据,再由Bussiness来进行处理成前台能接收的数据,发送到的页面显示。
      理解完这些再加上一个Requst,session,结合它们来保存信息,这样数据的传递就不会有太多的问题,用session来保存当前登录的用户的,然后这一切的操作都通过保存用户的信息去对数据进行访问,这是唯一联系数据库比较多的一根线索。
     做出第一个注册页面的时候,运用JDBC模板处理注册的时候的数据的时候,在这个地方,我考虑着是要做事务处理的,本来,在处理注册请求的时候,如果某一个表的数据插入失败,而其他与之相关的表却插入成功,这样是有违常规的,尝试着解决了一下,但是由于JDBC模板的限制在那里,一改的话,要改动一大版,所以并没有对它进行操作,只是在业务处理的时候做到尽量的精确,不让它出错,
    这个一个注册页面就出来了,然后后面的基本上就都比这个注册页面要容易了。
 
在处理一天之内的限制银行卡使用金额的时候,使用的是通过三张表来关联查询这张卡的所有记录,再在这张卡的所有中通过当前的时间进行刷选,再把其中为负数的值相加起来,如果它的值+要进去处理的钱加上手续费的钱的话,就不能使它交易进行下去。
 
其中 要注意在跨页面传递数据的时候一定要使用到Session来保存对象。在只需要传递一次的情况下使用request对象保存,在业务层的各个交易的模块的时候,要注意验证的信息,所取的额度不能加上手续费不能大于当前存款。ATM,网上交易,转帐,这三个业务,其中相通性很多,只要把转帐的攻破了就没有什么难度了。
      在写代码的时候,一个功能一个有功能的去解决,一个步骤一个步骤的实现,例如我要写一个ATM交易,我就把DAO层写完以后,我就想着把VIEW布局一下,需要一个什么样的FormBean来处理接收前台页面的数据,面Bean写好后,再把页面写好,就测试一下能不能成功,成功了再进行下一步,在业务层把数据转化,转化完毕以后再测试一下是不是获得数据。
 
    8.15号基本上完成了所有的功能,8.16把项目中的小细节跟老师讨论了一下,最后把一些小的问题给修正,正式结束该项目。由于当前技术的不成熟,其中的数据库的事务处理没有处理。如果在以后的学习过程中改进,
                                                                                                
                            项目仅供参考  项目的下载址:http://d.119g.com/f/0823FA5AB91BC291.html
 

本文出自 “Vickyi_” 博客,请务必保留此出处http://vickyi.blog.51cto.com/1367214/965259

原创粉丝点击