由于条件限制,每月流量有限,所以这周没有在MOOC网上继续学习相关大学计算机专业的课程,只好重新将javaweb从数据库连接那里继续向后学习,也算是对前一段时间学习的检验吧,这次将javaweb的一些相关基础重新温习了一边,搞懂了很多当时一知半解的或者糊里糊涂的知识,比如真正了解了MVC设计思想,javaweb经典三层架构各个层面的任务及如何运用。
一、重温了数据库连接的相关知识,掌握两种数据源,用以连接数据库Mysql,由于tomcat内置的dbcp数据源配置和使用比较麻烦,我只是了解了一下,不过以后还是要掌握的。
(1)DBCP
DBCP:使用时需要DBCP的jar包,网上可以下载到。
方式1:
BasicDataSource source = new BasicDataSource();
source.setDriverClassName("com.mysql.jdbc.Driver");
source.setUrl("jdbc:mysql:///day11");
source.setUsername("root");
source.setPassword("root");
方式2:
Properties prop = new Properties();
prop.load(new FileReader("dbcp.properties"));
BasicDataSourceFactory factory = new BasicDataSourceFactory();
DataSource source = factory.createDataSource(prop);
配置文件的配置信息:
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql:///day11
username=root
password=root
#<!--初始化10个连接-->
initialSize=10
#<!--最大连接数量-->
maxActive=50
#<!--最大空闲连接数量-->
maxIdle=20
#<!--最小空闲连接数量-->
minIdle=5
#<!--超时等待时间,以毫秒为单位,到时限后自动转为空闲连接-->
maxWait=60000
C3P0:使用时需要C3P0的jar包,网上可下载到
方式1:
ComboPooledDataSource source = new ComboPooledDataSource();
source.setDriverClass("com.mysql.jdbc.Driver");
source.setJdbcUrl("jdbc:mysql:///day11");
source.setUser("root");
source.setPassword("root");
方式2:
ComboPooledDataSource source = new ComboPooledDataSource();
在类加载的目录下配置名称为c3p0-config.xml的文件如下基本信息:
<c3p0-config>
<default-config>
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="jdbcUrl">jdbc:mysql:///day11</property>
<property name="user">root</property>
<property name="password">root</property>
</default-config>
</c3p0-config>
二、DButils
这个API相当方便,使用后再去连接数据库,觉得整个世界都干净了。
对于增删改来说,很方便调用queryrunner的update方法即可实现,但对于查询由于不清楚查询到结果之后要对结果如何处理,所以框架在设计的时候就提供了几个比较重要的方法,来处理结果,也是很常用的方法query中的ResultSetHandler<T>就是这样一个处理结果集的类,利用泛型可以很灵活的处理想要处理的数据类型
当然new的类型不止这几种,但是带有*号的是非常常用和重要。比如3和4就是我们经常要将结果集中的数据封装入一个JavaBean实例中,带到上一层中使用,很方便,不用自己new一个JavaBean实例通过循环遍历结果集设置属性,结果多了还要存入list集合中,太麻烦了。4中直接就可以一步到位返回一个list<T>,所以很灵活。
这里就体现了封装的思想,将重复的代码制作成一个工具类,需要使用直接调用即可实现功能,因为底层已经将所有逻辑写好了。
二、完成了一个小案例,比较粗糙,只是实现了主要的逻辑功能,网页布局之类的没有学到,所以先暂时掌握逻辑实现以及对于一个功能实现的设计思路
主要掌握设计思维,还是那句话程序是构造出来的,不是编出来的
案例是一个客户管理系统,主要掌握经典三次架构及MVC设计模式以及体验基于数据库的增删改查,具体内容我就不在这里多说了,我就想说说我对经典三层架构的理解,如何真正了解MVC设计模式,我就用大白话和打比方的方式和大家分享,如果有不对的地方,还请大牛能予以赐教。
首先,什么是MVC
M—模型(Model) 模型是应用程序的主体部分。模型表示业务数据,或者业务逻辑.
V—视图(View) 视图是应用程序中用户界面相关的部分,是用户看到并与之交互的界面。
C—控制器(controller) 控制器工作就是根据用户的输入,控制用户界面数据显示和更新model对象状态。
打给比方:你很有钱,有一个豪华别墅,家里有总管佣人等等,你现在很饿,想吃东西,但是桌子上什么也没有,这里桌子可以看作是你能看得见的V,你的需求是要桌上能有个吃的,这时候你的总管知道了你的需求,他就可以看作是C,但是总管不会做饭啊,所以他要将你的需求交给佣人,让佣人去做饭,这里佣人就可以看作M。饭是如何做的在哪里做的,需要什么步骤,买菜,炒菜,下面条什么的都是M来实现,M的任务就是将需求具体实现出来,好了,M把饭做好了,他通知总管C,C说:好了M你可以忙你的去了,把饭交给我就行了,我把饭端过去就好了(话说C好淫荡哈~),这时候C就要把饭端到桌子V上,你就可以看到一碗香喷喷的饭菜了。这里出现的MVC都是相对独立的,为什么说是相对独立的?因为每层之间必须是要联系的,不然这饭就无法放到桌子上(这里就要牵扯到工厂解耦,我就先不说了),但是相对独立体现在哪里呢?
比如说:有一天M做错事了,你把他开了,那么是不是你就吃不上饭了?不,你有钱啊,再雇一个佣人就解决了对吧,代码也一样,比如哪天需要修改业务逻辑了,那么直接修改M层即可,其他层不用大动干戈,整体框架还是能正常运行,多爽。
可以这样理解,假如C知道你想吃饭了,他跑过去告诉M:你去买菜,我总管大人来做。你想一想C跑来干扰M的业务会有什么隐患?现在的情况是M只负责买食材,C来做饭,又要去把饭菜端上去。那么好,突然有一天,C病了(你又不能因为他病了就开了他,当然这是假设),这次怎么办?你是真的吃不上饭了,因为M只负责买食材,无法完成做饭这项任务,看到隐患在哪里了吗?这就是C跑到M层的隐患。所以软件的这种MVC设计的意见就在这里,将功能模块化,方便维护修改以及更换。这里纯属个人的理解,我不知道用的例子对不对,还请大牛指点。
那下面再聊聊javaweb的经典三层架构,也是基于MVC的设计思想(网上盗个图来说明)
Jsp页面显示可以看作是—V
Servlet接受请求以及控制其他层处理请求,将结果显示到jsp页面,所以Servlet可以看作是—C
Jsp和Servlet共同组成了Javaweb三层架构的web层及V+C=Web,因为这两个家伙没啥逻辑可言,就是显示数据,将需求往下层传达再将结果传给jsp(可以理解为一些领导只会下达命令,自己却独享成果一样)。但是M这时候就不干了,尼玛这个贱人,我辛辛苦苦的干活又买菜又炒菜做饭,最后我还是个佣人...(哈哈,开个玩笑这里就是想让大家能形象的理解三层架构,别当真)于是你也觉得不太好就将M的任务分开了,于是就出现了Service业务层和Dao数据层,一个专心做饭,一个跑去买食材。
Service和Dao就是—M
所以总结一下:javaweb基于MVC的三层架构就是web层(jsp+servlet)、业务层(service)和数据层(dao)
javaweb的经典三层架构,说实话一目了然,各自分工合作,将自己的任务完成,最后串联起来将成果显示给用户,很有一种团队协作的精神有木有~哈哈,所以说程序是构造出来的不是编写出来的道理就在于此,不要盲目的编写程序,结构框架和思维是最紧要的,其次才是把握住各部位的细节。
好了,如果这篇文章对你也有一点帮助的话,希望你能告诉更多的人去理解这种思想,因为自从学完了计算机导论我已经开始用计算的思维考虑很多问题了,所以现在回到javaweb的学习是真的豁然开朗,醍醐灌顶(小小的装个逼~)
我会继续学习计算机的基础课程,只是现在条件受限,我只好继续javaweb的学习,不过看来现在对编程这种事情真的是有一层深入的理解了,希望有梦想的人们,我们一起加油可好?
by Death4
2016-09-18