“千”第二周学习情况

  由于条件限制,每月流量有限,所以这周没有在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        b

  

时间: 2024-10-26 05:34:46

“千”第二周学习情况的相关文章

20172328《程序设计与数据结构》第二周学习总结

20172328李馨雨<程序设计与数据结构>第二周学习总结 又到周五,李馨雨同学要开始写博客了.让我们开始吧!(????) 教材学习内容总结 1.首先是String类定义的字符串,然后是print和println的区别.转义字符的学习.(让我印象深刻的\b[回车符]在字符串结尾不显示哈哈,及其更新的\t[换行符],还有在课堂上真正明白了什么是回车.) 2.了解变量.常量.赋值语句.变量:保存数据的内存单元.常量:坚定自己不会变的数据!除非你用java的反射(有点复杂,改权限.去修饰符等等.没实

20172327 2017-2018-2 《程序设计与数据结构》第二周学习总结

20172327 2017-2018-2 <程序设计与数据结构>第二周学习总结 教材学习内容总结 字符串的拼接和转义序列的使用 变量的声明和使用 讨论语法及表达式的处理 定义数据转换类型和实现类型转换的机制 创建Scanner类 教材学习中的问题和解决问题 暂无 代码学习中的问题和解决过程 问题1:在提交过程中,突然遇到无法上传的情况 问题2解决方案:通过上网查找,输入git pull之后弹出一个编辑框,选择关闭之后,再次用git push就成功了. 问题2:在按照例题2.10打代码时,Jav

2018-2019-1 20175206《信息安全系统设计基础》第二周学习总结

2018-2019-1 20175206<信息安全系统设计基础>第二周学习总结 信息的进制与转换 字节:计算机中最小的可寻址的内存单元 虚拟内存:机器级程序将内存视为一个非常大的字节数组 进制表示 十进制:D=dndn-1...d1d0.d-1...d-m(m,n为正整数) 二进制:B=bnbn-1...b1b0.b-1...b-m(m,n为正整数) 八进制:O=onon-1...o1o0.o-1...0-m(m,n为正整数) 十六进制:H=hnhn-1...h1h0.h-1...h-m(m,

2019-2020-1学期 20192426 《网络空间安全导论》第二周学习总结

2019-2020-1学期20192426<网络空间安全专业导论>第二周学习总结 第四章:门和电路 4.1计算机和电学 1. 门(gate):对信号执行基本运算的设备,接受一个或多个输入信号,生成一个输出信号. 2. 电路(circuit):相互关联的门的组合,用于实现特定的逻辑函数. 一般来说,0~ 2伏的电压是低电平,由二进制数字0表示,2~5伏范围内的电压是高电平,由二进制数字1表示. 3. 描述门和电路的表示法有三种,它们互不相同,但却一样有效: 1. 布尔表达式 2. 逻辑框图 3.

20155336 2016-2017-2《JAVA程序设计》第二周学习总结

20155336 2016-2017-2 <JAVA 程序设计>第二周学习总结 教材学习内容 1: GIT版本检测 2: JAVA中基本类型 整数 字节 浮点数 字符 布尔(▲) 通过API可以得知各个类型可存储的数值范围 public class Range {public static void main(String[] args){ //byte.short.int.long的范围 System.out.printf("%d~%d%n", Byte.MIN_VALU

20145301第二周学习总结

20145301第二周学习总结 教材学习内容总结 3.1 类型.变量与运算符 整数 short 2字节,int 4字节,long 8字节 字节 byte 1字节 浮点数 float 4字节,double 8字节 字符 char 2字节(包括字母.汉字) 布尔 boolean 不用在意它的存储空间(只有true/false) 注释 // 单行注释,/ / 多行注释 下图为各类型范围: 常量定义 final加在定义类型之前,表示定义的该变量将不能改变其值,如 final int a=10; 局部变量

20145326《Java程序设计》第二周学习总结

20145326<Java程序设计>第二周学习总结 教材学习内容总结 本周学习教材第三章,本章主要讲述了java语言中的一些基础语法,java是个支持面向对象的程序语言,但在正式进入面向对象支持语法的探讨前,对于类型.变量.运算符.流程控制等,这些各种程序语言都会有的基本语法元素,还是要有一定的基础.虽然各种程序语言都有这些基本语法元素,但千万别因此而轻忽它们,因为各种程序语言都有其诞生的宗旨与演化过程,对这些基本语法元素,也就会有其独有的特性. 1. 类型 在java的世界中,并非每个东西都

2017面向对象程序设计(Java)第二周学习总结

2017面向对象程序设计(Java)第二周学习总结 直系学妹学弟们好!额...不要问我为什么把学妹放前面,我也不知道!我只是你们和蔼可亲的学长一枚而已.也不要问为什么是第二周学习总结而不是第一周,因为第一周学长正在家里吃西瓜吹空调.好了,闲言少叙.我先为你们介绍一下助教的职责,而后再对你们的学习情况进行总结! 身为你们本学期Java课程的助教...之一,我的任务是:指导你们学习,批改我所负责学习小组的实验作业.阅读博文并回复.其他学习小组会有另外三位助教负责.由于我们每周五都会汇总你们的情况,其

20145319 第二周学习总结

20145319 <Java程序设计>第二周学习总结 教材学习内容总结 本周学习教材第三章,本章主要讲述了java语言中的一些基础语法,大致包括java语言中的类型,变量,运算符,流程以及基础语法等. 1. 类型 基本类型(每种类型都有其储存范围,如超出范围,即Overflow): 整数:可分为short整数(占2字节),int整数(占4字节),long整数(占8字节)三种,例如,int类型的十进制2其实是以000000000 00000000 00000000 00000000 000000