作者:meepo
链接:https://www.zhihu.com/question/30525693/answer/199488905
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

要理解SSH三大框架,那么最好是用SSH三大框架做一个项目啦

这是一个模仿天猫的练手项目

1. 项目演示地址

前台: how2j.cn/tmall后台: how2j.cn/tmall/admin

2. 在本地跑起来看看效果

2.1 本地演示

上一步的演示地址是在别人的网站上的,最好呢,能在自己机器上也把这个项目跑起来,在本机看到效果。

为了方便同学在本机观看演示效果,特意准备了一个无需安装JDK,无需配置TOMCAT,无需安装配置数据库的可运行演示。

下载tomcat_with_jdk_hsqldb_tmall_ssh.rar


<img src="https://pic4.zhimg.com/50/v2-435c69f21d0f616db74c307dd4b45213_hd.jpg" data-rawwidth="454" data-rawheight="127" class="origin_image zh-lightbox-thumb" width="454" data-original="https://pic4.zhimg.com/v2-435c69f21d0f616db74c307dd4b45213_r.jpg">

解压后运行 bin目录里的 startup.bat,就可以马上在本机看到和上述演示地址一样的效果:


<img src="https://pic2.zhimg.com/50/v2-060378817dd568a33aee6bc60ec0da1c_hd.jpg" data-rawwidth="994" data-rawheight="592" class="origin_image zh-lightbox-thumb" width="994" data-original="https://pic2.zhimg.com/v2-060378817dd568a33aee6bc60ec0da1c_r.jpg">



2.2 使用Eclipse的Dynamic Web Project风格演示

上述的做法是为了方便同学们在本地看到效果,而特意把很多细节都封装起来了。 而这一步呢,会按照真正做一个SSH项目那样,创建一个Dynamic Web Project风格的项目,自己动手导入SQL语句,导入项目,在Eclipse中启动Tomcat,然后再访问地址,用这种风格在本地演示出项目的效果来。


<img src="https://pic4.zhimg.com/50/v2-2ff60b82d929a1118c3291e6cb0fd1dc_hd.jpg" data-rawwidth="448" data-rawheight="165" class="origin_image zh-lightbox-thumb" width="448" data-original="https://pic4.zhimg.com/v2-2ff60b82d929a1118c3291e6cb0fd1dc_r.jpg">


由于演示数据较多:

tmall_ssh.sql 包含17个分类,每种分类下5个产品,总计85件产品。 每个产品下有20余张图片,总计1777张图片,以及属性和属性值等信息。

如果使用某些mysql工具导入,当数据量大的时候,会容易出错,所以提供了一个命令行格式以及指导,确保成功地导入数据:


<img src="https://pic1.zhimg.com/50/v2-868473b117d7476c8f641efefede75d1_hd.jpg" data-rawwidth="856" data-rawheight="60" class="origin_image zh-lightbox-thumb" width="856" data-original="https://pic1.zhimg.com/v2-868473b117d7476c8f641efefede75d1_r.jpg">

相关下载里的 tmall_ssh_altogether.rar里包含了这个tmall_ssh项目。同样的,对于某些不太熟练的同学,也提供了一个说明,用于引导如何成功地导入这个项目到eclipse中,以便顺利地按照开发一个真实项目的方式,在本地演示起来。


<img src="https://pic1.zhimg.com/50/v2-5c72a107073ac2777abeb729e5bc7db3_hd.jpg" data-rawwidth="819" data-rawheight="71" class="origin_image zh-lightbox-thumb" width="819" data-original="https://pic1.zhimg.com/v2-5c72a107073ac2777abeb729e5bc7db3_r.jpg">

如此这般,便可以自己也搭建一个模仿天猫的SSH项目,在自己的机器上看到效果,确认项目本身是可用的。

3. 学习风格

3.1 视频讲解


<img src="https://pic4.zhimg.com/50/v2-ac59b1fd0bc2b0af77b6fe6c3bb57130_hd.jpg" data-rawwidth="284" data-rawheight="209" class="content_image" width="284">


在关键功能部分,都是有视频讲解的,但是视频讲解有几个缺陷

  • 看着老师敲代码很拖沓,速度慢,效率低,有时候自己都睡着了
  • 有的视频较长,很难坚持一直全神贯注地听课。 有些关键部分,一走神没有听到,自己可能恰恰就卡在这里了
  • 哪里有疑问,得回头再翻视频,得一点点再从头听,才能找到自己要的答案,花费时间较长,效率颇低
  • 没有代码,或者只给出了最后的代码,中间步骤代码没有,自己即便照着视做,也常常卡壳

考虑到视频讲解确实存在这些问题,这个SSH项目的学习风格,不太一样:

3.2 学习建立在细节度很高的步骤截图和代码上

每一个步骤都进行了截图和文字讲解


<img src="https://pic3.zhimg.com/50/v2-6192cca2a59081e64e93f8b947907220_hd.jpg" data-rawwidth="266" data-rawheight="356" class="content_image" width="266">


每个步骤都给出了完整的代码,易于复制粘贴,便于使用


<img src="https://pic4.zhimg.com/50/v2-ae9fa0b479b0b65e5b8ff52ba7c3a7e7_hd.jpg" data-rawwidth="641" data-rawheight="454" class="origin_image zh-lightbox-thumb" width="641" data-original="https://pic4.zhimg.com/v2-ae9fa0b479b0b65e5b8ff52ba7c3a7e7_r.jpg">


对关键方法都有非常细致的讲解


<img src="https://pic3.zhimg.com/50/v2-f0aa59ccd6f3b4f61dcd076454e750c9_hd.jpg" data-rawwidth="750" data-rawheight="258" class="origin_image zh-lightbox-thumb" width="750" data-original="https://pic3.zhimg.com/v2-f0aa59ccd6f3b4f61dcd076454e750c9_r.jpg">


在大部分时候,甚至仅仅通过这个图文讲解,照着做,就可以把项目功能做出来了,甚至都不需要观看视频

3.3 先动手自己做,做的过程碰到问题了,再回头看视频,这样就是带着问题看视频了,有目标性,针对性强,学习效率高


<img src="https://pic3.zhimg.com/50/v2-fc67c979a5e9bc0eb427cc3b201eaadf_hd.jpg" data-rawwidth="625" data-rawheight="56" class="origin_image zh-lightbox-thumb" width="625" data-original="https://pic3.zhimg.com/v2-fc67c979a5e9bc0eb427cc3b201eaadf_r.jpg">


3.4 每个项目的功能学习,都采用“先运行,看到效果,再学习的风格”


<img src="https://pic4.zhimg.com/50/v2-4643c59d049e191a0d82f0f68aebc9ef_hd.jpg" data-rawwidth="276" data-rawheight="110" class="content_image" width="276">

为了便于理解和消化,这个SSH项目,拆成了132个知识点和535个开发步骤。每个功能相关的知识点,右上角都有当前进度的可运行项目

这样做有什么好处呢?

  • 第一,确保按照这些步骤学习,是可以跑出来的,建立对教程的信心,巩固自己学习下去的信心。
  • 第二,这种反向学习的方式,在看到效果之后,再来学习做了哪些步骤,这样更容易理解每个步骤的含义
  • 第三,自己按照步骤,动手做。 即便是做错了,心里也有底,因为手里有个“正确答案”,对比与“正确答案”的区别,可以非常快速的定位问题代码所在,纠正错误。 其实学习编程啊,就是要犯很多错,不犯错,自己是不会有深刻印象的。 而采用这种方式,即便是犯错,也会以较快的方式定位到错在哪里,加快学习的效率。
  • 第四,提供了一个在线代码比较器,方便定位问题所在


<img src="https://pic4.zhimg.com/50/v2-81e62c91c3c3d52ce7af14b9932585ad_hd.jpg" data-rawwidth="982" data-rawheight="509" class="origin_image zh-lightbox-thumb" width="982" data-original="https://pic4.zhimg.com/v2-81e62c91c3c3d52ce7af14b9932585ad_r.jpg">

第五,自己做了一遍,犯了错误,再去比较“正确答案”,自己通过思考和探索找到问题所在,还有比这样更有效的学习吗?


4. 项目学习思路

这个用SSH框架做的模仿天猫内容还是比较丰富的,要想吸收和消化这个教程的内容也不容易,为了协助同学们步步为营,稳扎稳打地把这个项目吃掉,设计了如下的学习思路

4.1 由浅入深,从零开始

要说各种J2EE,SSH,SSM项目那是一抓一大把,git, 度娘, csdn上随便一搜,都是各种各样的。 可是拿到手的,都是别人现成的,做好了的项目了,即不便于阅读,也很难消化和理解。 这个教程呢,就从零开始,从无到有,一步一步地演示一个典型的项目是怎么做出来的。

  • 从需求分析开始,明确要做哪些功能。
  • 然后分析表结构,确定什么样的表结构,表关系,可以支撑需求中的业务功能。
  • 接着准备界面原型,明确视图部分要做成什么样子
  • 最后才开始进行前后台功能的具体开发
  • 随着功能的开发,会逐渐察觉到SSH的不足之处,接着又实用重构的思路来解决和优化这些问题


<img src="https://pic2.zhimg.com/50/v2-eed161c34c533bec57e5ac03a253a6a6_hd.jpg" data-rawwidth="164" data-rawheight="506" class="content_image" width="164">


4.2 分析要做什么(项目目标)

开始做项目之前,首先要确定要做成什么样子。


<img src="https://pic3.zhimg.com/50/v2-84372e08c8f78fa6e51705ca26704779_hd.jpg" data-rawwidth="169" data-rawheight="132" class="content_image" width="169">


4.3 表结构设计

表结构设计是非常重要的,如果这一步没有做正确,将无法支持业务功能的需求,所以放在第一步来做。 在这部分列出了表与表之间的关系,建表的SQL语句等等。 值得一提的是,因为表比较多,为了便于理解每张表的作用,特意把表和前台页面截图做了对应,从感性上理解这些表都是干什么用的。

比如这个产品表与产品页面的截图,这样表的每个字段在界面上分别对应什么样的显示数据,对于这个表有什么用,心里就会有底很多。


<img src="https://pic3.zhimg.com/50/v2-c8d602aac04b9408942acfaac7e60e87_hd.jpg" data-rawwidth="720" data-rawheight="693" class="origin_image zh-lightbox-thumb" width="720" data-original="https://pic3.zhimg.com/v2-c8d602aac04b9408942acfaac7e60e87_r.jpg">


4.4 后台第一个功能开发

在功能开发环节,比如后台功能,通常来说,大部分后台功能是比较接近的,主要是业务数据的CRUD操作。 而做第一个的时候,不仅需要规范化,对于不熟悉的同学,也会略感吃力。 所以在讲解如何做后台第一个分类管理功能的时候,把其拆的特别细,碾碎到很小的颗粒,这样消化起来就容易多了。


<img src="https://pic2.zhimg.com/50/v2-f56e131e0145bff511b6d15f9750fdf4_hd.jpg" data-rawwidth="177" data-rawheight="517" class="content_image" width="177">


4.5 项目重构

随着使用SSH框架把分类管理的完成,不仅感受到SSH框架的便利性,同样对其存在的弊端也有所察觉了。 这个时候,就需要一个有多年工作经验,并且对这类问题有丰富解决手段的同志:我(脸红一秒) 来提出一个如何看待这些问题的角度,以及解决办法了。

而重构本身确实需要建立在相当的功力基础之上的,为了让同学们在重构这个环节尽可能多的收获更多,把重构行为的学习作成了一下几个部分以便消化。

  • 首先提出当前存在的问题
<img src="https://pic4.zhimg.com/50/v2-b1e43990bc00b72508468c124fc2c6b3_hd.jpg" data-rawwidth="208" data-rawheight="111" class="content_image" width="208">
  • 接着需要重构的行为,拆成容易理解的知识点


<img src="https://pic4.zhimg.com/50/v2-3ea3908c302e73b6d7b3e0f8934fafbb_hd.jpg" data-rawwidth="168" data-rawheight="162" class="content_image" width="168">


  • 并且每个重构知识点里,都采用由终至始的方式,先看重构的效果,然后再说怎么重构,最后再次通过比较,观察因为重构带来的好处。


<img src="https://pic1.zhimg.com/50/v2-222c66643ef049eb1c777cd52b2e2d22_hd.jpg" data-rawwidth="365" data-rawheight="291" class="content_image" width="365">
  • 持续重构

重构不是一蹴而就的,伴随这项目的进行,后续还会进行多次重构, 这些都是宝贵的项目经验积累,很宝贵的哦


<img src="https://pic1.zhimg.com/50/v2-078b99f7631c3ed05885117ba7f7f35d_hd.jpg" data-rawwidth="171" data-rawheight="445" class="content_image" width="171">


4.6 其他后台

在完成了第一个后台管理之后,其他的后台管理也就比较容易掌握了


<img src="https://pic1.zhimg.com/50/v2-fb6dc62ad96c309f56285076df143798_hd.jpg" data-rawwidth="172" data-rawheight="449" class="content_image" width="172">


4.7 前台第一个功能

与后台一样,前台的第一个功能:首页,也会拿出来精讲


<img src="https://pic2.zhimg.com/50/v2-ff8556a152a8caaf3ac077aa03a1cdd5_hd.jpg" data-rawwidth="172" data-rawheight="343" class="content_image" width="172">


4.8 前台其他功能

首页做好了之后,就可以开始做前台的其他功能了:


<img src="https://pic1.zhimg.com/50/v2-44277eea59443fde4f0211896d9411c1_hd.jpg" data-rawwidth="388" data-rawheight="637" class="content_image" width="388">

5. SSH某些用法不熟悉怎么办?

既然学习SSH项目,自然是对SSH各种基本用法有一定了解的。 不过SSH内容确实较为丰富,难免有些地方即便是学习了,到用的时候,也记不起来了。 那怎么办呢?

当然是缺什么,学什么啦~ 这个时候,自己是处于饥饿状态,其实是对知识很好的吸收和消化的。 所以也提供了Hiberante,Spring,Struts ,SSH整合思路的免费教程:


<img src="https://pic4.zhimg.com/50/v2-43bc0e56d5054bd4a39cf13fda10a7a9_hd.jpg" data-rawwidth="997" data-rawheight="601" class="origin_image zh-lightbox-thumb" width="997" data-original="https://pic4.zhimg.com/v2-43bc0e56d5054bd4a39cf13fda10a7a9_r.jpg">


做项目期间,哪里二麻二麻了,就回头看看相关教程,即巩固了SSH的基础,也让项目的学习流畅度更好

6. 可期待的收获

看上去这个项目也不短嘛,那么真正学完这个项目后,能够得到什么呢?

6.1 典型业务场景的掌握

所谓的典型业务场景就是各种商业项目里,都会有类似或者接近的功能。 在这个项目里你掌握了这些业务场景的开发,去工作之后,做类似的就能驾轻就熟。 那么都有哪些业务场景呢?


<img src="https://pic2.zhimg.com/50/v2-bd91f2eff235651f6fc4cf97694e5a2b_hd.jpg" data-rawwidth="472" data-rawheight="899" class="origin_image zh-lightbox-thumb" width="472" data-original="https://pic2.zhimg.com/v2-bd91f2eff235651f6fc4cf97694e5a2b_r.jpg">




6.2 设计模式的掌握

设计模式的书和文章有很多,从我自己学习和工作的经验来看,如果一种设计模式,我只是在书上看过,却没有在实际工作中运用的话,那么犹如无根之树,打一把dota就忘记了,即无法深入理解其中的原理,也不能在真正工作的时候,灵活地运用到他们。


<img src="https://pic2.zhimg.com/50/v2-353fde0fa903529efc5b2d6cead49747_hd.jpg" data-rawwidth="991" data-rawheight="427" class="origin_image zh-lightbox-thumb" width="991" data-original="https://pic2.zhimg.com/v2-353fde0fa903529efc5b2d6cead49747_r.jpg">

7. 教程地址:how2j.cn/t/59

教程由个人完成,局限于个人的经验和视野,有诸多不足之处,请各位多多指点,谢谢。

收藏的同学,请记得点个赞~

发布于 2017-07-17
44243 条评论
分享
收藏感谢收起
184 人赞同了该回答

SSH框架一般指的是Struts、Spring、Hibernate,后来Struts2代替了Struts。最近5年,Struts2已经被Spring MVC代替,而Hibernate基本也被iBatis/MyBatis代替。

所以你真正需要了解的是Spring,Spring你需要了解两个概念AOP和IOC,更进一步就是Spring的核心技术“动态代理”。

持久层框架看看Hibernate/iBatis/MyBatis,研究一下Spring的数据库事务管理,各个持久层框架式如何实现ORM的,了解至少一种缓存框架,知道什么是数据库连接池。和数据库的交互最核心的不是ORM,而是掌握和数据库相关的能力,比如数据库编程、SQL优化、对范式的理解。

MVC框架Struts2和Spring MVC,你需要知道他们在web.xml文件里配置了一些什么,Struts2/Spring MVC接到前台请求之后经过哪些步骤之后转到Action/Controller,return之后Struts2/Spring MVC又作了些什么。还有就是Filter、Listener和Struts2/Spring MVC的拦截器各有什么特点,适合处理什么样的问题。
编辑于 2015-05-20
18418 条评论
微信二维码分享
收藏感谢
345 人赞同了该回答

现在许许多多的初学者和程序员,都在趋之若鹜地学习Web开发的宝典级框架:Struts2,Spring,Hibernate。似乎这些框架成为了一个人是否精通Java,是否会写J2EE程序的唯一事实标准和找工作的必备基础。

然而,如果在面试的时候问这些程序员,你们为什么要学习这些框架?这些框架的本质到底是什么?似乎很少很少有人能够给我非常满意的答复。因为他们都在为了学习而学习,为了工作而学习,而不是在真正去深入了解一个框架。其实所有的人都应该思考这样的问题:为什么要学习框架?框架到底给我带来了什么?接下来,我们以登录作为一个最简单的例子,来看看不同的年代,我们是怎么写Web程序的。

后来,我们放弃了在页面上写逻辑。

后来,程序写得越来越多,我们发现,这种在HTML代码中编写Java代码来完成逻辑的方式存在着不少问题

  1. Java代码由于混杂在一个HTML环境中而显得混乱不堪,可读性非常差。JSP文件有时候会变成几十K,甚至上百K。要找一段逻辑,经常无法位


2. 编写代码时非常困惑,不知道代码到底应该写在哪里,也不知道别人是不是已经曾经实现过类似的功能,到哪里去引用。


3. 突然之间,某个需求发生了变化。于是,每个人蒙头开始全程替换,还要小心翼翼的,生怕把别人的逻辑改了。


4. 逻辑处理程序需要自己来维护生命周期,对于类似数据库事务、日志等众多模块无法统一支持。

在这个时候,如果有一个产品,它能够将页面上的那些Java代码抽取出来,让页面上尽量少出现Java代码,该有多好。于是许多人开始使用servlet来处理那些业务逻辑。


1.public class LoginServlet extends HttpServlet {
2./* (non-Javadoc)
3.* @see javax.servlet.http.HttpServlet#doPost(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
4.*/
5.@Override
6.protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
7.String message = null;
8.RequestDispatcher dispatcher = req.getRequestDispatcher("/result.jsp");
9.String name = req.getParameter("name");
10.String password = req.getParameter("password");
11.UserHandler userHandler = new UserHandler();
12.if(userHandler.authenticate(name, password)) {
13.message = "恭喜你,登录成功";
14.} else {
15.message = "对不起,登录失败";
16.}
17.req.setAttribute("message", message);
18.dispatcher.forward(req, resp);
19.}
20.}


在这里,我们需要在web.xml中为这个servlet配置url的请求关系。

1.<servlet>
2.<servlet-name>Login</servlet-name>
3.<servlet-class>
4.com.demo2do.servlet.LoginServlet
5.</servlet-class>
6.</servlet>
7.<servlet-mapping>
8.<servlet-name>Login</servlet-name>
9.<url-pattern>
10./Login
11.</url-pattern>
12.</servlet-mapping>


代码重构到这里,我们发现,其实我们的工作量本身并没有减少,只是代码从JSP移动到了Servlet,使得整个流程看上去稍微清楚了一些。然而,为了这么点干净,我们付出的代价是什么?为每个servlet都在web.xml里面去做一个url的请求配置!

在很多年前,我们这么写程序的。

很多年前,那是一个贫苦的年代,如果我们要使用Java在网页上做一些动态的交互功能。很多人会告诉你一个技术,叫做JSP。在我还对Java非常困惑的时候,就有人告诉我,JSP是个好东西,它可以在HTML代码里面写Java代码来完成逻辑。


1.<%
2.String name = request.getParameter("name");
3.String password = request.getParameter("password");
4.UserHandler userHandler = new UserHandler();
5.if(userHandler.authenticate(name, password)) {
6.%>
7.<p>恭喜你,登录成功</p>
8.<%
9.} else {
10.%>
11.<p>对不起,登录失败</p>
12.<%
13.}
14.%>


作为一张JSP,它可以接收从别的JSP发送过来的登录请求,并进行处理。这样,我们不需要任何额外的配置文件,也不需要任何框架的帮忙,就能完成逻辑。

再后来,出现框架。

时代进一步发展,人们发现简单的JSP和Servlet已经很难满足人们懒惰的要求了。于是,人们开始试图总结一些公用的Java类,来解决Web开发过程中碰到的问题。这时,横空出世了一个框架,叫做struts。它非常先进地实现了MVC模式,成为了广大程序员的福音。

truts的代码示例我就不贴了,网上随便搜搜你可以发现一堆一堆的。在一定程度上,struts能够解决web开发中的职责分配问题,使得显示与逻辑分开。不过在很长一段时间内,使用struts的程序员往往无法分别我们到底需要web框架帮我们做什么,我们到底需要它完成点什么功能?


我们到底要什么?

在回顾了我们写代码的历史之后,我们回过头来看看,我们到底要什么?

无论是使用JSP,还是使用Struts1,或是Struts2,我们至少都需要一些必须的元素(如果没有这些元素,或许我还真不知道这个程序会写成什么样子):

1. 数据

在这个例子中,就是name和password。他们共同构成了程序的核心载体。事实上,我们往往会有一个User类来封装name和password,这样会使得我们的程序更加OO。无论怎么说,数据会穿插在这个程序的各处,成为程序运行的核心。

2.页面展示

在这个例子中,就是login.jsp。没有这个页面,一切的请求、验证和错误展示也无从谈起。在页面上,我们需要利用HTML,把我们需要展现的数据都呈现出来。同时我们也需要完成一定的页面逻辑,例如,错误展示,分支判断等等。

3.处理具体业务的场所

在这里,不同阶段,处理具体业务的场所就不太一样。原来用JSP和Servlet,后来用Struts1或者Struts2的Action。

上面的这些必须出现的元素,在不同的年代,被赋予了不同的表现形式,有的受到时代的束缚,其表现形式非常落后,有的已经不再使用。但是拨开这些外在的表现形式,我们就可以发现,这不就是我们已经熟门熟路的MVC嘛?


数据 —— Model


页面展示 —— View


处理具体业务的场所 —— Control



所以,框架不重要,概念是王道。只要能够深刻理解MVC的概念,框架对你来说,只是一个jar包而已。

MVC的概念其实就那么简单,这些概念其实早已深入我们的内心,而我们所缺乏的是将其本质挖掘出来。我们来看看下面这幅图,这是一副流行了很多年的讲述MVC模型的图:

&amp;lt;img src=&quot;https://pic2.zhimg.com/50/0e02099f274960fea817acee03441d9d_hd.jpg&quot; data-rawwidth=&quot;629&quot; data-rawheight=&quot;370&quot; class=&quot;origin_image zh-lightbox-thumb&quot; width=&quot;629&quot; data-original=&quot;https://pic2.zhimg.com/0e02099f274960fea817acee03441d9d_r.jpg&quot;&amp;gt;

在这幅图中,MVC三个框框各司其职,结构清晰明朗。不过我觉得这幅图忽略了一个问题,就是数据是动的,数据在View和Control层一旦动起来,就会产生许多的问题:


1. 数据从View层传递到Control层,如何使得一个个扁平的字符串,转化成一个个生龙活虎的Java对象。


2. 数据从View层传递到Control层,如何方便的进行数据格式和内容的校验?


3. 数据从Control层传递到View层,一个个生龙活虎的Java对象,又如何在页面上以各种各样的形式展现出来。


4.如果你试图将数据请求从View层发送到Control层,你如何才能知道你要调用的究竟是哪个类,哪个方法?一个Http的请求,又如何与Control层的Java代码建立起关系来?


除此之外,Control层似乎也没有想象中的那么简单,因为它作为一个控制器,至少还需要处理以下的问题:


1. 作为调用逻辑处理程序的facade门面,如果逻辑处理程序发生了异常,我们该如何处理?


2. 对于逻辑处理的结果,我们需要做怎么样的处理才能满足丰富的前台展示需要?


这一个又一个问题的提出,都基于对MVC的基本概念的挖掘。所以,这些问题都需要我们在写程序的时候去一一解决。说到这里,这篇文章开头所提的问题应该可以有答案了:框架是为了解决一个又一个在Web开发中所遇到的问题而诞生的。不同的框架,都是为了解决不同的问题,但是对于程序员而言,他们只是jar包而已。框架的优缺点的评论,也完全取决于其对问题解决程度和解决方式的优雅性的评论。所以,千万不要为了学习框架而学习框架,而是要为了解决问题而学习框架,这才是一个程序员的正确学习之道。

深入浅出的理解框架(Struts2、Hibernate、Spring)与 MVC 设计模式

推荐一本书,写得非常好《Struts2+技术内幕——深入解析Struts2架构设计与实现原理》——孔夫子网有卖的

编辑于 2016-10-22
34535 条评论
分享
收藏感谢收起
21 人赞同了该回答
你从更广更高的视角去理解,延展到整个Web应用的技术发展和架构变迁来看,你会理解得更加深刻。你能对这些内容侃侃而谈,相信对于面试有很大加分。

参考我这个回答 Web 建站技术中,HTML、HTML5、XHTML、CSS、SQL、JavaScript、PHP、ASP.NET、Web Services 是什么? - David 的回答

下面是跟SSH相关的一部分内容:

5、框架横飞的年代:MVC,ORM

.net和J2EE两大平台诞生之后,组件化编程技术盛极一时,Web技术的发展开始了一段框架横飞的年代,各种辅助Web开发的技术框架层出不穷。虽然脚本语言大大提高了应用开发效率,但是试想一个复杂的大型Web应用,访问各种功能的URL地址纷繁复杂,涉及到的Web页面多种多样,同时还管理着大量的后台数据,因此我们需要在架构层面上解决维护性和扩展性等问题。这个时候,MVC的概念被引入到Web开发中来了。2004年出现的Struts就是当时非常流行的Java Web开发的MVC框架。MVC早在1978年就作为Smalltalk的一种设计模式被提出来了,应用到Web应用上,模型Model用于封装与业务逻辑相关的数据和数据处理方法,视图View是数据的HTML展现,控制器Controller负责响应请求,协调Model和View。Model,View和Controller的分开,是一种典型的关注点分离的思想,不仅使得代码复用性和组织性更好,使得Web应用的配置性和灵活性更好。这是Spring MVC的示意图,典型的MVC架构。

&amp;lt;img src=&quot;https://pic3.zhimg.com/50/74d19098c5883b5c3e70b9f6c2af7507_hd.jpg&quot; data-rawwidth=&quot;800&quot; data-rawheight=&quot;513&quot; class=&quot;origin_image zh-lightbox-thumb&quot; width=&quot;800&quot; data-original=&quot;https://pic3.zhimg.com/74d19098c5883b5c3e70b9f6c2af7507_r.jpg&quot;&amp;gt;

此外,数据访问也逐渐通过面向对象的方式来替代直接的SQL访问,出现了ORM(Object Relation Mapping)的概念,2001年出现的Hibernate就是其中的佼佼者,已经成为Java持久层的规范JPA的主要参考和实现。更多的全栈框架开始出现,比如2003年出现的Java开发框架Spring,同时更多的动态语言也被加入到Web编程语言的阵营中,2004年出现的Ruby开发框架Rails,2005出现的Python开发框架Django,都提供了全栈开发框架,或者自身提供Web开发的各种组件,或者可以方便的集成各种组件。比如Spring基于IoC和AOP思想可以方便得整合出全套Web开发组件,SSH(Struts+Spring+Hibernate)一度成为Java Web开发的标配。值得一提的时Rails这个MVC框架,26岁的丹麦大神David Heinemeier Hansson在开发著名项目管理软件BaseCamp的过程中形成,Ruby语言本身在快速开发上的优势,加上Rails诸如崇尚DRY(Don't)Repeat Yourself)原则, 约定优于配置,拥抱REST等特性,使其迅速成为一个极其流行的Web开发框架。

&amp;lt;img src=&quot;https://pic3.zhimg.com/50/db0c9d64d4ecc29645bb12823edc083e_hd.jpg&quot; data-rawwidth=&quot;651&quot; data-rawheight=&quot;304&quot; class=&quot;origin_image zh-lightbox-thumb&quot; width=&quot;651&quot; data-original=&quot;https://pic3.zhimg.com/db0c9d64d4ecc29645bb12823edc083e_r.jpg&quot;&amp;gt;可以看这篇文章:Web开发技术发展历史
发布于 2016-05-16
211 条评论
分享
收藏感谢收起
92 人赞同了该回答

我想从非科班零基础自学的新手角度,结合画图谈谈我对框架学习的理解。主要面向和我一样的零基础小白,有基础的朋友请不要浪费时间在我这个回答上,哈哈。

5个月前,我看视频自学到了框架,顺序是ssh,ssm。网上能找到的框架视频都讲得不是很好,要么没讲清楚为什么用这个框架,要么连怎么用都讲不清楚。当时上知乎关注了这个话题,看了很多答案,都讲得很不错。有些观点一针见血指出了框架的本质,让我后来学习框架时不至于分不清重点。




一个概念:工具类和框架的区别?

小白刚开始学习框架时,肯定都想过:框架和之前学的commons下的beanUtils之类的工具类有什么区别?就是大一点吗?笼统地讲,框架确实可以理解为“很大很全”的工具类。但是有一点很不一样。

我们在自己的代码中调用工具类,提高开发效率。此时工具类就像钥匙,是工具,我们用它开门;
而框架呢?我们写好自己的代码被框架调用。框架就像房子,我们的代码是窗户,窗户是嵌在房子里的。




零基础小白如何学习框架?

对于一路看视频自学的小白来说,叫他去看书是不负责任的。就像你推荐小白去看《Java编程思想》一样。很多人根本无法体会小白装好Eclipse后,面对那么多视窗却不知道点哪里的绝望。

虽然视频没有书本讲的深刻,学完也初步能干活了。但是没有方法还是学不好框架。在我看来,学习框架时,心里至少要带着下面的疑问:

  • 这个框架是负责哪一块的,用在哪一层?
  • 没有它之前,前辈们如何解决,又什么缺点?
  • 它的出现解决了哪些痛点?
  • 它是否也有什么缺点?(这个暂时不作要求)

下面以MyBatis举例,讲讲非科班零基础小白如何学习框架才能形成自己的理解。学一样东西,能形成自己的理解,至少说明你学得不糊涂。


我打算按照答题的形式,通过逐一解答上面的提问来理解MyBatis:

  • MyBatis是对JDBC的封装,负责和数据库打交道,我们在dao层会用到它。

MyBatis出现之前,我们可以用Hibernate框架,一个非常优秀的ORM框架。

但是在Hibernate更早更早之前的上古时代,我们的程序猿祖先就用JDBC。

&amp;lt;img src=&quot;https://pic2.zhimg.com/50/v2-b0e012a4da3db8a1d50a96c909676b49_hd.jpg&quot; data-caption=&quot;&quot; data-size=&quot;normal&quot; data-rawwidth=&quot;600&quot; data-rawheight=&quot;395&quot; class=&quot;origin_image zh-lightbox-thumb&quot; width=&quot;600&quot; data-original=&quot;https://pic2.zhimg.com/v2-b0e012a4da3db8a1d50a96c909676b49_r.jpg&quot;&amp;gt;


  • 但是JDBC的缺点也十分明显:
&amp;lt;img src=&quot;https://pic3.zhimg.com/50/v2-73360105c64d92c0088d5ec4838e7857_hd.jpg&quot; data-caption=&quot;&quot; data-size=&quot;normal&quot; data-rawwidth=&quot;1239&quot; data-rawheight=&quot;680&quot; class=&quot;origin_image zh-lightbox-thumb&quot; width=&quot;1239&quot; data-original=&quot;https://pic3.zhimg.com/v2-73360105c64d92c0088d5ec4838e7857_r.jpg&quot;&amp;gt;


所以后来我们都很少在dao层手写JDBC,而是用封装了JDBC的框架,比如轻量而优秀的MyBatis。

这里顺便简单对比下Hibernate和MyBatis。因为同为dao层框架,它们总是被人拿来比较:

&amp;lt;img src=&quot;https://pic4.zhimg.com/50/v2-b146deb24aa0db96697d6ccb376d7364_hd.jpg&quot; data-caption=&quot;&quot; data-size=&quot;normal&quot; data-rawwidth=&quot;1091&quot; data-rawheight=&quot;899&quot; class=&quot;origin_image zh-lightbox-thumb&quot; width=&quot;1091&quot; data-original=&quot;https://pic4.zhimg.com/v2-b146deb24aa0db96697d6ccb376d7364_r.jpg&quot;&amp;gt;


  • MyBatis解决了JDBC的哪些痛点呢:
&amp;lt;img src=&quot;https://pic4.zhimg.com/50/v2-0b550d19c9d02d3c422e2c95ad92e8d8_hd.jpg&quot; data-caption=&quot;&quot; data-size=&quot;normal&quot; data-rawwidth=&quot;1047&quot; data-rawheight=&quot;890&quot; class=&quot;origin_image zh-lightbox-thumb&quot; width=&quot;1047&quot; data-original=&quot;https://pic4.zhimg.com/v2-0b550d19c9d02d3c422e2c95ad92e8d8_r.jpg&quot;&amp;gt;

按照这样自问自答式的学习方法,基本上,一遍视频撸下来,就能形成对框架的感性认识。为后期深入学习打下基础。


另外,Spring最核心的概念就两个:AOP(切面编程)和DI(依赖注入)。DI又依赖IoC。

这里不打算详细说,就简单画个图,只介绍DI和IoC。

&amp;lt;img src=&quot;https://pic4.zhimg.com/50/v2-95995df0d438275afb42f044a174845b_hd.jpg&quot; data-caption=&quot;&quot; data-size=&quot;normal&quot; data-rawwidth=&quot;1057&quot; data-rawheight=&quot;899&quot; class=&quot;origin_image zh-lightbox-thumb&quot; width=&quot;1057&quot; data-original=&quot;https://pic4.zhimg.com/v2-95995df0d438275afb42f044a174845b_r.jpg&quot;&amp;gt;




简而言之,原先创建对象以及注入对象都是采取“人盯人”战术,一个咬着一个。有了Spring以后,通过IoC,所有的对象都可以从Spring容器中得到。每个对象由Spring注入到它应该去的地方。这种由原先对象管理切换到Spring管理的方式,就是所谓的IoC(控制反转),因为创建、管理对象的角色反过来了,有每个对象自主管理变为Spring统一管理。

而且,只有通过IoC先由Spring创建对象后,才能进行下一步对象注入(DI),所以说DI依赖IoC。

上面有说错的地方,请斧正。

另外,上面MyBatis的画图只是我学习笔记的一部分,这里是MyBatis的完整笔记,就一张图:

链接:pan.baidu.com/s/1c4febE 密码:md4u

最后,这是作为小白的我的学习路线:

黄孙挺:零基础Java学习路线zhuanlan.zhihu.com图标
编辑于 2018-02-05
9216 条评论
分享
收藏感谢收起
34 人赞同了该回答
自从离开北大青鸟我就没见有人谈过Java的SSH,说的都是*nix的SSH工具。
发布于 2015-05-20
3416 条评论
分享
收藏感谢
4 人赞同了该回答

还ssh,多少年前啊!知识要更新啊

现在没有strut了,用spring谁会用stuct呢?

好好理解spring的ioc,aop的原理,思想,实现方式,bean的作用域的使用实现,spring的各种扩展点,这些才是重要的。

发布于 2017-07-19
4添加评论
分享
收藏感谢
我觉得现在框架就spring,其他都是工具
发布于 2016-09-06
0添加评论
分享
收藏感谢
13 人赞同了该回答

我们知道,传统的Java Web应用程序是采用JSP+Servlet+Javabean来实现的,这种模式实现了最基本的MVC分层,使的程序结构分为几层,有负责前台展示的 JSP、负责流程逻辑控制的Servlet以及负责数据封装的Javabean。但是这种结构仍然存在问题:如JSP页面中需要使用符号嵌入很多的 Java代码,造成页面结构混乱,Servlet和Javabean负责了大量的跳转和运算工作,耦合紧密,程序复用度低等等。


&amp;lt;img src=&quot;https://pic1.zhimg.com/50/v2-c8745e983307a44ff4b43b818421a60c_hd.jpg&quot; data-rawwidth=&quot;1008&quot; data-rawheight=&quot;525&quot; class=&quot;origin_image zh-lightbox-thumb&quot; width=&quot;1008&quot; data-original=&quot;https://pic1.zhimg.com/v2-c8745e983307a44ff4b43b818421a60c_r.jpg&quot;&amp;gt;


Struts


为了解决这些问题,出现了Struts框架,它是一个完美的MVC实现,它有一个中央控制类(一个 Servlet),针对不同的业务,我们需要一个Action类负责页面跳转和后台逻辑运算,一个或几个JSP页面负责数据的输入和输出显示,还有一个 Form类负责传递Action和JSP中间的数据。JSP中可以使用Struts框架提供的一组标签,就像使用HTML标签一样简单,但是可以完成非常复杂的逻辑。从此JSP页面中不需要出现一行包围的Java代码了。


可是所有的运算逻辑都放在Struts的Action里将使得 Action类复用度低和逻辑混乱,所以通常人们会把整个Web应用程序分为三层,Struts负责显示层,它调用业务层完成运算逻辑,业务层再调用持久层完成数据库的读写。


使用JDBC连接来读写数据库,我们最常见的就是打开数据库连接、使用复杂的SQL语句进行读写、关闭连接,获得的数据又需要转换或封装后往外传,这是一个非常烦琐的过程。


Hibernate


这时出现了 Hibernate框架,它需要你创建一系列的持久化类,每个类的属性都可以简单的看做和一张数据库表的属性一一对应,当然也可以实现关系数据库的各种表件关联的对应。当我们需要相关操作是,不用再关注数据库表。我们不用再去一行行的查询数据库,只需要持久化类就可以完成增删改查的功能。使我们的软件开发真正面向对象,而不是面向混乱的代码。


现在我们有三个层了,可是每层之间的调用是怎样的呢?比如显示层的Struts需要调用一个业务类,就需要new一个业务类出来,然后使用;业务层需要调用持久层的类,也需要new一个持久层类出来用。通过这种new的方式互相调用就是软件开发中最糟糕设计的体现。简单的说,就是调用者依赖被调用者,它们之间形成了强耦合,如果我想在其他地方复用某个类,则这个类依赖的其他类也需要包含。程序就变得很混乱,每个类互相依赖互相调用,复用度极低。如果一个类做了修改,则依赖它的很多类都会受到牵连。为此,出现Spring框架。


Spring


Spring的作用就是完全解耦类之间的依赖关系,一个类如果要依赖什么,那就是一个接口。至于如何实现这个接口,这都不重要了。只要拿到一个实现了这个接口的类,就可以轻松的通过xml配置文件把实现类注射到调用接口的那个类里。所有类之间的这种依赖关系就完全通过配置文件的方式替代了。所以 Spring框架最核心的就是所谓的依赖注射和控制反转。


现在的结构是,Struts负责显示层,Hibernate负责持久层,Spring负责中间的业务层,另外,由于Spring使用的依赖注射以及AOP(面向方面编程),所以它的这种内部模式非常优秀,以至于Spring自己也实现了一个使用依赖注射的MVC框架,叫做Spring MVC,同时为了很好的处理事物,Spring集成了Hibernate,使事物管理从Hibernate的持久层提升到了业务层,使用更加方便和强大。

编辑于 2017-08-23
131 条评论
分享
收藏感谢收起
8 人赞同了该回答
java框架的学习有一个最基本的原则,必须是先遇到问题,然后再去学相应的框架去解决这个问题,你都没遇到过这个问题,然后去学框架,你都不知道他是干啥的,学会是不可能的,反而会觉得框架特别繁琐,没效率.
发布于 2016-11-02
81 条评论
分享
收藏感谢
4 人赞同了该回答
&amp;lt;img src=&quot;https://pic2.zhimg.com/50/v2-96eb7b4c1fec5837210d564f2baa5da2_hd.jpg&quot; data-rawwidth=&quot;1751&quot; data-rawheight=&quot;803&quot; class=&quot;origin_image zh-lightbox-thumb&quot; width=&quot;1751&quot; data-original=&quot;https://pic2.zhimg.com/v2-96eb7b4c1fec5837210d564f2baa5da2_r.jpg&quot;&amp;gt;

要理解三大框架,先要理解JavaEE三层架构。

web层之前的事情是由servlet来处理,之后出现了Struts2,它把servlet这部分的事情取代了。

而dao层,负责的是数据的操作。你之前可能用过自己配置的连接池或者c3p0、DBUtils这样的工具,但那些还不够面向对象。于是出现了hibernate这样的ORM(object relational mapping)框架,对底层的数据库操作进行封装,持久化数据。

service层的业务由JavaBean负责。而spring的IoC、AOP这些高级特性可以帮你更好地管理对象。

发布于 2017-05-22
43 条评论
分享
收藏感谢
4 人赞同了该回答
初学Java没有用过SSH框架,用的最多的是SSM框架,即spring,springMVC,mybatis,现在用的较多的还是这三大框架,用起来比较的简单,也很方便,我感觉用框架就是知道怎么用就行了,
最主要的是要理解使用框架的核心思想,就是要将业务逻辑和数据进行分离,提高程序的可读性和维护性,就是因为以前的方法没法保证程序的健壮性,所以框架的出现就是为了解决这一问题的,其他的我不觉得他比传统的编程好到了哪儿,要说好倒是有点儿就是以前我们做的一些觉得很繁琐的事,现在不需要我们自己来做了,全都由框架来做了,其他的我就不知道了,如果有人有更好的见解还望分享一下
发布于 2016-09-13
41 条评论
分享
收藏感谢
3 人赞同了该回答
去某个餐厅吃饭,服务员回给你一个菜单,然后你在菜单上勾选要吃的饭菜,填好之后把单子给服务员,然后服务员把单子给后厨,后厨里面有摘菜的,有厨师,还有很多买来的菜,厨师把摘菜阿姨阿姨的菜做成一道完整的菜,然后服务员把菜端给你,你就开吃了
编辑于 2017-07-17
3添加评论
分享
收藏感谢
2 人赞同了该回答
SSH是mvc的经典诠释,用这个锻炼mvc的思维模式,但现在公司用很少了 基本都是spring mvc 不过先掌握SSH再接触spring mvc和mybatis那些会相对容易些
发布于 2016-09-06
2添加评论
分享
收藏感谢
2 人赞同了该回答
我到现在都是比较的迷茫!框架到底该如何学习才能理解更加深入!每出现一个新的框架,都是一堆的配置,然后开始与spring进行整合!
发布于 2016-11-03
2添加评论
分享
收藏感谢
1 人赞同了该回答

作为一名多年的老程序员。建议楼主看看Nutz这个框架。它号称是ssh之外的另一个选择。

这个框架的的体积比较小。但是功能一点也不弱。基本上你能用到的大多数功能它都能很好的完成。代码比较简约。注释和文档比较齐全。研究它比研究ssh却更加轻。初学者花一周左右的时间就能明白了大概。如果是资深程序员,一两天就能完全上手。

因为Nutz比较简单,通过研究它,你可以更快的了解MVC, ORM, AOP, Ioc 等概念。在这些概念被你充分了解之后,翻回头再学 Spring,往往会事半功倍,获得更好的学习效果。

祝楼主学习顺利!
发布于 2018-02-04
1添加评论
分享
收藏感谢
1 人赞同了该回答

说下我的理解,讲最主要的。

SpringMVC,将大型项目明确为层次的概念,前端,控制端,服务端,dao。其实大企业往往分得更细,biz业务层,core核心服务层。方便大型项目的快去迭代开发和新人去理解项目(互联网流动率太大,一个项目不同的人同时在开发不同的功能)

Mybatis,Hibernate,将对数据库的操作的思维转向对对象操作的思维。这样思维就统一了,你的点一直聚焦在对象和业务上,不用去关注单纯的数据而导致和业务割裂。

Spring,一切可注入,可拦截,可事务,各种标准组件。这样每个bean,每个接口都活了,可以各种拼装,各种组合而不用在代码层面改变,只需要在配置或者注解层面实施。

欢迎讨论。
编辑于 2018-02-04
1添加评论
分享
收藏感谢
1 人赞同了该回答
我是先学的ssm,后来学了ssh后感觉各有各的优缺点,也不是你所说的Struts2被springMVC取代,而且hibernate的功能很强大的,Mybatis相对来说能够更加简化开发,并没有得到取代的作用
发布于 2016-11-02
15 条评论
分享
收藏感谢
1 人赞同了该回答

赶紧改行

如果你还不具备通过阅读官方文档/教程学习一个开发框架使用的能力的话

说明你还不适合加入这一行
发布于 2017-07-18
1添加评论
微信二维码分享
收藏感谢
ssh现在也就剩下Spring了,struts2基本没人用了,大多都被SpringMvc替代了,hibernate也很大程度被myBatis替代了。
发布于 2018-02-04
0添加评论
分享
收藏感谢

运用唯物主义辩证法思想,这个世界的每个物体都是独立统一而又互相联系的,我们的JAVAWEB开发也一样。

大型项目,如果不分层编写代码,很容易导致逻辑混乱,也不适合团队开发与维护。于是就出现了MVC的分层思想。

为了让MVC的思想更加彻底,以及编程自动化(我发明的词),于是发明了SSH。

具体来说,Hibernate解决了SQL语句与面向对象编程的冲突,Struts解决了页面跳转问题采用过滤器实现,Spring通过面向接口实现了action层、service层与DAO层的解耦,SSH框架通过XML文档(注解)来实现各个模块的联系。

发布于 2017-11-22
0添加评论
分享
收藏感谢

我们知道,传统的Java Web应用程序是采用JSP+Servlet+Javabean来实现的,这种模式实现了最基本的MVC分层,使的程序结构分为几层,有负责前台展示的 JSP、负责流程逻辑控制的Servlet以及负责数据封装的Javabean。但是这种结构仍然存在问题:如JSP页面中需要使用符号嵌入很多的 Java代码,造成页面结构混乱,Servlet和Javabean负责了大量的跳转和运算工作,耦合紧密,程序复用度低等等。

Struts

为了解决这些问题,出现了Struts框架,它是一个完美的MVC实现,它有一个中央控制类(一个 Servlet),针对不同的业务,我们需要一个Action类负责页面跳转和后台逻辑运算,一个或几个JSP页面负责数据的输入和输出显示,还有一个 Form类负责传递Action和JSP中间的数据。JSP中可以使用Struts框架提供的一组标签,就像使用HTML标签一样简单,但是可以完成非常复杂的逻辑。从此JSP页面中不需要出现一行包围的Java代码了。

可是所有的运算逻辑都放在Struts的Action里将使得 Action类复用度低和逻辑混乱,所以通常人们会把整个Web应用程序分为三层,Struts负责显示层,它调用业务层完成运算逻辑,业务层再调用持久层完成数据库的读写。

使用JDBC连接来读写数据库,我们最常见的就是打开数据库连接、使用复杂的SQL语句进行读写、关闭连接,获得的数据又需要转换或封装后往外传,这是一个非常烦琐的过程。

Hibernate

这时出现了 Hibernate框架,它需要你创建一系列的持久化类,每个类的属性都可以简单的看做和一张数据库表的属性一一对应,当然也可以实现关系数据库的各种表件关联的对应。当我们需要相关操作是,不用再关注数据库表。我们不用再去一行行的查询数据库,只需要持久化类就可以完成增删改查的功能。使我们的软件开发真正面向对象,而不是面向混乱的代码。

现在我们有三个层了,可是每层之间的调用是怎样的呢?比如显示层的Struts需要调用一个业务类,就需要new一个业务类出来,然后使用;业务层需要调用持久层的类,也需要new一个持久层类出来用。通过这种new的方式互相调用就是软件开发中最糟糕设计的体现。简单的说,就是调用者依赖被调用者,它们之间形成了强耦合,如果我想在其他地方复用某个类,则这个类依赖的其他类也需要包含。程序就变得很混乱,每个类互相依赖互相调用,复用度极低。如果一个类做了修改,则依赖它的很多类都会受到牵连。为此,出现Spring框架。

Spring

Spring的作用就是完全解耦类之间的依赖关系,一个类如果要依赖什么,那就是一个接口。至于如何实现这个接口,这都不重要了。只要拿到一个实现了这个接口的类,就可以轻松的通过xml配置文件把实现类注射到调用接口的那个类里。所有类之间的这种依赖关系就完全通过配置文件的方式替代了。所以 Spring框架最核心的就是所谓的依赖注射和控制反转。

现在的结构是,Struts负责显示层,Hibernate负责持久层,Spring负责中间的业务层,另外,由于Spring使用的依赖注射以及AOP(面向方面编程),所以它的这种内部模式非常优秀,以至于Spring自己也实现了一个使用依赖注射的MVC框架,叫做Spring
MVC,同时为了很好的处理事物,Spring集成了Hibernate,使事物管理从Hibernate的持久层提升到了业务层,使用更加方便和强大。

发布于 2017-09-25
0添加评论
分享
收藏感谢收起

现在的多的还是:Spring MVC、SSM,Spring Boot。

编辑于 2017-08-09
01 条评论
分享
收藏感谢
用纯java代码配置对初学者还是比较有帮助的。
发布于 2017-07-18
0添加评论
分享
收藏感谢

个人浅见:

1.不跳出ssh的框框,就无法理解ssh框架。刚入手web开发工作/学习,就试图去理解SSH,个人观点,这是被培训机构带偏了。

2.SSH本身的意义不是为了程序员,而是为了老板,虽然这种尝试不一定成功。其根本目的是为了“web开发傻瓜化”——降低人力成本。

3.就我所知,似乎并没有招聘的技术考官会在意对方对SSH的掌控程度。

顺便附一条链接,这是我很早以前写的一个系列,目的是为了“怼”我team里面的“唯框架至上”思想,非广告推广:) 希望对你有用。

WEB开发那些事儿

发布于 2017-07-17
01 条评论
分享
收藏感谢

现在在学框架呢,怎么说呢。Struts2MVC其实理解起来比较简单吧 。

就是jsp(前台) 然后是通过action———sturts2.xml————Action(java servlet处理表单数据)————jsp。感觉有瑕疵写的有点问题。struts2方面之处就是讲各种复杂的表单显示什么的(radio,checkbox)变成了一个个<s:>标签。

spring的话现在在学源码。

查看全文
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

相关文章

  1. 几款开源富文本编辑器优缺点比较

    1、百度UEditor 优点:插件多,基本满足各种需求,类似贴吧中的回复界面。缺点:不再维护,文档极少,使用并不普遍,图片只能上传到本地服务器,如果需要上传到其他服务器需要改动源码,较为难办,加载速度慢。总结:小项目,可以用用,不推荐使用。 2、kindeditor界面类似百度…...

    2024/5/2 1:16:49
  2. 解析网页抓取所得gzip压缩数据

    在进行网页数据抓取时,会遇到压缩数据,可能主要出于如下考虑:简单的防抓取方法没有经过分析就对抓取的网页内容直接进行文本解析,肯定会遇到问题,就像我开始的时候一样。。。压缩数据减少流量这个一般用于提供数据接口,将数据压缩后可以大大减少流量以下提供对抓取数据的…...

    2024/4/20 23:29:17
  3. SpringCloud-Feign负载均衡

    SpringCloud-Feign负载均衡注明:此项目为本人学习尚硅谷老师的教学视频然后整理核心的配置文件,所有的项目均在以下地址下载。https://github.com/xwbGithub/microservicecloud下载本项目请参考microservicecloud-consumer-dept-feign项目(负载均衡客户端),Feign介绍如下:F…...

    2024/4/20 23:29:16
  4. 在网页中添加富文本编辑器——UEditor的使用

    今天项目中接到了一个新的需求,原本的功能是jsp页面中的 新闻发布+附件上传,可是客户说要改成发布新闻的时候可以 自由排版+插入图片+附件上传 的功能。原来的功能是由一个文本域来实现的,然后在controller接收到文本域的内容时,用html标签替换所有的空格和回车符。虽然可…...

    2024/5/2 0:49:50
  5. Go语言利用ssh连接服务器

    Go语言利用ssh连接服务器学习了Go语言后,打算利用最近比较空一点,写一个前端部署工具,不需要每次都复制粘贴的麻烦,需要完成部署的第一步就需要连接远程服务器打开 ssh server 首先我们想要利用ssh连接服务器的前提是服务器打开了ssh server,ssh 分为client和server端 ,如果打开…...

    2024/5/1 21:12:46
  6. gzip压缩输出

    一、gzip介绍gzip是GNU zip的缩写,它是一个GNU自由软件的文件压缩程序,也经常用来表示gzip这种文件格式。软件的作者是Jean-loup Gailly和Mark Adler。1992年10月31日第一次公开发布,版本号是0.1,目前的稳定版本是1.2.4。Gzip主要用于Unix系统的文件压缩。我们在Linux中经常…...

    2024/5/2 2:28:08
  7. 前端代码和资源的压缩与合并

    一般在网站发布时,会压缩前端HTML、CSS、JavaScript代码及用到的资源文件(主要是图片文件),目的是加快文件在网络中的传输,让网页更快的展现。当然,CDN分发、缓存等方式也是加快代码或资源文件传输的方式,但压缩代码和资源文件是最简单有效的手段,代码压缩的优点逐渐得…...

    2024/4/20 7:18:14
  8. welearn新世纪大学英语系列教材(第二版)综合教程2课内 Text Study/Comprehension Check答案

    U1 Text A Comprehension Check I Directions(Part 1)riskpulledshepherdedlodgingrangersacksbundlesnotedsimplekinII Directions (Part 2)FFTFTTTFTFIII Directions (Part 3)DCBABSelf-test I Directions(Part 1) 1)B 2) C 3) D 4) C 5) DA 7) C 8) D 9) A 10) AB 1…...

    2024/4/20 23:29:12
  9. linux学习总结 unit07 ssh服务管理

    #1.ssh服务?SSH 为 Secure Shell 的缩写,是应用层的安全协议。SSH 是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用 SSH协议可以有效防止远程管理过程中的信息泄露问题。#2.ssh登陆方式 ##2.1.第一种方式(基于口令的安全验证) 只要你知道自己帐号和口令,就…...

    2024/5/1 21:18:33
  10. mysql负载均衡完美解决方案

    1.环境: mysql 5ubuntu10.04 x86_64mdb1 eth0 192.168.5.11 mdb2 eth0 192.168.5.12sdb1 eth0 192.168.5.21 sdb2 eth0 192.168.5.22 sdb3 eth0 192.168.5.23 sdb4 eth0 192.168.5.24haproxy eth0 19…...

    2024/4/20 14:47:52
  11. springmvc和layui富文本编辑器实时上传图片功能实现

    本文将介绍 springmvc 上传功能实现,以及layui 前端插件的使用,尤其是其富文本编辑器的上传图片接口的实现。 一、开发准备 1、layui 官网:http://www.layui.com/ 点击"立即下载"可以获取前端框架,没有使用过的朋友可以自行了解下。 下载好后,引入其核心 js 和 …...

    2024/4/20 21:19:18
  12. ttf字体压缩

    html网页引用中文字体,文件过大,加载缓慢的解决办法 效果安装nodeJs 这个不多说,都有。 安装字蛛 输入命令 npm install font-spider -g运行 安装成功之后就开始压缩了我的css <style type="text/css">@font-face {font-family: MMT;src: url("font/MM…...

    2024/4/20 21:19:17
  13. 在Ubantu18.04上开启ssh服务,实现远程连接

    我们的服务器,或者说我们在虚拟机上安装的ubantu,每次进出虚拟机是不是很不方便,下面我们来学习一下怎么在ubantu上开启ssh服务,然后实现远程的ssh链接。环境:虚拟机下的:Ubantu18.04远程连接工具:xshell方法:1.更新源列表使用ctrl+alt+T打开命令行终端,输入下面代码来…...

    2024/4/20 23:29:10
  14. 实战,利用apache来做集群,实现负载均衡

    以前用ha,lvs做过负载均衡,我知道apache可以做负载均衡,一直没有做。所以今天我尝试用apache做了一次负载均衡。感觉还可以,以后如果有公司非要让我用apache来做负载均衡,也不要花很多时间去研究了。 一,查看有没有安装过mod_proxy之类的东西 [zhangy@BlackGhost ~]$ /usr…...

    2024/4/20 23:29:09
  15. 五种方法开启GZip压缩为网站加速

    GZip可对多种类型的文件进行压缩,对于CSS、JS、HTML文件具有极高的压缩率,尤其对使用了较多JS特效的网站,开启GZip后压缩比高达70%。因此,开启GZip压缩可以较显著的为网站加速,不过要消耗一点服务器资源,嘿嘿,总体来说,利大于弊。 下面提供五种开启GZip压缩的方法: 方…...

    2024/4/20 13:48:37
  16. 各平台 SSH 免费客户端 SSH代理客户端

    http://blog.163.com/smanw@126/blog/static/35995013201072945013850/SSH 的用处有很多,比如远程服务器管理,博客搬家,创造安全的上网环境等。当然,很多人不愿意去记复杂的命令,在终端中逐一输入。因此,本文主要推荐几款各主流平台上用来做 SSH Tunnel 的免费客户端。文…...

    2024/4/20 23:29:07
  17. maven 整合ueditor富文本编辑器

    首先去官网下载ueditor编辑器插件 然后将 中的lib文件夹 放到 的lib中下面上代码jsp:这里写代码片 <%@page import="com.education.project.util.CommonsUtil"%> <%@ page language="java" contentType="text/html; charset=UTF-8"pa…...

    2024/4/20 23:29:06
  18. Nginx的负载均衡的那点事

    Nginx的负载均衡的那点事本节就聊聊采用Nginx负载均衡之后碰到的问题: Session问题文件上传下载通常解决服务器负载问题,都会通过多服务器分载来解决。常见的解决方案有: 网站入口通过分站链接负载(天空软件站,华军软件园等)DNS轮询F5物理设备Nginx等轻量级架构那我们看看…...

    2024/4/20 23:29:05
  19. 手机网页中通过js+html5压缩上传图片

    现在手机1300万像素可谓是随处可见,拍的照片也都是好几兆的,所以在上传之前我们需要进行压缩处理。简单写一下思路: 1.选择完图片通过html5的FileReader拿到base64的图片 2.创建一个Image对象,将base64图片作为Image对象的src 3.拿到Image对象的高宽,按比例计算出想要的高…...

    2024/4/20 23:29:04
  20. Linux ssh命令详解

    Linux ssh命令详解SSH(远程连接工具)连接原理:ssh服务是一个守护进程(demon),系统后台监听客户端的连接,ssh服务端的进程名为sshd,负责实时监听客户端的请求(IP 22端口),包括公共秘钥等交换等信息。ssh服务端由2部分组成: openssh(提供ssh服务) openssl(提供加密的程序…...

    2024/4/20 23:29:04

最新文章

  1. 常见大模型框架

    生成对抗网络&#xff08;GAN&#xff09;类似框架 StyleGAN&#xff08;及其变体StyleGAN2和StyleGAN3&#xff09;&#xff1a; 开发者&#xff1a;NVIDIA 特点&#xff1a;能够生成极高质量的图像&#xff0c;广泛应用于人脸生成、艺术创作等领域。 BigGAN&#xff1a; 开发…...

    2024/5/2 2:37:14
  2. 梯度消失和梯度爆炸的一些处理方法

    在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言&#xff0c;在此感激不尽。 权重和梯度的更新公式如下&#xff1a; w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...

    2024/3/20 10:50:27
  3. yolov9直接调用zed相机实现三维测距(python)

    yolov9直接调用zed相机实现三维测距&#xff08;python&#xff09; 1. 相关配置2. 相关代码2.1 相机设置2.2 测距模块2.2 实验结果 相关链接 此项目直接调用zed相机实现三维测距&#xff0c;无需标定&#xff0c;相关内容如下&#xff1a; 1. yolov4直接调用zed相机实现三维测…...

    2024/5/1 4:25:54
  4. 解析大语言模型训练三阶段

    大语言模型的训练过程一般包括3个阶段&#xff1a;预训练&#xff08;Pre-training&#xff09;、SFT&#xff08;有监督的微调&#xff0c;Supervised-Finetuning&#xff09;以及RLHF&#xff08;基于人类反馈的强化学习&#xff0c;Reinforcement Learning from Human Feedb…...

    2024/5/1 13:16:16
  5. 【外汇早评】美通胀数据走低,美元调整

    原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...

    2024/5/1 17:30:59
  6. 【原油贵金属周评】原油多头拥挤,价格调整

    原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...

    2024/4/30 18:14:14
  7. 【外汇周评】靓丽非农不及疲软通胀影响

    原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...

    2024/4/29 2:29:43
  8. 【原油贵金属早评】库存继续增加,油价收跌

    原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...

    2024/4/30 18:21:48
  9. 【外汇早评】日本央行会议纪要不改日元强势

    原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...

    2024/4/27 17:58:04
  10. 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响

    原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...

    2024/4/27 14:22:49
  11. 【外汇早评】美欲与伊朗重谈协议

    原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...

    2024/4/28 1:28:33
  12. 【原油贵金属早评】波动率飙升,市场情绪动荡

    原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...

    2024/4/30 9:43:09
  13. 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试

    原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...

    2024/4/27 17:59:30
  14. 【原油贵金属早评】市场情绪继续恶化,黄金上破

    原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...

    2024/4/25 18:39:16
  15. 【外汇早评】美伊僵持,风险情绪继续升温

    原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...

    2024/4/28 1:34:08
  16. 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势

    原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...

    2024/4/26 19:03:37
  17. 氧生福地 玩美北湖(上)——为时光守候两千年

    原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...

    2024/4/29 20:46:55
  18. 氧生福地 玩美北湖(中)——永春梯田里的美与鲜

    原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...

    2024/4/30 22:21:04
  19. 氧生福地 玩美北湖(下)——奔跑吧骚年!

    原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...

    2024/5/1 4:32:01
  20. 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!

    原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...

    2024/4/27 23:24:42
  21. 「发现」铁皮石斛仙草之神奇功效用于医用面膜

    原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...

    2024/4/28 5:48:52
  22. 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者

    原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...

    2024/4/30 9:42:22
  23. 广州械字号面膜生产厂家OEM/ODM4项须知!

    原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...

    2024/4/30 9:43:22
  24. 械字号医用眼膜缓解用眼过度到底有无作用?

    原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...

    2024/4/30 9:42:49
  25. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...

    解析如下&#xff1a;1、长按电脑电源键直至关机&#xff0c;然后再按一次电源健重启电脑&#xff0c;按F8健进入安全模式2、安全模式下进入Windows系统桌面后&#xff0c;按住“winR”打开运行窗口&#xff0c;输入“services.msc”打开服务设置3、在服务界面&#xff0c;选中…...

    2022/11/19 21:17:18
  26. 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。

    %读入6幅图像&#xff08;每一幅图像的大小是564*564&#xff09; f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...

    2022/11/19 21:17:16
  27. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

    win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面&#xff0c;在等待界面中我们需要等待操作结束才能关机&#xff0c;虽然这比较麻烦&#xff0c;但是对系统进行配置和升级…...

    2022/11/19 21:17:15
  28. 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...

    有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows&#xff0c;请勿关闭计算机”的提示&#xff0c;要过很久才能进入系统&#xff0c;有的用户甚至几个小时也无法进入&#xff0c;下面就教大家这个问题的解决方法。第一种方法&#xff1a;我们首先在左下角的“开始…...

    2022/11/19 21:17:14
  29. win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...

    置信有很多用户都跟小编一样遇到过这样的问题&#xff0c;电脑时发现开机屏幕显现“正在配置Windows Update&#xff0c;请勿关机”(如下图所示)&#xff0c;而且还需求等大约5分钟才干进入系统。这是怎样回事呢&#xff1f;一切都是正常操作的&#xff0c;为什么开时机呈现“正…...

    2022/11/19 21:17:13
  30. 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...

    Win7系统开机启动时总是出现“配置Windows请勿关机”的提示&#xff0c;没过几秒后电脑自动重启&#xff0c;每次开机都这样无法进入系统&#xff0c;此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一&#xff1a;开机按下F8&#xff0c;在出现的Windows高级启动选…...

    2022/11/19 21:17:12
  31. 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...

    有不少windows10系统用户反映说碰到这样一个情况&#xff0c;就是电脑提示正在准备windows请勿关闭计算机&#xff0c;碰到这样的问题该怎么解决呢&#xff0c;现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法&#xff1a;1、2、依次…...

    2022/11/19 21:17:11
  32. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...

    今天和大家分享一下win7系统重装了Win7旗舰版系统后&#xff0c;每次关机的时候桌面上都会显示一个“配置Windows Update的界面&#xff0c;提示请勿关闭计算机”&#xff0c;每次停留好几分钟才能正常关机&#xff0c;导致什么情况引起的呢&#xff1f;出现配置Windows Update…...

    2022/11/19 21:17:10
  33. 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...

    只能是等着&#xff0c;别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚&#xff0c;只能是考虑备份数据后重装系统了。解决来方案一&#xff1a;管理员运行cmd&#xff1a;net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...

    2022/11/19 21:17:09
  34. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

    原标题&#xff1a;电脑提示“配置Windows Update请勿关闭计算机”怎么办&#xff1f;win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢&#xff1f;一般的方…...

    2022/11/19 21:17:08
  35. 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...

    关机提示 windows7 正在配置windows 请勿关闭计算机 &#xff0c;然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;关机提示 windows7 正在配…...

    2022/11/19 21:17:05
  36. 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...

    钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...

    2022/11/19 21:17:05
  37. 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...

    前几天班里有位学生电脑(windows 7系统)出问题了&#xff0c;具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面&#xff0c;长时间没反应&#xff0c;无法进入系统。这个问题原来帮其他同学也解决过&#xff0c;网上搜了不少资料&#x…...

    2022/11/19 21:17:04
  38. 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...

    本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法&#xff0c;并在最后教给你1种保护系统安全的好方法&#xff0c;一起来看看&#xff01;电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中&#xff0c;添加了1个新功能在“磁…...

    2022/11/19 21:17:03
  39. 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...

    许多用户在长期不使用电脑的时候&#xff0c;开启电脑发现电脑显示&#xff1a;配置windows更新失败&#xff0c;正在还原更改&#xff0c;请勿关闭计算机。。.这要怎么办呢&#xff1f;下面小编就带着大家一起看看吧&#xff01;如果能够正常进入系统&#xff0c;建议您暂时移…...

    2022/11/19 21:17:02
  40. 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...

    配置windows update失败 还原更改 请勿关闭计算机&#xff0c;电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;配置windows update失败 还原更改 请勿关闭计算机&#x…...

    2022/11/19 21:17:01
  41. 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...

    不知道大家有没有遇到过这样的一个问题&#xff0c;就是我们的win7系统在关机的时候&#xff0c;总是喜欢显示“准备配置windows&#xff0c;请勿关机”这样的一个页面&#xff0c;没有什么大碍&#xff0c;但是如果一直等着的话就要两个小时甚至更久都关不了机&#xff0c;非常…...

    2022/11/19 21:17:00
  42. 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...

    当电脑出现正在准备配置windows请勿关闭计算机时&#xff0c;一般是您正对windows进行升级&#xff0c;但是这个要是长时间没有反应&#xff0c;我们不能再傻等下去了。可能是电脑出了别的问题了&#xff0c;来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...

    2022/11/19 21:16:59
  43. 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...

    我们使用电脑的过程中有时会遇到这种情况&#xff0c;当我们打开电脑之后&#xff0c;发现一直停留在一个界面&#xff1a;“配置Windows Update失败&#xff0c;还原更改请勿关闭计算机”&#xff0c;等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢&#xff0…...

    2022/11/19 21:16:58
  44. 如何在iPhone上关闭“请勿打扰”

    Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...

    2022/11/19 21:16:57