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 章节时,一定有不少人对公钥和私钥产生过不解。在搜索公钥跟私钥的理解时,发现了这篇有趣的图解小文章,与大家共享。
如何获取信息
人是一台“电脑”
假如将人比作一台电脑,需要输入信息,存储数据,运算思考,输出表达。而其中输入信息,作为第一步,也是非常重要的。那么作为一个成年人,应当怎么样去收集信息,才能够尽可能快,尽可能全面呢?
从小到大,其实从来没有人教过我们如何收集信息,而这看起来好像是一个无意识的过程。不就是刷刷微博、看看新闻、读读书、看看文章嘛,大家都会嘛。然而,这种无意识,往往不是最有效的方式,甚至会让你觉得非常苦恼。
我一直在思考这个问题,如何搭建自己的信息收集渠道?因为过去收集信息,没有一个完整的体系,都是无头的苍蝇,乱撞。在浏览信息的时候,还容易因为一些别的话题将注意力分散开,像猴子掰玉米一样,大量的时间花在不断地分心上面,真正关心的信息却没有找到。