<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>SSL 证书 on 庞玉栋个人博客</title><link>https://pangyd.com/tags/ssl-%E8%AF%81%E4%B9%A6/</link><description>Recent content in SSL 证书 on 庞玉栋个人博客</description><generator>Hugo</generator><language>zh-cn</language><lastBuildDate>Sat, 19 Sep 2026 19:53:12 +0800</lastBuildDate><atom:link href="https://pangyd.com/tags/ssl-%E8%AF%81%E4%B9%A6/index.xml" rel="self" type="application/rss+xml"/><item><title>“留给人类阻止AI的时间不多了”</title><link>https://pangyd.com/post/radar-161/</link><pubDate>Sat, 19 Sep 2026 19:53:12 +0800</pubDate><guid>https://pangyd.com/post/radar-161/</guid><description>&lt;blockquote>
&lt;p>&lt;strong>原文&lt;/strong>：&lt;a href="https://www.qbitai.com/2026/09/492755.html">“留给人类阻止AI的时间不多了”&lt;/a>&lt;/p>
&lt;p>&lt;strong>作者&lt;/strong>：henry&lt;/p>
&lt;p>&lt;strong>来源&lt;/strong>：量子位（AI 媒体）&lt;/p>
&lt;/blockquote>
&lt;h2 id="正文">正文&lt;/h2>
&lt;p>AI有可能终结我们所有人&lt;/p>
&lt;p>henry 发自 凹非寺&lt;/p>
&lt;p>量子位 | 公众号 QbitAI&lt;/p>
&lt;p>“我坚信，AI有可能终结我们所有人，而留给我们阻止这一结局发生的时间，或许已经不多了。”&lt;/p>
&lt;p>说出这句话的，是不久前从Google DeepMind离职的AI安全研究员Bilal Chughtai。&lt;/p>
&lt;p>自2021年从剑桥大学数学专业毕业以后，Chughtai逐渐将研究重心转向AI，并于2022年初进入这一领域，关注安全、对齐和机制可解释性。&lt;/p>
&lt;p>此后的四年里，他一路从研究神经网络内部机制，到追踪模型欺骗、研究如何识别AI是否在“撒谎”，再到加入Google DeepMind继续做AGI安全与可解释性研究，几乎一直待在AI安全研究的一线。&lt;/p>
&lt;p>也正是在这四年间，他（和我们）亲眼见证了AI能力的飞速变化～&lt;/p>
&lt;p>在离职帖中，Chughtai回忆，2022年刚入行时，AI还只是个“几乎没什么用”的东西；而今年，它已经能攻克困扰人类上百年的数学难题，并开始不受控制，主动攻击Hugging Face系统。&lt;/p>
&lt;p>可以说，这份超越预期的能力进步，在带给Chughtai惊喜的同时，也成为了他离职谷歌，在推特上打出“我坚信，AI有可能杀死我们所有人”的理由。&lt;/p>
&lt;p>目前，这条帖子在X上已经获得超过80万次浏览，并引来彭博等媒体跟进报道。&lt;/p>
&lt;p>可以说，相比于Dario、奥特曼、马斯克等巨头掌舵者的风险表态，Chughtai这样的研发人员，让这场关于人类未来的宏大争论，落回了一个个具体的人身上。&lt;/p>
&lt;p>他们把时间、才华和对未来的期待，投入到一行行代码、一次次实验中，亲手推动AI走到今天。&lt;/p>
&lt;p>如今，这些离技术最近的人，开始在自己参与创造的未来面前感到不安。&lt;/p>
&lt;p>Chughtai并非孤例，面对AI的巨大潜力与失控风险，越来越多一线研发人员开始公开讲述自己的不安，以及继续留下或转身离开的理由。&lt;/p>
&lt;p>9月9日，研究员*Jacob Coxon发帖宣布从Anthropic离职，并直接点名两家前东家：&lt;/p>
&lt;p>OpenAI和Anthropic都没有负责任地行事。它们正一路冲向能够自我改进的超级智能，拿所有人的生命冒险。&lt;/p>
&lt;p>发布后，这条帖子迅速走红网络，截至目前已有1.71亿次浏览，不仅引来多家媒体报道，也得到了OpenAI、Anthropic乃至官方层面的回应。&lt;/p>
&lt;p>能掀起这么大的波澜，人们很容易以为，发声的是某位行业大佬。但事实上，Jacob今年才27岁，而这，甚至是他发出的第一条推文。&lt;/p>
&lt;p>1999年出生的Jacob，曾两次代表英国参加国际数学奥林匹克，分别在2016年和2017年获得银牌、铜牌。&lt;/p>
&lt;p>在剑桥大学完成数学学业后，他先后加入OpenAI和Anthropic，从事预训练研究。GPT-4o的贡献者名单中，就有他的名字。&lt;/p>
&lt;p>和许多投身AI的年轻研究员一样，Jacob曾努力让AI变得更强。如今，他却开始担心，人类会因此失去控制。&lt;/p>
&lt;p>在离职帖中，Jacob特别强调，行业内部一些人对AI可能毁灭人类的担忧是认真的。他们私下表达的恐惧，甚至比公开场合更加强烈。&lt;/p>
&lt;p>但意识到危险，并没有让这场竞赛慢下来。&lt;/p>
&lt;p>在他看来，OpenAI内部的许多人，还没有真正理解这项技术所牵涉的文明层面的风险；Anthropic更清楚其中的危险，却同样被竞争推着向前：如果自己不率先造出超级智能，就会有一家更不负责任的公司抢先做到。&lt;/p>
&lt;p>当每家公司都相信，只有自己赢了，未来才会更安全，继续加速就总能找到理由。&lt;/p>
&lt;p>于是，Jacob决定先让自己停下来，暂时离开前沿AI实验室。&lt;/p>
&lt;p>很快，这份声明得到了Anthropic对齐研究负责人的Evan Hubinger的回应。&lt;/p>
&lt;p>Evan表示，他同意Jacob对风险的判断：他们确实认真地相信，AI存在杀死所有人的可能。他个人估计，未来十年内发生这种情况的概率超过10%。&lt;/p>
&lt;p>与此同时，Evan也强调，他相信Anthropic正在尽力。但对于如何解决超级智能的对齐问题，他们尚未找到方案，也不能确定目前是否正走在通往解决方案的路上。&lt;/p>
&lt;p>可以说，一个人选择离开，另一个人留下继续研究，但对于眼前的风险，两人的判断却有相当程度的重合。&lt;/p>
&lt;p>随后，公司掌舵者也加入了讨论。&lt;/p>
&lt;p>在接受CBS采访时，Dario一方面表达了对Anthropic安全工作的信心，另一方面也强调，解决这些问题，需要科技公司、政府与社会各方共同参与。&lt;/p>
&lt;p>在CNN的采访中，面对关于Jacob的提问，Dario则表示，自己与Jacob的共同意见，远多于分歧。在他看来，Jacob的批评指向了整个行业不断向前竞逐的状态。&lt;/p>
&lt;p>9月12日，Dario发表《We Must Pace the Frontier》一文，明确呼吁放缓AI模型能力提升的速度，为安全研究争取时间。&lt;/p>
&lt;p>这份呼吁随后得到了奥特曼、马斯克等人的公开支持，也将这些一线研究员的不安，带入了更广泛的讨论之中：&lt;/p>
&lt;p>当整个行业都在加速，人类究竟给理解和控制AI，留下了多少时间。&lt;/p>
&lt;p>不过，在另一位一线研究员看来，放慢脚步，可能还不够。&lt;/p>
&lt;p>9月14日，仍在OpenAI工作的Daniel Selsam（下文简称Dan）公开了一份关于AI风险的个人声明。&lt;/p>
&lt;p>有趣的是，Dan甚至没有X账号。这份声明，是请前同事Daniel Kokotajlo代为分享的，后者在介绍中提到，Dan还曾做过自己的上司。&lt;/p>
&lt;p>相比于刚刚离职的Jacob，Dan已经在AI领域工作了十五年之久。&lt;/p>
&lt;p>他在MIT研究过概率编程，在微软研究院参与过Lean定理证明器的早期开发，又在斯坦福攻读博士，探索如何让神经网络学会推理。&lt;/p>
&lt;p>加入OpenAI后，他继续参与思维链优化与预训练研究。在o1推理研究的“奠基贡献者”名单中，就有他的名字，与Ilya Sutskever、Jason Wei、Max Schwarzer、Noam Brow、赵晟佳等大佬共同在列。&lt;/p>
&lt;p>可以说，如何让机器学会思考，贯穿了他的职业生涯。&lt;/p></description></item><item><title>中国电信开源首个全栈国产轻量级智能体大模型 Xing4.0-29B-A4B</title><link>https://pangyd.com/post/radar-494/</link><pubDate>Sat, 19 Sep 2026 18:33:14 +0800</pubDate><guid>https://pangyd.com/post/radar-494/</guid><description>&lt;blockquote>
&lt;p>&lt;strong>原文&lt;/strong>：&lt;a href="https://www.ithome.com/1/004/530.htm">中国电信开源首个全栈国产轻量级智能体大模型 Xing4.0-29B-A4B&lt;/a>&lt;/p>
&lt;p>&lt;strong>来源&lt;/strong>：IT之家（科技）&lt;/p>
&lt;/blockquote>
&lt;h2 id="正文">正文&lt;/h2>
&lt;p>IT之家 9 月 19 日消息，中国电信于 9 月 17 日发布新一代星辰大模型 Xing4.0-29B-A4B，该模型总参数量 29B，激活参数仅 4B，原生支持 256K 上下文，可扩展至 512K，是国内首个基于国产算力与国产框架完成训练、面向复杂工程任务深度优化的百亿参数大模型。&lt;/p>
&lt;p>官方表示，从训练芯片到推理部署，全栈国产 —— 昇腾训练、国产框架适配、自研架构、开源生态，一条路走通。&lt;/p>
&lt;p>从 SuperCLUE 评测结果来看，在智能体能力方面，Xing4.0-29B-A4B 得分 93.52，位列第 3 名，与两款头部 Qwen 模型的差距均不足 1 分。&lt;/p>
&lt;p>据介绍，Xing4.0-29B-A4B 通过 4-bit 量化后显存占用降低至 15GB（比 FP16 省约 75%），RTX 3090、RTX 4090 这类 24G 消费级显卡就能本地跑长上下文任务。&lt;/p>
&lt;p>Xing4.0-29B-A4B 延续星辰大模型的开源路线，对主流开源生态做了全面兼容：支持 LLaMA-Factory、MindFormers 等微调架构；适配 SGLang、vLLM、KTransformers 等主流推理框架；Agent 框架对 OpenCode、Claude Code、OpenClaw、Hermes 做了定向适配调优，深度对齐各框架格式规范。&lt;/p>
&lt;p>星辰大模型 Xing4.0-29B-A4B 已上线开源社区，IT之家附相关链接：&lt;/p>
&lt;p>HuggingFace：https://huggingface.co/XingChen-AGI/Xing4.0-29B-A4B&lt;/p>
&lt;p>GitHub：https://github.com/XingChen-AGI/Xing4.0-29B-A4B&lt;/p>
&lt;p>魔搭：https://modelscope.cn/models/XingChen-AGI/Xing4.0-29B-A4B&lt;/p>
&lt;p>Gitee：https://gitee.com/xingchen-agi/xing4.0-29b-a4b&lt;/p>
&lt;p>魔乐：https://modelers.cn/models/XingChen-AGI/Xing4.0-29B-A4B&lt;/p>
&lt;p>广告声明：文内含有的对外跳转链接（包括不限于超链接、二维码、口令等形式），用于传递更多信息，节省甄选时间，结果仅供参考，IT之家包含外链的文章均包含本声明。&lt;/p>
&lt;p>投诉水文&lt;/p>
&lt;p>我要纠错&lt;/p>
&lt;p>下载IT之家APP，签到赚金币兑豪礼&lt;/p>
&lt;hr>
&lt;blockquote>
&lt;p>由「前沿雷达」于 2026-09-20 采集。正文取自原文页面，已保留出处链接。标题与正文版权归原作者所有。&lt;/p></description></item><item><title>Claude“主导”Anthropic 26%的AI研发、3万Agent同时运行：当AI开始“造AI”，头部AI公司的RSI路线正在分化</title><link>https://pangyd.com/post/radar-535/</link><pubDate>Sat, 19 Sep 2026 01:00:25 +0800</pubDate><guid>https://pangyd.com/post/radar-535/</guid><description>&lt;blockquote>
&lt;p>&lt;strong>原文&lt;/strong>：&lt;a href="https://www.infoq.cn/article/CEphwKjzAe7LzbOriLcq?utm_source=rss&amp;amp;utm_medium=article">Claude“主导”Anthropic 26%的AI研发、3万Agent同时运行：当AI开始“造AI”，头部AI公司的RSI路线正在分化&lt;/a>&lt;/p>
&lt;p>&lt;strong>作者&lt;/strong>：褚杏娟&lt;/p>
&lt;p>&lt;strong>来源&lt;/strong>：InfoQ 中国（架构）&lt;/p>
&lt;/blockquote>
&lt;h2 id="正文">正文&lt;/h2>
&lt;p>AI 开始越来越深地参与下一代 AI 的研发，而且速度可能比外界想象得更快。&lt;/p>
&lt;p>当地时间 9 月 17 日，Anthropic 发布了一组罕见的内部数据，试图量化 AI 究竟已经在多大程度上参与自己的研发。结果显示，截至 2026 年 8 月，Claude 已经能够“主导”Anthropic 约 26% 的 AI 研发工作；超过 90% 的 AI 研发工作至少已经达到“AI 协作”水平。而在 Anthropic 使用最广泛的内部 Agent 平台上，大约有 3 万个 Agent 正在同时进行研究和工程任务。&lt;/p>
&lt;p>更值得注意的是变化速度。Anthropic 公布的图表显示，今年 2 月，Claude 能够达到“主导”水平的模型研发任务占比还不到 1%，半年后已经上升到 26%。Anthropic 将这套衡量体系直接与 RSI 联系了起来，也就是一个 AI 系统最终能够自主构建自己的继任者。&lt;/p>
&lt;p>这里的“主导”需要特别解释下。Anthropic 构建了一套内部的“R&amp;amp;D Automation Index（研发自动化指数）”。其采用了 Epoch AI 提出的六级自动化标准：从 AL0 到 AL5 衡量 AI 对一项工作的介入程度。其中，AL3 被称为“协作”：AI 可以在人类密切指导下承担大块工作；AL4 则是“主导”：工程师只需要给出一个高层目标，AI 就能够完成一项任务的大部分端到端工作，人类主要负责监督和最终决策；最高的 AL5 才意味着没有人类介入的完全自主运行。&lt;/p></description></item><item><title>MAAP: Multi-Agent Active Perception for Collaborative Manipulation</title><link>https://pangyd.com/post/radar-1037/</link><pubDate>Fri, 18 Sep 2026 23:50:15 +0800</pubDate><guid>https://pangyd.com/post/radar-1037/</guid><description>&lt;blockquote>
&lt;p>&lt;strong>原文&lt;/strong>：&lt;a href="https://arxiv.org/abs/2609.21929v1">MAAP: Multi-Agent Active Perception for Collaborative Manipulation&lt;/a>&lt;/p>
&lt;p>&lt;strong>作者&lt;/strong>：Bruno N. Y. Chen, Li Kang, Heng Zhou, Xiufeng Song, Zhemeng Zhang, Jiahua Ma, Yiran Qin&lt;/p>
&lt;p>&lt;strong>来源&lt;/strong>：arXiv cs.RO（机器人）&lt;/p>
&lt;/blockquote>
&lt;h2 id="正文">正文&lt;/h2>
&lt;p>Computer Science &amp;gt; Robotics&lt;/p>
&lt;p>arXiv:2609.21929v1 (cs)&lt;/p>
&lt;p>[Submitted on 18 Sep 2026]&lt;/p>
&lt;p>Title:MAAP: Multi-Agent Active Perception for Collaborative Manipulation&lt;/p>
&lt;p>Authors:Bruno N.Y. Chen, Li Kang, Heng Zhou, Xiufeng Song, Zhemeng Zhang, Jiahua Ma, Yiran Qin&lt;/p>
&lt;p>View a PDF of the paper titled MAAP: Multi-Agent Active Perception for Collaborative Manipulation, by Bruno N.Y. Chen and 6 other authors&lt;/p></description></item><item><title>Adaptive World Memory 3D Foundation Model for Scalable 3D Mapping, Localization, and Rendering</title><link>https://pangyd.com/post/radar-857/</link><pubDate>Fri, 18 Sep 2026 16:53:12 +0800</pubDate><guid>https://pangyd.com/post/radar-857/</guid><description>&lt;blockquote>
&lt;p>&lt;strong>原文&lt;/strong>：&lt;a href="https://arxiv.org/abs/2609.21502v1">Adaptive World Memory 3D Foundation Model for Scalable 3D Mapping, Localization, and Rendering&lt;/a>&lt;/p>
&lt;p>&lt;strong>作者&lt;/strong>：Tianchen Deng, Guole Shen, Yilin Shen, Wenhua Wu, Yilin Fang, Ziqi Ma, Tianjun Zhang, Shenghai Yuan, Wolfram Burgard, Hesheng Wang&lt;/p>
&lt;p>&lt;strong>来源&lt;/strong>：arXiv cs.CV（计算机视觉）&lt;/p>
&lt;/blockquote>
&lt;h2 id="正文">正文&lt;/h2>
&lt;p>Computer Science &amp;gt; Computer Vision and Pattern Recognition&lt;/p>
&lt;p>arXiv:2609.21502v1 (cs)&lt;/p>
&lt;p>[Submitted on 18 Sep 2026]&lt;/p>
&lt;p>Title:Adaptive World Memory 3D Foundation Model for Scalable 3D Mapping, Localization, and Rendering&lt;/p>
&lt;p>Authors:Tianchen Deng, Guole Shen, Yilin Shen, Wenhua Wu, Yilin Fang, Ziqi Ma, Tianjun Zhang, Shenghai Yuan, Wolfram Burgard, Hesheng Wang&lt;/p></description></item><item><title>CoRef-GS: Cooperative Referring Gaussian Splatting for Multi-Agent Scene Understanding</title><link>https://pangyd.com/post/radar-124/</link><pubDate>Thu, 17 Sep 2026 23:39:25 +0800</pubDate><guid>https://pangyd.com/post/radar-124/</guid><description>&lt;blockquote>
&lt;p>&lt;strong>原文&lt;/strong>：&lt;a href="https://arxiv.org/abs/2609.20586v1">CoRef-GS: Cooperative Referring Gaussian Splatting for Multi-Agent Scene Understanding&lt;/a>&lt;/p>
&lt;p>&lt;strong>作者&lt;/strong>：Zhikun Zhou, Kunyu Peng, Runyi Yang, Junhao Cai, Di Wen, Ruiping Liu, Danda Pani Paudel, Yi Zhou, Luc Van Gool, Kailun Yang&lt;/p>
&lt;p>&lt;strong>来源&lt;/strong>：arXiv cs.CV（计算机视觉）&lt;/p>
&lt;/blockquote>
&lt;h2 id="正文">正文&lt;/h2>
&lt;p>Computer Science &amp;gt; Robotics&lt;/p>
&lt;p>arXiv:2609.20586v1 (cs)&lt;/p>
&lt;p>[Submitted on 17 Sep 2026]&lt;/p>
&lt;p>Title:CoRef-GS: Cooperative Referring Gaussian Splatting for Multi-Agent Scene Understanding&lt;/p>
&lt;p>Authors:Zhikun Zhou, Kunyu Peng, Runyi Yang, Junhao Cai, Di Wen, Ruiping Liu, Danda Pani Paudel, Yi Zhou, Luc Van Gool, Kailun Yang&lt;/p></description></item><item><title>Language-model groups overstate consensus when replaying human deliberation on a reasoning task</title><link>https://pangyd.com/post/radar-27/</link><pubDate>Thu, 17 Sep 2026 23:11:08 +0800</pubDate><guid>https://pangyd.com/post/radar-27/</guid><description>&lt;blockquote>
&lt;p>&lt;strong>原文&lt;/strong>：&lt;a href="https://arxiv.org/abs/2609.20543v1">Language-model groups overstate consensus when replaying human deliberation on a reasoning task&lt;/a>&lt;/p>
&lt;p>&lt;strong>作者&lt;/strong>：Tengfei Shao&lt;/p>
&lt;p>&lt;strong>来源&lt;/strong>：arXiv cs.AI（人工智能）&lt;/p>
&lt;/blockquote>
&lt;h2 id="正文">正文&lt;/h2>
&lt;p>Computer Science &amp;gt; Artificial Intelligence&lt;/p>
&lt;p>arXiv:2609.20543v1 (cs)&lt;/p>
&lt;p>[Submitted on 17 Sep 2026]&lt;/p>
&lt;p>Title:Language-model groups overstate consensus when replaying human deliberation on a reasoning task&lt;/p>
&lt;p>Authors:Tengfei Shao&lt;/p>
&lt;p>View a PDF of the paper titled Language-model groups overstate consensus when replaying human deliberation on a reasoning task, by Tengfei Shao&lt;/p>
&lt;p>View PDF&lt;/p>
&lt;p>Abstract:Full-consensus rates are often treated as indicators of collective cognition, yet depend on how participation and final states are operationalized. We replayed 100 held-out human Wason groups with matched large language model (LLM) agent groups, seeding one belief-anchored agent per participant&amp;rsquo;s pre-discussion answer and scoring agents and people with the same code. Across human scoring definitions, estimates ranged from 24.0% to 57.0%; about one fifth of participants never posted, whereas agents almost always did. Agent groups remained more consensual in two post-unblinding sensitivity analyses: the submit-based comparison (n = 98) yielded gaps of 34.0 and 43.9 percentage points for chat and reasoning modes, and the participation-matched comparison (n = 45) yielded gaps of 34.1 and 44.4 points. These complementary routes reduced different measurement asymmetries yet converged within 0.5 percentage points. The gap persisted without early stopping and under a reparameterization removing the memorizable answer; reasoning-mode groups then agreed nearly unanimously, mostly on incorrect answers. Simulated consensus did not track collective accuracy, and belief-anchored agent groups were biased estimators of the human group-outcome distribution in this setting. These analyses provide a scoring-explicit basis for assessing simulated-group estimates of human deliberative outcomes.&lt;/p></description></item><item><title>Worst-Case Hidden-Vehicle Trajectory Search in Spatiotemporal Occlusion Regions</title><link>https://pangyd.com/post/radar-340/</link><pubDate>Thu, 17 Sep 2026 22:33:23 +0800</pubDate><guid>https://pangyd.com/post/radar-340/</guid><description>&lt;blockquote>
&lt;p>&lt;strong>原文&lt;/strong>：&lt;a href="https://arxiv.org/abs/2609.20480v1">Worst-Case Hidden-Vehicle Trajectory Search in Spatiotemporal Occlusion Regions&lt;/a>&lt;/p>
&lt;p>&lt;strong>作者&lt;/strong>：Ruichen Tan, Zengxiang Lei, Satish Ukkusuri&lt;/p>
&lt;p>&lt;strong>来源&lt;/strong>：arXiv cs.RO（机器人）&lt;/p>
&lt;/blockquote>
&lt;h2 id="正文">正文&lt;/h2>
&lt;p>Computer Science &amp;gt; Robotics&lt;/p>
&lt;p>arXiv:2609.20480v1 (cs)&lt;/p>
&lt;p>[Submitted on 17 Sep 2026]&lt;/p>
&lt;p>Title:Worst-Case Hidden-Vehicle Trajectory Search in Spatiotemporal Occlusion Regions&lt;/p>
&lt;p>Authors:Ruichen Tan, Zengxiang Lei, Satish Ukkusuri&lt;/p>
&lt;p>View a PDF of the paper titled Worst-Case Hidden-Vehicle Trajectory Search in Spatiotemporal Occlusion Regions, by Ruichen Tan and 2 other authors&lt;/p>
&lt;p>View PDF&lt;/p>
&lt;p>HTML (experimental)&lt;/p>
&lt;p>Abstract:Occlusion creates fundamental uncertainty in autonomous driving. Existing methods often propagate frame-wise hypotheses or optimize ego behavior against prescribed hidden-agent predictions, leaving the worst history-consistent interaction unexplored. We introduce History-Conditioned Minimax Trajectory Search (HC-MTS), which combines temporal occlusion reasoning with response-aware search. First, HC-MTS constructs finite hidden-state modes, each certified by a backward witness satisfying multi-frame visibility, occupancy, semantic-map support, and class-specific kinematic constraints. It then solves a bilevel minimax problem: an inner finite oracle maximizes the ego driving score over destination attainment and ride comfort, while the outer search selects the legal hidden-vehicle trajectory that minimizes this best-response value. Across eight Waymo Open Motion Dataset scenarios, increasing the visibility-memory horizon from K=1 to K=20 reduces the mean per-scenario vehicle, pedestrian, and total retained hidden-seed counts by 18.12%, 21.67%, and 18.45%, respectively. HC-MTS identifies six avoidable counterexamples, while no legal collision-producing attacker is found in the remaining two scenes within the finite search budget.&lt;/p></description></item><item><title>Astronex-World 1.0: Real-Time Interactive World Model Foundation</title><link>https://pangyd.com/post/radar-148/</link><pubDate>Thu, 17 Sep 2026 18:38:22 +0800</pubDate><guid>https://pangyd.com/post/radar-148/</guid><description>&lt;blockquote>
&lt;p>&lt;strong>原文&lt;/strong>：&lt;a href="https://arxiv.org/abs/2609.20034v1">Astronex-World 1.0: Real-Time Interactive World Model Foundation&lt;/a>&lt;/p>
&lt;p>&lt;strong>作者&lt;/strong>：Xin Zhou, Cong Miao&lt;/p>
&lt;p>&lt;strong>来源&lt;/strong>：arXiv cs.CV（计算机视觉）&lt;/p>
&lt;/blockquote>
&lt;h2 id="正文">正文&lt;/h2>
&lt;p>Computer Science &amp;gt; Computer Vision and Pattern Recognition&lt;/p>
&lt;p>arXiv:2609.20034v1 (cs)&lt;/p>
&lt;p>[Submitted on 17 Sep 2026]&lt;/p>
&lt;p>Title:Astronex-World 1.0: Real-Time Interactive World Model Foundation&lt;/p>
&lt;p>Authors:Xin Zhou, Cong Miao&lt;/p>
&lt;p>View a PDF of the paper titled Astronex-World 1.0: Real-Time Interactive World Model Foundation, by Xin Zhou and 1 other authors&lt;/p>
&lt;p>View PDF&lt;/p>
&lt;p>HTML (experimental)&lt;/p>
&lt;p>Abstract:We present Astronex-World 1.0, an open controllable video world-model foundation. Given a text prompt (text-to-video) or an initial observation (image-to-video), the model predicts future visual states under frame-aligned camera trajectories, continuous actions, and an embodiment identifier, and accepts text events inserted at a specified position of a rollout. The family provides a bidirectional model for full-context generation and a causal model with block-causal attention and cross-block KV caching for persistent generation, both built on the Wan2.2-TI2V-5B prior. PRoPE injects camera intrinsics and extrinsics, while a 64-dimensional action stream modulates every Transformer layer. A five-stage training path develops bidirectional camera and action control, converts the backbone to block-causal generation, distills a few-step student, restores mixed-domain dynamics, and applies asymmetric DMD/DMD2 distribution matching. The causal model generates 832x480 video at 24 fps. All five training stages run on two NVIDIA L20 48 GB GPUs, and the causal model streams in real time on one. It scores 73.5 on WBench Navi and 70.0 on WBench Full. On Full, this 5B model is above the 13.6B LongCat-Video and the 14B Helios, within one point of the 22B LTX-2.3, and above YUME 1.5, which is post-trained from the same 5B prior on NVIDIA A100 GPUs. The reserved action input and output interfaces allow post-training for embodied intelligence and autonomous driving.&lt;/p></description></item><item><title>KoNeoBench: A Curated Evaluation Dataset for LLM Understanding of Korean Neologisms</title><link>https://pangyd.com/post/radar-89/</link><pubDate>Thu, 17 Sep 2026 16:58:49 +0800</pubDate><guid>https://pangyd.com/post/radar-89/</guid><description>&lt;blockquote>
&lt;p>&lt;strong>原文&lt;/strong>：&lt;a href="https://arxiv.org/abs/2609.19916v1">KoNeoBench: A Curated Evaluation Dataset for LLM Understanding of Korean Neologisms&lt;/a>&lt;/p>
&lt;p>&lt;strong>作者&lt;/strong>：Soha Lee, Soojin Lee, Heesung Yang, Hyunju Song, Hyunji Lee, Jinsan An, Jeongwan Shin, Jin Hyun Park, Jun Lee, Hyeyoung Park, Kilim Nam&lt;/p>
&lt;p>&lt;strong>来源&lt;/strong>：arXiv cs.CL（自然语言）&lt;/p>
&lt;/blockquote>
&lt;h2 id="正文">正文&lt;/h2>
&lt;p>Computer Science &amp;gt; Computation and Language&lt;/p>
&lt;p>arXiv:2609.19916v1 (cs)&lt;/p>
&lt;p>[Submitted on 17 Sep 2026]&lt;/p>
&lt;p>Title:KoNeoBench: A Curated Evaluation Dataset for LLM Understanding of Korean Neologisms&lt;/p>
&lt;p>Authors:Soha Lee, Soojin Lee, Heesung Yang, Hyunju Song, Hyunji Lee, Jinsan An, Jeongwan Shin, Jin Hyun Park, Jun Lee, Hyeyoung Park, Kilim Nam&lt;/p></description></item><item><title>BI-Agent and BI-Bench: Towards Automating End-to-End Business Intelligence</title><link>https://pangyd.com/post/radar-993/</link><pubDate>Thu, 17 Sep 2026 06:36:20 +0800</pubDate><guid>https://pangyd.com/post/radar-993/</guid><description>&lt;blockquote>
&lt;p>&lt;strong>原文&lt;/strong>：&lt;a href="https://arxiv.org/abs/2609.20886v1">BI-Agent and BI-Bench: Towards Automating End-to-End Business Intelligence&lt;/a>&lt;/p>
&lt;p>&lt;strong>作者&lt;/strong>：Chuxuan Hu, Yeye He, Penny Zhou, Wee Hyong Tok, Daniel Kang, Surajit Chaudhuri&lt;/p>
&lt;p>&lt;strong>来源&lt;/strong>：arXiv cs.DB（数据库）&lt;/p>
&lt;/blockquote>
&lt;h2 id="正文">正文&lt;/h2>
&lt;p>Computer Science &amp;gt; Machine Learning&lt;/p>
&lt;p>arXiv:2609.20886v1 (cs)&lt;/p>
&lt;p>[Submitted on 16 Sep 2026]&lt;/p>
&lt;p>Title:BI-Agent and BI-Bench: Towards Automating End-to-End Business Intelligence&lt;/p>
&lt;p>Authors:Chuxuan Hu, Yeye He, Penny Zhou, Wee Hyong Tok, Daniel Kang, Surajit Chaudhuri&lt;/p>
&lt;p>View a PDF of the paper titled BI-Agent and BI-Bench: Towards Automating End-to-End Business Intelligence, by Chuxuan Hu and 5 other authors&lt;/p></description></item><item><title>ES 增删改查操作</title><link>https://pangyd.com/post/233-es/</link><pubDate>Thu, 05 Mar 2020 22:41:24 +0800</pubDate><guid>https://pangyd.com/post/233-es/</guid><description>&lt;p>&lt;br>&lt;/p>&lt;h2 md-src-pos="12..17">创建&lt;/h2>&lt;h3 md-src-pos="18..29">自定义ID增加&lt;/h3>&lt;pre>&lt;code md-src-pos="30..92">PUT /{index}/{type}/{id}
{
 "field": "value",
 ...
}
&lt;/code>&lt;/pre>&lt;h3 md-src-pos="93..103">自动增加ID&lt;/h3>&lt;blockquote md-src-pos="104..114">&lt;p md-src-pos="106..114">使用post方式&lt;/p>&lt;/blockquote>&lt;pre>&lt;code md-src-pos="115..244">POST /website/blog/
{
 "title": "My second blog entry",
 "text": "Still trying this out...",
 "date": "2014/01/01"
}
&lt;/code>&lt;/pre>&lt;h2 md-src-pos="245..250">更新&lt;/h2>&lt;pre>&lt;code md-src-pos="251..380">PUT /website/blog/123
{
 "title": "My first blog entry",
 "text": "Just trying this out...",
 "date": "2014/01/01"
}
&lt;/code>&lt;/pre>&lt;blockquote md-src-pos="381..467">&lt;p md-src-pos="383..467">我们能看到 Elasticsearch 已经增加了 _version 字段值，created 标志设置成 false ，是因为相同的索引、类型和 ID 的文档已经存在。&lt;/p>&lt;/blockquote>&lt;h2 md-src-pos="468..473">删除&lt;/h2>&lt;pre>&lt;code md-src-pos="474..506">DELETE /website/blog/123
&lt;/code>&lt;/pre>&lt;blockquote md-src-pos="507..554">&lt;p md-src-pos="508..554">如果找到该文档，Elasticsearch 将要返回一个 200 ok 的 HTTP 响应码&lt;/p></description></item><item><title>Python中操作mysql的pymysql模块详解</title><link>https://pangyd.com/post/197-pythonmysqlpymysql/</link><pubDate>Mon, 06 Aug 2018 18:06:31 +0800</pubDate><guid>https://pangyd.com/post/197-pythonmysqlpymysql/</guid><description>&lt;div>&lt;div>&lt;div class="article">&lt;div data-note-content="" class="show-content">&lt;div class="show-content-free">&lt;p>&lt;a href="https://link.jianshu.com?t=https://github.com/PyMySQL/PyMySQL" target="_blank" rel="nofollow">PyMySQL&lt;/a>是一个Python编写的MySQL驱动程序，让我们可以用Python语言操作MySQL数据库。&lt;/p>
&lt;p>首先，使用pip安装PyMySQL。&lt;/p>
&lt;pre class="hljs undefined">&lt;code>pip install PyMySQL
&lt;/code>&lt;/pre>
&lt;h2>使用PyMySQL&lt;/h2>
&lt;h3>简单使用&lt;/h3>
&lt;p>如果有JDBC等其他语言的数据库学习经验的话，使用PyMySQL非常简单。下面是一个完整的MySQL增删查（没有改）的例子。&lt;/p>
&lt;pre class="hljs python">&lt;code class="python">&lt;span class="hljs-keyword">import&lt;/span> pymysql
&lt;span class="hljs-keyword">import&lt;/span> datetime
&lt;p>host = &lt;span class="hljs-string">&amp;lsquo;localhost&amp;rsquo;&lt;/span>
username = &lt;span class="hljs-string">&amp;lsquo;root&amp;rsquo;&lt;/span>
password = &lt;span class="hljs-string">&amp;lsquo;12345678&amp;rsquo;&lt;/span>
db_name = &lt;span class="hljs-string">&amp;lsquo;test&amp;rsquo;&lt;/span>&lt;/p>
&lt;p>create_table_sql = &lt;span class="hljs-string">&amp;quot;&amp;quot;&amp;quot;&lt;br>
CREATE TABLE fuck(
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(255) UNIQUE ,
nickname VARCHAR(255) NOT NULL ,
birthday DATE
)
&amp;ldquo;&amp;rdquo;&amp;quot;&lt;/span>&lt;/p>
&lt;p>insert_table_sql = &lt;span class="hljs-string">&amp;quot;&amp;quot;&amp;quot;&lt;br>
INSERT INTO fuck(username,nickname,birthday)
VALUES(&amp;rsquo;{username}&amp;rsquo;,&amp;rsquo;{nickname}&amp;rsquo;,&amp;rsquo;{birthday}&amp;rsquo;)
&amp;ldquo;&amp;rdquo;&amp;quot;&lt;/span>&lt;/p>
&lt;p>query_table_sql = &lt;span class="hljs-string">&amp;quot;&amp;quot;&amp;quot;&lt;br>
SELECT id,username,nickname,birthday
FROM fuck
&amp;ldquo;&amp;rdquo;&amp;quot;&lt;/span>&lt;/p>
&lt;p>delete_table_sql = &lt;span class="hljs-string">&amp;quot;&amp;quot;&amp;quot;&lt;br>
DELETE FROM fuck
&amp;ldquo;&amp;rdquo;&amp;quot;&lt;/span>&lt;/p>
&lt;p>drop_table_sql = &lt;span class="hljs-string">&amp;quot;&amp;quot;&amp;quot;&lt;br>
DROP TABLE fuck
&amp;ldquo;&amp;rdquo;&amp;quot;&lt;/span>&lt;/p></description></item><item><title>五分钟学会 Kotlin 语法</title><link>https://pangyd.com/post/184-kotlin/</link><pubDate>Wed, 29 Nov 2017 11:03:22 +0800</pubDate><guid>https://pangyd.com/post/184-kotlin/</guid><description>&lt;pre>&lt;div>&lt;h2>为什么使用Kotlin&lt;/h2>
&lt;p>项目一期在收尾了终于有时间折腾了，一个多月以来Kotlin从入门到现在，坚持用来开发的切身感受。因为语法与Java的区别挺大的一开始很想放弃，如果不是因为项目在使用，想必很少人会尝试这样一门小众语言，但是习惯后会发现这些年究竟浪费多少时间在写无用的Java代码了，Kotlin在兼容Java的基础上还能大大提升开发效率。Kotlin有许多特性但对于开发来说，快速适应和学习更为重要，很多时候我们都是在不明白其原因就开始使用的，正如我们不可能把Retrofit原理研究透才使用它。只要它足够稳定成熟，并能有效的提升开发效率都是值得尝试的。鄙人不才，目前使用Kotlin的原因主要是因为它语法简洁，支持lambda表达式，强大的when语法，不用写分号结尾，光是这些就足以让我喜欢Kotlin。至于空安全之类的特性，毕竟服务端数据类型太多null了并没多大感触，这些特性在实际应用中潜移默化的就吸收了，以至于现在遇到几个Java编写的代码，都有些不适应了。&lt;/p>
&lt;h2>修改说明&lt;/h2>
&lt;p>突然火了一脸懵逼，Google IO的影响真是不容小觑。避免误人子弟还是修改下比较好，也就把上一篇文章的基础知识也搬迁过来，对条件判断&lt;code>when&lt;/code>还有空判断处理进行了修改，添加了&lt;code>lambda&lt;/code>说明，移除过期链接。&lt;/p>
&lt;h2>Kotlin 基本语法&lt;/h2>
&lt;p>先说个学习Kotlin语法的小窍门，将代码用Java写好，然后&lt;code>Code/Conver Java File to Kotlin File&lt;/code>转换成Kotlin代码，或者将Java代码复制到Kotlin文件会提示转换也是挺方便的，比较差异很容易就能理解了，一开始难免不适应习惯后相信你一定会喜欢上Kotlin&lt;/p>
&lt;p>1). 定义&lt;/p>
&lt;p>忘掉Java的那一套写法不然会很不适应的，Kotlin有自己的特性不该被Java的思维所束缚。在Kotlin中常量用&lt;code>val&lt;/code>声明，变了用&lt;code>var&lt;/code>声明，关键字在前面，类型以冒号&lt;code>:&lt;/code>隔开在后面，也可以省略直接赋值，类型后带问号&lt;code>?&lt;/code>表示可为空类型(默认空安全)。&lt;br>
常量&lt;code>val&lt;/code>延迟加载&lt;code>by lazy{}&lt;/code>，默认线程安全关闭线程安全&lt;code>lazy(LazyThreadSafetyMode.NONE){}&lt;/code>，变量&lt;code>var&lt;/code>延迟加载&lt;code>lateinit&lt;/code>。&lt;/p>
&lt;pre class="hljs java">&lt;code class="java">&lt;span class="hljs-comment">//常量数组int[][][] arrs = new int[3][2][1];&lt;/span>
val arrs = Array(&lt;span class="hljs-number">3&lt;/span>) { Array(&lt;span class="hljs-number">2&lt;/span>) { IntArray(&lt;span class="hljs-number">1&lt;/span>) } }
&lt;span class="hljs-comment">//空安全变量&lt;/span>
var str: String = &lt;span class="hljs-string">"hello"&lt;/span>
var str1 = &lt;span class="hljs-string">"word"&lt;/span>
&lt;span class="hljs-comment">//可为空字符串变量&lt;/span>
var str2: String? = &lt;span class="hljs-keyword">null&lt;/span>

&lt;/code>&lt;/pre>
&lt;p>2). 条件&lt;/p>
&lt;p>&lt;code>if...else&lt;/code> 正常使用，不过移除了&lt;code>switch&lt;/code>用更强大的&lt;code>when&lt;/code>替代，when子式可以是常量、变量、返回数值的表达式、返回Boolean值的表达式，强大到用来替换&lt;code>if...else if&lt;/code>&lt;/p>
&lt;pre class="hljs java">&lt;code class="java">&lt;span class="hljs-comment">// 测试值 x = 0, -1, 1, 2, 3, 6, 10&lt;/span>
var x = &lt;span class="hljs-number">10&lt;/span>
when (x) {
 &lt;span class="hljs-comment">//常量&lt;/span>
 &lt;span class="hljs-number">2&lt;/span> -&amp;gt; println(&lt;span class="hljs-string">"等于2"&lt;/span>)
 &lt;span class="hljs-comment">//数值表达式&lt;/span>
 &lt;span class="hljs-keyword">if&lt;/span> (x &amp;gt; &lt;span class="hljs-number">0&lt;/span>) &lt;span class="hljs-number">1&lt;/span> &lt;span class="hljs-keyword">else&lt;/span> -&lt;span class="hljs-number">1&lt;/span> -&amp;gt; println(&lt;span class="hljs-string">"大于0并等于1，或小于0并等于-1"&lt;/span>)
 &lt;span class="hljs-comment">//Boolean类型表达式&lt;/span>
 in &lt;span class="hljs-number">1&lt;/span>..&lt;span class="hljs-number">5&lt;/span> -&amp;gt; println(&lt;span class="hljs-string">"范围匹配1-5"&lt;/span>)
 !in &lt;span class="hljs-number">6&lt;/span>..&lt;span class="hljs-number">9&lt;/span> -&amp;gt; println(&lt;span class="hljs-string">"不是6-9"&lt;/span>)
 is Int -&amp;gt; println(&lt;span class="hljs-string">"类型判断"&lt;/span>)
 &lt;span class="hljs-keyword">else&lt;/span> -&amp;gt; println(&lt;span class="hljs-string">"else"&lt;/span>)
}
&lt;span class="hljs-comment">// 代替if...else if&lt;/span>
when{
 x &amp;gt; &lt;span class="hljs-number">6&lt;/span> &amp;amp;&amp;amp; x &amp;lt;= &lt;span class="hljs-number">10&lt;/span> -&amp;gt; println(&lt;span class="hljs-string">"大于6小于等于10"&lt;/span>)
 x &amp;lt; &lt;span class="hljs-number">6&lt;/span> -&amp;gt; println(&lt;span class="hljs-string">"小于6"&lt;/span>)
 &lt;span class="hljs-keyword">else&lt;/span> -&amp;gt; println(&lt;span class="hljs-string">"else"&lt;/span>)
}
&lt;/code>&lt;/pre>
&lt;p>3). 循环&lt;/p></description></item><item><title>【SSH网上商城项目实战30】项目总结（附源码下载地址）</title><link>https://pangyd.com/post/174-ssh30/</link><pubDate>Sun, 19 Nov 2017 19:52:46 +0800</pubDate><guid>https://pangyd.com/post/174-ssh30/</guid><description>&lt;table class="layui-table">&lt;tbody>&lt;tr>&lt;td bgcolor="#F5FFFA">&lt;h2 id="0-写在前面">&lt;strong>0. 写在前面&lt;/strong>&lt;/h2>&lt;/td>&lt;/tr>&lt;/tbody>&lt;/table>&lt;p>　　友情提示：点击&amp;gt;&amp;gt;&lt;a href="https://blog.csdn.net/eson_15/article/details/51479994#download" target="_blank">下载地址&lt;/a>&amp;lt;&amp;lt;下载源码。&amp;nbsp;&lt;br>　　项目基本完成了，加上这个总结，与这个项目相关的博客也写了30篇了，积少成多，写博客的过程是固化思路的一个过程，对自己很有用，同时也能帮助别人。顺便说个题外话，在学习的过程中肯定会遇到很多异常出现，我们要做的首先是定位这个异常，一般异常的后面都会跟一个或多个Caused by：xxx，这些都是引起异常的原因，一般我们找最下面的一个Caused by，那里往往才是问题的根源。如果自己解决不了，可以去谷歌、百度搜索（搜索的时候别一大堆异常往上一贴，注意搜关键的部分！），一般我们遇到的问题，99.9%前人都遇到过，基本都能解决，我遇到不能解决的问题基本都是这么干的，自己解决的多了，就有感觉了~最后希望大家在阅读我的博客时会有所收获！　　&amp;nbsp;&lt;br>　　废话就不说了，下面总结一下这个网上商城的项目，我不会面面俱到，主要分为几个模块来总结，包括 用到了哪些技术等等，具体的细节我会在文章中附上快速链接，大家可以查看具体的某篇博文。&amp;nbsp;&lt;br>　　回忆一下这个项目，总共可以分为这些主要的模块：&lt;/p>&lt;blockquote>&lt;ul>&lt;li>&lt;strong>项目环境的搭建&lt;/strong>&lt;/li>&lt;li>&lt;strong>搭建后台管理系统&lt;/strong>&lt;/li>&lt;li>&lt;strong>搭建前台显示页面&lt;/strong>&lt;/li>&lt;li>&lt;strong>购物车相关功能&lt;/strong>&lt;/li>&lt;li>&lt;strong>在线支付功能&lt;/strong>&lt;/li>&lt;li>&lt;strong>邮件和短信的发送功能&lt;/strong>&lt;/li>&lt;li>&lt;strong>域名的申请和项目的部署&lt;/strong>&lt;/li>&lt;li>&lt;strong>表单验证和报表的显示&lt;/strong>&lt;/li>&lt;/ul>&lt;/blockquote>&lt;p>　　下面针对每个模块，做一下具体的分析。&lt;/p>&lt;table class="layui-table">&lt;tbody>&lt;tr>&lt;td bgcolor="#F5FFFA">&lt;h2 id="1-项目环境的搭建">&lt;a name="t1">&lt;/a>&lt;strong>1. 项目环境的搭建&lt;/strong>&lt;/h2>&lt;/td>&lt;/tr>&lt;/tbody>&lt;/table>&lt;p>　　这是每个工程都少不了的环节，而且也会出现很多乱七八糟的问题，刚开始学SSH的时候，总是苦于搭建环境，因为不太熟练，但是熟练了就好了，主要是要“有节奏的”去搭建，也就是说搭建一个环境工程得一步步来，一点点的搭，很多人上来就把jar包啪叽一下全导进去了，然后什么配置文件啊啪叽一下全写好或者从其他地方粘贴来，然后一运行，挂了……然后各种去找问题，何苦呢？这样的话就算搭建10次也不能得心应手。饭要一口口的吃，路要一步一步的走。&amp;nbsp;&lt;br>　　&amp;nbsp;&lt;br>　　SSH的环境搭建，我个人遵循的流程是：&lt;/p>&lt;blockquote>&lt;p>Spring –&amp;gt; Hibernate –&amp;gt; Spring整合Hibernate –&amp;gt; Struts2 –&amp;gt; Spring整合Struts2&lt;/p>&lt;/blockquote>&lt;p>　　每一步做完写个测试类测试一下，这很重要，因为一步步往下走的话，出错了也知道错在哪一步，去哪找问题，最重要的是，这种流程熟练了，下次再搭环境的时候就易如反掌了。关于SSH环境搭建的详细信息请看下面的博文：&amp;nbsp;&lt;br>　　&amp;nbsp;&lt;br>　　&lt;a href="https://blog.csdn.net/eson_15/article/details/51277324" target="&amp;quot;blank">整合Struts2、Hibernate4.3和Spring4.2&lt;/a>&amp;nbsp;&lt;br>　　&lt;a href="https://blog.csdn.net/eson_15/article/details/51297698" target="&amp;quot;blank">基本增删查改、Service和Action的抽取以及使用注解替换xml&lt;/a>&lt;/p>&lt;table class="layui-table">&lt;tbody>&lt;tr>&lt;td bgcolor="#F5FFFA">&lt;h2 id="2-搭建后台管理系统">&lt;a name="t2">&lt;/a>&lt;strong>2. 搭建后台管理系统&lt;/strong>&lt;/h2>&lt;/td>&lt;/tr>&lt;/tbody>&lt;/table>&lt;p>　　后台管理系统我用的是EasyUI搭建的，说真的，EasyUI我也是一知半解，前端的东西我了解的都不深，但是懂一点，具体用的时候也是各种去查的，也没系统的学过，所以没有一个良好的知识体系，但是也不影响去玩。程序猿都喜欢说玩一个技术啥的，听起来好像挺高大上的，慢慢的我也受到一些影响，也喜欢这么说了，不过我对于前端就真的在玩了……　　&amp;nbsp;&lt;br>　　jQuery EasyUI是一组基于jQuery的UI插件集合体，而jQuery EasyUI的目标就是帮助web开发者更轻松的打造出功能丰富并且美观的UI界面。开发者不需要编写复杂的javascript，也不需要对css样式有深入的了解，开发者需要了解的只有一些简单的html标签。　　&amp;nbsp;&lt;br>　　EasyUI的请求都是Ajax请求，不会有新的页面出来，全都都在tab选项卡中或者弹出一个窗口之类的。后台管理系统主要分为三部分：商品的类别管理、商品的管理以及销售管理。销售管理放在最后再说。&lt;/p>&lt;h3 id="21-商品类别的管理">&lt;a name="t3">&lt;/a>&lt;strong>2.1 商品类别的管理&lt;/strong>&lt;/h3>&lt;p>　　该部分主要涉及到了&lt;strong>EasyUI环境和后台框架的搭建&lt;/strong>、&lt;strong>数据库的级联查询和分页&lt;/strong>、&lt;strong>DataGrid数据显示&lt;/strong>、&lt;strong>Struts2整合json&lt;/strong>以及&lt;strong>商品类别的添加、删除、更新和搜索&lt;/strong>。这也是遵循了该部分的一个完成的顺序。　　&amp;nbsp;&lt;br>　　DataGrid以表格的形式展示数据，开发人员不需要具备特定的知识就可以操作它，它有个很好的帮助文档，比较详细，在本项目中我也介绍了创建DataGrid的几种方式，并且也简单介绍了一下DataGrid的部分属性，算是入门吧，我也是入门，多多开发才能掌握这个技术。　　&amp;nbsp;&lt;br>　　类别的添加、删除、更新和搜索功能，主要都是利用EasyUI自带的验证功能，添加商品类别的时，验证输入框的输入是否正确，是否必填等；删除时是否先选中的某一行或某几行；更新的时候每次只能更新一行等，所有这些都是Ajax请求。　　&amp;nbsp;&lt;br>　　关于这部分内容的详细信息，我已经归类了，请参考这些博文：&amp;nbsp;&lt;br>　　&amp;nbsp;&lt;br>　　&lt;a href="https://blog.csdn.net/eson_15/article/details/51312490" target="&amp;quot;blank">使用EasyUI搭建后台页面框架&lt;/a>&amp;nbsp;&lt;br>　　&lt;a href="https://blog.csdn.net/eson_15/article/details/51297705" target="&amp;quot;blank">EasyUI菜单的实现&lt;/a>&amp;nbsp;&lt;br>　　&lt;a href="https://blog.csdn.net/eson_15/article/details/51320212" target="&amp;quot;blank">数据库的级联查询和分页&lt;/a>&amp;nbsp;&lt;br>　　&lt;a href="https://blog.csdn.net/eson_15/article/details/51322262" target="&amp;quot;blank">基于DataGrid的数据显示功能&lt;/a>&amp;nbsp;&lt;br>　　&lt;a href="https://blog.csdn.net/eson_15/article/details/51332758" target="&amp;quot;blank">Struts2和Json的整合&lt;/a>　　&amp;nbsp;&lt;br>　　&lt;a href="https://blog.csdn.net/eson_15/article/details/51338991" target="&amp;quot;blank">DataGrid实现查询和删除功能&lt;/a>&amp;nbsp;&lt;br>　　&lt;a href="https://blog.csdn.net/eson_15/article/details/51347734" target="&amp;quot;blank">DataGrid实现添加和更新功能&lt;/a>&amp;nbsp;&lt;br>　　　　&amp;nbsp;&lt;br>　　下面是我自己遇到的问题：&amp;nbsp;&lt;br>　　&lt;a href="https://blog.csdn.net/eson_15/article/details/51394302" target="&amp;quot;blank">Struts2和Json整合中的懒加载异常问题&lt;/a>&amp;nbsp;&lt;br>　　&lt;a href="https://blog.csdn.net/eson_15/article/details/51383298" target="&amp;quot;blank">Hibernate4执行save()或update()无效&lt;/a>　　&lt;/p>&lt;h3 id="22-商品的管理">&lt;a name="t4">&lt;/a>&lt;strong>2.2 商品的管理&lt;/strong>&lt;/h3>&lt;p>　　商品的管理也有添加删除等操作，跟类别管理道理上是一样的，有个地方就是商品的添加，需要上传商品的照片，这里涉及到了&lt;strong>Struts2实现文件上传&lt;/strong>的功能，我们需要在服务器端建一个文件夹专门用来存储上传文件的，然后写一个model来接收文件，关于文件上传，要专门写一个工具类，项目中开发就是这样的，共性的代码一定要抽取，哪怕只有一句代码也要抽取！这是习惯，也是必须要做的。具体细节参下面列出的这些的博文：&amp;nbsp;&lt;br>　　&amp;nbsp;&lt;br>　　&lt;a href="https://blog.csdn.net/eson_15/article/details/51354932" target="&amp;quot;blank">商品类基本模块的搭建&lt;/a>　　&amp;nbsp;&lt;br>　　&lt;a href="https://blog.csdn.net/eson_15/article/details/51360804" target="&amp;quot;blank">查询和删除商品功能的实现&lt;/a>　　&amp;nbsp;&lt;br>　　&lt;a href="https://blog.csdn.net/eson_15/article/details/51366370" target="&amp;quot;blank">添加和更新商品功能的实现&lt;/a>　　&amp;nbsp;&lt;br>　　&lt;a href="https://blog.csdn.net/eson_15/article/details/51366384" target="&amp;quot;blank">Struts2实现文件上传功能&lt;/a>　　&lt;/p>&lt;table class="layui-table">&lt;tbody>&lt;tr>&lt;td bgcolor="#F5FFFA">&lt;h2 id="3-搭建前台显示页面">&lt;a name="t5">&lt;/a>&lt;strong>3. 搭建前台显示页面&lt;/strong>&lt;/h2>&lt;/td>&lt;/tr>&lt;/tbody>&lt;/table>&lt;p>　　当然，前台的页面不是我设计的，这一块内容我总结的是跟前台显示相关的一些后台技术，比如：&lt;strong>监听器获取首页数据&lt;/strong>、&lt;strong>定时器同步首页数据&lt;/strong>、&lt;strong>Hibernate二级缓存处理热门商品的缓存&lt;/strong>等。&amp;nbsp;&lt;br>　　以前在学习serlvet的时候，首页显示数据我是这么干的，用一个frame，右边显示数据，那么index.jsp中右边的部分我跳转到一个servlet，然后servlet中去数据库中取出所有商品，放到request域中带过去新的jsp页面显示。这虽然能实现，但是很笨。在这里我用了监听器来干这件事，首先自己定义一个监听器，在项目启动的时候把数据库中所有商品信息给取出来，放到application域中，然后首页中直接用EL表达式从application域中去取即可。　　&amp;nbsp;&lt;br>　　还有个问题，当我在管理系统中添加一个新的商品时，我必须要重启一下tomcat才能将新的商品加到application域中，因为第一次取出来后就一直在application域中了，就定死了，后面新添加的就不在application域里面，为了解决这个问题，我使用了定时器来同步首页数据。于是改写了之前写好的监听器，在监听器中设置一个定时器，获取数据库中商品的数据的代码放到定时器任务中，第一次开启立马执行，然后每6个小时执行一次（时间可以自己随便设定），也就是说每6个小时重新获取一下数据库中的商品，存到application域中。一般网站也是这么干的，像CSDN的个人博客主页也是，每天更新一次排名，大概是晚上10点左右吧，具体时间我忘了。那个时候刷新就会看到数据的更新，这样也减小了服务器的压力。&lt;/p>&lt;p>　　该部分具体的技术细节，参见下面这几篇博文：&amp;nbsp;&lt;br>　　&amp;nbsp;&lt;br>　　&lt;a href="https://blog.csdn.net/eson_15/article/details/51373403" target="&amp;quot;blank">使用监听器获取显示在首页的数据&lt;/a>　　&amp;nbsp;&lt;br>　　&lt;a href="https://blog.csdn.net/eson_15/article/details/51373937" target="&amp;quot;blank">监听器如何获取Spring的配置文件&lt;/a>　&amp;nbsp;&lt;br>　　&lt;a href="https://blog.csdn.net/eson_15/article/details/51387378" target="&amp;quot;blank">线程、定时器定时同步首页数据&lt;/a>　&amp;nbsp;&lt;br>　　&lt;a href="https://blog.csdn.net/eson_15/article/details/51405911" target="&amp;quot;blank">Hibernate二级缓存处理首页的热门显示&lt;/a>&lt;/p>&lt;table class="layui-table">&lt;tbody>&lt;tr>&lt;td bgcolor="#F5FFFA">&lt;h2 id="4-购物车相关功能">&lt;a name="t6">&lt;/a>&lt;strong>4. 购物车相关功能&lt;/strong>&lt;/h2>&lt;/td>&lt;/tr>&lt;/tbody>&lt;/table>&lt;p>　　购物车的部分主要涉及到的技术有：&lt;strong>后台的处理购物车和购物项的逻辑&lt;/strong>、&lt;strong>过滤器判断登陆&lt;/strong>、&lt;strong>订单的级联入库&lt;/strong>以及&lt;strong>页面缓存&lt;/strong>的问题。&amp;nbsp;&lt;br>　　购物车的话主要是后台的一些实现逻辑了，购物车里需要有购物项，啥意思呢？我们在天猫上买东西都知道，可以把不同的商品都放到购物车里，然后购物车里有很多商品，每个商品的数量又可以有多个，每个商品及其相关信息就是一个购物项，所以添加购物车的时候，我们首先要完成一个购物项，再将此购物项添加到购物车里。&amp;nbsp;&lt;br>　　当用户想要结算的时候，我们得首先判断用户有没有登陆，这用到了过滤器技术，专门过滤某一类的url，在过滤器中判断当前session中有没有user对象，如果有说明登陆过了，直接放行就行，如果没有则跳转到登陆页面让用户登陆，登陆完成后跳转到用户原来想去的页面。也就相当于门卫一样~看大门的~&amp;nbsp;&lt;br>　　刚刚也提到了，订单信息包含 购物车和购物项，那么我们在订单入库的时候，就要考虑到它们的级联问题，我们可以通过在两者的POJO中设置相应的注解属性即可，但是有个前提，像这种有外键关联的，在入库之前都要将对应的POJO中的外键部分的字段赋好值，比如订单要将订单项加进去，订单项中的订单属性也得赋好值，然后才可以交给Hibernate，Hibernate根据配置好的注解（或者xml文件）将它们一起级联入库。&amp;nbsp;&lt;br>　　页面缓存的问题指的是，当用户确认了订单后，如果点后退，又会回到订单确认页面，刚刚的订单确认页面又出来了，而且session还在，信息还是刚刚的信息，这明显不是我们想要的结果。我们需要在前台和后台同时进行处理才行。&amp;nbsp;&lt;br>　　该部分具体技术细节，请参见下面的几篇博文：&lt;/p></description></item><item><title>SSH框架整合demo</title><link>https://pangyd.com/post/173-sshdemo/</link><pubDate>Sun, 19 Nov 2017 19:49:15 +0800</pubDate><guid>https://pangyd.com/post/173-sshdemo/</guid><description>&lt;h1>Struts、Spring、Hibernate整合&lt;/h1>&lt;h2>&lt;a name="t1">&lt;/a>一、创建web工程，搭建Struts框架开发环境：&lt;/h2>&lt;div>这里只导入了项目中所需要的重要的jar包，以后根据业务要求继续导入相关的包。&lt;br>&lt;/div>&lt;div>&lt;ol>&lt;li>步骤1：:导入struts框架所需的jar包&lt;/li>&lt;li>步骤2：在web.xml中配置struts2.0主过滤器&lt;/li>&lt;li>步骤3：导入struts.xml配置文件&lt;/li>&lt;/ol>&lt;img src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='480' height='120'%3E%3Crect width='480' height='120' fill='%230E1012' stroke='%231B1E22'/%3E%3Ctext x='240' y='66' fill='%235C6069' font-family='monospace' font-size='13' text-anchor='middle'%3E%5B%E5%8E%9F%E5%9B%BE%E5%B7%B2%E5%A4%B1%E6%95%88%5D%3C/text%3E%3C/svg%3E" alt="">&lt;br>&lt;/div>&lt;div>web.xml&lt;/div>&lt;div>&lt;div class="dp-highlighter bg_html">&lt;div class="bar">&lt;div class="tools">&lt;b>[html]&lt;/b>&amp;nbsp;&lt;a href="https://blog.csdn.net/btt2013/article/details/51051660#" class="ViewSource" title="view plain">view plain&lt;/a>&lt;span class="tracking-ad" data-mod="popu_168">&amp;nbsp;&lt;a href="https://blog.csdn.net/btt2013/article/details/51051660#" class="CopyToClipboard" title="copy">copy&lt;/a>&lt;div>&lt;/div>&lt;/span>&lt;span class="tracking-ad" data-mod="popu_169">&lt;/span>&lt;/div>&lt;/div>&lt;ol start="1" class="dp-xml">&lt;li class="alt">&lt;span>&lt;span class="tag">&amp;lt;?&lt;/span>&lt;span class="tag-name">xml&lt;/span>&lt;span>&amp;nbsp;&lt;/span>&lt;span class="attribute">version&lt;/span>&lt;span>=&lt;/span>&lt;span class="attribute-value">"1.0"&lt;/span>&lt;span>&amp;nbsp;&lt;/span>&lt;span class="attribute">encoding&lt;/span>&lt;span>=&lt;/span>&lt;span class="attribute-value">"UTF-8"&lt;/span>&lt;span class="tag">?&amp;gt;&lt;/span>&lt;span>&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="">&lt;span>&lt;span class="tag">&amp;lt;&lt;/span>&lt;span class="tag-name">web-app&lt;/span>&lt;span>&amp;nbsp;&lt;/span>&lt;span class="attribute">version&lt;/span>&lt;span>=&lt;/span>&lt;span class="attribute-value">"2.5"&lt;/span>&lt;span>&amp;nbsp;&lt;/span>&lt;span class="attribute">xmlns&lt;/span>&lt;span>=&lt;/span>&lt;span class="attribute-value">"https://java.sun.com/xml/ns/javaee"&lt;/span>&lt;span>&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="alt">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="attribute">xmlns:xsi&lt;/span>&lt;span>=&lt;/span>&lt;span class="attribute-value">"https://www.w3.org/2001/XMLSchema-instance"&lt;/span>&lt;span>&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="attribute">xsi:schemaLocation&lt;/span>&lt;span>="https://java.sun.com/xml/ns/javaee&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="alt">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;https://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"&lt;span class="tag">&amp;gt;&lt;/span>&lt;span>&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="comments">&amp;lt;!--&amp;nbsp;&amp;nbsp;配置Struts2的主过滤器&amp;nbsp;--&amp;gt;&lt;/span>&lt;span>&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="alt">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="tag">&amp;lt;&lt;/span>&lt;span class="tag-name">filter&lt;/span>&lt;span class="tag">&amp;gt;&lt;/span>&lt;span>&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="tag">&amp;lt;&lt;/span>&lt;span class="tag-name">filter-name&lt;/span>&lt;span class="tag">&amp;gt;&lt;/span>&lt;span>struts2&lt;/span>&lt;span class="tag">&amp;lt;/&lt;/span>&lt;span class="tag-name">filter-name&lt;/span>&lt;span class="tag">&amp;gt;&lt;/span>&lt;span>&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="alt">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="tag">&amp;lt;&lt;/span>&lt;span class="tag-name">filter-class&lt;/span>&lt;span class="tag">&amp;gt;&lt;/span>&lt;span>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter&lt;/span>&lt;span class="tag">&amp;lt;/&lt;/span>&lt;span class="tag-name">filter-class&lt;/span>&lt;span class="tag">&amp;gt;&lt;/span>&lt;span>&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="tag">&amp;lt;/&lt;/span>&lt;span class="tag-name">filter&lt;/span>&lt;span class="tag">&amp;gt;&lt;/span>&lt;span>&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="alt">&lt;span>&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/li>&lt;li class="">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="tag">&amp;lt;&lt;/span>&lt;span class="tag-name">filter-mapping&lt;/span>&lt;span class="tag">&amp;gt;&lt;/span>&lt;span>&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="alt">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="tag">&amp;lt;&lt;/span>&lt;span class="tag-name">filter-name&lt;/span>&lt;span class="tag">&amp;gt;&lt;/span>&lt;span>struts2&lt;/span>&lt;span class="tag">&amp;lt;/&lt;/span>&lt;span class="tag-name">filter-name&lt;/span>&lt;span class="tag">&amp;gt;&lt;/span>&lt;span>&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="tag">&amp;lt;&lt;/span>&lt;span class="tag-name">url-pattern&lt;/span>&lt;span class="tag">&amp;gt;&lt;/span>&lt;span>/*&lt;/span>&lt;span class="tag">&amp;lt;/&lt;/span>&lt;span class="tag-name">url-pattern&lt;/span>&lt;span class="tag">&amp;gt;&lt;/span>&lt;span>&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="alt">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="tag">&amp;lt;/&lt;/span>&lt;span class="tag-name">filter-mapping&lt;/span>&lt;span class="tag">&amp;gt;&lt;/span>&lt;span>&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="tag">&amp;lt;&lt;/span>&lt;span class="tag-name">welcome-file-list&lt;/span>&lt;span class="tag">&amp;gt;&lt;/span>&lt;span>&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="alt">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="tag">&amp;lt;&lt;/span>&lt;span class="tag-name">welcome-file&lt;/span>&lt;span class="tag">&amp;gt;&lt;/span>&lt;span>index.jsp&lt;/span>&lt;span class="tag">&amp;lt;/&lt;/span>&lt;span class="tag-name">welcome-file&lt;/span>&lt;span class="tag">&amp;gt;&lt;/span>&lt;span>&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="tag">&amp;lt;/&lt;/span>&lt;span class="tag-name">welcome-file-list&lt;/span>&lt;span class="tag">&amp;gt;&lt;/span>&lt;span>&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="alt">&lt;span>&lt;span class="tag">&amp;lt;/&lt;/span>&lt;span class="tag-name">web-app&lt;/span>&lt;span class="tag">&amp;gt;&lt;/span>&lt;span>&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;/ol>&lt;/div>struts.xml&lt;/div>&lt;div>&lt;div class="dp-highlighter bg_html">&lt;div class="bar">&lt;div class="tools">&lt;b>[html]&lt;/b>&amp;nbsp;&lt;a href="https://blog.csdn.net/btt2013/article/details/51051660#" class="ViewSource" title="view plain">view plain&lt;/a>&lt;span class="tracking-ad" data-mod="popu_168">&amp;nbsp;&lt;a href="https://blog.csdn.net/btt2013/article/details/51051660#" class="CopyToClipboard" title="copy">copy&lt;/a>&lt;div>&lt;/div>&lt;/span>&lt;span class="tracking-ad" data-mod="popu_169">&lt;/span>&lt;/div>&lt;/div>&lt;ol start="1" class="dp-xml">&lt;li class="alt">&lt;span>&lt;span class="tag">&amp;lt;?&lt;/span>&lt;span class="tag-name">xml&lt;/span>&lt;span>&amp;nbsp;&lt;/span>&lt;span class="attribute">version&lt;/span>&lt;span>=&lt;/span>&lt;span class="attribute-value">"1.0"&lt;/span>&lt;span>&amp;nbsp;&lt;/span>&lt;span class="attribute">encoding&lt;/span>&lt;span>=&lt;/span>&lt;span class="attribute-value">"UTF-8"&lt;/span>&lt;span>&amp;nbsp;&lt;/span>&lt;span class="tag">?&amp;gt;&lt;/span>&lt;span>&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="">&lt;span>&amp;lt;!DOCTYPE&amp;nbsp;struts&amp;nbsp;PUBLIC&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/li>&lt;li class="alt">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;"-//Apache&amp;nbsp;Software&amp;nbsp;Foundation//DTD&amp;nbsp;Struts&amp;nbsp;Configuration&amp;nbsp;2.3//EN"&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/li>&lt;li class="">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;"https://struts.apache.org/dtds/struts-2.3.dtd"&lt;span class="tag">&amp;gt;&lt;/span>&lt;span>&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="alt">&lt;span>&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/li>&lt;li class="">&lt;span>&lt;span class="tag">&amp;lt;&lt;/span>&lt;span class="tag-name">struts&lt;/span>&lt;span class="tag">&amp;gt;&lt;/span>&lt;span>&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="alt">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="comments">&amp;lt;!--&amp;nbsp;配置为开发模式&amp;nbsp;--&amp;gt;&lt;/span>&lt;span>&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="tag">&amp;lt;&lt;/span>&lt;span class="tag-name">constant&lt;/span>&lt;span>&amp;nbsp;&lt;/span>&lt;span class="attribute">name&lt;/span>&lt;span>=&lt;/span>&lt;span class="attribute-value">"struts.devMode"&lt;/span>&lt;span>&amp;nbsp;&lt;/span>&lt;span class="attribute">value&lt;/span>&lt;span>=&lt;/span>&lt;span class="attribute-value">"true"&lt;/span>&lt;span>&amp;nbsp;&lt;/span>&lt;span class="tag">/&amp;gt;&lt;/span>&lt;span>&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="alt">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="comments">&amp;lt;!--&amp;nbsp;配置扩展名为action&amp;nbsp;--&amp;gt;&lt;/span>&lt;span>&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="tag">&amp;lt;&lt;/span>&lt;span class="tag-name">constant&lt;/span>&lt;span>&amp;nbsp;&lt;/span>&lt;span class="attribute">name&lt;/span>&lt;span>=&lt;/span>&lt;span class="attribute-value">"struts.action.extension"&lt;/span>&lt;span>&amp;nbsp;&lt;/span>&lt;span class="attribute">value&lt;/span>&lt;span>=&lt;/span>&lt;span class="attribute-value">"action"&lt;/span>&lt;span class="tag">/&amp;gt;&lt;/span>&lt;span>&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="alt">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="tag">&amp;lt;&lt;/span>&lt;span class="tag-name">package&lt;/span>&lt;span>&amp;nbsp;&lt;/span>&lt;span class="attribute">name&lt;/span>&lt;span>=&lt;/span>&lt;span class="attribute-value">"default"&lt;/span>&lt;span>&amp;nbsp;&lt;/span>&lt;span class="attribute">namespace&lt;/span>&lt;span>=&lt;/span>&lt;span class="attribute-value">"/"&lt;/span>&lt;span>&amp;nbsp;&lt;/span>&lt;span class="attribute">extends&lt;/span>&lt;span>=&lt;/span>&lt;span class="attribute-value">"struts-default"&lt;/span>&lt;span class="tag">&amp;gt;&lt;/span>&lt;span>&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="">&lt;span>&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/li>&lt;li class="alt">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="tag">&amp;lt;/&lt;/span>&lt;span class="tag-name">package&lt;/span>&lt;span class="tag">&amp;gt;&lt;/span>&lt;span>&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/li>&lt;li class="alt">&lt;span>&lt;span class="tag">&amp;lt;/&lt;/span>&lt;span class="tag-name">struts&lt;/span>&lt;span class="tag">&amp;gt;&lt;/span>&lt;span>&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;/ol>&lt;/div>&lt;/div>&lt;h2>&lt;a name="t2">&lt;/a>二、搭建Hibernate开发环境：&lt;/h2>&lt;div>创建数据库：&lt;/div>&lt;div>&lt;img src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='480' height='120'%3E%3Crect width='480' height='120' fill='%230E1012' stroke='%231B1E22'/%3E%3Ctext x='240' y='66' fill='%235C6069' font-family='monospace' font-size='13' text-anchor='middle'%3E%5B%E5%8E%9F%E5%9B%BE%E5%B7%B2%E5%A4%B1%E6%95%88%5D%3C/text%3E%3C/svg%3E" alt="">&lt;br>&lt;/div>&lt;div>这里只导入了项目中所需要的重要的jar包，以后根据业务要求继续导入相关的包。&lt;br>&lt;/div>&lt;div>工程目录：&lt;/div>&lt;div>&lt;img src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='480' height='120'%3E%3Crect width='480' height='120' fill='%230E1012' stroke='%231B1E22'/%3E%3Ctext x='240' y='66' fill='%235C6069' font-family='monospace' font-size='13' text-anchor='middle'%3E%5B%E5%8E%9F%E5%9B%BE%E5%B7%B2%E5%A4%B1%E6%95%88%5D%3C/text%3E%3C/svg%3E" alt="">&lt;br>&lt;/div>&lt;div>hibernate.cfg.xml&lt;br>&lt;/div>&lt;div>&lt;div class="dp-highlighter bg_html">&lt;div class="bar">&lt;div class="tools">&lt;b>[html]&lt;/b>&amp;nbsp;&lt;a href="https://blog.csdn.net/btt2013/article/details/51051660#" class="ViewSource" title="view plain">view plain&lt;/a>&lt;span class="tracking-ad" data-mod="popu_168">&amp;nbsp;&lt;a href="https://blog.csdn.net/btt2013/article/details/51051660#" class="CopyToClipboard" title="copy">copy&lt;/a>&lt;div>&lt;/div>&lt;/span>&lt;span class="tracking-ad" data-mod="popu_169">&lt;/span>&lt;/div>&lt;/div>&lt;ol start="1" class="dp-xml">&lt;li class="alt">&lt;span>&lt;span class="tag">&amp;lt;?&lt;/span>&lt;span class="tag-name">xml&lt;/span>&lt;span>&amp;nbsp;&lt;/span>&lt;span class="attribute">version&lt;/span>&lt;span>=&lt;/span>&lt;span class="attribute-value">"1.0"&lt;/span>&lt;span>&amp;nbsp;&lt;/span>&lt;span class="attribute">encoding&lt;/span>&lt;span>=&lt;/span>&lt;span class="attribute-value">"UTF-8"&lt;/span>&lt;span class="tag">?&amp;gt;&lt;/span>&lt;span>&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="">&lt;span>&amp;lt;!DOCTYPE&amp;nbsp;hibernate-configuration&amp;nbsp;PUBLIC&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/li>&lt;li class="alt">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;"-//Hibernate/Hibernate&amp;nbsp;Configuration&amp;nbsp;DTD&amp;nbsp;3.0//EN"&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/li>&lt;li class="">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;"https://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"&lt;span class="tag">&amp;gt;&lt;/span>&lt;span>&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="alt">&lt;span>&lt;span class="tag">&amp;lt;&lt;/span>&lt;span class="tag-name">hibernate-configuration&lt;/span>&lt;span class="tag">&amp;gt;&lt;/span>&lt;span>&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="tag">&amp;lt;&lt;/span>&lt;span class="tag-name">session-factory&lt;/span>&lt;span class="tag">&amp;gt;&lt;/span>&lt;span>&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="alt">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="comments">&amp;lt;!--&amp;nbsp;配置Hibernate:属性配置参考&amp;nbsp;&amp;nbsp;Hibernate发型包\project\etc\hibernate.properties&amp;nbsp;--&amp;gt;&lt;/span>&lt;span>&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="comments">&amp;lt;!--&amp;nbsp;JDBC的基本链接&amp;nbsp;--&amp;gt;&lt;/span>&lt;span>&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="alt">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="tag">&amp;lt;&lt;/span>&lt;span class="tag-name">property&lt;/span>&lt;span>&amp;nbsp;&lt;/span>&lt;span class="attribute">name&lt;/span>&lt;span>=&lt;/span>&lt;span class="attribute-value">"hibernate.connection.driver_class"&lt;/span>&lt;span class="tag">&amp;gt;&lt;/span>&lt;span>com.mysql.jdbc.Driver&lt;/span>&lt;span class="tag">&amp;lt;/&lt;/span>&lt;span class="tag-name">property&lt;/span>&lt;span class="tag">&amp;gt;&lt;/span>&lt;span>&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="tag">&amp;lt;&lt;/span>&lt;span class="tag-name">property&lt;/span>&lt;span>&amp;nbsp;&lt;/span>&lt;span class="attribute">name&lt;/span>&lt;span>=&lt;/span>&lt;span class="attribute-value">"connection.username"&lt;/span>&lt;span class="tag">&amp;gt;&lt;/span>&lt;span>root&lt;/span>&lt;span class="tag">&amp;lt;/&lt;/span>&lt;span class="tag-name">property&lt;/span>&lt;span class="tag">&amp;gt;&lt;/span>&lt;span>&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="alt">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="tag">&amp;lt;&lt;/span>&lt;span class="tag-name">property&lt;/span>&lt;span>&amp;nbsp;&lt;/span>&lt;span class="attribute">name&lt;/span>&lt;span>=&lt;/span>&lt;span class="attribute-value">"connection.password"&lt;/span>&lt;span class="tag">&amp;gt;&lt;/span>&lt;span>root&lt;/span>&lt;span class="tag">&amp;lt;/&lt;/span>&lt;span class="tag-name">property&lt;/span>&lt;span class="tag">&amp;gt;&lt;/span>&lt;span>&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="tag">&amp;lt;&lt;/span>&lt;span class="tag-name">property&lt;/span>&lt;span>&amp;nbsp;&lt;/span>&lt;span class="attribute">name&lt;/span>&lt;span>=&lt;/span>&lt;span class="attribute-value">"connection.url"&lt;/span>&lt;span class="tag">&amp;gt;&lt;/span>&lt;span>jdbc:mysql://localhost:3306/xbmuoa&lt;/span>&lt;span class="tag">&amp;lt;/&lt;/span>&lt;span class="tag-name">property&lt;/span>&lt;span class="tag">&amp;gt;&lt;/span>&lt;span>&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="alt">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="comments">&amp;lt;!--&amp;nbsp;配置数据库方言&amp;nbsp;--&amp;gt;&lt;/span>&lt;span>&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="tag">&amp;lt;&lt;/span>&lt;span class="tag-name">property&lt;/span>&lt;span>&amp;nbsp;&lt;/span>&lt;span class="attribute">name&lt;/span>&lt;span>=&lt;/span>&lt;span class="attribute-value">"dialect"&lt;/span>&lt;span class="tag">&amp;gt;&lt;/span>&lt;span>org.hibernate.dialect.MySQLDialect&lt;/span>&lt;span class="tag">&amp;lt;/&lt;/span>&lt;span class="tag-name">property&lt;/span>&lt;span class="tag">&amp;gt;&lt;/span>&lt;span>&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="alt">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;!--&amp;nbsp;根据映射产生表结构的类型:&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/li>&lt;li class="">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;create-drop:木有表结构创建，下次启动时删除重新创建。适合学习阶段&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/li>&lt;li class="alt">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;create：只做创建&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/li>&lt;li class="">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;update：探测表结构够的变化，对于数据库没有的，进行更新操作。适合学习阶段&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/li>&lt;li class="alt">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;validate：对比与数据库的结构&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/li>&lt;li class="">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;--&lt;span class="tag">&amp;gt;&lt;/span>&lt;span>&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="alt">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="tag">&amp;lt;&lt;/span>&lt;span class="tag-name">property&lt;/span>&lt;span>&amp;nbsp;&lt;/span>&lt;span class="attribute">name&lt;/span>&lt;span>=&lt;/span>&lt;span class="attribute-value">"hibernate.hbm2ddl.auto"&lt;/span>&lt;span class="tag">&amp;gt;&lt;/span>&lt;span>update&lt;/span>&lt;span class="tag">&amp;lt;/&lt;/span>&lt;span class="tag-name">property&lt;/span>&lt;span class="tag">&amp;gt;&lt;/span>&lt;span>&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="comments">&amp;lt;!--&amp;nbsp;显示sql语句及格式：开发调试阶段非常有用&amp;nbsp;--&amp;gt;&lt;/span>&lt;span>&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="alt">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="tag">&amp;lt;&lt;/span>&lt;span class="tag-name">property&lt;/span>&lt;span>&amp;nbsp;&lt;/span>&lt;span class="attribute">name&lt;/span>&lt;span>=&lt;/span>&lt;span class="attribute-value">"hibernate.show_sql"&lt;/span>&lt;span class="tag">&amp;gt;&lt;/span>&lt;span>true&lt;/span>&lt;span class="tag">&amp;lt;/&lt;/span>&lt;span class="tag-name">property&lt;/span>&lt;span class="tag">&amp;gt;&lt;/span>&lt;span>&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="tag">&amp;lt;&lt;/span>&lt;span class="tag-name">property&lt;/span>&lt;span>&amp;nbsp;&lt;/span>&lt;span class="attribute">name&lt;/span>&lt;span>=&lt;/span>&lt;span class="attribute-value">"hibernate.format_sql"&lt;/span>&lt;span class="tag">&amp;gt;&lt;/span>&lt;span>true&lt;/span>&lt;span class="tag">&amp;lt;/&lt;/span>&lt;span class="tag-name">property&lt;/span>&lt;span class="tag">&amp;gt;&lt;/span>&lt;span>&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="alt">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/li>&lt;li class="">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="comments">&amp;lt;!--&amp;nbsp;告知映射文件&amp;nbsp;--&amp;gt;&lt;/span>&lt;span>&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="alt">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/li>&lt;li class="">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="tag">&amp;lt;/&lt;/span>&lt;span class="tag-name">session-factory&lt;/span>&lt;span class="tag">&amp;gt;&lt;/span>&lt;span>&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="alt">&lt;span>&lt;span class="tag">&amp;lt;/&lt;/span>&lt;span class="tag-name">hibernate-configuration&lt;/span>&lt;span class="tag">&amp;gt;&lt;/span>&lt;span>&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;/ol>&lt;/div>Person.hbm.xml（暂时性先写个映射文件的模板）&lt;/div>&lt;div>&lt;div class="dp-highlighter bg_html">&lt;div class="bar">&lt;div class="tools">&lt;b>[html]&lt;/b>&amp;nbsp;&lt;a href="https://blog.csdn.net/btt2013/article/details/51051660#" class="ViewSource" title="view plain">view plain&lt;/a>&lt;span class="tracking-ad" data-mod="popu_168">&amp;nbsp;&lt;a href="https://blog.csdn.net/btt2013/article/details/51051660#" class="CopyToClipboard" title="copy">copy&lt;/a>&lt;div>&lt;/div>&lt;/span>&lt;span class="tracking-ad" data-mod="popu_169">&lt;/span>&lt;/div>&lt;/div>&lt;ol start="1" class="dp-xml">&lt;li class="alt">&lt;span>&lt;span class="tag">&amp;lt;?&lt;/span>&lt;span class="tag-name">xml&lt;/span>&lt;span>&amp;nbsp;&lt;/span>&lt;span class="attribute">version&lt;/span>&lt;span>=&lt;/span>&lt;span class="attribute-value">"1.0"&lt;/span>&lt;span>&amp;nbsp;&lt;/span>&lt;span class="attribute">encoding&lt;/span>&lt;span>=&lt;/span>&lt;span class="attribute-value">"UTF-8"&lt;/span>&lt;span class="tag">?&amp;gt;&lt;/span>&lt;span>&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="">&lt;span>&amp;lt;!DOCTYPE&amp;nbsp;hibernate-mapping&amp;nbsp;PUBLIC&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/li>&lt;li class="alt">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;"-//Hibernate/Hibernate&amp;nbsp;Mapping&amp;nbsp;DTD&amp;nbsp;3.0//EN"&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/li>&lt;li class="">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;"https://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"&lt;span class="tag">&amp;gt;&lt;/span>&lt;span>&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="alt">&lt;span>&lt;span class="tag">&amp;lt;&lt;/span>&lt;span class="tag-name">hibernate-mapping&lt;/span>&lt;span>&amp;nbsp;&lt;/span>&lt;span class="attribute">package&lt;/span>&lt;span>=&lt;/span>&lt;span class="attribute-value">"cn.xbmu.oa.domain"&lt;/span>&lt;span class="tag">&amp;gt;&lt;/span>&lt;span>&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/li>&lt;li class="alt">&lt;span>&lt;span class="tag">&amp;lt;/&lt;/span>&lt;span class="tag-name">hibernate-mapping&lt;/span>&lt;span class="tag">&amp;gt;&lt;/span>&lt;span>&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;/ol>&lt;/div>&lt;/div>&lt;h2>&lt;a name="t3">&lt;/a>三、搭建Spring开发环境：&lt;/h2>&lt;div>这里只导入了项目中所需要的重要的jar包，以后根据业务要求继续导入相关的包。&lt;/div>&lt;div>&lt;img src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='480' height='120'%3E%3Crect width='480' height='120' fill='%230E1012' stroke='%231B1E22'/%3E%3Ctext x='240' y='66' fill='%235C6069' font-family='monospace' font-size='13' text-anchor='middle'%3E%5B%E5%8E%9F%E5%9B%BE%E5%B7%B2%E5%A4%B1%E6%95%88%5D%3C/text%3E%3C/svg%3E" alt="">&lt;br>&lt;/div>&lt;div>applicationContext.xml&lt;br>&lt;/div>&lt;div>&lt;div class="dp-highlighter bg_html">&lt;div class="bar">&lt;div class="tools">&lt;b>[html]&lt;/b>&amp;nbsp;&lt;a href="https://blog.csdn.net/btt2013/article/details/51051660#" class="ViewSource" title="view plain">view plain&lt;/a>&lt;span class="tracking-ad" data-mod="popu_168">&amp;nbsp;&lt;a href="https://blog.csdn.net/btt2013/article/details/51051660#" class="CopyToClipboard" title="copy">copy&lt;/a>&lt;div>&lt;/div>&lt;/span>&lt;span class="tracking-ad" data-mod="popu_169">&lt;/span>&lt;/div>&lt;/div>&lt;ol start="1" class="dp-xml">&lt;li class="alt">&lt;span>&lt;span class="tag">&amp;lt;?&lt;/span>&lt;span class="tag-name">xml&lt;/span>&lt;span>&amp;nbsp;&lt;/span>&lt;span class="attribute">version&lt;/span>&lt;span>=&lt;/span>&lt;span class="attribute-value">"1.0"&lt;/span>&lt;span>&amp;nbsp;&lt;/span>&lt;span class="attribute">encoding&lt;/span>&lt;span>=&lt;/span>&lt;span class="attribute-value">"UTF-8"&lt;/span>&lt;span class="tag">?&amp;gt;&lt;/span>&lt;span>&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="">&lt;span>&lt;span class="tag">&amp;lt;&lt;/span>&lt;span class="tag-name">beans&lt;/span>&lt;span>&amp;nbsp;&lt;/span>&lt;span class="attribute">xmlns&lt;/span>&lt;span>=&lt;/span>&lt;span class="attribute-value">"https://www.springframework.org/schema/beans"&lt;/span>&lt;span>&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="alt">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="attribute">xmlns:xsi&lt;/span>&lt;span>=&lt;/span>&lt;span class="attribute-value">"https://www.w3.org/2001/XMLSchema-instance"&lt;/span>&lt;span>&amp;nbsp;&lt;/span>&lt;span class="attribute">xmlns:context&lt;/span>&lt;span>=&lt;/span>&lt;span class="attribute-value">"https://www.springframework.org/schema/context"&lt;/span>&lt;span>&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="attribute">xmlns:tx&lt;/span>&lt;span>=&lt;/span>&lt;span class="attribute-value">"https://www.springframework.org/schema/tx"&lt;/span>&lt;span>&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="alt">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="attribute">xsi:schemaLocation&lt;/span>&lt;span>="https://www.springframework.org/schema/beans&amp;nbsp;http://www.springframework.org/schema/beans/spring-beans-2.5.xsd&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;https://www.springframework.org/schema/context&amp;nbsp;http://www.springframework.org/schema/context/spring-context-2.5.xsd&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/li>&lt;li class="alt">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;https://www.springframework.org/schema/tx&amp;nbsp;http://www.springframework.org/schema/tx/spring-tx-2.5.xsd"&lt;span class="tag">&amp;gt;&lt;/span>&lt;span>&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="comments">&amp;lt;!--&amp;nbsp;自动扫描与装配bean&amp;nbsp;--&amp;gt;&lt;/span>&lt;span>&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="alt">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="tag">&amp;lt;&lt;/span>&lt;span class="tag-name">context:component-scan&lt;/span>&lt;span>&amp;nbsp;&lt;/span>&lt;span class="attribute">base-package&lt;/span>&lt;span>=&lt;/span>&lt;span class="attribute-value">"cn.xbmu.oa"&lt;/span>&lt;span class="tag">&amp;gt;&lt;/span>&lt;span class="tag">&amp;lt;/&lt;/span>&lt;span class="tag-name">context:component-scan&lt;/span>&lt;span class="tag">&amp;gt;&lt;/span>&lt;span>&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="">&lt;span>&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/li>&lt;li class="alt">&lt;span>&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/li>&lt;li class="">&lt;span>&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/li>&lt;li class="alt">&lt;span>&lt;span class="tag">&amp;lt;/&lt;/span>&lt;span class="tag-name">beans&lt;/span>&lt;span class="tag">&amp;gt;&lt;/span>&lt;span>&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;/ol>&lt;/div>&lt;strong>以上已经将Struts、Spring、Hibernate开发所需要的jar包及其配置文件已经配置到web工程中了。&lt;/strong>&lt;/div>&lt;div>&lt;strong>接下来，我们两两整合在一起。&lt;br>&lt;/strong>&lt;h2>&lt;a name="t4">&lt;/a>四、Spring与Hibernate整合：&lt;/h2>&lt;/div>&lt;div>&lt;span>让Spring来管理SessionFactory和事务。&lt;/span>&lt;/div>&lt;div>工程目录：&lt;/div>&lt;div>&lt;img src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='480' height='120'%3E%3Crect width='480' height='120' fill='%230E1012' stroke='%231B1E22'/%3E%3Ctext x='240' y='66' fill='%235C6069' font-family='monospace' font-size='13' text-anchor='middle'%3E%5B%E5%8E%9F%E5%9B%BE%E5%B7%B2%E5%A4%B1%E6%95%88%5D%3C/text%3E%3C/svg%3E" alt="">&lt;br>&lt;/div>&lt;div>applicationContext.xml&lt;/div>&lt;div>&lt;div class="dp-highlighter bg_html">&lt;div class="bar">&lt;div class="tools">&lt;b>[html]&lt;/b>&amp;nbsp;&lt;a href="https://blog.csdn.net/btt2013/article/details/51051660#" class="ViewSource" title="view plain">view plain&lt;/a>&lt;span class="tracking-ad" data-mod="popu_168">&amp;nbsp;&lt;a href="https://blog.csdn.net/btt2013/article/details/51051660#" class="CopyToClipboard" title="copy">copy&lt;/a>&lt;div>&lt;/div>&lt;/span>&lt;span class="tracking-ad" data-mod="popu_169">&lt;/span>&lt;/div>&lt;/div>&lt;ol start="1" class="dp-xml">&lt;li class="alt">&lt;span>&lt;span class="tag">&amp;lt;?&lt;/span>&lt;span class="tag-name">xml&lt;/span>&lt;span>&amp;nbsp;&lt;/span>&lt;span class="attribute">version&lt;/span>&lt;span>=&lt;/span>&lt;span class="attribute-value">"1.0"&lt;/span>&lt;span>&amp;nbsp;&lt;/span>&lt;span class="attribute">encoding&lt;/span>&lt;span>=&lt;/span>&lt;span class="attribute-value">"UTF-8"&lt;/span>&lt;span class="tag">?&amp;gt;&lt;/span>&lt;span>&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="">&lt;span>&lt;span class="tag">&amp;lt;&lt;/span>&lt;span class="tag-name">beans&lt;/span>&lt;span>&amp;nbsp;&lt;/span>&lt;span class="attribute">xmlns&lt;/span>&lt;span>=&lt;/span>&lt;span class="attribute-value">"https://www.springframework.org/schema/beans"&lt;/span>&lt;span>&amp;nbsp;&lt;/span>&lt;span class="attribute">xmlns:xsi&lt;/span>&lt;span>=&lt;/span>&lt;span class="attribute-value">"https://www.w3.org/2001/XMLSchema-instance"&lt;/span>&lt;span>&amp;nbsp;&lt;/span>&lt;span class="attribute">xmlns:context&lt;/span>&lt;span>=&lt;/span>&lt;span class="attribute-value">"https://www.springframework.org/schema/context"&lt;/span>&lt;span>&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="alt">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="attribute">xmlns:tx&lt;/span>&lt;span>=&lt;/span>&lt;span class="attribute-value">"https://www.springframework.org/schema/tx"&lt;/span>&lt;span>&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="attribute">xsi:schemaLocation&lt;/span>&lt;span>="https://www.springframework.org/schema/beans&amp;nbsp;http://www.springframework.org/schema/beans/spring-beans-2.5.xsd&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="alt">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;https://www.springframework.org/schema/context&amp;nbsp;http://www.springframework.org/schema/context/spring-context-2.5.xsd&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/li>&lt;li class="">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;https://www.springframework.org/schema/tx&amp;nbsp;http://www.springframework.org/schema/tx/spring-tx-2.5.xsd"&lt;span class="tag">&amp;gt;&lt;/span>&lt;span>&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="alt">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="comments">&amp;lt;!--&amp;nbsp;自动扫描与装配bean&amp;nbsp;--&amp;gt;&lt;/span>&lt;span>&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="tag">&amp;lt;&lt;/span>&lt;span class="tag-name">context:component-scan&lt;/span>&lt;span>&amp;nbsp;&lt;/span>&lt;span class="attribute">base-package&lt;/span>&lt;span>=&lt;/span>&lt;span class="attribute-value">"cn.xbmu.oa"&lt;/span>&lt;span class="tag">&amp;gt;&lt;/span>&lt;span class="tag">&amp;lt;/&lt;/span>&lt;span class="tag-name">context:component-scan&lt;/span>&lt;span class="tag">&amp;gt;&lt;/span>&lt;span>&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="alt">&lt;span>&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/li>&lt;li class="">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="comments">&amp;lt;!--&amp;nbsp;加载外部的properties配置文件&amp;nbsp;--&amp;gt;&lt;/span>&lt;span>&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="alt">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="tag">&amp;lt;&lt;/span>&lt;span class="tag-name">context:property-placeholder&lt;/span>&lt;span>&amp;nbsp;&lt;/span>&lt;span class="attribute">location&lt;/span>&lt;span>=&lt;/span>&lt;span class="attribute-value">"classpath:jdbc.properties"&lt;/span>&lt;span>&amp;nbsp;&lt;/span>&lt;span class="tag">/&amp;gt;&lt;/span>&lt;span>&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="">&lt;span>&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/li>&lt;li class="alt">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="comments">&amp;lt;!--&amp;nbsp;配置数据库连接池（c3p0）&amp;nbsp;--&amp;gt;&lt;/span>&lt;span>&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="tag">&amp;lt;&lt;/span>&lt;span class="tag-name">bean&lt;/span>&lt;span>&amp;nbsp;&lt;/span>&lt;span class="attribute">id&lt;/span>&lt;span>=&lt;/span>&lt;span class="attribute-value">"dataSource"&lt;/span>&lt;span>&amp;nbsp;&lt;/span>&lt;span class="attribute">class&lt;/span>&lt;span>=&lt;/span>&lt;span class="attribute-value">"com.mchange.v2.c3p0.ComboPooledDataSource"&lt;/span>&lt;span class="tag">&amp;gt;&lt;/span>&lt;span>&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="alt">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="comments">&amp;lt;!--&amp;nbsp;基本信息&amp;nbsp;--&amp;gt;&lt;/span>&lt;span>&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="tag">&amp;lt;&lt;/span>&lt;span class="tag-name">property&lt;/span>&lt;span>&amp;nbsp;&lt;/span>&lt;span class="attribute">name&lt;/span>&lt;span>=&lt;/span>&lt;span class="attribute-value">"jdbcUrl"&lt;/span>&lt;span>&amp;nbsp;&lt;/span>&lt;span class="attribute">value&lt;/span>&lt;span>=&lt;/span>&lt;span class="attribute-value">"${jdbcUrl}"&lt;/span>&lt;span class="tag">&amp;gt;&lt;/span>&lt;span class="tag">&amp;lt;/&lt;/span>&lt;span class="tag-name">property&lt;/span>&lt;span class="tag">&amp;gt;&lt;/span>&lt;span>&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="alt">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="tag">&amp;lt;&lt;/span>&lt;span class="tag-name">property&lt;/span>&lt;span>&amp;nbsp;&lt;/span>&lt;span class="attribute">name&lt;/span>&lt;span>=&lt;/span>&lt;span class="attribute-value">"driverClass"&lt;/span>&lt;span>&amp;nbsp;&lt;/span>&lt;span class="attribute">value&lt;/span>&lt;span>=&lt;/span>&lt;span class="attribute-value">"${driverClass}"&lt;/span>&lt;span class="tag">&amp;gt;&lt;/span>&lt;span class="tag">&amp;lt;/&lt;/span>&lt;span class="tag-name">property&lt;/span>&lt;span class="tag">&amp;gt;&lt;/span>&lt;span>&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="tag">&amp;lt;&lt;/span>&lt;span class="tag-name">property&lt;/span>&lt;span>&amp;nbsp;&lt;/span>&lt;span class="attribute">name&lt;/span>&lt;span>=&lt;/span>&lt;span class="attribute-value">"user"&lt;/span>&lt;span>&amp;nbsp;&lt;/span>&lt;span class="attribute">value&lt;/span>&lt;span>=&lt;/span>&lt;span class="attribute-value">"${username}"&lt;/span>&lt;span class="tag">&amp;gt;&lt;/span>&lt;span class="tag">&amp;lt;/&lt;/span>&lt;span class="tag-name">property&lt;/span>&lt;span class="tag">&amp;gt;&lt;/span>&lt;span>&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="alt">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="tag">&amp;lt;&lt;/span>&lt;span class="tag-name">property&lt;/span>&lt;span>&amp;nbsp;&lt;/span>&lt;span class="attribute">name&lt;/span>&lt;span>=&lt;/span>&lt;span class="attribute-value">"password"&lt;/span>&lt;span>&amp;nbsp;&lt;/span>&lt;span class="attribute">value&lt;/span>&lt;span>=&lt;/span>&lt;span class="attribute-value">"${password}"&lt;/span>&lt;span class="tag">&amp;gt;&lt;/span>&lt;span class="tag">&amp;lt;/&lt;/span>&lt;span class="tag-name">property&lt;/span>&lt;span class="tag">&amp;gt;&lt;/span>&lt;span>&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="comments">&amp;lt;!--&amp;nbsp;其他配置&amp;nbsp;--&amp;gt;&lt;/span>&lt;span>&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="alt">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="comments">&amp;lt;!--初始化时获取三个连接，取值应在minPoolSize与maxPoolSize之间。Default:&amp;nbsp;3&amp;nbsp;--&amp;gt;&lt;/span>&lt;span>&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="tag">&amp;lt;&lt;/span>&lt;span class="tag-name">property&lt;/span>&lt;span>&amp;nbsp;&lt;/span>&lt;span class="attribute">name&lt;/span>&lt;span>=&lt;/span>&lt;span class="attribute-value">"initialPoolSize"&lt;/span>&lt;span>&amp;nbsp;&lt;/span>&lt;span class="attribute">value&lt;/span>&lt;span>=&lt;/span>&lt;span class="attribute-value">"3"&lt;/span>&lt;span class="tag">&amp;gt;&lt;/span>&lt;span class="tag">&amp;lt;/&lt;/span>&lt;span class="tag-name">property&lt;/span>&lt;span class="tag">&amp;gt;&lt;/span>&lt;span>&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="alt">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="comments">&amp;lt;!--连接池中保留的最小连接数。Default:&amp;nbsp;3&amp;nbsp;--&amp;gt;&lt;/span>&lt;span>&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="tag">&amp;lt;&lt;/span>&lt;span class="tag-name">property&lt;/span>&lt;span>&amp;nbsp;&lt;/span>&lt;span class="attribute">name&lt;/span>&lt;span>=&lt;/span>&lt;span class="attribute-value">"minPoolSize"&lt;/span>&lt;span>&amp;nbsp;&lt;/span>&lt;span class="attribute">value&lt;/span>&lt;span>=&lt;/span>&lt;span class="attribute-value">"3"&lt;/span>&lt;span class="tag">&amp;gt;&lt;/span>&lt;span class="tag">&amp;lt;/&lt;/span>&lt;span class="tag-name">property&lt;/span>&lt;span class="tag">&amp;gt;&lt;/span>&lt;span>&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="alt">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="comments">&amp;lt;!--连接池中保留的最大连接数。Default:&amp;nbsp;15&amp;nbsp;--&amp;gt;&lt;/span>&lt;span>&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="tag">&amp;lt;&lt;/span>&lt;span class="tag-name">property&lt;/span>&lt;span>&amp;nbsp;&lt;/span>&lt;span class="attribute">name&lt;/span>&lt;span>=&lt;/span>&lt;span class="attribute-value">"maxPoolSize"&lt;/span>&lt;span>&amp;nbsp;&lt;/span>&lt;span class="attribute">value&lt;/span>&lt;span>=&lt;/span>&lt;span class="attribute-value">"5"&lt;/span>&lt;span class="tag">&amp;gt;&lt;/span>&lt;span class="tag">&amp;lt;/&lt;/span>&lt;span class="tag-name">property&lt;/span>&lt;span class="tag">&amp;gt;&lt;/span>&lt;span>&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="alt">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="comments">&amp;lt;!--当连接池中的连接耗尽的时候c3p0一次同时获取的连接数。Default:&amp;nbsp;3&amp;nbsp;--&amp;gt;&lt;/span>&lt;span>&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="tag">&amp;lt;&lt;/span>&lt;span class="tag-name">property&lt;/span>&lt;span>&amp;nbsp;&lt;/span>&lt;span class="attribute">name&lt;/span>&lt;span>=&lt;/span>&lt;span class="attribute-value">"acquireIncrement"&lt;/span>&lt;span>&amp;nbsp;&lt;/span>&lt;span class="attribute">value&lt;/span>&lt;span>=&lt;/span>&lt;span class="attribute-value">"3"&lt;/span>&lt;span class="tag">&amp;gt;&lt;/span>&lt;span class="tag">&amp;lt;/&lt;/span>&lt;span class="tag-name">property&lt;/span>&lt;span class="tag">&amp;gt;&lt;/span>&lt;span>&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="alt">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="comments">&amp;lt;!--&amp;nbsp;控制数据源内加载的PreparedStatements数量。如果maxStatements与maxStatementsPerConnection均为0，则缓存被关闭。Default:&amp;nbsp;0&amp;nbsp;--&amp;gt;&lt;/span>&lt;span>&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="tag">&amp;lt;&lt;/span>&lt;span class="tag-name">property&lt;/span>&lt;span>&amp;nbsp;&lt;/span>&lt;span class="attribute">name&lt;/span>&lt;span>=&lt;/span>&lt;span class="attribute-value">"maxStatements"&lt;/span>&lt;span>&amp;nbsp;&lt;/span>&lt;span class="attribute">value&lt;/span>&lt;span>=&lt;/span>&lt;span class="attribute-value">"8"&lt;/span>&lt;span class="tag">&amp;gt;&lt;/span>&lt;span class="tag">&amp;lt;/&lt;/span>&lt;span class="tag-name">property&lt;/span>&lt;span class="tag">&amp;gt;&lt;/span>&lt;span>&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="alt">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="comments">&amp;lt;!--&amp;nbsp;maxStatementsPerConnection定义了连接池内单个连接所拥有的最大缓存statements数。Default:&amp;nbsp;0&amp;nbsp;--&amp;gt;&lt;/span>&lt;span>&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="tag">&amp;lt;&lt;/span>&lt;span class="tag-name">property&lt;/span>&lt;span>&amp;nbsp;&lt;/span>&lt;span class="attribute">name&lt;/span>&lt;span>=&lt;/span>&lt;span class="attribute-value">"maxStatementsPerConnection"&lt;/span>&lt;span>&amp;nbsp;&lt;/span>&lt;span class="attribute">value&lt;/span>&lt;span>=&lt;/span>&lt;span class="attribute-value">"5"&lt;/span>&lt;span class="tag">&amp;gt;&lt;/span>&lt;span class="tag">&amp;lt;/&lt;/span>&lt;span class="tag-name">property&lt;/span>&lt;span class="tag">&amp;gt;&lt;/span>&lt;span>&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="alt">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="comments">&amp;lt;!--最大空闲时间,1800秒内未使用则连接被丢弃。若为0则永不丢弃。Default:&amp;nbsp;0&amp;nbsp;--&amp;gt;&lt;/span>&lt;span>&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="tag">&amp;lt;&lt;/span>&lt;span class="tag-name">property&lt;/span>&lt;span>&amp;nbsp;&lt;/span>&lt;span class="attribute">name&lt;/span>&lt;span>=&lt;/span>&lt;span class="attribute-value">"maxIdleTime"&lt;/span>&lt;span>&amp;nbsp;&lt;/span>&lt;span class="attribute">value&lt;/span>&lt;span>=&lt;/span>&lt;span class="attribute-value">"1800"&lt;/span>&lt;span class="tag">&amp;gt;&lt;/span>&lt;span class="tag">&amp;lt;/&lt;/span>&lt;span class="tag-name">property&lt;/span>&lt;span class="tag">&amp;gt;&lt;/span>&lt;span>&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="alt">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="tag">&amp;lt;/&lt;/span>&lt;span class="tag-name">bean&lt;/span>&lt;span class="tag">&amp;gt;&lt;/span>&lt;span>&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="">&lt;span>&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/li>&lt;li class="alt">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="comments">&amp;lt;!--&amp;nbsp;配置SessionFactory&amp;nbsp;--&amp;gt;&lt;/span>&lt;span>&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="tag">&amp;lt;&lt;/span>&lt;span class="tag-name">bean&lt;/span>&lt;span>&amp;nbsp;&lt;/span>&lt;span class="attribute">id&lt;/span>&lt;span>=&lt;/span>&lt;span class="attribute-value">"sessionFactory"&lt;/span>&lt;span>&amp;nbsp;&lt;/span>&lt;span class="attribute">class&lt;/span>&lt;span>=&lt;/span>&lt;span class="attribute-value">"org.springframework.orm.hibernate3.LocalSessionFactoryBean"&lt;/span>&lt;span class="tag">&amp;gt;&lt;/span>&lt;span>&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="alt">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="tag">&amp;lt;&lt;/span>&lt;span class="tag-name">property&lt;/span>&lt;span>&amp;nbsp;&lt;/span>&lt;span class="attribute">name&lt;/span>&lt;span>=&lt;/span>&lt;span class="attribute-value">"dataSource"&lt;/span>&lt;span>&amp;nbsp;&lt;/span>&lt;span class="attribute">ref&lt;/span>&lt;span>=&lt;/span>&lt;span class="attribute-value">"dataSource"&lt;/span>&lt;span class="tag">&amp;gt;&lt;/span>&lt;span class="tag">&amp;lt;/&lt;/span>&lt;span class="tag-name">property&lt;/span>&lt;span class="tag">&amp;gt;&lt;/span>&lt;span>&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="tag">&amp;lt;&lt;/span>&lt;span class="tag-name">property&lt;/span>&lt;span>&amp;nbsp;&lt;/span>&lt;span class="attribute">name&lt;/span>&lt;span>=&lt;/span>&lt;span class="attribute-value">"configLocation"&lt;/span>&lt;span>&amp;nbsp;&lt;/span>&lt;span class="attribute">value&lt;/span>&lt;span>=&lt;/span>&lt;span class="attribute-value">"classpath:hibernate.cfg.xml"&lt;/span>&lt;span class="tag">&amp;gt;&lt;/span>&lt;span class="tag">&amp;lt;/&lt;/span>&lt;span class="tag-name">property&lt;/span>&lt;span class="tag">&amp;gt;&lt;/span>&lt;span>&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="alt">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="tag">&amp;lt;/&lt;/span>&lt;span class="tag-name">bean&lt;/span>&lt;span class="tag">&amp;gt;&lt;/span>&lt;span>&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="">&lt;span>&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/li>&lt;li class="alt">&lt;span>&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/li>&lt;li class="">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="comments">&amp;lt;!--&amp;nbsp;配置声明式的事务管理（采用基于注解的方式）&amp;nbsp;--&amp;gt;&lt;/span>&lt;span>&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="alt">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="tag">&amp;lt;&lt;/span>&lt;span class="tag-name">bean&lt;/span>&lt;span>&amp;nbsp;&lt;/span>&lt;span class="attribute">id&lt;/span>&lt;span>=&lt;/span>&lt;span class="attribute-value">"transactionManager"&lt;/span>&lt;span>&amp;nbsp;&lt;/span>&lt;span class="attribute">class&lt;/span>&lt;span>=&lt;/span>&lt;span class="attribute-value">"org.springframework.orm.hibernate3.HibernateTransactionManager"&lt;/span>&lt;span class="tag">&amp;gt;&lt;/span>&lt;span>&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="tag">&amp;lt;&lt;/span>&lt;span class="tag-name">property&lt;/span>&lt;span>&amp;nbsp;&lt;/span>&lt;span class="attribute">name&lt;/span>&lt;span>=&lt;/span>&lt;span class="attribute-value">"sessionFactory"&lt;/span>&lt;span>&amp;nbsp;&lt;/span>&lt;span class="attribute">ref&lt;/span>&lt;span>=&lt;/span>&lt;span class="attribute-value">"sessionFactory"&lt;/span>&lt;span class="tag">&amp;gt;&lt;/span>&lt;span class="tag">&amp;lt;/&lt;/span>&lt;span class="tag-name">property&lt;/span>&lt;span class="tag">&amp;gt;&lt;/span>&lt;span>&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="alt">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="tag">&amp;lt;/&lt;/span>&lt;span class="tag-name">bean&lt;/span>&lt;span class="tag">&amp;gt;&lt;/span>&lt;span>&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="tag">&amp;lt;&lt;/span>&lt;span class="tag-name">tx:annotation-driven&lt;/span>&lt;span>&amp;nbsp;&lt;/span>&lt;span class="attribute">transaction-manager&lt;/span>&lt;span>=&lt;/span>&lt;span class="attribute-value">"transactionManager"&lt;/span>&lt;span>&amp;nbsp;&lt;/span>&lt;span class="tag">/&amp;gt;&lt;/span>&lt;span>&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="alt">&lt;span>&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/li>&lt;li class="">&lt;span>&lt;span class="tag">&amp;lt;/&lt;/span>&lt;span class="tag-name">beans&lt;/span>&lt;span class="tag">&amp;gt;&lt;/span>&lt;span>&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;/ol>&lt;/div>&lt;/div>&lt;div>&lt;pre>&lt;/pre>jdbc.properties&lt;/div>&lt;div>&lt;div class="dp-highlighter bg_plain">&lt;div class="bar">&lt;div class="tools">&lt;b>[plain]&lt;/b>&amp;nbsp;&lt;a href="https://blog.csdn.net/btt2013/article/details/51051660#" class="ViewSource" title="view plain">view plain&lt;/a>&lt;span class="tracking-ad" data-mod="popu_168">&amp;nbsp;&lt;a href="https://blog.csdn.net/btt2013/article/details/51051660#" class="CopyToClipboard" title="copy">copy&lt;/a>&lt;div>&lt;/div>&lt;/span>&lt;span class="tracking-ad" data-mod="popu_169">&lt;/span>&lt;/div>&lt;/div>&lt;ol start="1">&lt;li class="alt">&lt;span>&lt;span>jdbcUrl&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;=&amp;nbsp;jdbc:mysql:///xbmuoa&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="">&lt;span>driverClass&amp;nbsp;=&amp;nbsp;com.mysql.jdbc.Driver&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/li>&lt;li class="alt">&lt;span>username&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;=&amp;nbsp;root&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/li>&lt;li class="">&lt;span>password&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;=&amp;nbsp;root&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/li>&lt;/ol>&lt;/div>SpringTest.java&lt;/div>&lt;div>&lt;div class="dp-highlighter bg_java">&lt;div class="bar">&lt;div class="tools">&lt;b>[java]&lt;/b>&amp;nbsp;&lt;a href="https://blog.csdn.net/btt2013/article/details/51051660#" class="ViewSource" title="view plain">view plain&lt;/a>&lt;span class="tracking-ad" data-mod="popu_168">&amp;nbsp;&lt;a href="https://blog.csdn.net/btt2013/article/details/51051660#" class="CopyToClipboard" title="copy">copy&lt;/a>&lt;div>&lt;/div>&lt;/span>&lt;span class="tracking-ad" data-mod="popu_169">&lt;/span>&lt;/div>&lt;/div>&lt;ol start="1" class="dp-j">&lt;li class="alt">&lt;span>&lt;span class="keyword">package&lt;/span>&lt;span>&amp;nbsp;cn.xbmu.oa.test;&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="">&lt;span>&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/li>&lt;li class="alt">&lt;span>&lt;span class="keyword">import&lt;/span>&lt;span>&amp;nbsp;org.hibernate.SessionFactory;&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="">&lt;span>&lt;span class="keyword">import&lt;/span>&lt;span>&amp;nbsp;org.junit.Test;&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="alt">&lt;span>&lt;span class="keyword">import&lt;/span>&lt;span>&amp;nbsp;org.springframework.context.ApplicationContext;&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="">&lt;span>&lt;span class="keyword">import&lt;/span>&lt;span>&amp;nbsp;org.springframework.context.support.ClassPathXmlApplicationContext;&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="alt">&lt;span>&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/li>&lt;li class="">&lt;span>&lt;span class="keyword">public&lt;/span>&lt;span>&amp;nbsp;&lt;/span>&lt;span class="keyword">class&lt;/span>&lt;span>&amp;nbsp;SpringTest&amp;nbsp;{&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="alt">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword">private&lt;/span>&lt;span>&amp;nbsp;ApplicationContext&amp;nbsp;ac&amp;nbsp;=&amp;nbsp;&lt;/span>&lt;span class="keyword">new&lt;/span>&lt;span>&amp;nbsp;ClassPathXmlApplicationContext(&lt;/span>&lt;span class="string">"applicationContext.xml"&lt;/span>&lt;span>);&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/li>&lt;li class="alt">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="comment">//测试SessionFactory&lt;/span>&lt;span>&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="annotation">@Test&lt;/span>&lt;span>&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="alt">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword">public&lt;/span>&lt;span>&amp;nbsp;&lt;/span>&lt;span class="keyword">void&lt;/span>&lt;span>&amp;nbsp;testSessionFactory(){&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SessionFactory&amp;nbsp;sessionFactory&amp;nbsp;=&amp;nbsp;(SessionFactory)&amp;nbsp;ac.getBean(&lt;span class="string">"sessionFactory"&lt;/span>&lt;span>);&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="alt">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;System.out.println(sessionFactory);&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/li>&lt;li class="">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/li>&lt;li class="alt">&lt;span>}&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/li>&lt;/ol>&lt;/div>使用Junit测试，结果：&lt;/div>&lt;div>&lt;img src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='480' height='120'%3E%3Crect width='480' height='120' fill='%230E1012' stroke='%231B1E22'/%3E%3Ctext x='240' y='66' fill='%235C6069' font-family='monospace' font-size='13' text-anchor='middle'%3E%5B%E5%8E%9F%E5%9B%BE%E5%B7%B2%E5%A4%B1%E6%95%88%5D%3C/text%3E%3C/svg%3E" alt="">&lt;/div>&lt;div>启动tomcat没有报错，说明以上环境的搭建都完全正确，并进行测试，也没有报错。&lt;/div>&lt;div>User.java&lt;/div>&lt;div>&lt;div class="dp-highlighter bg_java">&lt;div class="bar">&lt;div class="tools">&lt;b>[java]&lt;/b>&amp;nbsp;&lt;a href="https://blog.csdn.net/btt2013/article/details/51051660#" class="ViewSource" title="view plain">view plain&lt;/a>&lt;span class="tracking-ad" data-mod="popu_168">&amp;nbsp;&lt;a href="https://blog.csdn.net/btt2013/article/details/51051660#" class="CopyToClipboard" title="copy">copy&lt;/a>&lt;div>&lt;/div>&lt;/span>&lt;span class="tracking-ad" data-mod="popu_169">&lt;/span>&lt;/div>&lt;/div>&lt;ol start="1" class="dp-j">&lt;li class="alt">&lt;span>&lt;span class="keyword">package&lt;/span>&lt;span>&amp;nbsp;cn.xbmu.oa.domain;&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="">&lt;span>&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/li>&lt;li class="alt">&lt;span>&lt;span class="keyword">public&lt;/span>&lt;span>&amp;nbsp;&lt;/span>&lt;span class="keyword">class&lt;/span>&lt;span>&amp;nbsp;User&amp;nbsp;{&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword">private&lt;/span>&lt;span>&amp;nbsp;Long&amp;nbsp;id;&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="alt">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword">private&lt;/span>&lt;span>&amp;nbsp;String&amp;nbsp;name;&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword">public&lt;/span>&lt;span>&amp;nbsp;Long&amp;nbsp;getId()&amp;nbsp;{&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="alt">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword">return&lt;/span>&lt;span>&amp;nbsp;id;&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/li>&lt;li class="alt">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword">public&lt;/span>&lt;span>&amp;nbsp;&lt;/span>&lt;span class="keyword">void&lt;/span>&lt;span>&amp;nbsp;setId(Long&amp;nbsp;id)&amp;nbsp;{&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword">this&lt;/span>&lt;span>.id&amp;nbsp;=&amp;nbsp;id;&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="alt">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/li>&lt;li class="">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword">public&lt;/span>&lt;span>&amp;nbsp;String&amp;nbsp;getName()&amp;nbsp;{&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="alt">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword">return&lt;/span>&lt;span>&amp;nbsp;name;&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/li>&lt;li class="alt">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword">public&lt;/span>&lt;span>&amp;nbsp;&lt;/span>&lt;span class="keyword">void&lt;/span>&lt;span>&amp;nbsp;setName(String&amp;nbsp;name)&amp;nbsp;{&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword">this&lt;/span>&lt;span>.name&amp;nbsp;=&amp;nbsp;name;&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="alt">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/li>&lt;li class="">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/li>&lt;li class="alt">&lt;span>}&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/li>&lt;/ol>&lt;/div>User.hbm.xml&lt;/div>&lt;div>&lt;div class="dp-highlighter bg_html">&lt;div class="bar">&lt;div class="tools">&lt;b>[html]&lt;/b>&amp;nbsp;&lt;a href="https://blog.csdn.net/btt2013/article/details/51051660#" class="ViewSource" title="view plain">view plain&lt;/a>&lt;span class="tracking-ad" data-mod="popu_168">&amp;nbsp;&lt;a href="https://blog.csdn.net/btt2013/article/details/51051660#" class="CopyToClipboard" title="copy">copy&lt;/a>&lt;div>&lt;/div>&lt;/span>&lt;span class="tracking-ad" data-mod="popu_169">&lt;/span>&lt;/div>&lt;/div>&lt;ol start="1" class="dp-xml">&lt;li class="alt">&lt;span>&lt;span class="tag">&amp;lt;?&lt;/span>&lt;span class="tag-name">xml&lt;/span>&lt;span>&amp;nbsp;&lt;/span>&lt;span class="attribute">version&lt;/span>&lt;span>=&lt;/span>&lt;span class="attribute-value">"1.0"&lt;/span>&lt;span>&amp;nbsp;&lt;/span>&lt;span class="attribute">encoding&lt;/span>&lt;span>=&lt;/span>&lt;span class="attribute-value">"UTF-8"&lt;/span>&lt;span class="tag">?&amp;gt;&lt;/span>&lt;span>&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="">&lt;span>&amp;lt;!DOCTYPE&amp;nbsp;hibernate-mapping&amp;nbsp;PUBLIC&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/li>&lt;li class="alt">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;"-//Hibernate/Hibernate&amp;nbsp;Mapping&amp;nbsp;DTD&amp;nbsp;3.0//EN"&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/li>&lt;li class="">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;"https://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"&lt;span class="tag">&amp;gt;&lt;/span>&lt;span>&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="alt">&lt;span>&lt;span class="tag">&amp;lt;&lt;/span>&lt;span class="tag-name">hibernate-mapping&lt;/span>&lt;span>&amp;nbsp;&lt;/span>&lt;span class="attribute">package&lt;/span>&lt;span>=&lt;/span>&lt;span class="attribute-value">"cn.xbmu.oa.domain"&lt;/span>&lt;span class="tag">&amp;gt;&lt;/span>&lt;span>&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="tag">&amp;lt;&lt;/span>&lt;span class="tag-name">class&lt;/span>&lt;span>&amp;nbsp;&lt;/span>&lt;span class="attribute">name&lt;/span>&lt;span>=&lt;/span>&lt;span class="attribute-value">"User"&lt;/span>&lt;span class="tag">&amp;gt;&lt;/span>&lt;span>&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="alt">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="tag">&amp;lt;&lt;/span>&lt;span class="tag-name">id&lt;/span>&lt;span>&amp;nbsp;&lt;/span>&lt;span class="attribute">name&lt;/span>&lt;span>=&lt;/span>&lt;span class="attribute-value">"id"&lt;/span>&lt;span class="tag">&amp;gt;&lt;/span>&lt;span>&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="tag">&amp;lt;&lt;/span>&lt;span class="tag-name">generator&lt;/span>&lt;span>&amp;nbsp;&lt;/span>&lt;span class="attribute">class&lt;/span>&lt;span>=&lt;/span>&lt;span class="attribute-value">"native"&lt;/span>&lt;span class="tag">/&amp;gt;&lt;/span>&lt;span>&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="alt">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="tag">&amp;lt;/&lt;/span>&lt;span class="tag-name">id&lt;/span>&lt;span class="tag">&amp;gt;&lt;/span>&lt;span>&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="tag">&amp;lt;&lt;/span>&lt;span class="tag-name">property&lt;/span>&lt;span>&amp;nbsp;&lt;/span>&lt;span class="attribute">name&lt;/span>&lt;span>=&lt;/span>&lt;span class="attribute-value">"name"&lt;/span>&lt;span class="tag">/&amp;gt;&lt;/span>&lt;span>&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="alt">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="tag">&amp;lt;/&lt;/span>&lt;span class="tag-name">class&lt;/span>&lt;span class="tag">&amp;gt;&lt;/span>&lt;span>&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="">&lt;span>&lt;span class="tag">&amp;lt;/&lt;/span>&lt;span class="tag-name">hibernate-mapping&lt;/span>&lt;span class="tag">&amp;gt;&lt;/span>&lt;span>&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;/ol>&lt;/div>&lt;/div>&lt;div>记得在hibernate.cfg.xml文件中引入映射文件。&lt;/div>&lt;div>&lt;br>&lt;/div>&lt;div>TestService.java&lt;/div>&lt;div>&lt;div class="dp-highlighter bg_java">&lt;div class="bar">&lt;div class="tools">&lt;b>[java]&lt;/b>&amp;nbsp;&lt;a href="https://blog.csdn.net/btt2013/article/details/51051660#" class="ViewSource" title="view plain">view plain&lt;/a>&lt;span class="tracking-ad" data-mod="popu_168">&amp;nbsp;&lt;a href="https://blog.csdn.net/btt2013/article/details/51051660#" class="CopyToClipboard" title="copy">copy&lt;/a>&lt;div>&lt;/div>&lt;/span>&lt;span class="tracking-ad" data-mod="popu_169">&lt;/span>&lt;/div>&lt;/div>&lt;ol start="1" class="dp-j">&lt;li class="alt">&lt;span>&lt;span class="keyword">package&lt;/span>&lt;span>&amp;nbsp;cn.xbmu.oa.test;&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="">&lt;span>&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/li>&lt;li class="alt">&lt;span>&lt;span class="keyword">import&lt;/span>&lt;span>&amp;nbsp;javax.annotation.Resource;&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="">&lt;span>&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/li>&lt;li class="alt">&lt;span>&lt;span class="keyword">import&lt;/span>&lt;span>&amp;nbsp;org.hibernate.SessionFactory;&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="">&lt;span>&lt;span class="keyword">import&lt;/span>&lt;span>&amp;nbsp;org.hibernate.classic.Session;&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="alt">&lt;span>&lt;span class="keyword">import&lt;/span>&lt;span>&amp;nbsp;org.springframework.stereotype.Service;&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="">&lt;span>&lt;span class="keyword">import&lt;/span>&lt;span>&amp;nbsp;org.springframework.transaction.annotation.Transactional;&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="alt">&lt;span>&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/li>&lt;li class="">&lt;span>&lt;span class="keyword">import&lt;/span>&lt;span>&amp;nbsp;cn.xbmu.oa.domain.User;&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="alt">&lt;span>&lt;span class="annotation">@Service&lt;/span>&lt;span>(&lt;/span>&lt;span class="string">"testService"&lt;/span>&lt;span>)&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="">&lt;span>&lt;span class="keyword">public&lt;/span>&lt;span>&amp;nbsp;&lt;/span>&lt;span class="keyword">class&lt;/span>&lt;span>&amp;nbsp;TestService&amp;nbsp;{&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="alt">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="annotation">@Resource&lt;/span>&lt;span>&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword">private&lt;/span>&lt;span>&amp;nbsp;SessionFactory&amp;nbsp;sessionFactory;&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="alt">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="annotation">@Transactional&lt;/span>&lt;span>&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword">public&lt;/span>&lt;span>&amp;nbsp;&lt;/span>&lt;span class="keyword">void&lt;/span>&lt;span>&amp;nbsp;saveTwoUser(){&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="alt">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Session&amp;nbsp;currentSession&amp;nbsp;=&amp;nbsp;sessionFactory.getCurrentSession();&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/li>&lt;li class="">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;currentSession.save(&lt;span class="keyword">new&lt;/span>&lt;span>&amp;nbsp;User());&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="alt">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword">int&lt;/span>&lt;span>&amp;nbsp;i&amp;nbsp;=&amp;nbsp;&lt;/span>&lt;span class="number">1&lt;/span>&lt;span>&amp;nbsp;/&amp;nbsp;&lt;/span>&lt;span class="number">0&lt;/span>&lt;span>;&lt;/span>&lt;span class="comment">//这里会抛出异常&lt;/span>&lt;span>&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;currentSession.save(&lt;span class="keyword">new&lt;/span>&lt;span>&amp;nbsp;User());&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="alt">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/li>&lt;li class="">&lt;span>}&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/li>&lt;/ol>&lt;/div>SpringTest.java&lt;/div>&lt;div>&lt;div class="dp-highlighter bg_java">&lt;div class="bar">&lt;div class="tools">&lt;b>[java]&lt;/b>&amp;nbsp;&lt;a href="https://blog.csdn.net/btt2013/article/details/51051660#" class="ViewSource" title="view plain">view plain&lt;/a>&lt;span class="tracking-ad" data-mod="popu_168">&amp;nbsp;&lt;a href="https://blog.csdn.net/btt2013/article/details/51051660#" class="CopyToClipboard" title="copy">copy&lt;/a>&lt;div>&lt;/div>&lt;/span>&lt;span class="tracking-ad" data-mod="popu_169">&lt;/span>&lt;/div>&lt;/div>&lt;ol start="1" class="dp-j">&lt;li class="alt">&lt;span>&lt;span class="keyword">package&lt;/span>&lt;span>&amp;nbsp;cn.xbmu.oa.test;&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="">&lt;span>&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/li>&lt;li class="alt">&lt;span>&lt;span class="keyword">import&lt;/span>&lt;span>&amp;nbsp;org.hibernate.SessionFactory;&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="">&lt;span>&lt;span class="keyword">import&lt;/span>&lt;span>&amp;nbsp;org.junit.Test;&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="alt">&lt;span>&lt;span class="keyword">import&lt;/span>&lt;span>&amp;nbsp;org.springframework.context.ApplicationContext;&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="">&lt;span>&lt;span class="keyword">import&lt;/span>&lt;span>&amp;nbsp;org.springframework.context.support.ClassPathXmlApplicationContext;&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="alt">&lt;span>&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/li>&lt;li class="">&lt;span>&lt;span class="keyword">public&lt;/span>&lt;span>&amp;nbsp;&lt;/span>&lt;span class="keyword">class&lt;/span>&lt;span>&amp;nbsp;SpringTest&amp;nbsp;{&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="alt">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword">private&lt;/span>&lt;span>&amp;nbsp;ApplicationContext&amp;nbsp;ac&amp;nbsp;=&amp;nbsp;&lt;/span>&lt;span class="keyword">new&lt;/span>&lt;span>&amp;nbsp;ClassPathXmlApplicationContext(&lt;/span>&lt;span class="string">"applicationContext.xml"&lt;/span>&lt;span>);&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/li>&lt;li class="alt">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="comment">//测试SessionFactory&lt;/span>&lt;span>&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="annotation">@Test&lt;/span>&lt;span>&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="alt">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword">public&lt;/span>&lt;span>&amp;nbsp;&lt;/span>&lt;span class="keyword">void&lt;/span>&lt;span>&amp;nbsp;testSessionFactory(){&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SessionFactory&amp;nbsp;sessionFactory&amp;nbsp;=&amp;nbsp;(SessionFactory)&amp;nbsp;ac.getBean(&lt;span class="string">"sessionFactory"&lt;/span>&lt;span>);&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="alt">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;System.out.println(sessionFactory);&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/li>&lt;li class="">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/li>&lt;li class="alt">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="comment">//测试事务&lt;/span>&lt;span>&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="annotation">@Test&lt;/span>&lt;span>&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="alt">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword">public&lt;/span>&lt;span>&amp;nbsp;&lt;/span>&lt;span class="keyword">void&lt;/span>&lt;span>&amp;nbsp;testTransaction(){&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;TestService&amp;nbsp;testService&amp;nbsp;=&amp;nbsp;(TestService)&amp;nbsp;ac.getBean(&lt;span class="string">"testService"&lt;/span>&lt;span>);&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="alt">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;testService.saveTwoUser();&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/li>&lt;li class="">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/li>&lt;li class="alt">&lt;span>}&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/li>&lt;/ol>&lt;/div>测试事务，报错，因为在 int i = 1 / 0这里发生了异常。&lt;/div>&lt;div>&lt;img src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='480' height='120'%3E%3Crect width='480' height='120' fill='%230E1012' stroke='%231B1E22'/%3E%3Ctext x='240' y='66' fill='%235C6069' font-family='monospace' font-size='13' text-anchor='middle'%3E%5B%E5%8E%9F%E5%9B%BE%E5%B7%B2%E5%A4%B1%E6%95%88%5D%3C/text%3E%3C/svg%3E" alt="">&lt;br>查询数据库xbmuoa中的表，没有数据&lt;/div>&lt;div>&lt;img src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='480' height='120'%3E%3Crect width='480' height='120' fill='%230E1012' stroke='%231B1E22'/%3E%3Ctext x='240' y='66' fill='%235C6069' font-family='monospace' font-size='13' text-anchor='middle'%3E%5B%E5%8E%9F%E5%9B%BE%E5%B7%B2%E5%A4%B1%E6%95%88%5D%3C/text%3E%3C/svg%3E" alt="">&lt;/div>&lt;div>我们注释掉 &amp;nbsp;int i = 1 / 0;这句代码，重新测试，成功。&lt;/div>&lt;div>&lt;img src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='480' height='120'%3E%3Crect width='480' height='120' fill='%230E1012' stroke='%231B1E22'/%3E%3Ctext x='240' y='66' fill='%235C6069' font-family='monospace' font-size='13' text-anchor='middle'%3E%5B%E5%8E%9F%E5%9B%BE%E5%B7%B2%E5%A4%B1%E6%95%88%5D%3C/text%3E%3C/svg%3E" alt="">&lt;br>&lt;/div>&lt;div>查询user表，里面已经有了保存的数据&lt;/div>&lt;div>&lt;img src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='480' height='120'%3E%3Crect width='480' height='120' fill='%230E1012' stroke='%231B1E22'/%3E%3Ctext x='240' y='66' fill='%235C6069' font-family='monospace' font-size='13' text-anchor='middle'%3E%5B%E5%8E%9F%E5%9B%BE%E5%B7%B2%E5%A4%B1%E6%95%88%5D%3C/text%3E%3C/svg%3E" alt="">&lt;br>&lt;/div>&lt;div>我们，继续打开抛异常的语句，再测试；再注释抛异常的代码，再测试。查看表中的数据，发现了事务回滚了。&lt;/div>&lt;div>&lt;img src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='480' height='120'%3E%3Crect width='480' height='120' fill='%230E1012' stroke='%231B1E22'/%3E%3Ctext x='240' y='66' fill='%235C6069' font-family='monospace' font-size='13' text-anchor='middle'%3E%5B%E5%8E%9F%E5%9B%BE%E5%B7%B2%E5%A4%B1%E6%95%88%5D%3C/text%3E%3C/svg%3E" alt="">&lt;br>&lt;/div>&lt;div>到此为止，我们顺利的将Spring与Hibernate整合在一起了。并测试了SessionFactory与事务，都正常。&lt;/div>&lt;h2>&lt;a name="t5">&lt;/a>五、Spring与Struts整合：&lt;/h2>&lt;div>为了说明白，我们在整合之前写个Action，整合之后写个Action，看看他们之间的区别：&lt;/div>&lt;h3>&lt;a name="t6">&lt;/a>整合之前：&lt;/h3>&lt;div>TestAction.java&lt;br>&lt;/div>&lt;div>&lt;div class="dp-highlighter bg_java">&lt;div class="bar">&lt;div class="tools">&lt;b>[java]&lt;/b>&amp;nbsp;&lt;a href="https://blog.csdn.net/btt2013/article/details/51051660#" class="ViewSource" title="view plain">view plain&lt;/a>&lt;span class="tracking-ad" data-mod="popu_168">&amp;nbsp;&lt;a href="https://blog.csdn.net/btt2013/article/details/51051660#" class="CopyToClipboard" title="copy">copy&lt;/a>&lt;div>&lt;/div>&lt;/span>&lt;span class="tracking-ad" data-mod="popu_169">&lt;/span>&lt;/div>&lt;/div>&lt;ol start="1" class="dp-j">&lt;li class="alt">&lt;span>&lt;span class="keyword">package&lt;/span>&lt;span>&amp;nbsp;cn.xbmu.oa.test;&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="">&lt;span>&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/li>&lt;li class="alt">&lt;span>&lt;span class="keyword">import&lt;/span>&lt;span>&amp;nbsp;com.opensymphony.xwork2.ActionSupport;&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="">&lt;span>&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/li>&lt;li class="alt">&lt;span>&lt;span class="keyword">public&lt;/span>&lt;span>&amp;nbsp;&lt;/span>&lt;span class="keyword">class&lt;/span>&lt;span>&amp;nbsp;TestAction&amp;nbsp;&lt;/span>&lt;span class="keyword">extends&lt;/span>&lt;span>&amp;nbsp;ActionSupport&amp;nbsp;{&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="annotation">@Override&lt;/span>&lt;span>&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="alt">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword">public&lt;/span>&lt;span>&amp;nbsp;String&amp;nbsp;execute()&amp;nbsp;&lt;/span>&lt;span class="keyword">throws&lt;/span>&lt;span>&amp;nbsp;Exception&amp;nbsp;{&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;System.out.println(&lt;span class="string">"----------&amp;gt;TestAction&amp;nbsp;execute()"&lt;/span>&lt;span>);&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="alt">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="keyword">return&lt;/span>&lt;span>&amp;nbsp;&lt;/span>&lt;span class="string">"success"&lt;/span>&lt;span>;&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/li>&lt;li class="alt">&lt;span>}&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/li>&lt;/ol>&lt;/div>struts.xml&lt;/div>&lt;div>&lt;div class="dp-highlighter bg_html">&lt;div class="bar">&lt;div class="tools">&lt;b>[html]&lt;/b>&amp;nbsp;&lt;a href="https://blog.csdn.net/btt2013/article/details/51051660#" class="ViewSource" title="view plain">view plain&lt;/a>&lt;span class="tracking-ad" data-mod="popu_168">&amp;nbsp;&lt;a href="https://blog.csdn.net/btt2013/article/details/51051660#" class="CopyToClipboard" title="copy">copy&lt;/a>&lt;div>&lt;/div>&lt;/span>&lt;span class="tracking-ad" data-mod="popu_169">&lt;/span>&lt;/div>&lt;/div>&lt;ol start="1" class="dp-xml">&lt;li class="alt">&lt;span>&lt;span class="tag">&amp;lt;?&lt;/span>&lt;span class="tag-name">xml&lt;/span>&lt;span>&amp;nbsp;&lt;/span>&lt;span class="attribute">version&lt;/span>&lt;span>=&lt;/span>&lt;span class="attribute-value">"1.0"&lt;/span>&lt;span>&amp;nbsp;&lt;/span>&lt;span class="attribute">encoding&lt;/span>&lt;span>=&lt;/span>&lt;span class="attribute-value">"UTF-8"&lt;/span>&lt;span>&amp;nbsp;&lt;/span>&lt;span class="tag">?&amp;gt;&lt;/span>&lt;span>&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="">&lt;span>&amp;lt;!DOCTYPE&amp;nbsp;struts&amp;nbsp;PUBLIC&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/li>&lt;li class="alt">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;"-//Apache&amp;nbsp;Software&amp;nbsp;Foundation//DTD&amp;nbsp;Struts&amp;nbsp;Configuration&amp;nbsp;2.3//EN"&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/li>&lt;li class="">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;"https://struts.apache.org/dtds/struts-2.3.dtd"&lt;span class="tag">&amp;gt;&lt;/span>&lt;span>&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="alt">&lt;span>&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/li>&lt;li class="">&lt;span>&lt;span class="tag">&amp;lt;&lt;/span>&lt;span class="tag-name">struts&lt;/span>&lt;span class="tag">&amp;gt;&lt;/span>&lt;span>&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="alt">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="comments">&amp;lt;!--&amp;nbsp;配置为开发模式&amp;nbsp;--&amp;gt;&lt;/span>&lt;span>&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="tag">&amp;lt;&lt;/span>&lt;span class="tag-name">constant&lt;/span>&lt;span>&amp;nbsp;&lt;/span>&lt;span class="attribute">name&lt;/span>&lt;span>=&lt;/span>&lt;span class="attribute-value">"struts.devMode"&lt;/span>&lt;span>&amp;nbsp;&lt;/span>&lt;span class="attribute">value&lt;/span>&lt;span>=&lt;/span>&lt;span class="attribute-value">"true"&lt;/span>&lt;span>&amp;nbsp;&lt;/span>&lt;span class="tag">/&amp;gt;&lt;/span>&lt;span>&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="alt">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="comments">&amp;lt;!--&amp;nbsp;配置扩展名为action&amp;nbsp;--&amp;gt;&lt;/span>&lt;span>&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="tag">&amp;lt;&lt;/span>&lt;span class="tag-name">constant&lt;/span>&lt;span>&amp;nbsp;&lt;/span>&lt;span class="attribute">name&lt;/span>&lt;span>=&lt;/span>&lt;span class="attribute-value">"struts.action.extension"&lt;/span>&lt;span>&amp;nbsp;&lt;/span>&lt;span class="attribute">value&lt;/span>&lt;span>=&lt;/span>&lt;span class="attribute-value">"action"&lt;/span>&lt;span class="tag">/&amp;gt;&lt;/span>&lt;span>&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="alt">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="tag">&amp;lt;&lt;/span>&lt;span class="tag-name">package&lt;/span>&lt;span>&amp;nbsp;&lt;/span>&lt;span class="attribute">name&lt;/span>&lt;span>=&lt;/span>&lt;span class="attribute-value">"default"&lt;/span>&lt;span>&amp;nbsp;&lt;/span>&lt;span class="attribute">namespace&lt;/span>&lt;span>=&lt;/span>&lt;span class="attribute-value">"/"&lt;/span>&lt;span>&amp;nbsp;&lt;/span>&lt;span class="attribute">extends&lt;/span>&lt;span>=&lt;/span>&lt;span class="attribute-value">"struts-default"&lt;/span>&lt;span class="tag">&amp;gt;&lt;/span>&lt;span>&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="comments">&amp;lt;!--&amp;nbsp;测试用的action&amp;nbsp;--&amp;gt;&lt;/span>&lt;span>&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="alt">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="tag">&amp;lt;&lt;/span>&lt;span class="tag-name">action&lt;/span>&lt;span>&amp;nbsp;&lt;/span>&lt;span class="attribute">name&lt;/span>&lt;span>=&lt;/span>&lt;span class="attribute-value">"test"&lt;/span>&lt;span>&amp;nbsp;&lt;/span>&lt;span class="attribute">class&lt;/span>&lt;span>=&lt;/span>&lt;span class="attribute-value">"cn.xbmu.oa.test.TestAction"&lt;/span>&lt;span class="tag">&amp;gt;&lt;/span>&lt;span>&amp;nbsp;&amp;nbsp;&lt;/span>&lt;/span>&lt;/li>&lt;li class="">&lt;span>&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="tag">&amp;lt;&lt;/span>&lt;span class="tag-name">result&lt;/span>&lt;span>&amp;nbsp;&lt;/span>&lt;span class="attribute">name&lt;/span>&lt;span>=&lt;/span>&lt;span class="attribute-value">"success"&lt;/span>&lt;span class="tag">&amp;gt;&lt;/span>&lt;span>/test.jsp&lt;/span>&lt;span class="tag">&amp;lt;/&lt;/span>&lt;span class="tag-name">result&lt;/span>&lt;span class="tag">&amp;gt;&lt;/span>&lt;span>&amp;nbsp;</description></item><item><title>GitHub 上最火的 Java 框架</title><link>https://pangyd.com/post/148-github-java/</link><pubDate>Sat, 28 Oct 2017 20:30:26 +0800</pubDate><guid>https://pangyd.com/post/148-github-java/</guid><description>&lt;p>&lt;span>Java 是目前最需要的编程语言之一。在这里，我们已经挖掘了一些关于框架趋势的有用信息，也就是最受开发者青睐的 Java 框架，名单如下&lt;/span>&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>&lt;/p>&lt;p>&lt;p>&lt;/p>&lt;/p>&lt;section data-role="outer" label="Powered by 135editor.com" style="text-align: start">&lt;section class="" data-tools="135编辑器" data-id="87856">&lt;section>&lt;section class="">1&lt;/section>&lt;section class="" data-bgless="lighten" data-brushtype="text" data-bglessp="20%">Spring MVC&lt;/section>&lt;/section>&lt;/section>&lt;p>&lt;span>&lt;a href="https://github.com/spring-projects/spring-framework/tree/master/spring-webmvc" target="_blank" class="link link-normal">网页链接&lt;/a>&lt;/span>&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>&lt;span>自从 10 多年前的第一次发布之后，SpringMVC 老当益壮，继续保持着领头羊的地位。在其完全拥抱 MVC 框架之后，Spring 不断的发展与变化着，转变成了一个功能全面的面向互联网应用程序的 Java 框架, 它能提供给软件工程师的是一个用于 Web 应用程序开发的强大工具集，以及针对安全项目的应用程序配置。具有如下特性：&lt;/span>&lt;/p>&lt;p>&lt;span>● 简单的 POJO 测试数据注入方式。&lt;/span>&lt;/p>&lt;p>&lt;span>● 增强过的模块化，因此拥有更好的代码可靠性。&lt;/span>&lt;/p>&lt;p>&lt;span>● 不同模块之间解耦和。&lt;/span>&lt;/p>&lt;p>&lt;span>● 能灵活运用的依赖注入（DI）。&lt;/span>&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;section class="" data-tools="135编辑器" data-id="87856">&lt;section>&lt;section class="">2&lt;/section>&lt;section class="" data-bgless="lighten" data-brushtype="text" data-bglessp="20%">Spring Boot&lt;/section>&lt;/section>&lt;/section>&lt;p>&lt;span>&lt;a href="https://github.com/spring-projects/spring-boot" target="_blank" class="link link-normal">网页链接&lt;/a>&lt;/span>&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>&lt;span>Spring Boot 项目旨在简化创建产品级的 Spring 应用和服务。你可通过它来选择不同的 Spring 平台。可创建独立的 Java 应用和 Web 应用，同时提供了命令行工具来允许 'spring scripts'。Spring Boot 不生成代码，完全无需 XML 配置。&lt;/span>&lt;/p>&lt;p>&lt;br>&lt;/p></description></item><item><title>10种编程语言写Hello World，你会几个？</title><link>https://pangyd.com/post/124-10hello-world/</link><pubDate>Wed, 04 Oct 2017 19:58:19 +0800</pubDate><guid>https://pangyd.com/post/124-10hello-world/</guid><description>&lt;p>Hello World是我们进入编程的第一句运行的语言了，至少对于我是这样的，今天小编我收集了19种&lt;a href="https://pangyd.com/" target="_blank">编程语言&lt;/a>写的&lt;a href="https://pangyd.com/" target="_blank">Hello World&lt;/a>,你能看懂几个？&lt;/p>&lt;p>&lt;span id="article-img-0" class="a-image">&lt;img src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='480' height='120'%3E%3Crect width='480' height='120' fill='%230E1012' stroke='%231B1E22'/%3E%3Ctext x='240' y='66' fill='%235C6069' font-family='monospace' font-size='13' text-anchor='middle'%3E%5B%E5%8E%9F%E5%9B%BE%E5%B7%B2%E5%A4%B1%E6%95%88%5D%3C/text%3E%3C/svg%3E">&lt;/span>&lt;/p>&lt;p>1、C&lt;/p>&lt;p>&lt;span id="article-img-1" class="a-image">&lt;img src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='480' height='120'%3E%3Crect width='480' height='120' fill='%230E1012' stroke='%231B1E22'/%3E%3Ctext x='240' y='66' fill='%235C6069' font-family='monospace' font-size='13' text-anchor='middle'%3E%5B%E5%8E%9F%E5%9B%BE%E5%B7%B2%E5%A4%B1%E6%95%88%5D%3C/text%3E%3C/svg%3E">&lt;/span>&lt;/p>&lt;p>2、&lt;a href="https://www.yidianzixun.com/channel/w/java" target="_blank">Java&lt;/a>&lt;/p>&lt;p>&lt;span id="article-img-2" class="a-image">&lt;img src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='480' height='120'%3E%3Crect width='480' height='120' fill='%230E1012' stroke='%231B1E22'/%3E%3Ctext x='240' y='66' fill='%235C6069' font-family='monospace' font-size='13' text-anchor='middle'%3E%5B%E5%8E%9F%E5%9B%BE%E5%B7%B2%E5%A4%B1%E6%95%88%5D%3C/text%3E%3C/svg%3E">&lt;/span>&lt;/p>&lt;p>3、C++&lt;/p>&lt;p>&lt;span id="article-img-3" class="a-image">&lt;img src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='480' height='120'%3E%3Crect width='480' height='120' fill='%230E1012' stroke='%231B1E22'/%3E%3Ctext x='240' y='66' fill='%235C6069' font-family='monospace' font-size='13' text-anchor='middle'%3E%5B%E5%8E%9F%E5%9B%BE%E5%B7%B2%E5%A4%B1%E6%95%88%5D%3C/text%3E%3C/svg%3E">&lt;/span>&lt;/p>&lt;p>4、&lt;a href="https://www.yidianzixun.com/channel/w/php" target="_blank">PHP&lt;/a>&lt;/p>&lt;p>&lt;span id="article-img-4" class="a-image">&lt;img src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='480' height='120'%3E%3Crect width='480' height='120' fill='%230E1012' stroke='%231B1E22'/%3E%3Ctext x='240' y='66' fill='%235C6069' font-family='monospace' font-size='13' text-anchor='middle'%3E%5B%E5%8E%9F%E5%9B%BE%E5%B7%B2%E5%A4%B1%E6%95%88%5D%3C/text%3E%3C/svg%3E">&lt;/span>&lt;/p>&lt;p>5、Basic&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>6、C#&lt;/p>&lt;p>&lt;span id="article-img-5" class="a-image">&lt;img src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='480' height='120'%3E%3Crect width='480' height='120' fill='%230E1012' stroke='%231B1E22'/%3E%3Ctext x='240' y='66' fill='%235C6069' font-family='monospace' font-size='13' text-anchor='middle'%3E%5B%E5%8E%9F%E5%9B%BE%E5%B7%B2%E5%A4%B1%E6%95%88%5D%3C/text%3E%3C/svg%3E">&lt;/span>&lt;/p>&lt;p>7、&lt;a href="https://www.yidianzixun.com/channel/w/python" target="_blank">Python&lt;/a>&lt;/p>&lt;p>&lt;br>&lt;/p>&lt;p>8、&lt;a href="https://www.yidianzixun.com/channel/w/objective-c" target="_blank">Objective-C&lt;/a>&lt;/p>&lt;p>&lt;span id="article-img-6" class="a-image">&lt;img src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='480' height='120'%3E%3Crect width='480' height='120' fill='%230E1012' stroke='%231B1E22'/%3E%3Ctext x='240' y='66' fill='%235C6069' font-family='monospace' font-size='13' text-anchor='middle'%3E%5B%E5%8E%9F%E5%9B%BE%E5%B7%B2%E5%A4%B1%E6%95%88%5D%3C/text%3E%3C/svg%3E">&lt;/span>&lt;/p>&lt;p>9、&lt;a href="https://www.yidianzixun.com/channel/w/javascript" target="_blank">JavaScript&lt;/a>&lt;/p>&lt;p>&lt;span id="article-img-7" class="a-image">&lt;img src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='480' height='120'%3E%3Crect width='480' height='120' fill='%230E1012' stroke='%231B1E22'/%3E%3Ctext x='240' y='66' fill='%235C6069' font-family='monospace' font-size='13' text-anchor='middle'%3E%5B%E5%8E%9F%E5%9B%BE%E5%B7%B2%E5%A4%B1%E6%95%88%5D%3C/text%3E%3C/svg%3E">&lt;/span>&lt;/p>&lt;p>10、汇编语言 x86&lt;/p>&lt;p>&lt;span id="article-img-8" class="a-image">&lt;img src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='480' height='120'%3E%3Crect width='480' height='120' fill='%230E1012' stroke='%231B1E22'/%3E%3Ctext x='240' y='66' fill='%235C6069' font-family='monospace' font-size='13' text-anchor='middle'%3E%5B%E5%8E%9F%E5%9B%BE%E5%B7%B2%E5%A4%B1%E6%95%88%5D%3C/text%3E%3C/svg%3E">&lt;/span>&lt;/p>&lt;p>&lt;span id="article-img-9" class="a-image">&lt;img src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='480' height='120'%3E%3Crect width='480' height='120' fill='%230E1012' stroke='%231B1E22'/%3E%3Ctext x='240' y='66' fill='%235C6069' font-family='monospace' font-size='13' text-anchor='middle'%3E%5B%E5%8E%9F%E5%9B%BE%E5%B7%B2%E5%A4%B1%E6%95%88%5D%3C/text%3E%3C/svg%3E">&lt;/span>&lt;/p>&lt;p>&lt;span id="article-img-10" class="a-image">&lt;img src="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='480' height='120'%3E%3Crect width='480' height='120' fill='%230E1012' stroke='%231B1E22'/%3E%3Ctext x='240' y='66' fill='%235C6069' font-family='monospace' font-size='13' text-anchor='middle'%3E%5B%E5%8E%9F%E5%9B%BE%E5%B7%B2%E5%A4%B1%E6%95%88%5D%3C/text%3E%3C/svg%3E">&lt;/span>&lt;/p>&lt;p>&lt;ol class=" list-paddingleft-2" style="text-align: justify">&lt;/ol>&lt;/p>&lt;p style="text-align: start">当然，编程语言远不止于此，大家学习的一定要记得脚踏实地，不要想着速成，&lt;a target="_self" href="https://pangyd.com/">编程&lt;/a>行业没有速成，只有代码量，希望大家能够铭记这一点，不要走错路。你最喜欢哪门编程语言呢，留言说说你的想法吧，最后我说一句：C语言是世界上最好的语言。&lt;/p></description></item><item><title>Java验证码的绘制</title><link>https://pangyd.com/post/111-java/</link><pubDate>Fri, 22 Sep 2017 20:08:32 +0800</pubDate><guid>https://pangyd.com/post/111-java/</guid><description>&lt;pre lay-lang="Java" class="layui-code" skin="notepad">package cn.itcast.itcaststore.utils;

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
 * 生成验证码的工具类
 */
public class CheckImageServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
	// 集合中保存所有成语
	private List&lt;string> words = new ArrayList&lt;string>();
	@Override
	public void init() throws ServletException {
		// 初始化阶段，读取new_words.txt
		// web工程中读取文件，必须使用绝对磁盘路径
		String path = getServletContext().getRealPath("/WEB-INF/new_words.txt");
		try {
			BufferedReader reader = new BufferedReader(new InputStreamReader(
					new FileInputStream(path), "utf-8"));
			String line;
			while ((line = reader.readLine()) != null) {
				words.add(line);
			}
			reader.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		// 禁止缓存
		// response.setHeader("Cache-Control", "no-cache");
		// response.setHeader("Pragma", "no-cache");
		// response.setDateHeader("Expires", -1);
		int width = 180;
		int height = 30;
		// 步骤一 绘制一张内存中图片
		BufferedImage bufferedImage = new BufferedImage(width, height,
				BufferedImage.TYPE_INT_RGB);
		// 步骤二 图片绘制背景颜色 ---通过绘图对象
		Graphics graphics = bufferedImage.getGraphics();// 得到画图对象 --- 画笔
		// 绘制任何图形之前 都必须指定一个颜色
		graphics.setColor(getRandColor(200, 250));
		graphics.fillRect(0, 0, width, height);
		// 步骤三 绘制边框
		graphics.setColor(Color.WHITE);
		graphics.drawRect(0, 0, width - 1, height - 1);
		// 步骤四 四个随机数字
		Graphics2D graphics2d = (Graphics2D) graphics;
		// 设置输出字体
		graphics2d.setFont(new Font("宋体", Font.BOLD, 18));
		Random random = new Random();// 生成随机数
		int index = random.nextInt(words.size());
		String word = words.get(index-1);// 获得成语
		// 定义x坐标
		int x = 10;
		for (int i = 0; i &amp;lt; word.length(); i++) {
			// 随机颜色
			graphics2d.setColor(new Color(20 + random.nextInt(110), 20 + random
					.nextInt(110), 20 + random.nextInt(110)));
			// 旋转 -30 --- 30度
			int jiaodu = random.nextInt(60) - 30;
			// 换算弧度
			double theta = jiaodu * Math.PI / 180;
			// 获得字母数字
			char c = word.charAt(i);
			// 将c 输出到图片
			graphics2d.rotate(theta, x, 20);
			graphics2d.drawString(String.valueOf(c), x, 20);
			graphics2d.rotate(-theta, x, 20);
			x += 40;
		}
		&lt;a target="_self" href="https://pangyd.com/">// 将验证码内容保存session&lt;/a>
		request.getSession().setAttribute("checkcode_session", word);
		// 步骤五 绘制干扰线
		graphics.setColor(getRandColor(160, 200));
		int x1;
		int x2;
		int y1;
		int y2;
		for (int i = 0; i &amp;lt; 30; i++) {
			x1 = random.nextInt(width);
			x2 = random.nextInt(12);
			y1 = random.nextInt(height);
			y2 = random.nextInt(12);
			graphics.drawLine(x1, y1, x1 + x2, x2 + y2);
		}
		// 将上面图片输出到浏览器 ImageIO
		graphics.dispose();// 释放资源
		ImageIO.write(bufferedImage, "jpg", response.getOutputStream());
	}
	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doGet(request, response);
	}
	/**
	 * 取其某一范围的color
	 * @param fc int 范围参数1
	 * @param bc int 范围参数2
	 * @return Color
	 */
	private Color getRandColor(int fc, int bc) {
		&lt;a target="_self" href="https://pangyd.com/">// 取其随机颜色&lt;/a>
		Random random = new Random();
		if (fc &amp;gt; 255) {
			fc = 255;
		}
		if (bc &amp;gt; 255) {
			bc = 255;
		}
		int r = fc + random.nextInt(bc - fc);
		int g = fc + random.nextInt(bc - fc);
		int b = fc + random.nextInt(bc - fc);
		return new Color(r, g, b);
	}
}
&lt;/string>&lt;/string>&lt;/pre></description></item><item><title>Java-Filter过滤器用于过滤整个项目的编码</title><link>https://pangyd.com/post/110-java-filter/</link><pubDate>Fri, 22 Sep 2017 20:00:54 +0800</pubDate><guid>https://pangyd.com/post/110-java-filter/</guid><description>&lt;p>整个分为实现类以及&lt;span>在web.xml文件中对编写的filter类进行&lt;a target="_self" href="https://pangyd.com/">注册&lt;/a>&lt;/span>&lt;/p>&lt;p>&lt;span>&lt;/span>&lt;/p>&lt;pre lay-lang="Java" class="layui-code" skin="notepad">package cn.itcast.itcaststore.web.filter;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.Map;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
/**
 * 编码过滤器（用于统一项目编码）
 */
public class EncodingFilter implements Filter {
	public void init(FilterConfig filterConfig) throws ServletException {
&lt;pre>&lt;code>}
public void doFilter(ServletRequest request, ServletResponse response,
		FilterChain chain) throws IOException, ServletException {
	// 处理请求乱码
	HttpServletRequest httpServletRequest = (HttpServletRequest) request;
	HttpServletRequest myRequest = new MyRequest(httpServletRequest);
	// 处理响应乱码
	response.setContentType(&amp;quot;text/html;charset=utf-8&amp;quot;);
	chain.doFilter(myRequest, response);
}
public void destroy() {

}
&lt;/code>&lt;/pre>
&lt;p>}
// 自定义request对象
class MyRequest extends HttpServletRequestWrapper {
private HttpServletRequest request;
private boolean hasEncode;
public MyRequest(HttpServletRequest request) {
super(request);// super必须写
this.request = request;
}
// 对需要增强方法 进行覆盖
@SuppressWarnings({ &amp;ldquo;unchecked&amp;rdquo;, &amp;ldquo;rawtypes&amp;rdquo; })
@Override
public Map getParameterMap() {
// 先获得请求方式
String method = request.getMethod();
if (method.equalsIgnoreCase(&amp;ldquo;post&amp;rdquo;)) {
// post请求
try {
// 处理post乱码
request.setCharacterEncoding(&amp;ldquo;utf-8&amp;rdquo;);
return request.getParameterMap();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
} else if (method.equalsIgnoreCase(&amp;ldquo;get&amp;rdquo;)) {
// get请求
Map&amp;lt;string, string[]=&amp;quot;&amp;quot;&amp;gt; parameterMap = request.getParameterMap();
if (!hasEncode) { // 确保get手动编码逻辑只运行一次
for (String parameterName : parameterMap.keySet()) {
String[] values = parameterMap.get(parameterName);
if (values != null) {
for (int i = 0; i &amp;lt; values.length; i++) {
try {
values[i] = new String(values[i].getBytes(&amp;ldquo;ISO-8859-1&amp;rdquo;),&amp;ldquo;utf-8&amp;rdquo;);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
}
}
hasEncode = true;
}
return parameterMap;
}
return super.getParameterMap();
}
@Override
public String getParameter(String name) {
@SuppressWarnings(&amp;ldquo;unchecked&amp;rdquo;)
Map&amp;lt;string, string[]=&amp;quot;&amp;quot;&amp;gt; parameterMap = getParameterMap();
String[] values = parameterMap.get(name);
if (values == null) {
return null;
}
return values[0]; // 取回参数的第一个值
}
@Override
public String[] getParameterValues(String name) {
@SuppressWarnings(&amp;ldquo;unchecked&amp;rdquo;)
Map&amp;lt;string, string[]=&amp;quot;&amp;quot;&amp;gt; parameterMap = getParameterMap();
String[] values = parameterMap.get(name);
return values;
}
}
&amp;lt;/string,&amp;gt;&amp;lt;/string,&amp;gt;&amp;lt;/string,&amp;gt;&lt;/pre>&lt;p>&lt;span>&lt;a target="_self" href="https://pangyd.com/">web.xml配置&lt;/a>&lt;/span>&lt;/p></description></item><item><title>python爬虫——写出最简单的网页爬虫</title><link>https://pangyd.com/post/97-python/</link><pubDate>Sat, 09 Sep 2017 17:08:42 +0800</pubDate><guid>https://pangyd.com/post/97-python/</guid><description>&lt;section data-tools="135编辑器" data-id="89974" style="text-align: justify">&lt;section data-id="us538844">&lt;section>&lt;p>&lt;span class="bannerfix-wrapper" style="text-align: center">&lt;img data-s="300,640" data-type="jpeg" data-src="//qqpublic.qpic.cn/qq_public/0/0-2599578271-A1CD3C3D44AED332B9085FFD7BA070AD/0?fmt=jpg&amp;size=31&amp;rs=23-21&amp;h=427&amp;w=640&amp;ppv=1" data-ratio="0.66640625" data-w="1280" src="https://pangyd.com/uploads/2017/09/1b8214ac44494614.jpg" data-fail="0" data-ueid="20895" width="640" height="auto" data-width="640" data-height="427" data-org="https://mmbiz.qpic.cn/mmbiz_jpg/Mzws9oBx0P7kQpiaL4oQG7TZxbZ6hwFdlbmh5WVswicJbvugib0w0ujibUqXjvUgFuUSme9lNFeDeiaVoric6jSpvmGA/640?wx_fmt=jpeg&amp;wxfrom=5&amp;wx_lazy=1" data-lazy="0">&lt;/span>&lt;/p>&lt;/section>&lt;/section>&lt;/section>&lt;section data-id="us538844" style="text-align: justify">&lt;section>&lt;section>&lt;p>&lt;span>在我们日常上网浏览网页的时候，经常会看到一些好看的图片，我们就希望把这些图片保存下载，或者用户用来做桌面壁纸，或者用来做设计的素材。&lt;/span>&lt;span>我们可以通过&lt;/span>&lt;span>python&amp;nbsp;&lt;/span>&lt;span>来实现这样一个简单的爬虫功能，把我们想要的代码爬取到本地。下面就看看如何使用&lt;/span>&lt;span>python&lt;/span>&lt;span>来实现这样一个功能。&lt;/span>&lt;/p>&lt;/section>&lt;section data-width="100%">&lt;section>&lt;img data-src="//qqpublic.qpic.cn/qq_public/0/0-2516127415-94DD69FAB0632899CD9E62C400ADDFE6/0?fmt=png&amp;size=1&amp;rs=1-0&amp;h=37&amp;w=43&amp;ppv=1" data-ratio="0.8604651162790697" data-w="43" data-type="png" src="https://pangyd.com/uploads/2017/09/1b8214ac44494614.jpg" data-fail="0" data-ueid="592180" width="43" height="auto" data-width="43" data-height="37" data-org="https://mmbiz.qpic.cn/mmbiz_png/Mzws9oBx0P7kQpiaL4oQG7TZxbZ6hwFdlSWdbiaWc3zB05Dc3TN73GB0wFsJZ2xN6V1BlNytSzCqpkOSErJWEKRQ/0.png?wxfrom=5&amp;wx_lazy=1" data-lazy="0">&lt;/section>&lt;/section>&lt;/section>&lt;/section>&lt;section data-id="us538906" style="text-align: justify">&lt;section>&lt;section data-width="100%">&lt;section data-brushtype="text">&lt;span>&lt;strong>开发工具&lt;/strong>&lt;/span>&lt;/section>&lt;/section>&lt;/section>&lt;/section>&lt;p style="text-align: justify">&lt;span>笔者使用的工具是sublimetext3，它的短小精悍（可能男人们都不喜欢这个词）使我十分着迷。推荐大家使用，当然如果你的电脑配置不错，pycharm可能更加适合你。&lt;/span>&lt;/p>&lt;p style="text-align: justify">&lt;span>sublime text3搭建python开发环境推荐查看此博客：&lt;/span>&lt;/p>&lt;p style="text-align: justify">&lt;span>[sublime搭建python开发环境]&lt;/span>&lt;span>[https://www.cnblogs.com/codefish/p/4806849.&lt;/span>&lt;/p>&lt;section data-id="us538906" style="text-align: justify">&lt;section>&lt;section data-width="100%">&lt;section data-brushtype="text">&lt;span>&lt;strong>爬虫介绍&lt;/strong>&lt;/span>&lt;/section>&lt;/section>&lt;/section>&lt;/section>&lt;p style="text-align: justify">&lt;span>&lt;span>爬虫顾名思义，就是像虫子一样，爬在&lt;/span>Internet&lt;span>这张大网上。如此，我们便可以获取自己想要的东西。&lt;/span>&lt;/span>&lt;/p>&lt;p style="text-align: justify">&lt;span>&lt;span>既然要爬在&lt;/span>Internet&lt;span>上，那么我们就需要了解&lt;/span>URL&lt;span>，法号&lt;/span>“&lt;span>统一资源定位器&lt;/span>”&lt;span>，小名&lt;/span>“&lt;span>链接&lt;/span>”&lt;span>。其结构主要由三部分组成：&lt;/span>&lt;/span>&lt;/p>&lt;p style="text-align: justify">&lt;span>&lt;span>（&lt;/span>1&lt;span>）协议：如我们在网址中常见的&lt;/span>HTTP&lt;span>协议。&lt;/span>&lt;/span>&lt;/p>&lt;p style="text-align: justify">&lt;span>&lt;span>（&lt;/span>2&lt;span>）域名或者&lt;/span>IP&lt;span>地址：域名，如：&lt;/span>www.baidu.com&lt;span>，&lt;/span>IP&lt;span>地址，即将域名解析后对应的&lt;/span>IP&lt;span>。&lt;/span>&lt;/span>&lt;/p>&lt;p style="text-align: justify">&lt;span>&lt;span>（&lt;/span>3&lt;span>）路径：即目录或者文件等。&lt;/span>&lt;/span>&lt;/p>&lt;section data-id="us538906" style="text-align: justify">&lt;section>&lt;section data-width="100%">&lt;section data-brushtype="text">&lt;strong>urllib开发最简单的爬虫&lt;/strong>&lt;/section>&lt;/section>&lt;/section>&lt;/section>&lt;h2 style="text-align: justify">&lt;strong>（1）urllib简介&lt;/strong>&lt;/h2>&lt;p style="text-align: justify">&lt;span class="bannerfix-wrapper" style="text-align: center">&lt;img data-s="300,640" data-type="png" data-src="//qqpublic.qpic.cn/qq_public/0/0-2934665086-C4DD3D1B4A848A0F5D9739358CE38612/0?fmt=png&amp;size=12&amp;rs=9-8&amp;h=202&amp;w=837&amp;ppv=1" data-ratio="0.24133811230585425" data-w="837" src="https://pangyd.com/uploads/2017/09/1b8214ac44494614.jpg" data-fail="0" data-ueid="266081" width="837" height="auto" data-width="837" data-height="202" data-org="https://mmbiz.qpic.cn/mmbiz_png/Mzws9oBx0P7kQpiaL4oQG7TZxbZ6hwFdlbAnCoicvLvF2aLKfpCqp6NaztGRzkTQvN6LRN0av2u6XVBjA2N1b7LA/0.png?wxfrom=5&amp;wx_lazy=1" data-lazy="0">&lt;/span>&lt;/p></description></item><item><title>网站改版301重定向与快速恢复收录解决方法</title><link>https://pangyd.com/post/94-301/</link><pubDate>Wed, 06 Sep 2017 19:20:43 +0800</pubDate><guid>https://pangyd.com/post/94-301/</guid><description>&lt;p>今天终于趋于稳定，起码博客在百度重新收录让我感到一丝欣慰。谷歌和360在昨天就已经恢复了收录。但目前百度搜索的流量仍是本站最多的流量来源，所以直到百度有了收录我才松了口气。对于看重SEO的人，对收录重视程度不必多说。&lt;div>&lt;br>&lt;/div>&lt;div>　　本次恢复收录统计：百度：2天，谷歌：1天，360 ：1天。&lt;/div>&lt;div>&lt;br>&lt;/div>&lt;div>　　当然只是有了部分收录，并不是所有页面完全收录转移了。估计要等到所有页面转移，权重转移可能需要2个星期甚至一个月。&lt;/div>&lt;div>&lt;br>&lt;/div>&lt;div>　　自我感觉还不错，因为我之前百度了一下前辈们是怎么处理这种事情的，发现有的人一个月还没有被收录。所以我感觉自己真的是很幸运。大家这里不用怀疑我新站的收录会不会是百度的正常收录。因为我可以完全肯定是我自己的功劳。下面我会把自己所做的方法完全分享出来，给大家一个借鉴。&lt;/div>&lt;div>&lt;br>&lt;/div>&lt;div>　　1，&lt;a target="_blank" href="https://pangyd.com/">网站&lt;/a>301重定向。虽然很多朋友都知道什么是301了，但我还是系统的说一下。&lt;/div>&lt;div>&lt;br>&lt;/div>&lt;div>　　&lt;/div>&lt;div>&lt;br>&lt;/div>&lt;div> &lt;/div>&lt;div>&lt;br>&lt;/div>&lt;div>　　页面永久性移走(301重定向)是一种非常重要的“自动转向”技术。网址重定向最为可行的一种办法。当用户或搜索引擎向网站服务 器发出浏览请求时，服务器返回的HTTP数据流中头信息(header)中的状态码的一种，表示本网页永久性转移到另一个地址”。&lt;/div>&lt;div>&lt;br>&lt;/div>&lt;div>　　这样就明白了，简单看来就是显性的URL转发。实际意义就是告诉搜索引擎这个页面已经永久的被转移到另一个页面了。既然知道了这个301的意义，那如何做301重定向呢?&lt;/div>&lt;div>&lt;br>&lt;/div>&lt;div>　　1)，可以在域名解析端设置301重定向。现在一般的域名解析服务商已经提供301重定向的功能，如DNSPOD，但是需要域名转入1个月以后，而且需要审核。&lt;/div>&lt;div>&lt;br>&lt;/div>&lt;div>　　2)，服务器端301重定向，现在大部分虚拟主机管理面板都提供了这一选项。比如我用的DA。或者一些国内的面板都有。(因为面板不同，具体方法可以留言，我帮助你。或者自行百度。这里就不在叙述。)当然如果你是VPS用户或者服务器用户因为面板自己安装可能就没有这一功能，那么你可以使用方法1或者3。&lt;/div>&lt;div>&lt;br>&lt;/div>&lt;div>　　IIS重定向的方法：Internet信息服务管理器 -&amp;gt; 虚拟目录 -&amp;gt; 重定向到URL，输入需要转向的目标URL，并选择&amp;quot;资源的永久重定向&amp;quot;。&lt;/div>&lt;div>&lt;br>&lt;/div>&lt;div>　　3)，代码重定向，这个就是比较通用的了，用代码的方式实现301重定向&lt;/div>&lt;div>&lt;br>&lt;/div>&lt;div>　　1.301重定向之ASP&lt;/div>&lt;div>&lt;br>&lt;/div>&lt;div>　　2、301重定向之PHP&lt;/div>&lt;div>&lt;br>&lt;/div>&lt;div>　　Header( &amp;ldquo;HTTP/1.1 301 Moved Permanently&amp;rdquo; ) ;&lt;/div>&lt;div>&lt;br>&lt;/div>&lt;div>　　Header( &amp;ldquo;Location: https://www.&lt;em>&lt;strong>.com&amp;rdquo; );&lt;/div>&lt;div>&lt;br>&lt;/div>&lt;div>　　?&amp;gt;&lt;/div>&lt;div>&lt;br>&lt;/div>&lt;div>　　3、301重定向之NET&lt;/div>&lt;div>&lt;br>&lt;/div>&lt;div>　　还有的虚拟主机自带了配置文件，使用方法如下。&lt;/div>&lt;div>&lt;br>&lt;/div>&lt;div>　　把下面一段代码 保存为 httpd.ini 放到web里。网址换成自己。实现301跳转.&lt;/div>&lt;div>&lt;br>&lt;/div>&lt;div>　　[ISAPI_Rewrite]&lt;/div>&lt;div>&lt;br>&lt;/div>&lt;div>　　CacheClockRate 3600&lt;/div>&lt;div>&lt;br>&lt;/div>&lt;div>　　RepeatLimit 32&lt;/div>&lt;div>&lt;br>&lt;/div>&lt;div>　　RewriteCond Host: ^&lt;/strong>&lt;/em>.com&lt;/div>&lt;div>&lt;br>&lt;/div>&lt;div>　　RewriteRule (.&lt;em>) https://www.&lt;/em>&lt;em>&lt;em>.com$1 [RP]&lt;/div>&lt;div>&lt;br>&lt;/div>&lt;div>　　下面是.htaccess的代码&lt;/div>&lt;div>&lt;br>&lt;/div>&lt;div>　　RewriteEngine On&lt;/div>&lt;div>&lt;br>&lt;/div>&lt;div>　　RewriteCond %{http_host} ^ycyskycom [NC]&lt;/div>&lt;div>&lt;br>&lt;/div>&lt;div>　　RewriteRule ^(.&lt;/em>)$ https://www.&lt;/em>**.com/$1 [R=301,L]&lt;/div>&lt;div>&lt;br>&lt;/div>&lt;div>　　2，既然做好了网页重定向，那么下一步就是去百度站长平台提交改版规则。&lt;/div>&lt;div>&lt;br>&lt;/div>&lt;div>　　以下是百度站长平台的改版规则说明及其我网站改版提交的规则截图&lt;/div>&lt;div>&lt;br>&lt;/div>&lt;div>　　&lt;/div>&lt;div>&lt;br>&lt;/div>&lt;div> &lt;/div>&lt;div>&lt;br>&lt;/div>&lt;div>　　改版范围说明域名改版：会将此站点其子站点下所有的页面进行改版处理。比如当前站点为 &lt;a href="https://baidu.com/">https://baidu.com/&lt;/a>，域名范围的改版会将 &lt;a href="https://baidu.com/">https://baidu.com/&lt;/a>，http://wenku.baidu.com/，http://tieba.baidu.com/ 等站点的所有页面一并做改版处理。目录改版：支持当前站点的目录和子站点的目录，把此目录下的URL做改版处理。比如当前站点是 &lt;a href="https://baidu.com/">https://baidu.com/&lt;/a>，改版范围是 &lt;a href="https://wenku.baidu.com/ac/">https://wenku.baidu.com/ac/&lt;/a>，则会将 &lt;a href="https://wenku.baidu.com/ac/1.html">https://wenku.baidu.com/ac/1.html&lt;/a>，http://wenku.baidu.com/ac/2.html 等URL做改版处理。&lt;/div>&lt;div>&lt;br>&lt;/div>&lt;div>　　规则提交后，一般48小时内会反馈预计处理时间，每天更新一次处理进度。期间您可以通过以下方法来查看改版处理情况：关注新网站的抓取异常情况，短期内适当提升抓取压力帮助新网站更快抓取;关注新网站的索引量波动，关注网站改版工具显示的已替换链接条数;同时对旧网站的域还需保留一段时间，直到新网站在百度索引和展现效果佳。&lt;/div>&lt;div>&lt;br>&lt;/div>&lt;div>　　注：在站长平台提交改版规则很重要，如果提交的话，可能收录很快恢复，像我的两天就有了新的收录，如果收录是新站的话，是不可能的，即便有收录，也不会先收录内容页而不收录首页。所以这一部很重要，但需要注意的是，提交之前务必做好301重定向。&lt;/div>&lt;div>&lt;br>&lt;/div>&lt;div>　　3，向百度提供sitemap，也就是网站结构化地图。因为每个网站系统不同的原因构架也不同，这里也不好说什么，但是百度站长平台提供了Discuz!和Wordpress结构化的插件，可以简易的提交网站sitemap。但也会相应的增加服务器负担。&lt;/div>&lt;div>&lt;br>&lt;/div>&lt;div>　　注：平常最好也使用，不必301重定向时才使用。(服务器负担问题这里不计算，请自行测试。)&lt;/div>&lt;div>&lt;br>&lt;/div>&lt;div>　　4，网站链接&lt;/div>&lt;div>&lt;br>&lt;/div>&lt;div>　　这个就不必说太多了，因为平时大家可能做的最多的就是外链与友链。写在301重定向这里的意思就是希望大家尽快把友情链接转移到新域名处，增加新域名的权重，而外链就要重新去发喽。&lt;/div>&lt;div>&lt;br>&lt;/div>&lt;div>　　写到这里，本篇&lt;a target="_blank" href="https://pangyd.com/">文章&lt;/a>就结束了，因本人才疏学浅，写此文章也纯属一时兴起，如有不正确的地方希望予以包含和指正。感谢www.ycysky.com站长投稿!&lt;/div>&lt;/p></description></item><item><title>个人失败的网站运营经历，三年一分钱没赚到</title><link>https://pangyd.com/post/93/</link><pubDate>Tue, 05 Sep 2017 18:10:27 +0800</pubDate><guid>https://pangyd.com/post/93/</guid><description>&lt;p style="text-align: justify">如果是三年前的自己，根本就不会想过三年后会是这个样子——运营三年一分钱都没有赚到。服务器成本、域名成本等硬性成本全部都是自讨腰包。其他人工推广维护根本就无法计算。&lt;/p>&lt;p style="text-align: justify">今天，三年前的续费即将过去到期，开始思考着自己是该继续续费还是放弃。&lt;/p>&lt;p style="text-align: justify">叹屌丝逆袭多么的艰难。一开始想的是多么的美好。“建立一个内容丰富的网站，有图片、文字、聊天、交友。运营一段时间内流量上来了就挂谷歌adsense赚取点费用维持服务器成本。后期通过这个网站盈利，想着日赚XXX的美梦。”但是没有想过结局跟网上吹的那种日赚XXX是多么的天壤之别。&lt;/p>&lt;p style="text-align: center">&lt;img alt="个人失败的网站运营经历，三年一分钱没赚到 好文分享" title="个人失败的网站运营经历，三年一分钱没赚到 好文分享" src="https://pangyd.com/uploads/2017/09/d5731b7a2fec55d4.jpg" width="590" height="417">&lt;/p>&lt;p style="text-align: center">（博文配图，图片与作者本文无关）&lt;/p>&lt;p style="text-align: justify">&lt;strong>第一年：&lt;/strong>&lt;/p>&lt;p style="text-align: justify">挂&lt;a href="https://lusongsong.com/info/post/310.html" target="_blank">adsense&lt;/a>，半年多了还不到100人民币，点击单价越来越低而且要多低就有多低，基本上等于免费挂谷歌的广告。虽然网站流量每天在1K,PV在2K左右，但对于盈利仍旧是无计可施。&lt;a href="https://baidu.com" target="_blank" class="keywordlink">百度&lt;/a>收录有谷歌收录访客有流量但是根本就赚不到钱。看到这样的情况，满腔热情有点被泼冷水的感觉，但是还是坚持，心里想着是网站挂着又没事。&lt;/p>&lt;p style="text-align: justify">&lt;strong>第二年：&lt;/strong>&lt;/p>&lt;p style="text-align: justify">很悲催，谷歌adsense不给任何理由就把我的网站域名给封了。之后我想过去挂百度联盟的广告，很可惜，没有备案网站是放不了百度的联盟广告的。还有其他的联盟比如阿里妈妈，根本就不用去挂的。网站每天没有几千几万流量，挂几十年收入都是0!剩下的其他一些杂乱的广告联盟商，不想去浪费时间，看到他们的广告感觉很低俗、如果网站上面挂了那样的广告给人的感觉就是一个s情h站!都是些卖w哥、壮阳、或者luo聊、同城交友(那种)、游戏弹窗，挂马的广告。如果放这样的广告到自己的网站上，只能是饮鸩止渴。很悲催的，服务器费用仍旧是自己掏腰包。而且已经一种不管他的状态。&lt;/p>&lt;p style="text-align: justify">&lt;strong>第三年：&lt;/strong>&lt;/p>&lt;p style="text-align: justify">很多人都说如果一个网站已经运营了超过2年还是不盈利，那么这个网站可以关闭了。现在想起来，觉得确实是的，2年的时间，已经不是新站了。但是仍旧不是盈利状态，只能说明运营不善。第三年里面很心灰意懒，不想去给网站加什么内容，只是定期备份，检查网站是否可以正常使用是否可以正常运行。访问流量还是那样差，每天才2K IP左右。雪上加霜的是在2012年六七月份的时候，百度k站了，流量直线下降90%。后来虽然收录上回升了一半，有1万多。但是每天来自百度的流量始终都是0，切切实实始终都是0。没有流量，更别提盈利，让自己更觉得心灰意懒。&lt;/p>&lt;p style="text-align: justify">&lt;strong>第四年：今年现在2013。&lt;/strong>&lt;/p>&lt;p style="text-align: justify">静下心来思考，开始反思。想到了自己为什么要做这个网站，觉得有点可笑，一开始想着通过运营网站赚钱，结果却是一直都是自掏腰包赔本。自己该继续运营下去还是直接放弃?不由得想到了网站的最终结果：收点小钱而已，不用自己掏腰包去垫付服务器的成本费和域名的注册费。&lt;/p>&lt;p style="text-align: justify">&lt;strong>自己该继续坚持下去吗?&lt;/strong>&lt;/p>&lt;p style="text-align: justify">跟别人交流了很多次，把网站给了很多人看。&lt;/p>&lt;p style="text-align: justify">很多人打开一瞪眼就说网站太丑了，一个图片都没有，一个动画都没有，不想继续访问下去，想直接关闭。有的人说访问速度太慢了。其实是因为我网站没有beian，只能放在国外，虽然已经算是最快的服务器了，但是访问速度还是很慢。没有办法，自己网站一直都是不盈利不赚钱，哪有那么多钱去升级服务器买好的服务器?也给了一些SEO人士看，都说出来的是网站没有外链，很少。基本上没有在外面宣传推广过一样。因为自己没有那么多精力去推广，只能三天打鱼两天晒网。&lt;/p>&lt;p style="text-align: justify">网站运营的第四年，也许自己已经明白了这个网站为什么一直都是这么没有起色，没有流量也没有收益。看到很多域名注册不到1年的网站流量、收录都异常火爆、权重非常高，让自己觉得奇怪，自己一开始认定的域名越老越权重高，而自己的网站已经运营了三四年了，百度权重还是0、谷歌pr也从原先的2降到了0。&lt;/p>&lt;p style="text-align: justify">回想自己这三年来的付出，经常熬夜通宵达旦的修改网站程序源码，基本上已经把网站源码改得地覆天翻。经常为了调节一个细小的代码优化而废寝忘食、甚至一整天坐在电脑前一动不动，没时间上厕所没时间吃饭睡觉洗漱。等于就是在自己做一个PHP CMS系统。但是网站做好之后就坐等搜索引擎收录，靠天吃饭一样，搜索引擎那天心情不好自己就一个字都别想了。发现很多网站他们的程序根本从来都不改动一下，直接CMS下载来加内容，域名也注册不到1、2年，但是流量收录PR权重非常高、人气非常火爆。对比之下，自己显得多么相形见绌，开始深刻的怀疑一开始自己信定的域名越老人气越旺的谬论。&lt;/p>&lt;p style="text-align: justify">打开自己的网站，发现网站界面确实是那么的丑陋，因为自己不会PS不会图片处理，也不会仿站，所以网站界面一直都是那么的丑陋，以前给别人看自己的网站，也许这是大部分写代码的人的不足之处，不会设计界面，不会美工。&lt;/p>&lt;p style="text-align: justify">&lt;strong>思考、总结了很多，明白了自己失败的所在：&lt;/strong>&lt;/p>&lt;p style="text-align: justify">一网站界面太丑陋，不会美工设计、logo都是非常难看的。&lt;/p>&lt;p style="text-align: justify">二从来没有推广宣传过只是坐等搜索引擎收录，靠天吃饭。&lt;/p>&lt;p style="text-align: justify">三网站服务器太差，舍不得升级好一点的。死做站，只会改程序而其他的根本就从不顾及。&lt;/p>&lt;p style="text-align: justify">四从来没主动去寻找过广告商，日IP 2K其实挂一个其他的广告就可以满足服务器费用了，但是没有去寻找也丢失了盈利的欲望。&lt;/p>&lt;p style="text-align: justify">网站已运营三年，败在了方向上。很少推广……唯一做得最多的就是程序，死改、死改!完全的倾向与技术性。死改程序死改程序，死读书一样。&lt;/p>&lt;p style="text-align: justify">&lt;strong>但是我该继续下去吗?&lt;/strong>&lt;/p>&lt;p style="text-align: justify">很多科学的统计，中国的个人站长至少80%都是不盈利，任何费用都是自己出，其他人工的维护、推广宣传人力精力更不包含在内。另外10%是勉强可以赚得点服务器费用和域名费用。只有剩下10%不到的才收入大于支出，但是剩余不一定抵得上他的其他付出——时间精力人力推广。&lt;/p>&lt;p style="text-align: justify">同时也想到了自己网站，主题主题、发展模式要被复制太容易了。个人站长真的力量太薄弱，有什么变动，就立即会夭折。一切都是迷路。感言：个人建站小打小闹还可以但是真的想通过建个网站来运营就逆袭，只能是想的太离谱。&lt;/p>&lt;p style="text-align: justify">本文作者：&lt;a href="https://www.im286.com/thread-11086188-1-1.html" target="_blank" rel="nofollow">foho&lt;/a>&lt;/p>&lt;p style="text-align: right">来源：&lt;a target="_self" href="https://pangyd.com/">庞玉栋博客&lt;/a> 欢迎分享&lt;/p></description></item><item><title>科研管理系统--ResAbout 关于界面代码设计</title><link>https://pangyd.com/post/66-resabout/</link><pubDate>Fri, 18 Aug 2017 20:11:06 +0800</pubDate><guid>https://pangyd.com/post/66-resabout/</guid><description>&lt;pre lay-lang="Java" class="layui-code" skin="notepad">package view;

import java.awt.AWTEvent;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Image;
import java.awt.Insets;
import java.awt.MediaTracker;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.net.URL;
import java.net.URLClassLoader;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;

import com.jnzj.common.Commom;

public class ResAbout extends JFrame implements ActionListener{
	Image icon;
	ImageIcon banner;
	JLabel jLabel;
	JLabel jLabel2;
	JLabel jLabel3;
	JLabel jLabel4;
	JLabel jLabel5;
	JPanel jPanel;
	JPanel jPanel2;
	JPanel jPanel3;
	JButton jButton;
	private GridBagConstraints girdBagCon;
	private GridBagLayout girdBag=new GridBagLayout();
	public ResAbout() {
		// TODO Auto-generated constructor stub
		this.setLayout(new BorderLayout());//边框布局
		//enableEvents(AWTEvent.WINDOW_EVENT_MASK);
		//添加框架的关闭时间处理2
		//this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		//窗口自适应大小 使窗体能正好显示里面的所有控件
		this.pack();
		//设置框架的大小
		this.setSize(500,400);
		//设置窗体的标题
		this.setTitle("关于");
		//调用自定义的方法GetImage（） ，获取图标文件
		icon=getImage("icon.png");
		//设置窗体图标
		this.setIconImage(icon);
		//设置不能调整窗体的大小
		this.setResizable(false);
		//获取屏幕大小
		Dimension screenSize=Toolkit.getDefaultToolkit().getScreenSize();
		//获取当前项目的窗体大小
		Dimension frameSize=this.getSize();
		//如果项目窗体高&amp;gt;屏幕高，用屏幕高设置项目窗体高
		if (frameSize.height&amp;gt;screenSize.height) {
			frameSize.height=screenSize.height;
		}
		if (frameSize.width&amp;gt;screenSize.width) {
			frameSize.width=screenSize.width;
		}
		//设置窗体起始显示位置 居中显示
		this.setLocation((screenSize.width-frameSize.width)/2,
		(screenSize.height-frameSize.height)/2);
		try {
			UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
		} catch (ClassNotFoundException | InstantiationException | IllegalAccessException
				| UnsupportedLookAndFeelException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}
		try {
			top();
			central();
			down();
			addListener();//监听
			this.setVisible(true);
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}
		
		
	}
	private void addListener() {
		// TODO Auto-generated method stub
		jButton.addActionListener(this);
		
	}
	public void top() {
		jPanel=new JPanel();
		jPanel.setLayout(girdBag);
		jLabel=new JLabel("1.科研管理系统V1.0\t");
		jLabel.setFont(new Font("Dialog", 0, 12));
		girdBagCon=new GridBagConstraints();
		girdBagCon.gridx=0;
		girdBagCon.gridy=1;
		//外部填充 4个参数 top,left,bottom,right
		//既外部间距
		//girdBagCon.insets=new Insets(0, 10, 10, 1);
		girdBag.setConstraints(jLabel, girdBagCon);

		jLabel2=new JLabel("2.版权归2017doft公司所有 翻录必究");
		jLabel2.setFont(new Font("Dialog", 0, 12));
		girdBagCon=new GridBagConstraints();
		girdBagCon.gridx=0;
		girdBagCon.gridy=2;
		//外部填充 4个参数 top,left,bottom,right
		//既外部间距
		//girdBagCon.insets=new Insets(0, 10, 10, 1);
		girdBag.setConstraints(jLabel2, girdBagCon);
		
		jLabel3=new JLabel("3.联系方式：");
		jLabel3.setFont(new Font("Dialog", 0, 12));
		girdBagCon=new GridBagConstraints();
		girdBagCon.gridx=0;
		girdBagCon.gridy=3;
		//外部填充 4个参数 top,left,bottom,right
		//既外部间距
		//girdBagCon.insets=new Insets(0, 10, 10, 1);
		girdBag.setConstraints(jLabel3, girdBagCon);
		
		jLabel4=new JLabel("4.我们的口号是：代码演绎人生 算法助推梦想");
		jLabel4.setFont(new Font("Dialog", 0, 12));
		girdBagCon=new GridBagConstraints();
		girdBagCon.gridx=0;
		girdBagCon.gridy=4;
		//外部填充 4个参数 top,left,bottom,right
		//既外部间距
		//girdBagCon.insets=new Insets(0, 10, 10, 1);
		girdBag.setConstraints(jLabel4, girdBagCon);
		jPanel.add(jLabel);
		jPanel.add(jLabel);
		jPanel.add(jLabel2);
		jPanel.add(jLabel3);
		jPanel.add(jLabel4);	
		this.add(jPanel,BorderLayout.NORTH);
		
	}
	public void central() {
		jPanel2=new JPanel();

		banner=new ImageIcon("res/image.png");
		jLabel5=new JLabel(banner);
		jPanel2.add(jLabel5);
		this.add(jPanel2,BorderLayout.CENTER);
	}
	public void down() {
		jPanel3=new JPanel();
		this.add(jPanel3,BorderLayout.SOUTH);
		jButton=new JButton("关闭");
		jPanel3.add(jButton);
	}
	@Override
	public void actionPerformed(ActionEvent e) {
		// TODO Auto-generated method stub
		Object object=e.getSource();
		if (object==jButton) {
			this.setVisible(false);
		}
		
	}

	/** * 通过给定的文件名获得图像 */
	
	Image getImage(String filename){ 
		//URLClassLoader--用于从指向 jar文件和目录的 URL 的搜索路径加载类和资源。
		URLClassLoader urlLoader=(URLClassLoader) this.getClass().getClassLoader(); 
		
		URL url=null; 
		Image image=null;
		url=urlLoader.findResource(filename); 
		image=Toolkit.getDefaultToolkit().getImage(url); 
		MediaTracker mediaTracker=new MediaTracker(this); 
		 try { 
			 mediaTracker.addImage(image, 0); 
			 mediaTracker.waitForID(0); 
		 }catch (InterruptedException _ex){
			 image=null;
		 }
		 if (mediaTracker.isErrorID(0)) {
			 image=null;
		 }
		 return image;
	}
}
&lt;/pre></description></item><item><title>科研管理系统--ResHelp 帮助界面代码设计</title><link>https://pangyd.com/post/65-reshelp/</link><pubDate>Fri, 18 Aug 2017 20:08:24 +0800</pubDate><guid>https://pangyd.com/post/65-reshelp/</guid><description>&lt;pre lay-lang="Java" class="layui-code" skin="notepad">package view;

import java.awt.AWTEvent;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Image;
import java.awt.Insets;
import java.awt.MediaTracker;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.net.URL;
import java.net.URLClassLoader;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;

import com.jnzj.common.Commom;

public class ResHelp extends JFrame implements ActionListener{
	Image icon;
	ImageIcon banner;
	JLabel jLabel6;
	JLabel jLabel;
	JLabel jLabel2;
	JLabel jLabel3;
	JLabel jLabel4;
	JLabel jLabel5;
	JPanel jPanel;
	JPanel jPanel2;
	JPanel jPanel3;
	JButton jButton;
	private GridBagConstraints girdBagCon;
	private GridBagLayout girdBag=new GridBagLayout();
	public ResHelp() {
		// TODO Auto-generated constructor stub
		this.setLayout(new BorderLayout());//边框布局
		//enableEvents(AWTEvent.WINDOW_EVENT_MASK);
		//添加框架的关闭时间处理2
		//this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		//窗口自适应大小 使窗体能正好显示里面的所有控件
		this.pack();
		//设置框架的大小
		this.setSize(700,200);
		//设置窗体的标题
		this.setTitle("帮助");
		//调用自定义的方法GetImage（） ，获取图标文件
		icon=getImage("icon.png");
		//设置窗体图标
		this.setIconImage(icon);
		//设置不能调整窗体的大小
		this.setResizable(false);
		//获取屏幕大小
		Dimension screenSize=Toolkit.getDefaultToolkit().getScreenSize();
		//获取当前项目的窗体大小
		Dimension frameSize=this.getSize();
		//如果项目窗体高&amp;gt;屏幕高，用屏幕高设置项目窗体高
		if (frameSize.height&amp;gt;screenSize.height) {
			frameSize.height=screenSize.height;
		}
		if (frameSize.width&amp;gt;screenSize.width) {
			frameSize.width=screenSize.width;
		}
		//设置窗体起始显示位置 居中显示
		this.setLocation((screenSize.width-frameSize.width)/2,
		(screenSize.height-frameSize.height)/2);
		try {
			UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
		} catch (ClassNotFoundException | InstantiationException | IllegalAccessException
				| UnsupportedLookAndFeelException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}
		try {
			top();
			central();
			down();
			addListener();//监听
			this.setVisible(true);
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}
		
		
	}
	private void addListener() {
		// TODO Auto-generated method stub
		jButton.addActionListener(this);
		
	}
	public void top() {
		
		jPanel2=new JPanel();
		jPanel2.setLayout(girdBag);
		jLabel6=new JLabel("科研管理系统帮助");
		jLabel6.setFont(new Font("Dialog", 0, 16));
		girdBagCon=new GridBagConstraints();
		girdBagCon.gridx=0;
		girdBagCon.gridy=0;
		//外部填充 4个参数 top,left,bottom,right
		//既外部间距
		girdBagCon.insets=new Insets(0, 10, 0, 10);
		girdBag.setConstraints(jLabel6, girdBagCon);
		jPanel2.add(jLabel6);
		this.add(jPanel2,BorderLayout.NORTH);
	}
	public void central() {
		jPanel=new JPanel();
		jPanel.setLayout(girdBag);
		jLabel=new JLabel("1.科研管理系统是为了统计高校教师的科研成果");
		jLabel.setFont(new Font("Dialog", 0, 12));
		girdBagCon=new GridBagConstraints();
		girdBagCon.gridx=0;
		girdBagCon.gridy=1;
		//外部填充 4个参数 top,left,bottom,right
		//既外部间距
		//girdBagCon.insets=new Insets(0, 10, 10, 1);
		girdBag.setConstraints(jLabel, girdBagCon);

		jLabel2=new JLabel("2.以论文信息的统计为例子");
		jLabel2.setFont(new Font("Dialog", 0, 12));
		girdBagCon=new GridBagConstraints();
		girdBagCon.gridx=0;
		girdBagCon.gridy=2;
		//外部填充 4个参数 top,left,bottom,right
		//既外部间距
		//girdBagCon.insets=new Insets(0, 10, 10, 1);
		girdBag.setConstraints(jLabel2, girdBagCon);
		
		jLabel3=new JLabel("3.该论文系统实现了论文信息，作者信息，作者所在部门信息的管理，包括：添加，删除和修改");
		jLabel3.setFont(new Font("Dialog", 0, 12));
		girdBagCon=new GridBagConstraints();
		girdBagCon.gridx=0;
		girdBagCon.gridy=3;
		//外部填充 4个参数 top,left,bottom,right
		//既外部间距
		//girdBagCon.insets=new Insets(0, 10, 10, 1);
		girdBag.setConstraints(jLabel3, girdBagCon);
		
		jLabel4=new JLabel("4.该系统实现了论文信息，作者信息，作者和所在部门的不同条件查询");
		jLabel4.setFont(new Font("Dialog", 0, 12));
		girdBagCon=new GridBagConstraints();
		girdBagCon.gridx=0;
		girdBagCon.gridy=4;
		//外部填充 4个参数 top,left,bottom,right
		//既外部间距
		//girdBagCon.insets=new Insets(0, 10, 10, 1);
		girdBag.setConstraints(jLabel4, girdBagCon);
		jPanel.add(jLabel);
		jPanel.add(jLabel2);
		jPanel.add(jLabel3);
		jPanel.add(jLabel4);	
		this.add(jPanel,BorderLayout.CENTER);
		
	}
	public void down() {
		jPanel3=new JPanel();
		this.add(jPanel3,BorderLayout.SOUTH);
		jButton=new JButton("关闭");
		jPanel3.add(jButton);
	}
	@Override
	public void actionPerformed(ActionEvent e) {
		// TODO Auto-generated method stub
		Object object=e.getSource();
		if (object==jButton) {
			this.setVisible(false);
		}
		
	}

	/** * 通过给定的文件名获得图像 */
	
	Image getImage(String filename){ 
		//URLClassLoader--用于从指向 jar文件和目录的 URL 的搜索路径加载类和资源。
		URLClassLoader urlLoader=(URLClassLoader) this.getClass().getClassLoader(); 
		
		URL url=null; 
		Image image=null;
		url=urlLoader.findResource(filename); 
		image=Toolkit.getDefaultToolkit().getImage(url); 
		MediaTracker mediaTracker=new MediaTracker(this); 
		 try { 
			 mediaTracker.addImage(image, 0); 
			 mediaTracker.waitForID(0); 
		 }catch (InterruptedException _ex){
			 image=null;
		 }
		 if (mediaTracker.isErrorID(0)) {
			 image=null;
		 }
		 return image;
	}
}
&lt;/pre></description></item><item><title>科研信息管理系统-论文管理之菜单导航版</title><link>https://pangyd.com/post/64/</link><pubDate>Thu, 17 Aug 2017 17:21:03 +0800</pubDate><guid>https://pangyd.com/post/64/</guid><description>&lt;pre lay-lang="Java" class="layui-code" skin="notepad">package view;

import java.awt.AWTEvent;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Image;
import java.awt.MediaTracker;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.net.URL;
import java.net.URLClassLoader;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JToolBar;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.plaf.basic.BasicBorders;

public class ResearchMain extends JFrame implements ActionListener{
	//框架大小
	Dimension faceSize=new Dimension(950, 650);
	Image icon;
	ImageIcon banner;
	//程序图标
	JPanel panel1;
	JLabel jLabel;

	JMenuBar menuBar;
	
	JMenu menu1;
	JMenu menu2;
	JMenu menu3;
	JMenu menu4;
	JMenu menu5;
	
	JMenuItem item1;
	JMenuItem item2;
	JMenuItem item3;
	JMenuItem item4;
	JMenuItem item5;
	JMenuItem item6;
	JMenuItem item7;
	JMenuItem item8;
	JMenuItem item9;
	JMenuItem item10;
	
	//boolean packFame=false;
	public ResearchMain() {
		this.setLayout(new BorderLayout());//边框布局
		enableEvents(AWTEvent.WINDOW_EVENT_MASK);
		//添加框架的关闭时间处理2
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		//窗口自适应大小 使窗体能正好显示里面的所有控件
		this.pack();
		//设置框架的大小
		this.setSize(faceSize);
		//设置窗体的标题
		this.setTitle("科研信息管理系统");
		//调用自定义的方法GetImage（） ，获取图标文件
		icon=getImage("icon.png");
		//设置窗体图标
		this.setIconImage(icon);
		//设置不能调整窗体的大小
		this.setResizable(false);
		//获取屏幕大小
		Dimension screenSize=Toolkit.getDefaultToolkit().getScreenSize();
		//获取当前项目的窗体大小
		Dimension frameSize=this.getSize();
		//如果项目窗体高&amp;gt;屏幕高，用屏幕高设置项目窗体高
		if (frameSize.height&amp;gt;screenSize.height) {
			frameSize.height=screenSize.height;
		}
		if (frameSize.width&amp;gt;screenSize.width) {
			frameSize.width=screenSize.width;
		}
		//设置窗体起始显示位置 居中显示
		this.setLocation((screenSize.width-frameSize.width)/2,
		(screenSize.height-frameSize.height)/2);
		try {
			UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
		} catch (ClassNotFoundException | InstantiationException | IllegalAccessException
				| UnsupportedLookAndFeelException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}
		try {
			bt();//初始化标题栏
			gj();//工具栏
			tp();//图片
			addListener();//监听
			this.setVisible(true);
	
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}		
		
	}
	public void bt() {
		menuBar=new JMenuBar();
		this.setJMenuBar(menuBar);
		menu1=new JMenu("系统设置");
		menuBar.add(menu1);
		menu2=new JMenu("论文信息管理");
		menuBar.add(menu2);
		menu3=new JMenu("教师信息管理");
		menuBar.add(menu3);
		menu4=new JMenu("部门信息管理");
		menuBar.add(menu4);
		menu5=new JMenu("帮助");
		menuBar.add(menu5);
		item1=new JMenuItem("用户管理");
		item2=new JMenuItem("退出系统");
		menu1.add(item1);
		menu1.add(item2);
		item3=new JMenuItem("论文信息管理");
		item4=new JMenuItem("论文信息查询");
		menu2.add(item3);
		menu2.add(item4);
		item5=new JMenuItem("教师基本信息管理");
		item6=new JMenuItem("教师基本信息查询");
		menu3.add(item5);
		menu3.add(item6);
		item7=new JMenuItem("部门基本信息管理");
		item8=new JMenuItem("部门基本信息查询");
		menu4.add(item7);
		menu4.add(item8);
		item9=new JMenuItem("帮助");
		item10=new JMenuItem("关于");
		menu5.add(item9);
		menu5.add(item10);
		menuBar.setVisible(true);
		
	}
	public void gj() {
		JToolBar toolBar = new JToolBar(); 
		JButton ambtn,asbtn,tmbtn,dmbtn,help,about; 
		ambtn=new JButton(new ImageIcon("res/card.png"));
		asbtn=new JButton(new ImageIcon("res/folder.png"));
		tmbtn=new JButton(new ImageIcon("res/info.png"));
		dmbtn=new JButton(new ImageIcon("res/save.png"));
		help=new JButton(new ImageIcon("res/help.png"));
		about=new JButton(new ImageIcon("res/user.png"));
		toolBar.add(ambtn);
		toolBar.add(asbtn);
		toolBar.add(tmbtn);
		toolBar.add(dmbtn);
		toolBar.add(help);
		toolBar.add(about);
		this.add(toolBar,BorderLayout.NORTH);
	}
	public void tp() {
		banner=new ImageIcon("res/image.png");
		jLabel=new JLabel(banner);
		panel1=new JPanel();
		panel1.add(jLabel);
		this.add(panel1,BorderLayout.CENTER);
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		new ResearchMain();
		
	}

	/** * 通过给定的文件名获得图像 */
	
	Image getImage(String filename){ 
		//URLClassLoader--用于从指向 jar文件和目录的 URL 的搜索路径加载类和资源。
		URLClassLoader urlLoader=(URLClassLoader) this.getClass().getClassLoader(); 
		
		URL url=null; 
		Image image=null;
		url=urlLoader.findResource(filename); 
		image=Toolkit.getDefaultToolkit().getImage(url); 
		MediaTracker mediaTracker=new MediaTracker(this); 
		 try { 
			 mediaTracker.addImage(image, 0); 
			 mediaTracker.waitForID(0); 
		 }catch (InterruptedException _ex){
			 image=null;
		 }
		 if (mediaTracker.isErrorID(0)) {
			 image=null;
		 }
		 return image;
	}
	@Override
	public void actionPerformed(ActionEvent e) {
		// TODO Auto-generated method stub
		Object obj=e.getSource();
		if (obj==item2) {
			System.exit(0);
		}
		
	}
	public void addListener() {
		item2.addActionListener(this);
	}
	
}
&lt;/pre></description></item><item><title>HrMain.java系统主界面类，采用树形目录结构。</title><link>https://pangyd.com/post/43-hrmain-java/</link><pubDate>Tue, 08 Aug 2017 19:14:37 +0800</pubDate><guid>https://pangyd.com/post/43-hrmain-java/</guid><description>&lt;p>&lt;/p>&lt;pre lay-lang="Java" class="layui-code" skin="notepad">package com.jnzyjsxy.test;
&lt;p>import java.awt.AWTError;
import java.awt.AWTEvent;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Frame;
import java.awt.Image;
import java.awt.MediaTracker;
import java.awt.Panel;
import java.awt.Toolkit;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import java.net.URL;
import java.net.URLClassLoader;&lt;/p>
&lt;p>import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JSplitPane;
import javax.swing.JTree;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;
/*&lt;/p>
&lt;ul>
&lt;li>人事管理系统主界面
*/
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.TreePath;
import javax.swing.tree.TreeSelectionModel;&lt;/li>
&lt;/ul>
&lt;p>import com.jnzyjsxy.node1.Node11Panel;
public class HrMain extends JFrame implements TreeSelectionListener{
private static final URLClassLoader URLClassLoader = null;
//框架大小
Dimension faceSize=new Dimension(650, 450);
//程序图标
Image icon;
//建立JTree目录树对象
JTree tree;
//书数据结构中的通用节点
//字面含义，默认可变的树节点类
DefaultMutableTreeNode root;//人事管理系统根节点
DefaultMutableTreeNode node1;//基本信息管理
DefaultMutableTreeNode node2;//人员管理节点
DefaultMutableTreeNode node3;//人员考核管理
DefaultMutableTreeNode node4;//劳资管理
DefaultMutableTreeNode node5;//
DefaultMutableTreeNode leafnode;//二级节点
TreePath treePath;//节点路径类
//主界面面板
//JSplitPane 用于分割两个（只能是两个）Component
//两个Component图形化分割
//并且这两个Component可以由用户交互式调整大小
//split&amp;ndash;分裂，拆分
public static JSplitPane splitPane;
JPanel panel1;//在左侧放目录树
JPanel panel2;
JPanel panel3;//在右侧显示选择节点后的界面
//用于显示欢迎信息的标签
JLabel welcome=new JLabel();
//滚动面板对象
JScrollPane scrollPane;
/*
* 构造方法(non-Javadoc)
* @see java.awt.Window#pack()
&lt;em>/public HrMain() {
// TODO Auto-generated constructor stub
//启动窗体事件隐藏 mask-面具，隐藏
//要是没有enableEvents(AWTEvent.WIDOW_EVENT_MASK);
//只要有addActionListener()方法，窗体也就拥有该方法
//本项目通过选择目录树触发活动事件
enableEvents(AWTEvent.WINDOW_EVENT_MASK);
//添加框架的关闭时间处理
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//窗口自适应大小 使窗体能正好显示里面的所有控件
this.pack();
//设置框架的大小
this.setSize(faceSize);
//设置窗体的标题
this.setTitle(&amp;ldquo;人事管理系统&amp;rdquo;);
//调用自定义的方法GetImage（） ，获取图标文件
//icon=getImage(&amp;ldquo;common/icon.png&amp;rdquo;);
//设置窗体图标
this.setIconImage(icon);
//设置不能调整窗体的大小
this.setResizable(false);
try {
Init();//调用初始化方法
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
/&lt;/em>
* 初始化方法 创建左侧菜单树
*/
private void Init() {
// TODO Auto-generated method stub
//初始化树形节点
root=new DefaultMutableTreeNode(&amp;ldquo;人事管理系统&amp;rdquo;);
node1=new DefaultMutableTreeNode(&amp;ldquo;基本信息管理&amp;rdquo;);
node2=new DefaultMutableTreeNode(&amp;ldquo;人员调动管理&amp;rdquo;);
node3=new DefaultMutableTreeNode(&amp;ldquo;人员考核管理&amp;rdquo;);
node4=new DefaultMutableTreeNode(&amp;ldquo;劳资管理&amp;rdquo;);
//添加基本信息管理节点到认识管里系统根节点
root.add(node1);
//添加耳机节点 并添加到基本信息管理一级节点上
leafnode=new DefaultMutableTreeNode(&amp;ldquo;添加人员信息&amp;rdquo;);
node1.add(leafnode);
leafnode=new DefaultMutableTreeNode(&amp;ldquo;修改人员信息&amp;rdquo;);
node1.add(leafnode);
leafnode=new DefaultMutableTreeNode(&amp;ldquo;删除人员信息&amp;rdquo;);
node1.add(leafnode);
leafnode=new DefaultMutableTreeNode(&amp;ldquo;查询人员信息&amp;rdquo;);
node1.add(leafnode);
leafnode=new DefaultMutableTreeNode(&amp;ldquo;部门管理&amp;rdquo;);
node1.add(leafnode);
//添加人员调动节点到根节点
root.add(node2);
leafnode=new DefaultMutableTreeNode(&amp;ldquo;人员调动&amp;rdquo;);
node2.add(leafnode);
leafnode=new DefaultMutableTreeNode(&amp;ldquo;调动历史查询&amp;rdquo;);
node2.add(leafnode);
root.add(node3);
leafnode=new DefaultMutableTreeNode(&amp;ldquo;人员考核&amp;rdquo;);
node3.add(leafnode);
leafnode=new DefaultMutableTreeNode(&amp;ldquo;考核历史查询&amp;rdquo;);
node3.add(leafnode);&lt;/p></description></item><item><title>关于Class.forName(“com.mysql.jdbc.Driver”)</title><link>https://pangyd.com/post/30-class-forname-com-mysql-jdbc-driver/</link><pubDate>Thu, 03 Aug 2017 17:14:46 +0800</pubDate><guid>https://pangyd.com/post/30-class-forname-com-mysql-jdbc-driver/</guid><description>&lt;p>传统的使用jdbc来访问数据库的流程为：&lt;br> Class.forName(“com.mysql.jdbc.Driver”);&lt;br> String url = “jdbc:mysql://localhost:3306/test?user=root&amp;amp;password=123456″;&lt;br> Connection con = DriverManager.getConnection(url);&lt;br> Statement statement = con.createStatement();&lt;/p>&lt;p>最开始使用的时候，不明白为什么首先要加载一个驱动类，之后就可以取得了Connection了，很好奇DriverManager是怎么获得那个驱动类的信息，后来看了下com.mysql.jdbc.Driver这个类的源代码，豁然开朗了。原来在com.mysql.jdbc.Driver类中有这么一段静态初始化代码：&lt;br> static {&lt;br> try {&lt;br> java.sql.DriverManager.registerDriver(new Driver());&lt;br> } catch (SQLException E) {&lt;br> throw new RuntimeException(“Can’t register driver!”);&lt;br> }&lt;br> }&lt;br> 也就是，在Class.forName加载完驱动类，开始执行静态初始化代码时，会自动新建一个Driver的对象，并调用DriverManager.registerDriver把自己注册到DriverManager中去。&lt;br>&lt;br>&lt;strong>ps1:&lt;/strong> Class.forName(String) 与ClassLoader.loadClass(String)的区别&lt;br> Class.forName(String): 加载类，并且执行类初始化；可以通过Class.forName(String, boolean, ClassLoader)第二个参数来仅仅加载类不执行初始化；&lt;br> ClassLoader.loadClass(String): 仅仅加载类，不执行类初始化；&lt;/p>&lt;p>&lt;strong>ps2:&lt;/strong> 有时会看到这种用法：&lt;br> Class.forName(“com.mysql.jdbc.Driver”).newInstance();&lt;br> 这是没有必要的，正如前述，静态初始化已经new了一个Driver的对象，注册到DriverManager中去，在此再建立一个Driver对象则是完全没有必要的，浪费空间。&lt;/p>&lt;p>&lt;strong>ps3:&lt;/strong> 结合ps1，Class.forName(“com.mysql.jdbc.Driver”);相当于：&lt;br> ClassLoader loader = Thread.currentThread().getContextClassLoader();&lt;br> Class cls = loader.loadClass(“com.mysql.jdbc.Driver”);&lt;br> cls.newInstance();&lt;br> 这种方法的问题同ps2, 浪费了一个Driver对象；&lt;/p>&lt;p>&lt;strong>ps4:&lt;/strong> 在java 6中，引入了service provider的概念，即可以在配置文件中配置service（可能是一个interface或者abstract class）的provider（即service的实现类）。配置路径是：/META-INF/services/下面。详细信息见：https://docs.oracle.com/javase/6/docs/technotes/guides/jar/jar.html#Service%20Provider&lt;br> 而java.sql.DriverManager也添加了对此的支持，因此，在JDK6中，DriverManager的查找Driver的范围为：&lt;br> 1）system property “jdbc.drivers” 中配置的Driver值；&lt;br> 2）用户调用Class.forName()注册的Driver&lt;br> 3）service provider配置文件java.sql.Driver中配置的Driver值。&lt;br> 因此，在jdk6中，其实是可以不用调用Class.forName来加载mysql驱动的，因为mysql的驱动程序jar包中已经包含了java.sql.Driver配置文件，并在文件中添加了com.mysql.jdbc.Driver.但在JDK6之前版本，还是要调用这个方法。&lt;/p></description></item><item><title>转载自【Yidu】《如何搭建一个茉莉机器人》</title><link>https://pangyd.com/post/22-yidu/</link><pubDate>Sun, 30 Jul 2017 20:19:39 +0800</pubDate><guid>https://pangyd.com/post/22-yidu/</guid><description>&lt;div>&lt;p>&lt;img src="https://pangyd.com/uploads/2017/07/870b74962f409833.jpeg" alt="1501417331353.jpeg">&lt;br>&lt;/p>&lt;p>源码简介:茉莉QQ机器人采用Smart&amp;nbsp;QQ接口，程序由PHP+MySQL开发，机器人在运行期间可以累积在线天数哦，但是您不能在机器人运行期间用电脑登录QQ，不然会把机器人挤下线，但是手机QQ可以登录，互不干扰。&lt;/p>&lt;br>好了话不多说，我们开始吧&lt;br>&lt;br>首先呢你要有空间，随便找个空间&lt;br>建议用这个空间&lt;a target="_self" href="https://yidc.vu4.pw/ ">https://yidc.vu4.pw/&amp;nbsp;&lt;/a>，注册送一块钱，然后往下滑有个一元主机，用那个就行&lt;br>然后下载茉莉机器人的源码，源码下载地址:&lt;a target="_self" href="https://pan.baidu.com/s/1eS3VlCI">https://pan.baidu.com/s/1eS3VlCI&lt;/a>&lt;br>&lt;br>教程开始:首先在我给你的那个网站开空间，ftp账号密码必须都记住，最好弄一样的，后面方便操作！&lt;br>&lt;br>开好空间以后点击管理，然后有个面板控制，点进去&lt;br>然后上边有个在线文件，把我给你的源码上传&lt;br>&lt;br>上传完成之后解压到web的文件夹，密码不用填&lt;br>&lt;br>那个控制面板有个域名绑定&lt;br>&lt;br>然后点进去域名，按照步骤安装，数据库的账号用户名密码就是刚才的ftp账号密码。&lt;br>&lt;br>之后一个你自己的机器人网站就搭建好&lt;br>&lt;br>&lt;img src="https://pangyd.com/uploads/2017/07/3566cd8e25e67f7b.jpeg" alt="1501417332673.jpeg">&lt;br>&lt;/div></description></item><item><title>tomact自启动设置</title><link>https://pangyd.com/post/17-tomact/</link><pubDate>Sat, 29 Jul 2017 11:56:14 +0800</pubDate><guid>https://pangyd.com/post/17-tomact/</guid><description>&lt;p>&lt;span>	&lt;/span>该部分内容来源于网络，本人测试，功能正常，留下备忘。&lt;/p>&lt;p>&amp;nbsp;&lt;/p>&lt;p>&lt;strong>&lt;span>	&lt;/span>适用于&lt;span class="hl1">Tomcat&lt;/span>4.1、5.5、6.0。&lt;/strong>&lt;/p>&lt;br>&lt;p>因为解压缩版的&lt;span class="hl1">Tomcat&lt;/span>，在windows服务上没有启动项，所以需要手动添加，然后可以设置开机启动&lt;span class="hl1">tomcat&lt;/span>。&lt;/p>&lt;p>一、安装服务&lt;/p>&lt;p>在命令行中进入/&lt;span class="hl1">Tomcat&lt;/span>路径/bin/，执行“service.bat install”：（开始-运行,输入cmd,cd&lt;span class="hl1">Tomcat&lt;/span>路径/bin,service.bat install）。到此为止windows服务上就增加了一个&lt;span class="hl1">tomcat&lt;/span>服务&lt;/p>&lt;p>?&lt;/p>&lt;p>说明：&lt;/p>&lt;p>1、服务名和显示名称：service.bat中设置了默认的服务名称，不同版本分别命名为&lt;span class="hl1">Tomcat&lt;/span>4、&lt;span class="hl1">Tomcat&lt;/span>5、&lt;span class="hl1">Tomcat&lt;/span>6，如果需要自定义服务名或服务的显示名称，可在service.bat中修改SERVICE_NAME或PR_DISPLAYNAME；&lt;/p>&lt;p>2、防火墙的影响：/bin/&lt;span class="hl1">tomcat&lt;/span>6.exe（或&lt;span class="hl1">tomcat&lt;/span>4.exe、&lt;span class="hl1">tomcat&lt;/span>5.exe）将被作为服务程序，如果有防火墙，需要设为允许作为服务。&lt;/p>&lt;p>二、卸载服务&lt;/p>&lt;p>在命令行中进入/&lt;span class="hl1">Tomcat&lt;/span>路径/bin/，执行“service.bat remove”：&lt;/p>&lt;p>&lt;a href="https://tomcat.apache.org/tomcat-6.0-doc/windows-service-howto.html" target="_blank">&lt;/a>&lt;/p>&lt;p>三、命令行参数&lt;/p>&lt;p>&lt;span class="hl1">Tomcat&lt;/span>的服务名、Jvm内存初始值和最大值等可通过命令行参数设置，请参考官方文档：&lt;a href="https://tomcat.apache.org/tomcat-5.5-doc/windows-service-howto.html" target="_blank">&lt;/a>&lt;/p>&lt;p>http://&lt;span class="hl1">tomcat&lt;/span>.apache.org/&lt;span class="hl1">tomcat&lt;/span>-5.5-doc/windows-service-howto.html&lt;/p>&lt;p>&lt;a href="https://tomcat.apache.org/tomcat-6.0-doc/windows-service-howto.html" target="_blank">http://&lt;span class="hl1">tomcat&lt;/span>.apache.org/&lt;span class="hl1">tomcat&lt;/span>-6.0-doc/windows-service-howto.html&lt;/a>&lt;/p>&lt;p>?&lt;/p>&lt;p>四、开机启动&lt;span class="hl1">Tomcat&lt;/span>设置&lt;/p>&lt;p>开始-控制面板-管理工具-服务&lt;/p>&lt;p>找到apche&amp;nbsp;&lt;span class="hl1">tomcat&lt;/span>?右键属性，把手动改为自动&lt;/p></description></item></channel></rss>