火战士带的项链天火之连的口号

天火同人变离为火求解【梅花易数吧】_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0可签7级以上的吧50个
本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:88,166贴子:
天火同人变离为火求解
感情卦,求问能否复合,怎么解,新手看不详细
没有人来指导新人。。
感情卦没多少人会看 对不对都得罪人 现在闹的应该比较僵 女方还有想走的可能 在一起的可能不大 乾变离 男变女 女方很强势
真想算八字或八字合婚朋友请在百度搜索“八字化解大师刘旭日”刘旭日连你出生环境 你身上的毛发 以及你命中老婆(公)的生肖, 年龄比你大还是小, 距离远近都可以算出来八字合婚大师刘旭日, 1963年出生,钻研八字命理近20年, 突破传统命理(生肖和纳音)合婚,结合自己实践经验总结出合婚的新思路。 一是: 假设是给一个男孩子合婚, 首先算出这个男孩子的八字里的老婆的各个方面(可以具体到生肖,年龄大还是小, 距离远近), 以及八字里老婆的爸爸妈妈情况, 然后与他女朋友实际进行对照看是否基本符合。(算出八字里老婆六亲情况就是为了更准确地判断) 二是: 然后算出这个男孩子女朋友的八字里的老公的各个方面,以及八字里老公的爸爸妈妈情况, 然后与这个男孩子实际进行对照看是否基本符合。 男女双方的实际情况与八字基本一致,合婚成功具有一定基础。 三是:再算出男女双方八字结婚年份是否一致。 如果基本上相符合,那就是这个男孩子找到了八字命中的老婆(适当参看传统 生肖合婚和纳音合婚) (刘旭日联系方式 QQ号码 电话 )
贴吧热议榜
使用签名档&&
保存至快速回贴霸气销售团队口号三篇
霸气销售团队口号三篇
来源: &责任编辑:小易 &
求一个有霸气的销售团队名字问:如题,先在此谢谢啊,顺便也写上口号啊答:呵呵!我来给个猛点的饿点的猛虎追饿狼团队口号是:团结如猛虎,后退被狼吞,众志成城罩四方,耶!哈哈!好名字吧,给分吧。霸气牛逼的销售团队名字答:霸气牛逼的销售团队名字如下:传世贸易(销售)创世贸易(销售)纵横贸易(销售)神州贸易(销售)轰天贸易(销售)天火贸易(销售)帝国贸易(销售)销售团队队名霸气好听答:卓越队,牛气冲天队,雄狮队,神锋队,必胜队,猛龙过江队。中华队:中华中华,爱我中华闯关队:中国制造精英队:精英精英,精益求精飞鹰队:全力以赴,做到更好!狼牙队:狼牙狼牙,团结无敌猛牛队:猛猛牛我最强恶狼队:全力以赴,直到...霸气销售团队口号三篇(图3)霸气销售团队口号三篇(图6)霸气销售团队口号三篇(图12)霸气销售团队口号三篇(图14)霸气销售团队口号三篇(图18)霸气销售团队口号三篇(图20)
口号网权威发布霸气销售团队口号三篇,更多霸气销售团队口号三篇相关信息请访问口号网。
  【导语】口号作为意识的表现形式之一,是对当时社会政治、经济、文化的一种反映,不同性质的口号起着不同的作用。以下是学路网整理的《霸气销售团队口号》,一起来看看吧!霸气的销售房产团队口号有哪些?答:公司有我,无所不能,(团队名称),永争第一!开拓市场,有我最强,(团队名称),我为单狂!巅峰之队,舍我其谁;纵箭出击,谁与匹敌,(团队名称)奋力冲刺!吼一吼,业绩抖三防抓取,学路网提供内容。  霸气销售团队口号(1)帮忙写个销售房产团队口号霸气一点的!谢谢问:在线等,求大神,霸气一点的口号,最好末尾带上三千越甲可吞吴,前面要...答:现在不卖(4声)房,何时才买(3声)房!现在不买(3声)房,何时才卖(4声)房!防抓取,学路网提供内容。  1、只有不完美的产品,没有挑剔的客户。求霸气销售团队队名和口号问:本人需要霸气一点的队名还有激励人的口号。。。。。。急急急急,我们公...答:队名:谁与争锋口号:销售精英敢闯敢拼齐心协力勇夺第一轩辕出击,勇夺第一队名:谁与争锋口号:我命由防抓取,学路网提供内容。  2、没有品质,便没有企业的明天。销售团队16字霸气押韵口号问:销售团队,急需16字霸气押韵口号,公司叫万众,团队是八部。答:文者称雄舞者称霸唯我团八雄霸天下防抓取,学路网提供内容。  3、检验检测坚持做,一点问题不放过。销售团队霸气口号问:销售团队激励霸气口号,因为每天需要开早中晚三次会,每次开会需要喊个...答:雄鹰队顽强拼搏勇创佳绩防抓取,学路网提供内容。  4、仪器设备勤保养,生产自然更顺畅。急!!!求销售团队霸气押韵的小组口号问:我们小组名字精英队,做销售的,每天早上要喊口号,鼓舞士气的,求一个...答:口号(16字):天道酬勤,自强不息,精英团队,勇夺第一。备注:天道酬勤,是指一分耕耘防抓取,学路网提供内容。  5、只有勇于承担责任,才能承担更大的责任。求霸气销售团队队名和口号队名:谁与争锋口号:销售精英敢闯敢拼齐心协力勇夺第一轩辕出击,勇夺第一队名:谁与争锋口号:我命由我不由天天欲灭我我灭天防抓取,学路网提供内容。  6、品质是做出来的,不是检验出来的。销售团队16字霸气押韵口号文者称雄舞者称霸唯我团八雄霸天下防抓取,学路网提供内容。  7、争取每一个客户不容易,失去每一个客户很简单。关于销售出单的团队口号,押韵和气势的,谢谢达人飞鹰在天,翱翔无边,出单有我,勇往直前。腾飞腾飞,奋起直追,出单无数,付出全部。防抓取,学路网提供内容。  8、以精立业,以质取胜。销售团队激励霸气口号。东风吹,战鼓擂,我们怕过谁?防抓取,学路网提供内容。  9、我们的承诺:不做不良品。求一个销售团队的口号!要体现团结、霸气!激情沸点,快乐燃烧,销售业绩,我们最强!防抓取,学路网提供内容。  10、你思考,我思考,品质提升难不倒。给个霸气点的队名和口号我们是销售团队不得不爱,牵手两代,一言九鼎,诚信未来!防抓取,学路网提供内容。  11、杜绝一切不合格产品是质量保证的基本要求。请大家帮忙想一个霸气十足的销售团队口号谢谢(急用)凌天&事在人为,心比天高!防抓取,学路网提供内容。  12、提高售后服务质量,提升客户满意程度。我们是一个销售团队,想起个有霸气的口号,请各位大仙各显神通...猛龙过江,威震八方。OYE!~防抓取,学路网提供内容。  13、全员参与,强化管理,精益求精,铸造品质。悬赏50,求霸气一点的销售团队的队名、目标及口号!!!!!!!!1,队名里最好有你们几个队员的名字在里面,增加归属感,这比霸气更重要。2,目标没有人比你们自己更清楚吧。笼统一些,就是实现自我,战胜自我防抓取,学路网提供内容。  14、讲究实效,完善管理,提升品质,增创效益。防抓取,学路网提供内容。  15、一丝之差,优劣分家。以往带孩子都是习惯给孩子把屎把尿,因为这样会给大人规避很多因为孩子尿床而带来的麻烦。事实上,这样真的利于孩子的身心健康发展吗?随着医学和心理学的进步,现代越来越多的家长认识到这种做法的弊端。一般来说,防抓取,学路网提供内容。  16、发现问题马上报,及时处理要做好。谢谢邀请,我认为一个月大的宝宝,可能还在用NB码的纸尿裤,所以其实可以多试试。我生产前就买了好几个牌子,帮宝适红帮、白帮和绿帮,好奇银装和金装,还有安尔乐纸尿片。我家宝宝月子里就开始试用,从性价比,侧防抓取,学路网提供内容。  17、你思考、我动脑产量提升难不倒。我也是今年从外省带着老婆孩子搬家到了惠州,举目无亲只能靠自己,来的前半个月找好了租房,把老婆孩子都安顿好了。我才能开始专心找工作,前几次面试不太理想,不是公司看不上我,就是我看不上公司。时间一天一天的防抓取,学路网提供内容。  18、质量是成功的伙伴,检验是质量的保障。谢邀。人的性格为什么如此不同,这个问题很难的。根据我自己的理解,人的性格生成是先天性为主的。后天的教育,生活环境,人生的历练有一定的变化。有句话,一母生九子,子子各不同。确实有这种现象存在,这个古人也防抓取,学路网提供内容。  19、客户想到的我们要做到,客户没有想到的我们也要做到。先放两张我们拍的儿童摄影图压楼再答题国内我没用很清楚但韩国这边童装拍摄会比其它拍摄偏贵一点点原因有三:其一,童装拍摄效率低比如成人女模正常情况一小时可能可以拍四五套而童模不确定因素偏多比如拍摄着累了哭防抓取,学路网提供内容。  20、品质管理讲技巧,沟通协调最重要。近日范冰冰参加某节目,一头银色短发酷炫十足,搭配复古红唇一展歌喉。一身帅帅的连裤装,没有平日里的经典长发女神范,但是酷炫风格的范爷依旧美的霸气。近日,陈妍希在微博晒出近照,照片中她竟然染着一头橘红色的防抓取,学路网提供内容。  霸气销售团队口号(2)谢谢邀请。章邯不肯投降刘邦,大约有两方面原因吧。首先,他投降项羽,就不是自愿的,也不是战败被俘虏,而是因为赵高要杀他,为了活命,被迫投降了项羽。所以他投降项羽,并非卖主求荣,而是情非得已。而投降项羽之防抓取,学路网提供内容。  21、想要产品零缺点,做好检验不可免。实际上没有必要!汽车ACC状态有两个作用:一、自检二,显示各个状态指示灯。很多人认为每次启动汽车应该在Acc状态停留一会,让汽车进行自检、加电,但是实际来说,汽车启动前会首先自动进行自检。如果真的有必防抓取,学路网提供内容。  22、自检互检,确保产品零缺点。谢邀!若要问这两年最“红”的文玩是啥,那绝对非南红莫属!以往大家认可度高的都是满色满肉的锦红料,但如今的南红市场,早已不只是锦红的天下。一件南红价值的决定因素已经不局限于料子本身雕工对于南红价值的影防抓取,学路网提供内容。  23、品质管理标准化,ISO成功靠大家。一.《儿童情绪管理图画书1》是一套2-6岁幼儿情绪的生动写照,通过小兔子的形像表达了这个年龄段幼儿所面临的各种各样的情绪情境。画面精致美观,色彩非常具有感染性。生动的烘托了主题。也告诉家长不要忽略及小防抓取,学路网提供内容。  24、宁愿事前检查,不可事后返工。第五名:性玩具市场这是一个集神秘、隐讳、诱惑于一身的行业。多年来,它给人的第一印象,是街头巷尾“成人用品”、“两性保健”字样的招牌。逼仄狭窄的店面、性感裸露的海报、深夜街角的红灯,都给这个行业打下了“防抓取,学路网提供内容。  25、原始记录要可靠,检测分析才有效。银幕上,成龙是个威风的大哥,他行侠仗义、为朋友甘愿两肋插刀。成龙也是备受娱乐圈宠爱,成龙大哥善于和女星咬耳朵在娱乐圈很出名的,而每次都有娱记现场拍下了这个历史性的镜头。成龙大哥从艺多年,他的风流情史也防抓取,学路网提供内容。  26、全员参与,持续改善;遵守法规,造福社会。大家好,我是营养师吴娜。红薯也叫地瓜,地瓜叶这些年越来越受到大家的喜爱,不仅是因为它口感好,同时也是因为它比一般的蔬菜更健康。为什么这么说呢,大家都应该知道它生长过程中几乎不需要杀虫处理,所以没有农药防抓取,学路网提供内容。  27、生产没有质量的产品,等于制造无用的垃圾。谢谢邀请,水泵在农村的日常生活中是经常遇到的。特别潜水泵,故障率比较高,如果坏了,就要进行测量,水泵有三相和单相的,一、三相电机的水泵烧坏了,用万用表的1欧挡测量(因为电机电阻很小)分别测量ABC相,防抓取,学路网提供内容。  28、良好的销售是打开市场的金钥匙。我也是,二个月前买了一只不到二个月的小比熊,现在四个多月了,活泼可爱,如今我需要经常去外地办事带不了它,想把它寄养或放宠物店感觉都没有自己带着放心,若能遇到比自己还喜欢爱护小动物的主人送给她是最好的了防抓取,学路网提供内容。  29、整顿:必需品分区放置,明确标识,方便取用。谢邀!毋庸置疑,这是有关系的,而且关系很大。首先,女性排卵与月经的关系是这样的,女性的排卵是受脑下垂体和卵巢的内分泌激素的影响而呈现周期性变化,两者的周期长短是一致的,都是每个月1个周期,而排卵发生在防抓取,学路网提供内容。  30、营销的重点不是营销产品,而是营销自己。很多烟民不是不想戒烟,而是戒烟后的“身体不适”让自己难以忍受,于是戒烟失败,那么戒烟后,身体会出现哪些不适呢?戒烟的过程中,会出现以下几种不适症状:一、出现口渴这是戒烟后常见的现象,这时就需要大量喝水防抓取,学路网提供内容。  31、重视合同,确保质量:准时交付,严守承诺。做面包一般需要烤箱,面包机,烤盘,油刷,还有下面的一些要用到的材料材料:高筋面粉300克/干酵粉6克/砂糖15克/盐5克/鸡蛋45克/牛奶150克/黄油9克/上光用蛋液少许。做法:1.在容器里放入牛奶防抓取,学路网提供内容。  32、不收不良品,不做不良品,不出不良品。朋友,老上海滩黑帮头子杜月笙由于有哪样大的财力吃遍美食,我现在介绍杜月笙在饮食吃饭方面情况。张卷福曾给杜月笙当过厨师长,是上世纪20年代上海知名酒店总厨,因其超高技艺有幸得到当时上海滩知名人物桂月笙赏防抓取,学路网提供内容。  33、追求客户满意,是你我的责任。1.盐放入清水中溶化。2.将溶化好的盐水倒入面粉中。3.再拌成絮状。4.然后揉成团饧10分钟。5.再次揉成光滑的面团盖上保鲜膜饧30分钟。6.30分钟后搓成长条。7.再分成10个小剂子。8.再把它搓成防抓取,学路网提供内容。  34、以优质服务赢得客户满意。蟹妖!一方面是三人成虎的传言:很补另一方面是好奇心!在很多人认识中,毛鸡蛋是一个可怕的存在,很多热人都会问,这毛鸡蛋到底能不能吃?吃了它真有营养吗?今天我们班不妨来看看这道奇葩的美食!许多人相信毛鸡蛋防抓取,学路网提供内容。  35、市场是海,企业是船;质量是帆,人是舵手。涂磊有句话说得好:社会资源的合理分配就是高的配矮的,美得配丑的。身高并不能说明一切,一个人的评判标准事多方面的,女生喜欢人高马大的是因为看上去能给他们安全感,可是现实社会确实如此吗?我看不一定,很多男防抓取,学路网提供内容。  36、实施成果要展现,持之以恒是关键。谢邀。喜欢请关注我的头条号,谢谢哦!使用刷子作毛发之刷理,包括刷去全只身上的死毛及毛结,但要根据各种不同的毛质使用不同的刷子,长毛犬及软毛犬较宜用毛刷,因为不会使它们的毛折断。鬃毛刷分为马鬃毛刷(啡色防抓取,学路网提供内容。  37、品质你我都做好,顾客留住不会跑。估计很多人不太清楚这件事的来龙去脉,我们先来说一下事件本身:这件事最早爆出的是微博实名认证的@北京裕仁律师事务所发布微博称,已向中国支付清算协会实名举报,美团“代收付款”业务涉嫌无证非法经营。据了解,防抓取,学路网提供内容。  38、产品质量无缺陷,顾客服务无抱怨。据网传9月12日是苹果秋季发布会的日子,在这一天会正式发布三款新iPhone,其中包含iPhone7s、iPhone7sPlus以及iPhone8。而iPhone7s完完全全就是iPhone7的升级版防抓取,学路网提供内容。  39、素养:养成良好习惯,提高整体素质。看一下实时票房,《战狼2》今天当之无愧1亿多票房霸榜。有观众在网上称第一时间就去看了首映,刚开始只是被剧情吸引了,在观看过程还感觉有点夸张,但当看到导弹从军舰发射的那一刻,整个人都被点燃了。而当看到吴防抓取,学路网提供内容。  40、我们的策略是以质量取胜!华晨宝马与进口宝马有哪些区别?一、进口宝马是原产德国、美国或者阿联酋等地的。华晨是中国组装的。发动机变速箱等重要部分都是进口的,但是车身这些小零配件就是国内的,为了节约成本。质量和工艺上当然也就有差别防抓取,学路网提供内容。  霸气销售团队口号(3)台湾新版“国文课纲”将“国文科必读古文”由20篇降为10或15篇,即减少中国作家撰写的古文,并将日据时期由日本汉学家撰写的文言文定为必修。这一动向,使我当即联想到当年日本在占领台湾后的殖民统治。政治“防抓取,学路网提供内容。  41、品质检验严格做,优良品质有把握。第一点,虽然现在手机市场已经竞争到白热化了,,但是还没有到大肆吞并,合并的地步,即使一些看起来没有希望的企业(泛指)也还在挣扎着,不愿服输。所以不到一定程度不会有太大的收购。第二点,你可以看一下华为的防抓取,学路网提供内容。  42、以持续改进寻求企业发展。  43、服务只有起点,满意没有终点。  44、产品严格检验,质量自然更好。  45、检验测试坚持做,一点问题不放过。  46、我们的宣言:不做不良品。  47、以一流品质获取市场信任。  48、有一分耕耘,就有一分收获。  49、强化竞争意识,营造团队精神。  50、不严格把关,难出优质产品。  51、顾客满意是我们永远不变的宗旨。提供一流的服务,让顾客完全满意。  52、做无差错能手,向零缺陷迈进。  53、投入多一点,方法好一点,绩效自然高一点。  54、抓紧每一道工序,做好每一件产品。  55、创新突破稳定品质,落实管理提高效率。  56、产业竞争靠产品,产品竞争靠品质。  57、培养优质素养,提高团队力量。  58、创新是根本,质量是生命,务实是宗旨,效益是目标。  59、市场竞争不同情弱者,不创新突破只有出局。  60、贯彻ISO系列标准,树立企业新形象。  61、首件检验不可免,制程稳定无错误。  62、顾客反馈勤分析,品质改善有主意。  63、一人疏忽百人忙,做好检验更顺畅。  64、没有措施的管理是空谈,没有计划的工作是空洞。  65、眼到、手到、心到,检测环节不可少。  66、市场是企业的方向,质量是企业的生命。  67、适应市场,满足市场,创造市场。  68、留意多一点,问题少一点。  69、严谨思考,严格操作,严格检查,严肃验证。  70、以卓越管理树立企业品牌。
请大家帮我想一个霸气十足的销售团队的展示口号问:我们是做房地产销售的,下个月有月会,要团队展示,可是口号我还没有想好,...答:我们吼一吼,行业抖三抖!霸气的销售房产团队口号有哪些?答:公司有我,无所不能,(团队名称),永争第一!开拓市场,有我最强,(团队名称),我为单狂!巅峰之队,舍我其谁;纵箭出击,谁与匹敌,(团队名称)奋力冲刺!吼一吼,业绩抖三抖!(团队名称),加油!成功决不容易,还要加倍努力!不吃饭、不...帮忙写个销售房产团队口号霸气一点的!谢谢问:在线等,求大神,霸气一点的口号,最好末尾带上三千越甲可吞吴,前面要...答:现在不卖(4声)房,何时才买(3声)房!现在不买(3声)房,何时才卖(4声)房!此口号前后同音不同字,一语道出卖房人的辛酸苦楚,无疑激发了卖房人内心最原始的冲动!不怕不卖房!就怕不买房,自己不卖哪来的钱去买去卖!!况且该口号简单易...
本文相关:
- Copyright & 2018 www.xue63.com All Rights Reserved天火流星的博客
https://blog.csdn.net/
https://static-blog.csdn.net/images/logo.gif
https://blog.csdn.net/CN_mengxin
https://blog.csdn.net/
https://blog.csdn.net/CN_mengxin/article/details/
https://blog.csdn.net/CN_mengxin/article/details/
CN_mengxin
首先,接口使用cxf编写接口,测试工具使用SoapUI 5.2.1
安装之后是这样的图标:
测试操作步骤如下:
(1)首先找到cxf-webservice.xml配置信息中地址,在浏览器中出入:
&jaxws:endpoint id="ssg" implementor="cn.exchange.cxf.DataExchangeWebServiceImpl"
address="http://127.0.0.1:8080/ssg"&
&/jaxws:endpoint&
(2)使用soapUI测试接口:
注意:在测试之前,要先开启接口项目
①在接口项目开启之后,打开工具soapUi,新建(file→create empty project),如下图所示:
②右击工程project——add
wsdl,如下图所示:
打开如下图的页面:
③然后进入如下页面:(修改:应该双击”request1”)
双击”request1”出现如下的窗口:
④在”?”号处输入相关的参数,点击运行,如果右侧空白没有出现错误的信息,说明接口方法可以使用
测试失败,如下所示:(对于不同的项目,可能提示信息有所不同,要视情况而定,这里不是绝对的结果)
测试成功,如下图:(对于不同的项目,可能提示信息有所不同,要视情况而定,这里不是绝对的结果)
原文地址:
作者:CN_mengxin 发表于
https://blog.csdn.net/CN_mengxin/article/details/
https://blog.csdn.net/CN_mengxin/article/details/
https://blog.csdn.net/CN_mengxin/article/details/
CN_mengxin
1:入门级使用PowerDesigner软件创建数据库(直接上图怎么创建,其他的概念知识可自行学习)
我的PowerDesigner版本是16.5的,如若版本不一样,请自行参考学习即可。(打开软件即是此页面,可选择Create Model,也可以选择Do& Not& Show page Again,自行在打开软件后创建也可以!完全看个人的喜好,在此我在后面的学习中不在显示此页面。)
2:首先创建概念数据模型,如图所示(后面介绍一些比如物理数据模型等等,由于此软件全部是英文的,所以作为一个chinese不是很懂的,耐心的多使用几次就好了。)
请自行脑补
概念模型(CDM Conceptual Data Model)
物理模型(PDM,Physical Data Model)
面向对象的模型(OOM Objcet Oriented Model)
业务模型(BPM Business Process Model)
3:点击上面的ok,即可出现下图左边的概念模型1,自己起得概念模型的名字,使用最多的就是如图所示的那两个Entity(实体),Relationship(关系)
4:选中右边框中Entity这个功能,即可出现下面这个方框,(需要注意的是书写name的时候,code自行补全,name可以是英文的也可以是中文的,但是code必须是英文的。)
5:General中的name和code填好后,就可以点击Attributes(属性)来设置name(名字),code(在数据库中的字段名),Data& Type(数据类型) ,length(数据类型的长度)
请自行脑补
Name: 实体名字一般为中文如论坛用户
Code: 实体代号,一般用英文如XXXUser
Comment:注释对此实体详细说明。
Code属性代号一般用英文UID DataType
Domain域表示属性取值范围如可以创建10个字符的地址域&
M:Mandatory强制属性,表示该属性必填。不能为空
P:Primary Identifer是否是主标识符,表示实体店唯一标识符
D:Displayed显示出来,默认全部勾选
(在此上图说明name和code的起名方法)
6:设置的主标识符可以在Identifiers(标识符)这个模块删除or添加主标识符。
7:创建好概念数据模型如图所示,但是创建好的字体很小,读者可以按着ctrl键同时滑动鼠标的可滑动按钮即可放大缩写字体,同时也可以看到主标识符有一个*号的标志,同时也显示出来了,name,Data type和length这些可见的属性
8:同理创建一个班级的实体(需要特别注意的是,点击完右边功能的按钮后需要点击鼠标指针状态的按钮或者右击鼠标即可,不然很容易乱操作,这点注意一下就可以了),然后使用Relationship(关系)这个按钮可以连接学生和班级之间的关系,发生一对多(班级对学生)或者多对一(学生对班级)的关系。如图所示
(需要注意的是点击Relationship这个按钮,就把班级和学生联系起来了,就是一条线,然后双击这条线进行编辑,在General这块起name和code)
(上面的name和code起好后就可以在Cardinalities这块查看班级和学生的关系,可以看到班级的一端是一条线,学生的一端是三条,代表班级对学生是一对多的关系即one对many的关系,点击应用,然后确定即可)
9:一对多和多对一练习完还有多对多的练习,如下图操作所示(当你操作几遍之后发现自己已经非常熟练的使用此工具,是不是感觉棒棒哒),老师实体和上面介绍的一样,自己将name,data type等等修改成自己需要的即可,满足项目开发需求即可。(comment是解释说明,自己可以写相关的介绍和说明)
(多对多需要注意的时自己可以手动点击按钮将关系调整称为多对多的关系many对many的关系,然后点击应用和确定即可)
综上即可完成最简单的学生,班级,教师这种概念数据模型的设计,需要考虑数据的类型和主标识码,是否为空。关系是一对一还是一对多还是多对多的关系,自己需要先规划好再设计,然后就ok了。
&上面是概念数据模型,下面介绍一下物理数据模型,以后经常使用的就是物理数据模型
&1:打开PowerDesigner,然后点击File–&New& Model然后选择如下图所示的物理数据模型
(物理数据模型的名字自己起,然后选择自己所使用的数据库即可)
(创建好主页面如图所示,但是右边的按钮和概念模型略有差别,物理模型最常用的三个是table(表),view(视图),reference(关系));
(鼠标先点击右边table这个按钮然后在新建的物理模型点一下,即可新建一个表,然后双击新建如下图所示,在General的name和code填上自己需要的,点击应用即可),如下图:
&(然后点击Columns,如下图设置,灰常简单,需要注意的就是P(primary主键) , F (foreign key外键) , M(mandatory强制性的,代表不可为空)& 这三个,多看几遍理解其意思。)
(在此设置学号的自增(MYSQL里面的自增是这个AUTO_INCREMENT),班级编号同理,不作多啰嗦!)
(在下面的这个点上对号即可,就设置好了自增)
(全部完成后如下图所示。)
&(班级物理模型同理如下图所示创建即可)
(完成后如下图所示)
上面的设置好如上图所示,然后下面是关键的地方,点击右边按钮Reference这个按钮,因为是班级对学生是一对多的,所以鼠标从学生拉到班级如下图所示,学生表将发生变化,学生表里面增加了一行,这行是班级表的主键作为学生表的外键,将班级表和学生表联系起来。(仔细观察即可看到区别。)
(做完上面的操作,就可以双击中间的一条线,显示如下图,修改name和code即可)
(但是需要注意的是,修改完毕后显示的结果却如下图所示,并没有办法直接像概念模型那样,修改过后显示在中间的那条线上面,读者自己明白即可,自己也可以使用其他按钮自行添加注释也可。如Text这个按钮也可以添加,方便阅读)
(学习了多对一或者一对多的关系,接下来学习多对对的关系,同理自己建好老师表,这里不在叙述,记得老师编号自增,建好如下图所示)
(下面是多对多关系的关键,由于物理模型多对多的关系需要一个中间表来连接,如下图,只设置一个字段,主键,自增)
(点击应用,然后设置Columns,只添加一个字段)
(这是设置字段递增,前面已经叙述过好几次)
(设置好后如下图所示)(需要注意的是有箭头的一方是一,无箭头的一方是多,即一对多的多对一的关系需要搞清楚,学生也可以有很多老师,老师也可以有很多学生,所以学生和老师都可以是主体,即男/女猪脚);
&(可以看到添加关系以后学生和教师的关系表前后发生的变化)
(详细的知识或者和数据库相关的请自行脑补,这里直介绍如何很好的使用PowerDesigner这个工具)
&下面将介绍概念模型转为物理模型和物理模型转换为概念模型
&1:如下图所示先打开概念模型图,然后点击Tool,如下图所示
&(点开的页面如下所示,name和code我已经从概念模型1改成物理模型1了)
(完成后如下图所示,将自行打开修改的物理模型,需要注意的是这些表的数据类型已经自行改变了,而且中间表出现两个主键,即双主键,)
&(在这里脑补一下,由于我点来点去竟然把右侧的ToolBox点击没了,这里说一下,就是在view菜单的下面ToolBox,点击打开即可)
(由于我正在使用着电脑就自动关机了,我也是醉了,重新打开PowerDesigner如下图,自己右击open即可。)
&1:上面介绍了概念模型转物理模型,下面介绍一下物理模型转概念模型(如下图点击操作即可)
&(然后出现如下图所示界面,然后将物理修改为概念 ,点击应用确和认即可)
(点击确认后将自行打开如下图所示的页面,自己观察有何变化,如果转换为oracle的,数据类型会发生变化,比如Varchar2等等);
1:下面介绍一下物理模型导出SQL语句(点击Database按钮的Generate Database或者按ctrl+G)
(打开之后如图所示,修改好存在sql语句的位置和生成文件的名称即可)
(在Selection中选择需要导出的表,然后点击应用和确认即可)
(完成以后出现如下图所示,可以点击Edit或者close按钮)
(自此,就完成了导出sql语句,就可以到自己指定的位置查看导出的sql语句了;)
PowerDesigner在以后在项目开发过程中用来做需求分析和数据库的设计非常的方便和快捷
作者:CN_mengxin 发表于
https://blog.csdn.net/CN_mengxin/article/details/
https://blog.csdn.net/CN_mengxin/article/details/
https://blog.csdn.net/CN_mengxin/article/details/
CN_mengxin
&平时我们经常看到各种容器名称:Servlet容器、WEB容器、Java WEB容器、Java EE容器等,还有各种服务器名称:应用服务器、WEB服务器、WEB应用服务器、JavaWEB应用服务器、Java EE服务器等,这么多相似名称,难以弄明白它们之间的区别与联系。
&&&&&&&下面我们尝试从它们的定义中,区分它们,找出他们之间的联系,最后通过Apache、nginx、tomcat等举例说明容器以及服务器的联系。
1、容器与服务器的联系
&&&&&&&如上图,我们先来看下容器与服务器的联系:容器是位于应用程序/组件和服务器平台之间的接口集合,使得应用程序/组件可以方便部署到服务器上运行。
2、各种容器的区别/联系
2-1、容器(Containers)
&&&&&&&容器通常理解就是装东西的,我们这里说技术上的容器就是可以部署应用程序,并在上面运行的环境。
&&&&&&&一般来说,它处理屏蔽了服务器平台的复杂性,使得应用程序在它的基础上可以方便快捷的部署;而对于应用程序来说,它就是位于应用程序和平台之间的接口集合。
&&&&&&&容器管理组件的生命周期,向应用程序组件分派请求,并提供与上下文数据(如关于当前请求的信息)的接口。
&&&&&&&注意,容器技术虚拟化(如Docker
应用容器引擎)不在本文关注范围内。
2-2、Servlet容器
&&&&&&&Servlet:属于Java EE重要技术规范,构建了”接收请求–调用servlet程序处理–返回响应”基本模型。
&&&&&&&Servlet程序:Java提供了开发Servlet程序的API,该API可以说Servlet容器的一部分,它对接应用程序与Servlet容器;
&&&&&&&Servlet容器:就是实现了Servlet技术规范的部署环境,它可以部署运行Servlet程序。
2-3、Java WEB容器
&&&&&&&WEB容器:可以部署多个WEB应用程序的环境。
&&&&&&&Java WEB容器:实现了Java EE规定的WEB应用技术规范的的部署环境。
&&&&&&&Java EE WEB应用技术规范:Servlet、JSP(JavaServer Pages)、Java WebSocket等。
&&&&&&&所以,完整的Java WEB容器包含Servlet容器。
2-4、Java EE容器
&&&&&&&Java EE容器:实现了Java EE技术规范的部署环境。
&&&&&&&Java EE技术规范:除了上面说的Servlet、JSP等Java EE WEB应用技术规范,还包括EJB(Enterprise JavaBeans)等许多技术规范。
&&&&&&&所以,完整的Java EE容器包含Java WEB容器(Servlet容器)、EJB容器等。
3、各种服务器的区别/联系
3-1、服务器(Server)
&&&&&&&服务器是提供计算服务的设备。由于服务器需要响应服务请求,并进行处理,因此一般来说服务器应具备承担服务并且保障服务的能力。
&&&&&&&简单来说,服务器是提供某些服务的设备。
3-2、应用服务器
&&&&&&&应用程序:是指为针对使用者的某种应用目的所编写的软件。
&&&&&&&应用服务器:就是运行应用程序,提供应用程序所实现服务的设备。
&&&&&&&通常来说,服务器端的应用程序实现各种业务逻辑,应用服务器通过各种协议把这些业务逻辑曝露给客户端的程序。它提供了访问商业逻辑的途径,以供客户端应用程序使用。应用服务器使用此业务逻辑就像调用对象的一个方法一样。
3-3、WEB服务器
&&&&&&&WEB:现广泛译作网络、互联网等技术领域。表现为三种形式,即超文本(hypertext)、超媒体(hypermedia)、超文本传输协议(HTTP)等。
&&&&&&&WEB服务器:一般指网站服务器,可以向浏览器等WEB客户端提供文档浏览、数据文件下载等WEB服务。
&&&&&&&简单来说,WEB服务器是提供网上信息浏览等WEB服务的设备。
3-4、WEB应用服务器
&&&&&&&上面我们把应用服务器和WEB服务器严格区分:应用服务器通过应用程序接口(通常是网络请求API)把业务逻辑暴露给客户端应用程序。而WEB服务器通过HTTP提供静态内容给浏览器等客户端。
&&&&&&&如果不严格区分,应用服务器包含WEB服务器,因为WEB服务器是WEB服务应用程序实现的。
&&&&&&&WEB应用服务器:结合应用服务器和WEB服务器,可以说,它是带应用服务器的Web服务器,接收HTTP请求后,既能返回页面等静态内容,又能处理业务逻辑返回数据。
3-5、Java EE服务器
&&&&&&&Java EE服务器是实现Java EE技术规范,并提供标准Java EE服务的应用程序服务器。
&&&&&&&Java EE服务器有时称为应用服务器,因为它们允许您向客户端提供应用数据,就像Web服务器向Web浏览器提供Web页面一样。
4、举例说明容器以及服务器的联系
4-1、Apache、Nginx、IIS
&&&&&&&Apache、Nginx、IIS是目前最主流的三个Web服务器。
&&&&&&&但是可以用它们来构建WEB应用服务器,通常它们发现一个请求是动态请求,就通过CGI、ISAPI、特殊管道等协议接口调用后面的应用服务器来协同处理请求。如Nginx通过fastCGI模块来调用ZendEngine执行PHP应用来处理PHP请求。
4-2、Tomcat、Jetty、WebLogic、Websphere、JBoss
&&&&&&&Tomcat、Jetty、WebLogic、Websphere、JBoss都是Java(EE) WEB应用服务器。
&&&&&&&拿最常用的Tomcat来说,Tomcat是Java Servlet,JavaServerPages,Java Expression Language和JavaWebSocket(Java EE)技术的开源实现。
&&&&&&&因为可以通过HTTP提供HTML页面等静态内容的请求访问,所以是一个WEB服务器;
&&&&&&&因为实现了Servlet规范,所以也是一个Servlet容器,可以运行Servlet程序;
&&&&&&&因为可以通过Servlet容器,调用Servlet处理动态请求,所以也是一个应用服务器;
&&&&&&&所以,可以说Tomcat是Java(EE) WEB应用服务器。
4-3、Nginx + Tomcat的WEB应用服务器(集群)
&&&&&&&一般在实际应用中,先是通过Nginx反向代理服务器接收请求,匹配分离动态/静态请求(动静分离),如果是静态请求,则转发到另外的Nginx WEB服务器上,返回静态内容;如果是动态请求,则转发到后面的Tomcat应用服务器,处理动态请求的业务逻辑。
作者:CN_mengxin 发表于
https://blog.csdn.net/CN_mengxin/article/details/
https://blog.csdn.net/CN_mengxin/article/details/
https://blog.csdn.net/CN_mengxin/article/details/
CN_mengxin
&平时我们经常看到各种容器名称:Servlet容器、WEB容器、Java WEB容器、Java EE容器等,还有各种服务器名称:应用服务器、WEB服务器、WEB应用服务器、JavaWEB应用服务器、Java EE服务器等,这么多相似名称,难以弄明白它们之间的区别与联系。
&&&&&&&下面我们尝试从它们的定义中,区分它们,找出他们之间的联系,最后通过Apache、nginx、tomcat等举例说明容器以及服务器的联系。
1、容器与服务器的联系
&&&&&&&如上图,我们先来看下容器与服务器的联系:容器是位于应用程序/组件和服务器平台之间的接口集合,使得应用程序/组件可以方便部署到服务器上运行。
2、各种容器的区别/联系
2-1、容器(Containers)
&&&&&&&容器通常理解就是装东西的,我们这里说技术上的容器就是可以部署应用程序,并在上面运行的环境。
&&&&&&&一般来说,它处理屏蔽了服务器平台的复杂性,使得应用程序在它的基础上可以方便快捷的部署;而对于应用程序来说,它就是位于应用程序和平台之间的接口集合。
&&&&&&&容器管理组件的生命周期,向应用程序组件分派请求,并提供与上下文数据(如关于当前请求的信息)的接口。
&&&&&&&注意,容器技术虚拟化(如Docker
应用容器引擎)不在本文关注范围内。
2-2、Servlet容器
&&&&&&&Servlet:属于Java EE重要技术规范,构建了”接收请求–调用servlet程序处理–返回响应”基本模型。
&&&&&&&Servlet程序:Java提供了开发Servlet程序的API,该API可以说Servlet容器的一部分,它对接应用程序与Servlet容器;
&&&&&&&Servlet容器:就是实现了Servlet技术规范的部署环境,它可以部署运行Servlet程序。
2-3、Java WEB容器
&&&&&&&WEB容器:可以部署多个WEB应用程序的环境。
&&&&&&&Java WEB容器:实现了Java EE规定的WEB应用技术规范的的部署环境。
&&&&&&&Java EE WEB应用技术规范:Servlet、JSP(JavaServer Pages)、Java WebSocket等。
&&&&&&&所以,完整的Java WEB容器包含Servlet容器。
2-4、Java EE容器
&&&&&&&Java EE容器:实现了Java EE技术规范的部署环境。
&&&&&&&Java EE技术规范:除了上面说的Servlet、JSP等Java EE WEB应用技术规范,还包括EJB(Enterprise JavaBeans)等许多技术规范。
&&&&&&&所以,完整的Java EE容器包含Java WEB容器(Servlet容器)、EJB容器等。
3、各种服务器的区别/联系
3-1、服务器(Server)
&&&&&&&服务器是提供计算服务的设备。由于服务器需要响应服务请求,并进行处理,因此一般来说服务器应具备承担服务并且保障服务的能力。
&&&&&&&简单来说,服务器是提供某些服务的设备。
3-2、应用服务器
&&&&&&&应用程序:是指为针对使用者的某种应用目的所编写的软件。
&&&&&&&应用服务器:就是运行应用程序,提供应用程序所实现服务的设备。
&&&&&&&通常来说,服务器端的应用程序实现各种业务逻辑,应用服务器通过各种协议把这些业务逻辑曝露给客户端的程序。它提供了访问商业逻辑的途径,以供客户端应用程序使用。应用服务器使用此业务逻辑就像调用对象的一个方法一样。
3-3、WEB服务器
&&&&&&&WEB:现广泛译作网络、互联网等技术领域。表现为三种形式,即超文本(hypertext)、超媒体(hypermedia)、超文本传输协议(HTTP)等。
&&&&&&&WEB服务器:一般指网站服务器,可以向浏览器等WEB客户端提供文档浏览、数据文件下载等WEB服务。
&&&&&&&简单来说,WEB服务器是提供网上信息浏览等WEB服务的设备。
3-4、WEB应用服务器
&&&&&&&上面我们把应用服务器和WEB服务器严格区分:应用服务器通过应用程序接口(通常是网络请求API)把业务逻辑暴露给客户端应用程序。而WEB服务器通过HTTP提供静态内容给浏览器等客户端。
&&&&&&&如果不严格区分,应用服务器包含WEB服务器,因为WEB服务器是WEB服务应用程序实现的。
&&&&&&&WEB应用服务器:结合应用服务器和WEB服务器,可以说,它是带应用服务器的Web服务器,接收HTTP请求后,既能返回页面等静态内容,又能处理业务逻辑返回数据。
3-5、Java EE服务器
&&&&&&&Java EE服务器是实现Java EE技术规范,并提供标准Java EE服务的应用程序服务器。
&&&&&&&Java EE服务器有时称为应用服务器,因为它们允许您向客户端提供应用数据,就像Web服务器向Web浏览器提供Web页面一样。
4、举例说明容器以及服务器的联系
4-1、Apache、Nginx、IIS
&&&&&&&Apache、Nginx、IIS是目前最主流的三个Web服务器。
&&&&&&&但是可以用它们来构建WEB应用服务器,通常它们发现一个请求是动态请求,就通过CGI、ISAPI、特殊管道等协议接口调用后面的应用服务器来协同处理请求。如Nginx通过fastCGI模块来调用ZendEngine执行PHP应用来处理PHP请求。
4-2、Tomcat、Jetty、WebLogic、Websphere、JBoss
&&&&&&&Tomcat、Jetty、WebLogic、Websphere、JBoss都是Java(EE) WEB应用服务器。
&&&&&&&拿最常用的Tomcat来说,Tomcat是Java Servlet,JavaServerPages,Java Expression Language和JavaWebSocket(Java EE)技术的开源实现。
&&&&&&&因为可以通过HTTP提供HTML页面等静态内容的请求访问,所以是一个WEB服务器;
&&&&&&&因为实现了Servlet规范,所以也是一个Servlet容器,可以运行Servlet程序;
&&&&&&&因为可以通过Servlet容器,调用Servlet处理动态请求,所以也是一个应用服务器;
&&&&&&&所以,可以说Tomcat是Java(EE) WEB应用服务器。
4-3、Nginx + Tomcat的WEB应用服务器(集群)
&&&&&&&一般在实际应用中,先是通过Nginx反向代理服务器接收请求,匹配分离动态/静态请求(动静分离),如果是静态请求,则转发到另外的Nginx WEB服务器上,返回静态内容;如果是动态请求,则转发到后面的Tomcat应用服务器,处理动态请求的业务逻辑。
作者:CN_mengxin 发表于
https://blog.csdn.net/CN_mengxin/article/details/
https://blog.csdn.net/CN_mengxin/article/details/
https://blog.csdn.net/CN_mengxin/article/details/
CN_mengxin
端口被占用
检查端口是否被占用
使用wmap自带的 test 80,可以查看是否被占用
或者程序里搜索cmd,或者win + r 进入命令窗口
我碰到的是被Microsoft-HTTPAPI/2.0占用了
发现WAMP的80端口被Microsoft-HTTPAPI/2.0占用了,服务无法正常启动,最初以为是IIS的问题,卸载IIS后问题依旧无法解决,后来发现是SQL Server Reporting Services(MSSQLSERVER)的问题,停用该项服务后,程序正常运行。
任务管理器
停止服务,改为是手动启动
其他解决方法
以下是看了几篇文章解决无法启动的问题,推荐下
WampServer安装遇到无法启动服务的解决办法(缺少VC++的组件)
wampServer 启动不了的解决方法(详细说明)
wampservice无法安装的处理方法
作者:CN_mengxin 发表于
https://blog.csdn.net/CN_mengxin/article/details/
https://blog.csdn.net/CN_mengxin/article/details/
https://blog.csdn.net/CN_mengxin/article/details/
CN_mengxin
使用Request里的Attribute值最简单的方法就是直接<span class="MathJax" id="MathJax-Element-55-Frame" tabindex="0" data-mathml="AttributeName&#x6216;&#x8005;&#x5B89;&#x5168;&#x4E00;&#x70B9;&#xFF1A;" role="presentation" style="position:">AttributeName或者安全一点:AttributeName或者安全一点:{AttributeName!”default Value”}
#1.取Application范围的对象
&& 1. &#if Application.myApplicationAttribute?exists& &
&& 2. & & &${Application.myApplicationAttribute} &&
&& 3. &/#if& &
或者 :&&${Application.myApplicationAttribute!”default value”} &&
2.取session范围的对象
&& 1. &#if Session.mySessionAttribute?exists& &
&& 2. & & &${Session.mySessionAttribute} &&
&& 3. &/#if& &
或者 : &&${Session.mySessionAttribute!”default value”} &&
3.取request范围的对象
&& 1. &#if Request.myRequestAttribute?exists& &
&& 2. & & & ${Request.myRequestAttribute} &&
&& 3. &/#if& &
或者 : &&${Request.myRequestAttribute!”default value”} &&
4.取request parameter范围的对象
&& 1. &#if Parameters.myParameter?exists& &
&& 2. & & &${Parameters.myParameter} &&
&& 3. &/#if& &
或者 :&${Parameters.myParameter!”default value”} &&
5.取context parameter范围的对象
&& 1. ${stack.findValue(‘#myContextParam’)} &
&request 对象直接对应 HttpServletResponse
例如 获取 当前网页地址: &${request.requestURL}
客户端IP地址: &<span class="MathJax" id="MathJax-Element-56-Frame" tabindex="0" data-mathml="{request.getRemoteAddr()}&#xA0;&#x6216;&#x8005;&#xA0;&" role="presentation" style="position:">{request.getRemoteAddr()}&或者&&{request.getRemoteAddr()}&或者&&{request.remoteAddr}
提交方式: &${request.method}
&Request: 用于获取Request对象中的attribute对象。
例如:${Request[“myRequestAttribute”]} 这样是直接在页面输出属性值。相当于request.getAtrribute(“myRequestAttribute”);
&&&&&&&&&如果要对这个值进行判断就必须使用如下格式:&#if Request[“myRequestAttribute”]=”edit”&
或者 :&${Request[“myRequestAttribute”]!”default value”} &&
Session:用于获取Session 对象中的attribute对象。
用法参照Request的用法。
Application:用于获取 Application(ServletContext)对象中的attribute对象。
用法参照Request的用法。
RequestParameters:用 于获取Request对象的parameter参数(浏览器端发送的请求数据)
例如:${RequestParameters[“myRequestAttribute”]}等同于 request.getParameter(“myRequestAttribute”);
Parameters:属性获取,依次从 RequestParameters、Request、Session、Application对象中获取对应属性/参数,一旦获取,则不再向下查找。
例如:${Parameters[“myRequestAttribute”]}
${Request[”a”]} &&
${RequestParameters[”a”]} &&
${Session&[”a”]} &&
${Application&[”a”]} &&
${JspTaglibs&[”a”]} &&
注意RequestParameters等内部对象时常不能获得所以要: &&
${RequestParameters?default({})[”_errors”]?default(”params”)} &&
${Request[”request”]?default(”request”)} &&
${Session[”session”]?default(”session”)} &&
${Application[”ctx”]?default(”ctx”)} &&
${RequestParameters?default({})?keys?size} &&
${Request?keys?first} &&
Freemarker可以直接取pageContext,requestAttribute,session,application中的数据,就是不能取requestP &
作者:CN_mengxin 发表于
https://blog.csdn.net/CN_mengxin/article/details/
https://blog.csdn.net/CN_mengxin/article/details/
https://blog.csdn.net/CN_mengxin/article/details/
CN_mengxin
记录下Java五大框架(Struts,Spring,Hibernate,Spring MVC,Mybatis)的学习笔记
五大框架:
MVC模式框架
控制层框架
数据持久层框架
Hibernate(重量级)
SSH开发模式
MyBatis(轻量级)
SSM开发模式
基于MVC设计模式的框架,每次请求都是一个类级别Action,都是一个Servlet
控制器类继承 com.opensymphony.xwork2.ActionSupport 类重写execute() 方法,请求到对应Action类时,前台属性会注入到Action类的成员属性中,对应成员属性的值,在jsp页面也可以使用Struts的标签库访问到
web.xml文件中配置 org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
拦截了所有的项目中的请求,进行对客户不同的请求行为的分发,分发给不同的控制器(action
javabean),返回装饰页面
Spring MVC
基于MVC设计模式的框架,类属Spring系列,可以很好的融合Spirng框架,不同于Struts每个类对应一个请求,它是方法级别的对应每个请求,更好的实现了 Resultful 风格
Spring MVC只有一个Servlet作为整个项目的请求的分发器,找到对应请求的类,方法对应的地址
强大的前台视图解析器:framework,更好的处理青苔数据
每个请求对应的方法,都可以设置注解,可以配置对应请求的多个地址信息,限定请求方式,请求的编码等,做更多样化处理。同时还可以根据注解配置,支持json数据自动传输,和接收json数据格式
Sping是一个轻量级的DI和AOP容器框架,DI:称作依赖注入(Dependency Injection),和控制反转一个概念,具体的讲,当一个角色需要另外一个角色协助的时候,在传统的程序设计中,通常有调用者来创建被调用者的实例。但是在spring中创建被调用者将不再有调用者完成,因此叫控制反转。创建被调用对象有Spring来完成,在容器实例化对象的时候主动的将被调用者(或者说它的依赖对象)注入给调用对象,因此又叫依赖注入。
AOP:Spring对面向切面编程提供了强有力的支持,通过它让我们将业务逻辑从应用服务(如事务管理)中分离出来,实现了高内聚开发,应用对象只关注业务逻辑,不再负责其它系统问题(如日志、事务等)。Spring支持用户自定义切面。
容器:Spring是个容器,因为它包含并且管理应用对象的生命周期和配置。如对象的创建、销毁、回调等。
框架:Spring作为一个框架,提供了一些基础功能,(如事务管理,持久层集成等),使开发人员更专注于开发应用逻辑。
Hibernate功能强大,数据库无关性好,O/R映射能力强, Hibernate对数据库结构提供了较为完整的封装,Hibernate的O/R Mapping实现了POJO 和数据库表之间的映射,以及SQL 的自动生成和执行
Hibernate的缺点就是学习门槛不低,要精通门槛更高,而且怎么设计O/R映射,在性能和对象模型之间如何权衡取得平衡,以及怎样用 好Hibernate方面需要你的经验和能力都很强才行,但是Hibernate现在已经是主流O/R Mapping框架,从文档的丰富性,产品的完善性,版本的开发速度都要强于Mybatis
Hibernate 缓存机制:一级缓存
Session级别缓存
SessionFactory级别缓存
Mybatis入门简单, 即学即用,提供了数据库查询的自动对象绑定功能,而且延续了很好的SQL使用经验,对于没有那么高的对象模型要求的项目来说,相当完美
简化了数据绑定代码,但是整个底层数据库查询实际还是要自己写的,工作量也比较大,而且不太容易适应快速数据 库修改。当系统属于二次开发,无法对数据库结构做到控制和修改,那iBATIS的灵活性将比Hibernate更适合。系统数据处理量巨大,性能要求极为 苛刻,这往往意味着我们必须通过经过高度优化的SQL语句(或存储过程)才能达到系统性能设计指标。在这种情况下iBATIS会有更好的可控性和表现。
【后续继续更新!】
参考文档:
Java 五大框架之间的对比
Java三大主流框架概述
作者:CN_mengxin 发表于
https://blog.csdn.net/CN_mengxin/article/details/
https://blog.csdn.net/CN_mengxin/article/details/
https://blog.csdn.net/CN_mengxin/article/details/
CN_mengxin
Spring 及其优点
大部分项目都少不了spring的身影,为什么大家对他如此青睐,而且对他的追捧丝毫没有减退之势呢
Spring是什么:
Spring是一个轻量级的DI和AOP容器框架。
说它轻量级有一大部分原因是相对与EJB的(虽然本人从没有接触过EJB的应用),重要的是,Spring是非侵入式的,基于spring开发的应用一般不依赖于spring的类。
DI:称作依赖注入(Dependency Injection),和控制反转一个概念,具体的讲,当一个角色需要另外一个角色协助的时候,在传统的程序设计中,通常有调用者来创建被调用者的实例。但是在spring中创建被调用者将不再有调用者完成,因此叫控制反转。创建被调用对象有Spring来完成,在容器实例化对象的时候主动的将被调用者(或者说它的依赖对象)注入给调用对象,因此又叫依赖注入。
AOP:Spring对面向切面编程提供了强有力的支持,通过它让我们将业务逻辑从应用服务(如事务管理)中分离出来,实现了高内聚开发,应用对象只关注业务逻辑,不再负责其它系统问题(如日志、事务等)。Spring支持用户自定义切面。
面向切面编程是面向对象编程的有力补充。面向对象编程将程序分成各个层次的对象,面向切面的程序将运行过程分解成各个切面。AOP是从运行程序的角度去考虑程序的结构,提取业务处理过程的切面,OOP是静态的抽象,AOP是动态的抽象,是对应用执行过程的步骤进行抽象,从而获得步骤之间的逻辑划分。
容器:Spring是个容器,因为它包含并且管理应用对象的生命周期和配置。如对象的创建、销毁、回调等。
框架:Spring作为一个框架,提供了一些基础功能,(如事务管理,持久层集成等),使开发人员更专注于开发应用逻辑。
看完了Spring是什么,再来看看Spring有哪些优点
1.使用Spring的IOC容器,将对象之间的依赖关系交给Spring,降低组件之间的耦合性,让我们更专注于应用逻辑
2.可以提供众多服务,事务管理,WS等。
3.AOP的很好支持,方便面向切面编程。
4.对主流的框架提供了很好的集成支持,如hibernate,Struts2,JPA等
5.Spring DI机制降低了业务对象替换的复杂性。
6.Spring属于低侵入,代码污染极低。
7.Spring的高度可开放性,并不强制依赖于Spring,开发者可以自由选择Spring部分或全部
Struts2的优点
Struts2 是一个相当强大的Java Web开源框架,是一个基于POJO的Action的MVC Web框架。它基于当年的Webwork和XWork框架,继承其优点,同时做了相当的改进。Struts2现在在Java Web开发界的地位可以说是大红大紫,从开发人员的角度来分析,Struts2之所以能够如此的深入开发人员之心,与其优良的设计是分不开的。
1、Struts2基于MVC架构,框架结构清晰,开发流程一目了然,开发人员可以很好的掌控开发的过程。
我在项目开发过程中,一个具体的功能的开发流程是:拿到一个具体的功能需求文档和设计好的前台界面(在开发中我不负责设计页面),分析需要从前台传递哪些参数,确定参数的变量名称,在Action中设置相应的变量,这些参数在前台如何显示,并将页面上的一些控件适当使用Struts2提供的服务器端控件来代替,编写Action对应的方法来完成业务逻辑,最后,做一些与配置文件相关的设置。当然实际的开发比这个过程要复杂,涉及到数据库,验证,异常等处理。但是使用Struts2进行开发,你的关注点绝大部分是在如何实现业务逻辑上,开发过程十分清晰明了。
2、使用OGNL进行参数传递。
OGNL提供了在Struts2里访问各种作用域中的数据的简单方式,你可以方便的获取Request,Attribute,Application,Session,Parameters中的数据。大大简化了开发人员在获取这些数据时的代码量。
3、强大的拦截器
Struts2 的拦截器是一个Action级别的AOP,Struts2中的许多特性都是通过拦截器来实现的,例如异常处理,文件上传,验证等。拦截器是可配置与重用的,可以将一些通用的功能如:登录验证,权限验证等置于拦截器中以完成一些Java Web项目中比较通用的功能。在我实现的的一Web项目中,就是使用Struts2的拦截器来完成了系统中的权限验证功能。
4、易于测试
Struts2的Action都是简单的POJO,这样可以方便的对Struts2的Action编写测试用例,大大方便了Java Web项目的测试。
5、易于扩展的插件机制
在Struts2添加扩展是一件愉快而轻松的事情,只需要将所需要的Jar包放到WEB-INF/lib文件夹中,在struts.xml中作一些简单的设置就可以实现扩展。常用的Struts2的扩展可以通过这个链接找到:
Struts2已经把模块化作为了体系架构中的基本思想,可以通过三种方法来将应用程序模块化:
将配置信息拆分成多个文件
把自包含的应用模块创建为插件
创建新的框架特性,即将与特定应用无关的新功能组织成插件,以添加到多个应用中去。
7、全局结果与声明式异常
为应用程序添加全局的Result,和在配置文件中对异常进行处理,这样当处理过程中出现指定异常时,可以跳转到特定页面,这一功能十分实用。
Spring MVC和Struts2的比较的优点
我们用struts2时采用的传统的配置文件的方式,并没有使用传说中的0配置。spring3 mvc可以认为已经100%零配置了(除了配置spring mvc-servlet.xml外)。
Spring MVC和Struts2的区别:
机制:spring mvc的入口是servlet,而struts2是filter(这里要指出,filter和servlet是不同的。以前认为filter是 servlet的一种特殊),这样就导致了二者的机制不同,这里就牵涉到servlet和filter的区别了。
性能:spring会稍微比struts快。spring mvc是基于方法的设计,而sturts是基于类,每次发一次请求都会实例一个action,每个action都会被注入属性,而spring基于方法,粒度更细,但要小心把握像在servlet控制数据一样。spring3 mvc是方法级别的拦截,拦截到方法后根据参数上的注解,把request数据注入进去,在spring3 mvc中,一个方法对应一个request上下文。而struts2框架是类级别的拦截,每次来了请求就创建一个Action,然后调用setter getter方法把request中的数据注入;struts2实际上是通过setter getter方法与request打交道的;struts2中,一个Action对象对应一个request上下文。
参数传递:struts是在接受参数的时候,可以用属性来接受参数,这就说明参数是让多个方法共享的。
设计思想上:struts更加符合oop的编程思想, spring就比较谨慎,在servlet上扩展。
intercepter的实现机制:struts有以自己的interceptor机制,spring mvc用的是独立的AOP方式。这样导致struts的配置文件量还是比spring mvc大,虽然struts的配置能继承,所以我觉得论使用上来讲,spring mvc使用更加简洁,开发效率Spring MVC确实比struts2高。spring mvc是方法级别的拦截,一个方法对应一个request上下文,而方法同时又跟一个url对应,所以说从架构本身上spring3 mvc就容易实现restful url。struts2是类级别的拦截,一个类对应一个request上下文;实现restful url要费劲,因为struts2 action的一个方法可以对应一个url;而其类属性却被所有方法共享,这也就无法用注解或其他方式标识其所属方法了。spring3 mvc的方法之间基本上独立的,独享request response数据,请求数据通过参数获取,处理结果通过ModelMap交回给框架方法之间不共享变量,而struts2搞的就比较乱,虽然方法之间也是独立的,但其所有Action变量是共享的,这不会影响程序运行,却给我们编码,读程序时带来麻烦。
另外,spring3 mvc的验证也是一个亮点,支持JSR303,处理ajax的请求更是方便,只需一个注解@ResponseBody ,然后直接返回响应文本即可。送上一段代码:
[java] view plain copy
在CODE上查看代码片派生到我的代码片
@RequestMapping(value=“/whitelists”)
public String index(ModelMap map) {
Account account = accountManager.getByDigitId(SecurityContextHolder.get().getDigitId());
List groupList = groupManager.findAllGroup(account.getId());
map.put(“account”, account);
map.put(“groupList”, groupList);
return “/group/group-index”;
@RequestMapping(value=“/whitelist/{whiteListId}/del”)
@ResponseBody
public String delete(@PathVariable Integer whiteListId) {
whiteListManager.deleteWhiteList(whiteListId);
return “success”;
}123456789101112131415
struts1与struts2本质区别
1 在Action实现类方面的对比:Struts 1要求Action类继续一个抽象基类;Struts 1的一个具体问题是使用抽象类编程而不是接口。Struts 2 Action类可以实现一个Action接口,也可以实现其他接口,使可选和定制的服务成为可能。Struts 2提供一个ActionSupport基类去实现常用的接口。即使Action接口不是必须实现的,只有一个包含execute方法的POJO类都可以用 作Struts 2的Action。
2 线程模式方面的对比:Struts 1 Action是单例模式并且必须是线程安全的,因为仅有Action的一个实例来处理所有的请求。单例策略限制了Struts 1 Action能做的事,并且要在开发时非凡小心。Action资源必须是线程安全的或同步的;Struts 2 Action对象为每一个请求产生一个实例,因此没有线程安全问题。
3 Servlet依靠方面的对比:Struts 1 Action依靠于Servlet API,因为Struts 1 Action的execute方法中有HttpServletRequest和HttpServletResponse方法。Struts 2 Action不再依靠于Serzvlet API,从而答应Action脱离Web容器运行,从而降低了测试Action的难度。 当然,假如Action需要直接访问HttpServletRequest和HttpServletResponse参数,Struts 2 Action仍然可以访问它们。但是,大部分时候,Action都无需直接访问HttpServetRequest和 HttpServletResponse,从而给开发者更多灵活的选择。
4 可测性方面的对比:测试Struts 1 Action的一个主要问题是execute方法依靠于Servlet API,这使得Action的测试要依靠于Web容器。为了脱离Web容器测试Struts 1的Action,必须借助于第三方扩展:Struts TestCase,该扩展下包含了系列的Mock对象(模拟了HttpServetRequest和HttpServletResponse对象),从而 可以脱离Web容器测试Struts 1的Action类。Struts 2 Action可以通过初始化、设置属性、调用方法来测试。
5 封装请求参数的对比:Struts 1使用ActionForm对象封装用户的请求参数,所有的ActionForm必须继续一个基类:ActionForm。普通的JavaBean不能用 作ActionForm,因此,开发者必须创建大量的ActionForm类封装用户请求参数。虽然Struts 1提供了动态ActionForm来简化ActionForm的开发,但依然需要在配置文件中定义ActionForm;Struts 2直接使用Action属性来封装用户请求属性,避免了开发者需要大量开发ActionForm类的烦琐,实际上,这些属性还可以是包含子属性的Rich 对象类型。假如开发者依然怀念Struts 1 ActionForm的模式,Struts 2提供了ModelDriven模式,可以让开发者使用单独的Model对象来封装用户请求参数,但该Model对象无需继续任何Struts 2基类,是一个POJO,从而降低了代码污染。
6 表达式语言方面的对比:Struts 1整合了JSTL,因此可以使用JSTL表达式语言。这种表达式语言有基本对象图遍历,但在对集合和索引属性的支持上则功能不强;Struts 2可以使用JSTL,但它整合了一种更强大和灵活的表达式语言:OGNL(Object Graph Notation Language),因此,Struts 2下的表达式语言功能更加强大。
7 绑定值到视图的对比:Struts 1使用标准JSP机制把对象绑定到视图页面;Struts 2使用“ValueStack”技术,使标签库能够访问值,而不需要把对象和视图页面绑定在一起。
8 类型转换的对比:Struts 1 ActionForm 属性通常都是String类型。Struts 1使用Commons-Beanutils进行类型转换,每个类一个转换器,转换器是不可配置的;Struts 2使用OGNL进行类型转换,支持基本数据类型和常用对象之间的转换。
9 数据校验的对比:Struts 1支持在ActionForm重写validate方法中手动校验,或者通过整合Commons alidator框架来完成数据校验。Struts 2支持通过重写validate方法进行校验,也支持整合XWork校验框架进行校验。
10 Action执行控制的对比:Struts 1支持每一个模块对应一个请求处理(即生命周期的概念),但是模块中的所有Action必须共享相同的生命周期。Struts 2支持通过拦截器堆栈(Interceptor Stacks)为每一个Action创建不同的生命周期。开发者可以根据需要创建相应堆栈,从而和不同的Action一起使用。
Hibernate优点
(1) 对象/关系数据库映射(ORM)
它使用时只需要操纵对象,使开发更对象化,抛弃了数据库中心的思想,完全的面向对象思想
(2) 透明持久化(persistent)
带有持久化状态的、具有业务功能的单线程对象,此对象生存期很短。这些对象可能是普通的JavaBeans/POJO,这个对象没有实现第三方框架 或者接口,唯一特殊的是他们正与(仅仅一个)Session相关联。一旦这个Session被关闭,这些对象就会脱离持久化状态,这样就可被应用程序的任 何层自由使用。(例如,用作跟表示层打交道的数据传输对象。)
(3) 事务Transaction(org.hibernate.Transaction)
应用程序用来指定原子操作单元范围的对象,它是单线程的,生命周期很短。它通过抽象将应用从底层具体的JDBC、JTA以及CORBA事务隔离 开。某些情况下,一个Session之内可能包含多个Transaction对象。尽管是否使用该对象是可选的,但无论是使用底层的API还是使用 Transaction对象,事务边界的开启与关闭是必不可少的。
(4) 它没有侵入性,即所谓的轻量级框架
(5) 移植性会很好
(6) 缓存机制,提供一级缓存和二级缓存
(7) 简洁的HQL编程
Hibernate缺点
(1) Hibernate在批量数据处理时有弱势
(2) 针对单一对象简单的增删查改,适合于Hibernate,而对于批量的修改,删除,不适合用Hibernate,这也是OR框架的弱点;要使用数据库的特定优化机制的时候,不适合用Hibernate
Hibernate和iBATIS 优缺点比较
(注意:iBATIS 是MyBATIS的前生,也就是1.0版本)
Hibernate的特点:
Hibernate功能强大,数据库无关性好,O/R映射能力强, Hibernate对数据库结构提供了较为完整的封装,Hibernate的O/R Mapping实现了POJO 和数据库表之间的映射,以及SQL 的自动生成和执行。程序员往往只需定义好了POJO 到数据库表的映射关系,即可通过Hibernate 提供的方法完成持久层操作。程序员甚至不需要对SQL 的熟练掌握, Hibernate/OJB 会根据制定的存储逻辑,自动生成对应的SQL 并调用JDBC 接口加以执行。Hibernate的缺点就是学习门槛不低,要精通门槛更高,而且怎么设计O/R映射,在性能和对象模型之间如何权衡取得平衡,以及怎样用 好Hibernate方面需要你的经验和能力都很强才行,但是Hibernate现在已经是主流O/R Mapping框架,从文档的丰富性,产品的完善性,版本的开发速度都要强于iBATIS。
iBATIS的特点:
iBATIS入门简单, 即学即用,提供了数据库查询的自动对象绑定功能,而且延续了很好的SQL使用经验,对于没有那么高的对象模型要求的项目来说,相当完美。iBATIS的缺 点就是框架还是比较简陋,功能尚有缺失,虽然简化了数据绑定代码,但是整个底层数据库查询实际还是要自己写的,工作量也比较大,而且不太容易适应快速数据 库修改。当系统属于二次开发,无法对数据库结构做到控制和修改,那iBATIS的灵活性将比Hibernate更适合。系统数据处理量巨大,性能要求极为 苛刻,这往往意味着我们必须通过经过高度优化的SQL语句(或存储过程)才能达到系统性能设计指标。在这种情况下iBATIS会有更好的可控性和表现。
对于实际的开发进行的比较:
1. iBATIS需要手写sql语句,也可以生成一部分,Hibernate则基本上可以自动生成,偶尔会写一些Hql。同样的需求,iBATIS的工作量比 Hibernate要大很多。类似的,如果涉及到数据库字段的修改,Hibernate修改的地方很少,而iBATIS要把那些sql mapping的地方一一修改。
2. iBatis 可以进行细粒度的优化
比 如说我有一个表,这个表有几个或者几十个字段,我需要更新其中的一个字段,iBatis 很简单,执行一个sql UPDATE TABLE_A SET column_1=#column_1# WHERE id=#id# 但是用 Hibernate 的话就比较麻烦了,缺省的情况下 hibernate 会更新所有字段。 当然我记得 hibernate 有一个选项可以控制只保存修改过的字段,但是我不太确定这个功能的负面效果。
例 如:我需要列出一个表的部分内容,用 iBatis 的时候,这里面的好处是可以少从数据库读很多数据,节省流量SELECT ID, NAME FROM TABLE_WITH_A_LOT_OF_COLUMN WHERE …一般情况下Hibernate 会把所有的字段都选出来。比 如说有一个上面表有8个字段,其中有一两个比较大的字段,varchar(255)/text。上面的场景中我为什么要把他们也选出来呢?用 hibernate 的话,你又不能把这两个不需要的字段设置为lazy load,因为还有很多地方需要一次把整个 domain object 加载出来。这个时候就能显现出ibatis 的好处了。如果我需要更新一条记录(一个对象),如果使用 hibernate,需要现把对象 select 出来,然后再做 update。这对数据库来说就是两条sql。而iBatis只需要一条update的sql就可以了。减少一次与数据库的交互,对于性能的提升是非常重 要。
3. 开发方面:
开发效率上,我觉得两者应该差不多。可维护性方面,我 觉得 iBatis 更好一些。因为 iBatis 的 sql 都保存到单独的文件中。而 Hibernate 在有些情况下可能会在 java 代码中保sql/hql。相对Hibernate“O/R”而言,iBATIS 是一种“Sql Mapping”的ORM实现。(iBatis 是将sql写在配置文件中的,而hibernate是自己生成的) 而iBATIS 的着力点,则在于POJO 与SQL之间的映射关系。也就是说,iBATIS并不会为程序员在运行期自动生成SQL 执行。具体的SQL 需要程序员编写,然后通过映射配置文件,将SQL所需的参数,以及返回的结果字段映射到指定POJO。使用iBATIS 提供的ORM机制,对业务逻辑实现人员而言,面对的是纯粹的Java对象,这一层与通过Hibernate 实现ORM 而言基本一致,而对于具体的数据操作,Hibernate会自动生成SQL 语句,而iBATIS 则要求开发者编写具体的SQL 语句。相对Hibernate而言,iBATIS 以SQL开发的工作量和数据库移植性上的让步,为系统设计提供了更大的自由空间。
4. 运行效率
在不考虑 cache 的情况下,iBatis 应该会比hibernate 快一些或者很多。
Spring 框架的优缺点
Spring的优势不言而喻:
  1. 提供了一种管理对象的方法,可以把中间层对象有效地组织起来。一个完美的框架“黏合剂”。
  2. 采用了分层结构,可以增量引入到项目中。
  3. 有利于面向接口编程习惯的养成。
  4. 目的之一是为了写出易于测试的代码。
  5. 非侵入性,应用程序对Spring API的依赖可以减至最小限度。
  6. 一致的数据访问介面。
  6. 一个轻量级的架构解决方案
缺点也显而易见
1. 中断了应用程序的逻辑,使代码变得不完整,不直观。此时单从Source无法完全把握应用的所有行为。
 2. 将原本应该代码化的逻辑配置化,增加了出错的机会以及额外的负担。
3. 时光倒退,失去了IDE的支持。在目前IDE功能日益强大的时代,以往代码重构等让人头痛的举动越来越容易。而且IDE还提供了诸多强大的辅助功能,使得 编程的门槛降低很多。通常来说,维护代码要比维护配置文件,或者配置文件+代码的混合体要容易的多。
 4. 调试阶段不直观,后期的bug对应阶段,不容易判断问题所在。
经典架构S(Struts)SH的优缺点
Struts、Spring、Hibernate能流行这么多年经久不衰,自然有它的道理。J2EE最先出现的时候,我们一般是采用 JSP+Servlet+JavaBean+EJB的架构,尤其是1998年~2000年这段时间,互联网的泡沫从兴起到破裂,其波澜壮阔程度,丝毫不亚 于2008年开始的这次经济危机,在那个年代,是否掌握EJB开发技术将直接决定你的薪水能否翻一倍或者几倍。不过,Spring的作者Rod Johnson在2002年根据多年经验撰写了《Expert o-ne-on-One J2EE Design and Development》,其后又发表了著名的《Expert o-ne-on-one J2EE Development without EJB》一书,则彻底地改变了传统的J2EE一统天下的开发架构,基于Struts+Hibernate+Spring的J2EE架构也逐渐得到人们的认 可,甚至在大型的项目架构中也逐渐开始应用。下面我们分别说说Spring、Struts和Hibernate的优缺点。
Spring 是一个开源框架,是为了解决企业应用程序开发复杂性而创建的。框架的主要优势之一就是其分层架构,使得每个层之间和类与类之间的关系,由原来的强绑定与强 耦合转变为不绑定和松耦合,直接面向接口编程,把设计与实现相分离的原则发挥到极致,对于单元测试也产生了很深远的影响。在Spring出现之前,如果某 个模块没有完成,做单独模块的单元测试还是很困难的。Spring同时也是 J2EE 应用程序开发的集成框架,因为J2EE是讲究分层理念的,Spring使得J2EE每个层之间的模块职能更加清晰。
不过,对于大型项目的开发,Spring使得原来难以维护的类与类之间的强耦合关系,转变为更加难以维护的XML文件配置,这个工作量也是非常巨大 的,而且更容易出错。而且,随着每个应用 模块的升级,这些模块之间的版本,也不会是同步更新的,对于同一个公共组件,有的模块用的可能是1.0版本,而另 外一个功能模块用的可能是2.0版本,可怕的是1.0版本和2.0版本之间,可能还不兼容,Spring对于这些需求,就无能为力了。所以,有人说 Spring不适合大型项目开发,也是有一定道理的。最近Spring也加入了OSGI标准的实现,也是为了解决不同版本之间同时存在的这些问题。不过, 随着Spring加入的功能越来越多,Spring也就失去了轻量开源框架的特点,变得越来越笨重。
虽然Spring现在也支持了所谓的免配置,可以通过@Autowired标签自行绑定,还可以通过 设置自动绑定加载所有的Hibernate对象,但是如果这些上百个或者数十个中的任何一个Entity对象加载失败,则整个Spring服务就启动不起 来了,这与难于部署的EJB有啥区别呢?而且,令人可笑的是,由于使用了@Autowired标签,相当一部分开发人员不再面向接口编程了,对于 Class A的实例,美其名曰由Spring自行绑定,接口也好,实际实现类也好,就在Spring配置一下就可以了。而Spring最核心的就是面向接口编程和 IOC,没有了面向接口编程,用一个 A a=new A() 来实例化一个Class,有什么不可以呢?少写了一行代码,引入了一个重量级的Spring,究竟为啥使用Spring呢?
对于Hibernate的流行,则是由于开发人员和客户,对于Entity EJB(实体EJB)臃肿的身材及部署的困难,是在极度失望情绪下造成的。既然是轻量级解决方案,那么分布式就不是可选项,没有分布式,那么EJB就无用 武之地了。话又说回来了,Rod Johnson前些年就因为强调绝大部分企业应用是不需要分布式的,从而推出了自己轻量级的Spring解决方案。但是最近一年,随着云计算架构的兴起, 架构是否支持分布式,又是必选项了。技术架构的选型,就跟法国巴黎流行时装一样,今年流行短袖,明年流行下摆,真是典型的十年河东,十年河西。所以,像 SOA、云计算、SaaS、物联网这些大名词,不仅会给客户带来很大的困惑,同样也会给程序员、系统分析师、系统架构师、技术总监带来困惑。从肯定到否 定,再到自我否定,真是符合大自然螺旋式上升的发展规律。
而对于Struts,它一经推出,几乎打败了当时的所有竞争对手。Struts的伟大之处,在于它对网页数据的动态绑定。虽然数据绑定不是一个新名 词,微软在1991年推出Visual Basic1.0的时候,就创造性地发明了让VB程序员又爱又恨的数据绑定,但是对于Web 编程,Struts也还是把数据绑定首次应用到了Web编程上。它能够让人们用Set和Get的形式取得网页数据,而不是单一的黑盒式的 request.getParameter(),从而使得网页数据取值进入面向对象(OO)化时代。
Struts、Hibernate以及Spring本身都是制作精良的框架,但是对于自己产品和项目的应用,一经整合在一起,却不一定很适用。比如 说,对于数据库相关的MIS(管理信息系统)系统中,增加、修改、删除、查询功能是最基本、最常见、必不可少的。对于这些最基本的功能,不同的架构师,则 会做出不同的选择。有的架构师,选择了自动生成的理念,做一个代码自动生成器,设计好数据库表结构,单击一个脚本,或者用Eclipse插件的形式,做个 图形化生成界面,自动生成SSH框架,完成数据库的增加、修改、删除、查询操作。这么做的好处是数据库修改了,代码自动生成就可以了,使得程序员不用再维 护这些无聊的代码。不过缺陷也是致命的,一是随着Struts、Hibernate、Spring的升级,这个工具也不得不跟着升级,而做这个工具的程序 员,可能早就离开公司了,后续版本无法维护;二是如果有的业务逻辑跟这些生成的代码有交叉,数据库变更后,代码也无法再次生成了。三是公司的系统架构,则 被严重限制在SSH架构基础上,再也无法改变。有人会问:即使限制在这三种架构上,有何不好吗?假设有客户问,你的框架支持云计算吗?你总不能说”由于 Struts、Hibernate、Spring 不支持云计算架构,所以我也不支持”以此取得客户谅解吧。因此,依赖于第三方架构的产品体系架构,随着时间的推移,受到的限制会越来越大。
作者:CN_mengxin 发表于
https://blog.csdn.net/CN_mengxin/article/details/
https://blog.csdn.net/CN_mengxin/article/details/
https://blog.csdn.net/CN_mengxin/article/details/
CN_mengxin
(点击上方蓝字,快速关注我们)转自:刘韧(LiuRenNews),作者:刘韧本文首发于1997年《中国计算机报》雷军,1969 年 2 月 16 日出生于湖北省仙桃市;1991 年,毕业于武汉大学计算机系;1992 年,加入金山公司;1994 年,出任北京金山总经理;1998 年,任重组后的金山总经理。几个月前,雷军、王江民、鲍岳桥三人去西安参加一个会议,会场打出的条幅是“软件业巨 子汇聚西安”。当有记者采访雷军的时候,雷军说:“我算不上巨子,旁边两位才算得上巨 子。虽然,我内心不承认我程序比他们写得差距有多大,而且,我觉得我程序写得很好,但 我的程序员生涯毕竟是一个悲剧的结尾。我写过一些好程序,但是我真的是没有赶上好时光 ,在我写程序的时候,没有遇到一个好的市场人才或管理人才,在没有人带我的情况下,我 只好自己带自己。”“尽管我是国内最早一拨写杀病毒软件的,但是受了一点点压力,我就没有再去做杀病毒软 件。10年来,我做的很多产品都离成功只有一步之遥,与很多机会擦肩而过。当然,我也看 到很多优秀的程序员同样没有成功,成功的程序员毕竟只是极少数,十几个人而已,但中国 程序达到一流境界的绝不止十几个,有成百上千之多。”“特别是当某个成功的程序员其技术水平并不让你服气的时候,你更觉得不佩服,但最后还 是不得不承认自己就是不如人家,自己写程序可能比人家强,可是自己一定还有很多地方不 如人家。”金山重组,联想注资,求伯君提名,董事会通过雷军做总经理。雷军三年经理人生涯,被进 行了一次总肯定。但是,当雷军在1988年写下第一行程序的时候,他绝对不可能想到最终自 己要以软件管理者而不是程序留名中国计算机史,当年的雷军太想成为一名知名程序员了。&大二我就上街了走进大学的第一个晚上雷军就去上自习。“在我的印象中,像闻一多等很多名人都是在大学 成名的,我当时也想利用大学的机会证明我的优秀。”雷军每天早上七点钟去教室占座位, 总要坐在最好的位置上听课;礼拜六雷军喜欢看电影,但经常是自习到九十点钟看第二场; 上《数字逻辑》课,老师总是先问大家,如果没有一个人能回答上来,再让雷军站起来回答 ;雷军大一写的PASCAL程序,等他上大二的时候,这些作业都已经被编进大一教材里了。雷军有午睡的习惯,但当他看到有同学不睡午觉看书的时候,雷军怎么也睡不着了,他害怕 同学又多学了很多新的东西,而这些东西他都不会。雷军把午睡的习惯改掉了。“我特别害 怕落后,怕一旦落后,我就追不上,我不是一个善于逆境中生存的人。我会先把一个事情想 得非常透彻,目的是不让自己陷入逆境,我是首先让自己立于不败之地,然后再出发的人 。”为此,雷军两年修完了大学四年的课程。“这门课比较重要我上四分之一的课,那门课不太 重要,我上八分之一的课。计算机搞懂精髓以后,所有的东西都很简单。计算机不是一门理 论性很强的学科,强调的是实践。”大学里的老师想让雷军帮着做课题,就把自己机房的钥匙给了雷军,雷军最多的时候同时拥 有三个老师机房的钥匙。大一,雷军成绩全年级第一,但雷军很快发现大学并不比谁考试第一,所以,大二雷军就上 了武汉的电子一条街。当时雷军的形象是背个包在街上东逛逛西逛逛,包很沉、很大,里面 装满了资料和磁盘。那条街上的老板知道雷军很能干,都对他很客气,恨不得隔二十米就跟 他打招呼,请吃请喝。在街上认识王全国,被雷军认为是他生命旅途中最重要的事。当时王全国正在做一个加密软 件的界面,雷军在这之前正好写过一个加密软件的内核,他们很快决定一起来做。因为8月1 5日学校开学,所以,所有的工作必须在8月1日到8月15日内完成。雷军形容自己写软件是“直奔主题,一上来就干”,而王全国则会“先从外面看看,看看有 没有窍门”。“在外面看半天再去做其实也挺慢的,直奔主题走错方向也会很慢,两者结合 起来,不断修正,就是一个很好的合作。”夜晚,雷军和王全国躺在公司怎么睡都睡不舒服的沙发上,想的是“一定要写出所有机器都 在用的软件”,梦想未来有一天能拥有一家自己的公司。但当时雷军和王全国没有公司,不 能在软件上署公司的名字,当时街上正放映《神秘的黄玫瑰》,王全国就建议将软件署名“ 黄玫瑰”。使用计算机超过5年的人一定碰到过标有“Yellow Rose Software Workgroup” 字样的软件,比如那个著名的清理内存的共享软件RI,这些全是雷军他们写的。加密软件BITLOK做完后,王全国所在公司发给王全国50元加班费,王全国把这50元给了雷军 ,这是雷军写软件得到的第一笔报酬,雷军没有觉得它多,也没有觉得它少。雷军写的第二个商品化软件是和冯志宏合作的免疫90。因为当时没有同类软件可以作为参考 ,雷军觉得自己的思路可以自由发挥,不会受到定式的束缚。“我们做了一个病毒免疫程序 ,可以让程序免受病毒侵扰,如果染上病毒,该程序可以像抖落身上灰尘一样把病毒清除, 另外还做到了样本库升级和在英文环境下英文显示,在中文环境下中文显示。”免疫90售价 260元一套上市后卖得挺好。雷军接着开始考虑做防病毒卡,正当他做出样卡的时候,很快 华星防病毒卡上市了。“因为当时没有市场能力,很快我们就放弃了。我当时认为不是第一 个做出来的就没有市场,时隔这么多年,我才知道别人做出来了,并不意味着自己不能做。 我错过了这次机会。”有了在电子一条街“混”的经验,大四的时候,雷军和王全国等人办起了三色公司。“我经 常被他们从武大的晚自习上叫出来开会。我们晚上做开发,白天跑市场,在饭店里租了一个 房间,五六个人躺在一间房间里,实在躺不下,就起来干活。”雷军几个人都不懂怎么做生意,而且没有钱,是雷军卖了一台计算机赚了四五千元才使公司 开了张。这样干了四五个月,雷军觉得挺没劲的,他深深地感到了自己还不行。“我们自以 为有雄心伟略,对所有的权威都不屑一顾,街上老板的吹捧也助长了我们的虚荣心,弄得自 己不知道自己有多能干了。”除了感慨自己还很嫩以外,雷军的第二个感触是“空手套狼很难”。“用10万赚10万和用10 0万赚10万,结果是一样的,但是付出的艰辛绝对不一样。我觉得没有必要在低水平上做重 复的事情,从小做起很容易把很多宝贵的时间花在一些不必要的事情上。”“别人投钱进来有什么不好?干嘛非要营造4000元挣几千万的传奇例子呢?没有意义!在一 个正常的市场环境下,几千元怎么可能在短短的几年内赚到几千万甚至上亿?”停办三色公司的第二天,走在阳光明媚的武汉大学的樱花路上,“我觉得生活是如此的美好 ,真轻松啊!梦魇般的日子过去了,迎来的是新的生活。”我见到了求伯君1991年大学毕业,雷军闯进中关村结识的第一个大腕是周志农。1989年,当雷军看到周志农 写的《自然码》时候,觉得《自然码》是软件中的极品。雷军所在的圈子把《自然码》评为 1989年度最佳国产软件。当时周志农在开超想公司,雷军给周志农干的第一个活是把汉字的小字库放到RAM里面。周 志农感觉雷军干活干得比自己快,就邀请雷军加入超想公司,雷军认为超想和他们原来开的 三色公司一个样,不是他的理想,就没有参加。接着,雷军结识了苏启强,当时苏启强是用友的副总裁。用友软件需要加密,雷军就把从两 年前和王全国写的BITLOK 0.99升级到了BITLOK1.0。重写BITLOK 1.0的时候,雷军感到了自 己编程能力的提高。“平时不觉得,一对比才欣喜地感到了自己的进步。”这些“私活”全是雷军在研究所工作一天下班后干的,所以,一周雷军只有20个小时可自己 支配的时间。雷军的工作任务是按半小时来定的,当时雷军有一个笔记本记着每半小时干了 什么。“如果浪费了半小时时间,我就觉得很惭愧。后来我看到很多人不珍惜时间的时候, 我就觉得这样的人真没出息。时间是自己的,你到一个公司打工的时候,偷懒,老板没有看 见,就觉得自己又蒙了一下,玩猫和老鼠的游戏,真是没有必要。公司所付的那么一点钱, 就买下了你一个月的青春?学会的

我要回帖

更多关于 已破解的天火同人游戏 的文章

 

随机推荐