PHP语言编写,与数据库交互的登录注册小Example,体现B/S三层结构
Java之设计模式
生成器模式
用法:当要创建一个具有复杂功能的对象时,我们可以使用一个简单对象来创建。它从小而简单的对象逐步创建更大更复杂的对象。生成器模式是另一个创建模式。
举例:当创建一个窗口作为我们应用程序的主窗口时,我们需要创建一个菜单,一个工具栏,然后添加菜单和工具栏。对于我们要创建的每个窗口,我们需要创建一个空窗口,创建菜单,创建工具栏,将菜单和工具栏安装到窗口。我们可以使用构建器模式来隐藏如何创建窗口的实现。
代码举例:
1 | //Pizza属性类 |
观察者模式
观察者模式(Observer Pattern):定义对象间的一种一对多依赖关系,使得每当一个对象状态发生改变时,其相关依赖对象皆得到通知并被自动更新。观察者模式又叫做发布-订阅模式。在观察者模式中,发布者我们称之为被观察者,订阅者称之为观察者。
关于观察者模式有两种应用:
自定义
主要实现思路是,观察者和被观察者都定义成接口形式,
被观察者接口提供增删观察者的方法通知方法,在实现类中添加数据设置方法
观察者接口提供数据更新方法
观察者实现类注入被观察者接口,并绑定与该观察者的关系(被观察者添加该观察者)
在测试时,构造一个被观察者以及多个观察者对象,被观察者尝试设置数据,看观察者是否接收到信息。>
使用Java内置API
在Java
中,继承Observable
的类称为可被观察者,实现Observer
接口的类称为观察者。
有了以上的内置API
,我们不再需要自己写两种接口了。
这里,需要注意的是,观察者需要实现接口的update(Observable o, Object arg)
方法,其中第一个参数就是被观察者对象,而它依然是通过构造注入观察者类的。在该方法中,你可以读取到被观察者的数据,从而被观察者实现了”通知”。
以上两种方式具体代码实现可见:<https://blog.csdn.net/zhongxuebin_xq/article/details/81429625
SSM理解
Spring父容器与SpringMVC子容器是如何体现出父子关系的?
所谓容器,就是上下文,在这同一个上下文里,大家可以共享一些东西。
在Spring
应用启动时,会先读取web.xml
文件,调用ContextLoaderListener
创建Spring
容器,也就是你说的父容器。
1 | <listener> |
Listener
创建完之后,开始创建Servlet
:
1 | <servlet> |
这时候这个DispatcherServlet
开始试图创建SpringMVC
的ApplicationContext
,它先找刚才由上面那个ContextLoaderListener
创建的Spring
的ApplicationContext
,找到后,把Spring
的ApplicationContext
作为参数传给DispatcherServlet
的ApplicationContext
的setParent
方法,这样SpringMVC
的容器就变成了Spring
容器的儿子。
因为在SpringMVC
这个子容器创建的时候指定了它的Spring
父容器,所以儿子能找到父亲,所以SpringMVC
这个子容器里的Bean
可以调用父容器的服务,而父容器不知道有这个儿子的存在(一个不负责任的父亲),父容器里的Bean
不能调用子容器里的服务。
Spring和SpringMVC配置文件为什么要分开扫描
平时我们在项目中注入关系是这样的顺序:在Service
中注入Dao
(初始化自动注入,利用@Autowired
),接着在Controller
里注入Service
(初始化自动注入,利用@Autowired
)
使用分开扫描的方式,一是为了使得父容器内的对象都能互相通信,二是为了让与浏览器显示息息相关的jsp
文件直接关联的Controller
与其他分隔开来,体现SpringMVC
的思想。【在Controller
里注入(可访问到,也就是子容器访问父容器对象)Service
】。
事务为什么加在service层而不加在dao层。
在数据库中,所谓事务是指一组逻辑操作单元即一组sql语句。
当这个单元中的一部分操作失败,整个事务回滚,只有全部正确才完成提交。
判断事务是否配置成功的关键点在于出现异常时事务是否会回滚。
给Service
层配置事务,因为一个Service
层方法操作可以关联到多个Dao
的操作。在Service
层执行这些Dao
操作,多Dao
操作有失败全部回滚,成功则全部提交。
事务也一般放在service层进行配置,其原因可见:
当然,事务的aop配置也一般放在applicationContext.xml
进行配置,因为其涉及到
Mybatis整合Spring的思路
Mybatis
是使用SqlSessionFactory
产生dao
代理对象间接控制,然后使用代理对象调用其操作数据库的dao
方法,这就是Mybatis
的主要工作所在了。
而Mybatis
涉及到dao
层的代理对象,也涉及到与数据源有关的SqlSessionFactory
总的来说,整合的思路:
主要是获取sqlSession对象,通过MapperScannerConfigurer 自动装配SqlSessionFactory 或 SqlSessionTemplate,MapperFactoryBean 创建的代理类实现了 UserMapper 接口,并且注入到应用程序中
整合方式详解:
IOC控制反转和依赖注入
控制反转:我们不需要去new
对象,只需要告诉Spring
去把我们这个对象的控制权交给Spring
依赖注入:告诉Spring
我要用哪个对象,这个对象之前是被Spring
控制的。
XML之xmlns相关
对于很多xml
文件的开头,通常都会有类似如下的:
1 | <project xmlns="http://maven.apache.org/POM/4.0.0" |
可以这样理解:
首先这个文件是一个xml
文件,那么文件里面的所有内容都符合xml
语法规范,
开头的<project></project>
这最外层同样也是一个xml
文件的标签,后面那一长串也就是所谓的属性,其中xmlns表示命名空间,xmlns="http://maven.apache.org/POM/4.0.0"
这表示默认命名空间(如果你的xml
标签没有带任何前缀,则默认认定标签来自默认命名空间),而下面xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
这个命名空间里面的元素或者属性就必须要以xsi:
这种方式来写,比如schemaLocation
就是他的一个属性,所以写成xsi:schemaLocation
,而默认命名空间不带类似xsi
这种,其实xml标签名称有个专业叫法叫做QName
,而如果没有前面的xsi:
这种一般叫做NCName
。
你会发现, 这个 xmlns:xsi
在不同的 xml 文档中似乎都会出现。 这是因为, xsi
已经成为了一个业界默认的用于 XSD(XML Schema Definition)
文件的命名空间。
所以像mvn
里面的<dependency>
这种就是默认命名空间下面的元素,最后那一行就表示把定义这个命名空间的schema
文件给引用进来,好让eclipse
这类型工具能够解析和验证你的xml文件是否符合语法规范。
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"
上面这行的语法其实是, xsi:schemaLocation = "键" "值"
。即 xsi
命名空间下 schemaLocation
元素的值为一个由空格分开的键值对。等同于<import namespace="xxx" schemaLocation="xxx.xsd"/>
。
PHP学习笔记
PHP表单
PHP
脚本可以通过_GET
或_POST
来获取相应表单的提交内容。
预定义的$_REQUEST
变量包含了 $_GET、$_POST 和 $_COOKIE
的内容。
$_REQUEST
变量可用来收集通过 GET 和 POST
方法发送的表单数据。
函数传入表单元素name
可以获取该name
表单元素所填的值,函数返回该值或数组。
如果对于表单中的selector
多w个option
,你可以选择将该selector
的name
定义为一个数组,如name=p[]
,这样,返回的就是一个所有被选择的option 的 value
构成的p
数组,当然,前提是你给selector
设置了multiple="multiple"
。
所以,对于单选按钮,返回的name
设置为变量,多选返回的name
设置为数组。
Git相关知识
配置
在为你的电脑安装完Git
之后,因为Git
是分布式版本控制系统,所以,每个机器都必须自报家门:你的名字和Email
地址。你也许会担心,如果有人故意冒充别人怎么办?这个不必担心,首先我们相信大家都是善良无知的群众,其次,真的有冒充的也是有办法可查的。
注意git config
命令的--global
参数,用了这个参数,表示你这台机器上所有的Git仓库都会使用这个配置,当然也可以对某个仓库指定不同的用户名和Email地址。
1 | $ git config --global user.name "Your Name" |
你可以在任何一个目录下进行git init
操作,让Git
系统来跟踪记录你的文件的修改情况。
公钥、私钥和安全证书
在学习 SSH
章节时,一定有不少人对公钥和私钥产生过不解。在搜索公钥跟私钥的理解时,发现了这篇有趣的图解小文章,与大家共享。
如何获取信息
人是一台“电脑”
假如将人比作一台电脑,需要输入信息,存储数据,运算思考,输出表达。而其中输入信息,作为第一步,也是非常重要的。那么作为一个成年人,应当怎么样去收集信息,才能够尽可能快,尽可能全面呢?
从小到大,其实从来没有人教过我们如何收集信息,而这看起来好像是一个无意识的过程。不就是刷刷微博、看看新闻、读读书、看看文章嘛,大家都会嘛。然而,这种无意识,往往不是最有效的方式,甚至会让你觉得非常苦恼。
我一直在思考这个问题,如何搭建自己的信息收集渠道?因为过去收集信息,没有一个完整的体系,都是无头的苍蝇,乱撞。在浏览信息的时候,还容易因为一些别的话题将注意力分散开,像猴子掰玉米一样,大量的时间花在不断地分心上面,真正关心的信息却没有找到。