-
2020-09-22 12:16:54
之前我们介绍过一些求最优解的常用算法模式,比如贪心算法、动态规划算法、穷举算法,都是采用一种确定或几乎确定的方式来寻找最优解。所谓的确定性是指以上这些算法都是建立在确定性基础上的搜索算法,在搜索过程中遇到一个决策点时,对于选 a 还是选 b,其结果是确定的。比如贪婪法,就是按照贪婪策略选择,同样的条件下,每个决策选 1000 次结果都是一样的。
这一课我们要介绍的是随机化算法,该算法并不是闭着眼睛掷骰子,它是一种带启发式的随机搜索,各种随机化算法都有与之对应的理论基础。随机化算法常见的有模拟退火算法、禁忌搜索、蚁群算法、神经网络,当然也包括本课要介绍的遗传算法(Genetic Algorithm)。这些模拟、演化(进化)式的启发式搜索算法的搜索过程不依赖目标函数的信息,非常适合一些传统最优化方法难以解决的复杂问题或非线性问题,在人工智能、自适应控制、机器学习等领域得到了广泛的应用。
遗传算法原理
达尔文(Darwin)的进化论讲述的是物竞天择、适者生存的自然原理,生物体通过自然选择、基因突变和遗传等规律进化出适应环境变化的优良品种。遗传算法就是这样一种借鉴生物体自然选择和自然遗传机制的随机搜索算法,其搜索过程就是“种群”一代一代“进化”的过程,通过评估函数进行优胜劣汰的选择,通过交叉和变异来模拟生物的进化。
遗传算法基本原理
在讲解遗传算法之前,先介绍几个概念。
- 基因(Gene),生物学中基因是一个独立的遗传因子,在遗传算法中,基因是一组编码,代表的是参与计算的遗传特征。
- 种群(Po
更多相关内容 -
Python编程实践pdf版(含工程实例代码)
2017-10-12 20:37:12很好的一本学习python编程的工具书,且附件中含有书中所列举的工程源代码,非常方便初学者上手实践 -
网络编程类40个实例
2014-05-11 15:56:33P2P之UDP穿透NAT的原理与实现工程 P2P之UDP穿透NAT的原理与实现源代码 截获以太网数据,附源代码 利用FTP协议进行文件浏览 利用SMTP协议发送邮件 利用TCP IP实现简单的客户服务器模式 利用命名管道进行通信 两台机器... -
C#二维三维图形绘制工程实例宝典 / 伍逸著
2013-05-25 21:25:21本书全面和详细地阐述了C#图形设计方面的技术,还专门列举了许多C#二维三维图形绘制的工程实例,所以可称为C#图形处理方面的一本宝典。 本书分为五个部分共10章,第一部分介绍C#基本的数据类型和图形基础技术,第... -
社会工程学攻击的三个典例
2019-06-05 19:48:59Hadnagy是社会工程学攻击网站social-engineering.org的创办人之一,并且著有《社会工程学:人力黑客艺术》一书,十多年来他一直在使用操纵策略,向客户表明犯罪分子在如何窃取信息。 Hadnagy在其新书中大致介绍了三...
Chris Hadnagy是靠”骗人”来领薪水的;这么多年来,他练就了一套炉火纯青的骗人功夫。Hadnagy是社会工程学攻击网站social-engineering.org的创办人之一,并且著有《社会工程学:人力黑客艺术》一书,十多年来他一直在使用操纵策略,向客户表明犯罪分子在如何窃取信息。Hadnagy在其新书中大致介绍了三种典型的社会工程学攻击测试,并指出了企业可以从这些结果中汲取到什么教训。
过于自信的CEO
在一个案例研究中,Hadnagy概述了自己如何受雇于一家印刷公司,担任社会工程学攻击审查员,其任务就是设法闯入该公司的服务器;这家公司有一些专利工艺和供应商名单是竞争对手挖空心思想弄到的。该公司的首席执行官(CEO)与Hadnagy的业务合作伙伴进行了一番电话会议,告诉Hadnagy”想闯入他公司几乎是不可能的”,因为他”拿自己的性命来看管秘密资料。”
Hadnagy说:”他属于从来不会轻易上当的那种人。他想着有人可能会打来电话,套取他的密码,他随时准备对付这样的花招。”
Hadnagy收集了一些信息后,找到了服务器的位置、IP地址、电子邮件地址、电话号码、物理地址、邮件服务器、员工姓名和职衔以及更多的信息。但是Hadnagy设法了解了这位CEO有个家人与癌症作斗争,并活了下来之后,才真正得到了回报。因而,Hadnagy开始关注癌症方面的募捐和研究,并积极投入其中。他通过Facebook,还获得了关于这位CEO的其他个人资料,比如他最喜爱的餐厅和球队。
他掌握了这手资料后,准备伺机下手。他打电话给这位CEO,冒充是他之前打过交道的一家癌症慈善机构的募捐人员。他告诉对方慈善机构在搞抽奖活动,感谢好心人的捐赠–奖品除了几家餐厅(包括他最喜欢的那家餐厅)的礼券外,还包括由他最喜欢的球队参加的比赛的门票。
那位CEO中招了,同意让Hadnagy给他发来一份关于募捐活动更多信息的PDF文档。他甚至设法说服这位CEO,告诉他的电脑上使用哪个版本的Adobe阅读器,因为他告诉对方”我要确保发过来的PDF文档是你那边能打开的。”他发送PDF文档后没多久,那位CEO就打开了文档,无形中安装了一个外壳程序,让Hadnagy得以闯入他的电脑。
Hadnagy说,当他和合作伙伴回头告诉这家公司:他们成功闯入了CEO的电脑后,那位CEO很愤怒,这自然可以理解。
Hadnagy说:”他觉得,我们使用这样的手法是不公道的;但不法分子就是这么干的。不怀好意的黑客会毫不犹豫地利用这些信息来攻击他。”
第一个教训:对于竭力搞破坏的社会工程学攻击者来说,没有什么信息是访问不了的,不管这是涉及个人的信息,还是让对方易动感情的信息。
第二个教训:自认为最安全的人恰恰常常会带来最大的安全漏洞。一名安全顾问最近告诉我们,公司主管是最容易被社会工程学攻击者盯上的目标。
主题乐园丑闻
这第二个案例研究中的对象是一个担心票务系统可能被人闯入的主题乐园客户。用来游客签到的计算机还可以连接到服务器、客户信息和财务记录。客户担心:如果用来签到的计算机被闯入,可能会发生严重的数据泄密事件。
Hadnagy开始了他的测试,先打电话给这家主题乐园,冒充是一名软件销售员。他推销的是一种新的PDF阅读软件,希望这家主题乐园通过免费试用版来试用一下。他询问对方目前在使用哪个版本的阅读软件,轻而易举就获得了信息,于是准备着手第二步。
下一个阶段需要到现场进行社会工程学攻击,为了确保能够得手,Hadnagy拉上了其家人。他带着妻子和儿子直奔其中一个售票窗口,问其中一名员工是不是可以用他们的计算机打开他的电子邮件收到的一个文件。电子邮件含有一篇PDF附件,里面的优惠券可以在买门票时享受折扣。
Hadnagy解释:”要是她说’不行,对不起,不可以这么做’,那我的整个计划就泡汤了。但是看我那个样子,孩子又急于入园,对方就相信了我。”
那名员工同意了,主题乐园的计算机系统很快被Hadnagy的恶意PDF文档闯入了。短短几分钟内,Hadnagy的合作伙伴发来了短信,告诉他已”进入系统”,并且”在收集报告所需的信息。”
Hadnagy还指出,虽然主题乐园的员工政策明确规定:员工不得打开来源不明的附件(哪怕客户需要帮助也不行),但是没有落实规章制度来切实执行员工政策。
Hadnagy说:”人们愿意不遗余力地帮助别人解决问题。”
第三个教训:安全政策的效果完全取决于实际执行情况。
第四个教训:犯罪分子往往抓住员工乐于助人的善意和愿望来搞破坏。
黑客反遭攻击
Hadnagy给出的第三个例子表明了可以如何运用社会工程学攻击来用于防御。他在书中虚构了一个名叫”John”的人物,这名渗透测试人员受雇为一家客户从事标准的网络渗透测试。他使用开源的安全漏洞检测工具Metasploit进行了扫描,结果发现了一台敞开的VNC(虚拟网络计算)服务器,这台服务器允许控制网络上的其他机器。
他在VNC会话开启的情况下记录发现的结果,这时候鼠标在后台突然开始在屏幕上移动。John意识到这是个危险信号,因为在出现这个异常情况的那个时间段,谁也不会以正当的理由连接至网络。他怀疑有人入侵进入到了网络上。
John决定冒一下险,于是打开记事本,开始与入侵者聊天,冒充自己是化名为”n00b”的黑客,佯称自己是个新手,缺乏黑客技能。
Hadnagy说:”John想’我怎样才能从这个家伙身上收集到更多的信息,为我的客户提供更大的帮助?’John尽量装成自己是个菜鸟,想从黑客高手那里取取经,因而满足了对方的虚荣心。”
John向这个黑客问了几个问题,装作自己是刚入道的年轻人,想了解黑客行业的一些手法,想与另一名黑客保持联系。等到聊天结束后,他已弄来了这个入侵者的电子邮件和联系信息,甚至还弄来了对方的照片。他回头把这些信息汇报给了客户,系统容易被闯入的问题随之得到了解决。
Hadnagy另外指出,John通过与黑客进行一番聊天后还得知:对方其实不是之前一直”盯着”他所闯入的这家公司,而是四处寻找容易闯入的系统,没想到轻而易举地发现了那个敞开的系统。
第五个教训:社会工程学攻击可以成为一家企业的防御战略的一部分。
第六个教训:犯罪分子通常会选择容易中招的目标下手。要是安全性很差,谁都可能会成为目标。
-
工程力学在生活中的一些运用案例
2013-01-02 17:12:37工程力学的一些基本原理在现实生活中被运用的一些实例进行了分析,思考。 -
C#二维三维图形绘制工程实例宝典
2013-06-08 09:17:41本书全面详细地阐述了c#图形设计技术,专门列举了许多c#二维三维图形绘制的工程实例,可称为c#图形处理方面的一本宝典。 本书分为五个部分共10章,第一部分介绍c#基本的数据类型和图形基础技术,第二部分讲述二维... -
C#二维三维图形绘制工程实例宝典 [伍逸著]
2012-08-14 09:03:50《C#二维三维图形绘制工程实例宝典》全面详细地阐述了c#图形设计技术,专门列举了许多c#二维三维图形绘制的工程实例,可称为c#图形处理方面的一本宝典。《C#二维三维图形绘制工程实例宝典》分为五个部分共10章,第一... -
《51单片机C语言开发与实例》PDF版免费下载
2018-07-26 14:02:33书中列举了大量应用实例,着重介绍了51单片机的一些新技术及其应用方法,同时还介绍了几款简易编程器的编制和使用方法,使读者尽快、尽可能容易地掌握利用C51对MCS-51单片机进行开发的方法。系统全面、突出重点、... -
计算机的科学计算功能在工程领域中的应用 (2013年)
2021-05-17 17:02:42本文就电子计算机的科学计算功能在工程领域的优越性进行了探讨,并列举了计算机科学计算功能在工程领域应用的实例。 -
单片机应用(生活中单片机应用实例)
2021-07-02 02:04:32单片机又称单片微控制器,它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上。概括的讲:一块芯片就成了一台计算机。它的体积小、质量轻、价格便宜、为学习、应用和开发提供了便利条件。同时,...单片机应用
单片机
完整问题:什么是单片机?它有什么应用?谢谢
好评回答:什么是单片机?单片机有什么用? 单片机又称单片微控制器,它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上。概括的讲:一块芯片就成了一台计算机。它的体积小、质量轻、价格便宜、为学习、应用和开发提供了便利条件。同时,学习使用单片机是了解计算机原理与结构的最佳选择。 可以说,二十世纪跨越了三个“电”的时代,即电气时代、电子时代和现已进入的电脑时代。不过,这种电脑,通常是指个人计算机,简称PC机。它由主机、键盘、显示器等组成(如图1所示)。还有一类计算机,大多数人却不怎么熟悉。这种计算机就是把智能赋予各种机械的单片机(亦称微控制器)。顾名思义,这种计算机的最小系统只用了一片集成电路,即可进行简单运算和控制。因为它体积小,通常都藏在被控机械的“肚子”里。它在整个装置中,起着有如人类头脑的作用,它出了毛病,整个装置就瘫痪了。现在,这种单片机的使用领域已十分广泛,如智能仪表、实时工控、通讯设备、导航系统、家用电器等。各种产品一旦用上了单片机,就能起到使产品升级换代的功效,常在产品名称前冠以形容词——“智能型”,如智能型洗衣机等。现在有些工厂的技术人员或其它业余电子开发者搞出来的某些产品,不是电路太复杂,就是功能太简单且极易被仿制。究其原因,可能就卡在产品未使用单片机或其它可编程逻辑器件上。 单片机的应用领域 : 1。单片机在智能仪器仪表中的应用; 2。单片机在工业测控中的应用; 3。单片机在计算机网络和通讯技术中的应用; 4。单片机在日常生活及家电中的应用; 5。单片机在办公自动化方面。 目前单片机渗透到我们生活的各个领域,几乎很难找到哪个领域没有单片机的踪迹。导弹的导航装置,飞机上各种仪表的控制,计算机的网络通讯与数据传输,工业自动化过程的实时控制和数据处理,广泛使用的各种智能IC卡,民用豪华轿车的安全保障系统,录象机、摄象机、全自动洗衣机的控制,以及程控玩具、电子宠物等等,这些都离不开单片机。更不用说自动控制领域的机器人、智能仪表、医疗器械了。因此,单片机的学习、开发与应用将造就一批计算机应用与智能化控制的科学家、工程师。。
单片机
完整问题:什么是单片机?它有什么应用?谢谢
好评回答:什么是单片机?单片机有什么用? 单片机又称单片微控制器,它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上。概括的讲:一块芯片就成了一台计算机。它的体积小、质量轻、价格便宜、为学习、应用和开发提供了便利条件。同时,学习使用单片机是了解计算机原理与结构的最佳选择。 可以说,二十世纪跨越了三个“电”的时代,即电气时代、电子时代和现已进入的电脑时代。不过,这种电脑,通常是指个人计算机,简称PC机。它由主机、键盘、显示器等组成(如图1所示)。还有一类计算机,大多数人却不怎么熟悉。这种计算机就是把智能赋予各种机械的单片机(亦称微控制器)。顾名思义,这种计算机的最小系统只用了一片集成电路,即可进行简单运算和控制。因为它体积小,通常都藏在被控机械的“肚子”里。它在整个装置中,起着有如人类头脑的作用,它出了毛病,整个装置就瘫痪了。现在,这种单片机的使用领域已十分广泛,如智能仪表、实时工控、通讯设备、导航系统、家用电器等。各种产品一旦用上了单片机,就能起到使产品升级换代的功效,常在产品名称前冠以形容词——“智能型”,如智能型洗衣机等。现在有些工厂的技术人员或其它业余电子开发者搞出来的某些产品,不是电路太复杂,就是功能太简单且极易被仿制。究其原因,可能就卡在产品未使用单片机或其它可编程逻辑器件上。 单片机的应用领域 : 1。单片机在智能仪器仪表中的应用; 2。单片机在工业测控中的应用; 3。单片机在计算机网络和通讯技术中的应用; 4。单片机在日常生活及家电中的应用; 5。单片机在办公自动化方面。 目前单片机渗透到我们生活的各个领域,几乎很难找到哪个领域没有单片机的踪迹。导弹的导航装置,飞机上各种仪表的控制,计算机的网络通讯与数据传输,工业自动化过程的实时控制和数据处理,广泛使用的各种智能IC卡,民用豪华轿车的安全保障系统,录象机、摄象机、全自动洗衣机的控制,以及程控玩具、电子宠物等等,这些都离不开单片机。更不用说自动控制领域的机器人、智能仪表、医疗器械了。因此,单片机的学习、开发与应用将造就一批计算机应用与智能化控制的科学家、工程师。。
单片机应用开发子程序多少个
完整问题:单片机应用开发子程序多少个
好评回答:无数个,只要不超过单片机程序代码区就OK
单片机原理及应用 密码多少??
完整问题:单片机原理及应用 密码多少,谢谢~
好评回答:百度搜呗
单片机应用实例
完整问题:
好评回答:单片机应用实例 可以去网上搜索看看
电子技术中的单片机应用有哪些呢?
完整问题:电子技术中的单片机应用有哪些呢?
好评回答:4、在仪器仪表领域的应用上文中也谈到单片机具备集成度高、体积小、较强的控制功能与扩展的灵活性等特点,并且处理速度快,具有较高的可靠性,所以在智能仪器仪表领域其应用也十分广泛
-
Spring+SpringMVC+MyBatis框架一个简单工程的搭建实例
2016-10-20 15:07:13最近一直项目中一直在使用Spring+SpringMVC+Mybatis 框架,根据自己对这三个框架的了解搭建了一个这样的工程(工程测试可用),期间遇到不少问题,跟大家分享下。 文章分成两大模块: 一、工程代码模块; 二...最近一直项目中一直在使用Spring+SpringMVC+Mybatis 框架,根据自己对这三个框架的了解搭建了一个这样的工程(工程测试可用),期间遇到不少问题,跟大家分享下(具体代码下载地址在文章最后)。
文章分成两大模块:
一、工程代码模块;
二、配置信息和自我理解模块。
项目的工程目录结构是:一、工程代码模块: UserController.class package cn.zyy.ssm.controller; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.ModelMap; import org.springframework.web.bind.annotation.RequestMapping; import cn.zyy.ssm.service.UserService; @Controller public class UserController { @Autowired private UserService userService; public void setUserService(UserService userService) { this.userService = userService; } @RequestMapping("/list") public String getList(ModelMap map){ map.addAttribute("list", userService.getList()); return "/list.jsp"; } }
UserService接口:
UserServiceImpl.classpackage cn.zyy.ssm.service; import java.util.List; import cn.zyy.ssm.vo.User; public interface UserService { public List<User> getList(); }
package cn.zyy.ssm.service.impl; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import cn.zyy.ssm.dao.UserDao; import cn.zyy.ssm.service.UserService; import cn.zyy.ssm.vo.User; @Service public class UserServiceImpl implements UserService { @Autowired private UserDao useDao; @Override public List<User> getList() { return useDao.getList(); } }
UserDao接口package cn.zyy.ssm.dao; import java.util.List; import org.springframework.stereotype.Repository; import cn.zyy.ssm.vo.User; @Repository("userDao") public interface UserDao { public List<User> getList(); }
User.classpackage cn.zyy.ssm.vo; public class User { private int id; private String name; private String pwd; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPwd() { return pwd; } public void setPwd(String pwd) { this.pwd = pwd; } }
user.xml<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//ibatis.apache.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="cn.zyy.ssm.dao.UserDao"> <select id="getList" resultType="User"> select id,name,pwd from user </select> </mapper>
applicationContext.xml<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation=" http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd"> <!-- 读取属性文件 --> <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="location" value="classpath:db.properties"></property> </bean> <!-- 配置dataSource --> <bean id = "dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="${jdbc.driverClass}"></property> <property name="url" value="${jdbc.url}"></property> <property name="username" value="${jdbc.username}"></property> <property name="password" value="${jdbc.password}"></property> </bean> <!-- 配置sqlSessionFactory: 将spring和mybatis整合--> <bean id = "sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource"></property> <property name="configLocation" value=""></property> <property name="mapperLocations" value="classpath:cn/zyy/ssm/xml/*.xml"></property> <property name="typeAliasesPackage" value="cn.zyy.ssm.vo"/> </bean> <!--配置 MapperScannerConfigurer:将Mapper接口生成代理注入到Spring --> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property> <property name="basePackage" value="cn.zyy.ssm.dao"></property> </bean> <!-- 配置事务管理器 --> <bean id = "txManage" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource"></property> </bean> <!-- 配置事务传播特性 --> <tx:advice id = "txAdvice" transaction-manager = "txManage"> <tx:attributes> <tx:method name="get" propagation = "REQUIRED"/> <tx:method name="update" propagation = "REQUIRED"/> <tx:method name="delete" propagation = "REQUIRED"/> <tx:method name="insert" propagation = "REQUIRED"/> <tx:method name="*" propagation = "REQUIRED"/> </tx:attributes> </tx:advice> <aop:config> <aop:pointcut expression="execution(* cn.zyy.ssm.*.*(..))" id="pointcut"/> <aop:advisor advice-ref="txAdvice" pointcut-ref="pointcut"/> </aop:config> <!-- 进行包的自动扫描 --> <context:component-scan base-package="cn.zyy.ssm"></context:component-scan> </beans>
db.propertiesjdbc.driverClass = com.mysql.jdbc.Driver jdbc.url = jdbc:mysql://localhost:3306/test jdbc.username = root jdbc.password = 553226
springmvc.xml<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd"> <!-- 包的自动扫描 --> <context:component-scan base-package="cn.zyy.ssm"></context:component-scan> </beans>
web.xml<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> <display-name>ssmTest</display-name> <!-- spring的配置 文件--> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:applicationContext.xml</param-value> </context-param> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <!-- springmvc(前端控制器)的配置文件 --> <servlet> <servlet-name>springDispatcherServlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:springmvc.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <!-- Map all requests to the DispatcherServlet for handling --> <servlet-mapping> <servlet-name>springDispatcherServlet</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> </web-app>
list.jsp<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <table width="80%" align="center"> <tr> <td>id</td> <td>姓名</td> <td>密码</td> </tr> <c:forEach items="${list }" var="bean"> <tr> <td>${bean.id }</td> <td>${bean.name }</td> <td>${bean.pwd }</td> </tr> </c:forEach> </table> </body> </html>
以上就是全部的代码,大体是按照工程目录结构自上往下的顺序来整理的。二、配置信息和自我理解模块
SSM整合的配置文件大概可分为三个:web.xml 、applicationContext.xml、SpringMvc.xml文件:web.xml主要用于加载前端控制器、加载各种配置文件和设置过滤器等;applicationContext.xml主要负责整合mybatis和spring的相关配置、SpringMvc.xml文件主要负责Springmvc的相关配置。
这里我重点说明下applicationContext.xml文件中的相关配置:
1、 关于MapperFactoryBean,我们知道在Mybatis的所有操作都是基于一个SqlSession的,而SqlSession是由SqlSessionFactory来产生的,SqlSessionFactory又是由SqlSessionFactoryBuilder来生成的。但是Mybatis-Spring是基于SqlSessionFactoryBean的。在使用Mybatis-Spring的时候,我们也需要SqlSession,而且这个SqlSession是内嵌在程序中的,一般不需要我们直接访问。SqlSession也是由SqlSessionFactory来产生的,但是Mybatis-Spring给我们封装了一个SqlSessionFactoryBean,在这个bean里面还是通过SqlSessionFactoryBuilder来建立对应的SqlSessionFactory,进而获取到对应的SqlSession。通过SqlSessionFactoryBean我们可以通过对其指定一些属性来提供Mybatis的一些配置信息。所以接下来我们需要在Spring的applicationContext配置文件中定义一个SqlSessionFactoryBean。
<!-- 配置sqlSessionFactory: 将spring和mybatis整合--> <bean id = "sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource"></property> <property name="configLocation" value=""></property> <property name="mapperLocations" value="classpath:cn/zyy/ssm/xml/*.xml"></property> <property name="typeAliasesPackage" value="cn.zyy.ssm.vo"/> </bean>
在定义SqlSessionFactoryBean的时候,dataSource属性是必须指定的,它表示用于连接 数据库的数据源。当然,我们也可以指定一些其他的属性,下面简单列举几个:- mapperLocations:它表示我们的Mapper文件存放的位置,当我们的Mapper文件跟对应的Mapper接口处于同一位置的时候可以不用指定该属性的值。
- configLocation:用于指定Mybatis的配置文件位置。如果指定了该属性,那么会以该配置文件的内容作为配置信息构建对应的SqlSessionFactoryBuilder,但是后续属性指定的内容会覆盖该配置文件里面指定的对应内容。
- typeAliasesPackage:它一般对应我们的实体类所在的包,这个时候会自动取对应包中不包括包名的简单类名作为包括包名的别名。多个package之间可以用逗号或者分号等来进行分隔。
接下来就是在Spring的applicationContext文件中定义我们想要的Mapper对象对应的MapperScannerConfigurer了,通过这个类Mybatis-Spring会自动为我们注册Mapper对应的MapperFactoryBean对象,如果我们需要使用MapperScannerConfigurer来帮我们自动扫描和注册Mapper接口的话我们需要在Spring的applicationContext配置文件中定义一个MapperScannerConfigurer对应的bean。对于MapperScannerConfigurer而言有一个属性是我们必须指定的,那就是basePackage。basePackage是用来指定Mapper接口文件所在的基包的,在这个基包或其所有子包下面的Mapper接口都将被搜索到。:
这样MapperScannerConfigurer就会扫描指定基包下面的所有接口,并把它们注册为一个个MapperFactoryBean对象。<!--配置 MapperScannerConfigurer:将Mapper接口生成代理注入到Spring --> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property> <property name="basePackage" value="cn.zyy.ssm.dao"></property> </bean>
2、在SSM搭建过程中遇到的一些问题:
(1)web.xml文件中:
<!-- spring的配置 文件--> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:applicationContext.xml</param-value> </context-param>
关于Spring的配置,当初param-name,我写的不是contextConfigLocation,然后运行程序一直显示无法解析applicationContext.xml文件。(2)user.xml文件中:
<mapper namespace="cn.zyy.ssm.dao.UserDao"> <select id="getList" resultType="User"> select id,name,pwd from user </select> </mapper>
开始的时候,mapper的namespace写的是cn.zyy.ssm.dao,导致访问数据库一直失败,最后修改成cn.zyy.ssm.dao.UserDao才OK。(3)在VO类User类中,最开始的时候,我除了类成员变量的setter和getter方法外,还添加了一个类构造方法,一直报错,最后去掉这个构造方法,工程就可以正常运行了。
这是我在搭建工程中自己的总结,最后的遇到的问题,我只是解决了,但是暂时还不知道原理,我会进一步学习,当然如果有高手指点下,我会很感激的。
工程代码下载地址是:http://download.csdn.net/detail/u011991249/9677262。
最后,提供几个我认为比较好的链接:
http://blog.csdn.net/zmx729618/article/details/51907416
http://blog.csdn.net/qh_java/article/details/44559005
https://my.oschina.net/u/1020238/blog/509159
http://www.2cto.com/database/201403/286289.html
http://m.blog.csdn.net/article/details?id=50136303
-
C#精彩实例教程
2014-11-05 07:23:15列举了很多C#工程开发实例,对于初学者有很好的入门提示作用;希望对大家有帮助! -
嵌入式的应用实例
2021-06-26 05:26:16谈到嵌入式技术,可能除计算机方面相关专业人士外很少有人能够涉足了解。其实应用到嵌入式技术的产品...而嵌入式系统,顾名思义就是一个嵌入在其他系统中的系统。IEEE(Institute of Electrical and Electronics Eng... -
Java网络编程实例 (作者:孙一林 彭波)
2011-12-11 11:52:19每个实例都可以作为一个独立程序应用于网络中,也可以作为网络工程项目的一部分应用于网络项目中。\r\n 本书面向具有一定Java语言基础的读者,可作为大学本科和研究生的Java语言高级实验教材。也是一本具有实用价值... -
一种少数点FFT递归算法* (2006年)
2021-04-26 13:17:28FFT广泛应用于数字信号处理中,其算法主要为"同址运算"FFT算法,即使用从前往后逐层算出各结点的数据,因其在计算时总是用当前层替代前一层,具有地址不变的关系而得名,该算法在...列举了几种应用实例,说明了用于系统 -
一种异种金属板材的焊接工艺 (2012年)
2021-05-12 12:11:34介绍了异种板材的交流和逆变直流热压焊焊接工艺、工艺参数、程序及原理,列举了典型中高碳钢与弹簧钢、热双金、不锈钢不同厚度板材,在电真空管金属器件中的点焊应用实例,成功地解决了异种板材焊接产生的虚焊、脆断... -
高密度电法在工程勘察应用中的体会
2020-05-18 11:35:43高密度电法在工程勘察中得到了广泛的应用,已成为工程物探的一种主要方法之一。但由于方法的局限性,受诸多方面的影响,电法异常解释具有多解性,这就增加了资料解释的难度。...文章就工作中的体会列举了几个实例进行探讨。 -
Camera 工程师的披荆斩棘之路
2021-01-23 18:39:36本文以个人的工作学习经历来描述一 Camera 软件工程师的披荆斩棘之路,时间从大学开始,以至任职于高通 Camera 软件工程师结束,杂以本人学习过程当中的一系列学习笔记和博客文章,绝对是干货满满,甚至于稍有溢出,... -
Python爬虫工程师面试问题总结
2020-12-25 14:34:223.请写出一段Python代码实现删除一个list里面的重复元素 4.Python里面如何拷贝一个对象?(赋值,浅拷贝,深拷贝的区别) 5.介绍一下except的用法和作用? 6.Python中__new__与__init__方法的区别 7.常用的网络... -
微信开发获取地理位置实例(java,非常详细,附工程源码)
2016-01-12 12:44:59在本篇博客之前,博主已经写了4篇关于微信相关文章,其中三篇是本文基础:1、微信...3、微信开发之使用java获取签名signature(贴源码,附工程),该文详细讲些了如何获取签名,代码十分详细。对于初学者,可能还不知 -
sencha architect 2 官方实例 第一个实例
2013-06-01 03:28:31汽车列表实例是一个说明数据绑定的好例子。应用可以 让用户选择列表中的一辆车来查看细节,包括一张汽车的照片,教程结束后,你应该理解如何创建和设置视图,创建model数据层,如何把数据绑定到视图中。 准备... -
现代信号处理及工程应用
2018-05-30 15:21:01本书介绍了现代信号处理技术的基本原理和工程实用技术。阐述了平稳和非平稳信号的特点,信号数学变换的本质,信号正交分解的物理...列举了所介绍的方法和技术在工矿企业中机电设备动态分析与检测诊断方面的应用实例。 -
线上故障分析-故障分级,原因,分类,混沌工程,排除方法
2022-03-02 10:13:16故障 注人首先要知道会发生什么故障,然后一个一个地注人, 而在 复杂分布式系统中,想要穷举所有可能的故障,本身就是奢望 混沌工程的思维方式是主动去找故障,是探索性的,你不知道摘 掉一个节点、关掉一个服务会... -
[网络安全自学篇] 五.IDA Pro反汇编工具初识及逆向工程解密实战
2019-08-08 12:00:04这是作者的系列网络安全自学教程,主要是关于网安工具和实践操作的...这一篇文章将详细讲解IDA Pro反汇编工具的基础用法,并简单讲解一个EXE逆向工程解密实战方法。希望对入门的博友有帮助,大神请飘过,谢谢各位看官! -
《Verilog-HDL实用设计与工程制作》例程
2018-04-09 11:22:02第8章,通过列举12个简单的应用实例,详细介绍 工程应用系统的设计与实现的全过程。书中给出的全 部仿真结果和硬件实现均经过验证。 本书可作为学习数字设计的初学者和工程技术人 员的入门书、工具书和参考资料。 -
精通Windows.API-函数、接口、编程实例.pdf
2013-01-27 11:49:551.1 第一个实例程序 1 1.1.1 start.exe 1 1.1.2 Windows API 2 1.1.3 程序入口函数 2 1.1.4 start.c代码分析 2 1.2 编译代码 3 1.2.1 安装Visual Studio 3 1.2.2 安装Microsoft Platform SDK 4 ... -
当我说要做大数据工程师时他们都笑我,直到三个月后……
2017-10-25 14:52:16作者:Fickr孫啟誠 原文: 三个月大数据研发学习计划实战解析 关注微信公众号:「GitChat 技术杂谈」 一本正经的讲技术 【不要错过文末彩蛋】 申明: 本文旨在为普通程序员(Java程序员最佳)提供一个入门级别的... -
手把手教你用Java设计并实现一个城市公交查询系统
2020-12-19 10:11:33所以我的毕业论文选择了公交车查询系统,就因为他是一个较为贴近生活的一个问题,并且如果开发出来,则可以很大的方便乘客查询相关的公交信息,为自己的出行制定良好的乘车计划。 1.3 选题的目的 近年来,我国的城市... -
软件工程——程序流程图详解
2021-02-23 12:45:01软件工程——程序流程图详解程序流程图程序流程图的基本控制结构程序流程图实例程序流程图的标准符号(国家标准)循环的标准符号注解符的使用多选择判断N-S图N-S图的基本控制结构N-S图的实例N-S图的特点N-S图的扩展...