社区服务 统计排行 帮助
  • 2843阅读
  • 42回复

是否进行植发手术要慎重

楼层直达
级别: 风云使者
   植发医院植发手术见效快,现在成功率也比较高,而且种植出的头发自然逼真,很多有脱发问题的朋友都希望通过该手术尽早的恢复正常发量,但是这里要提醒大家,植发手术适合那些永久脱发的患者,其他有脱发问题的患者不要盲目选择植发
  1.斑秃是完全可以治愈不需要做植发手术,斑秃病情发展很快,有的在一个月内全身的毛发掉光,一定要在第一时间控制病情 植发费用
  2.脂溢性脱发病情在不断的发展,体内激素水平紊乱,脱发基因不能改变,不适合做植发手术。保守治疗时间越早,对防止毛囊的萎缩越有帮助。
  3.最适宜做头发移植的是头部疤痕。因为病情稳定 碧莲盛,毛囊健康。
  综上所述,虽然植发手术效果好,但是有脱发问题的朋友一定要看自己是哪种类型的脱发,是不是适合做植发手术。盲目进行植发非但不能恢复头发的浓密,反而耽误治疗,导致脱发加重或者是因为头皮不适合植发导致植发失败,浪费金钱。
相关的主题文章:

  
   ]什么人群适合植发?
  
   史上最明了的编程语言琅琊榜介绍
级别: 风云使者
只看该作者 沙发  发表于: 2017-10-24
什么是疤痕植发技术?
  对于植发技术,很多人在传统认知中都是以为头发稀疏才能成功进行种植头发的一种技术。但是很多的先进植发技术,在有疤痕的情况下,也能完成头发植发。先进的技术带来了完美享受。那么,疤痕植发技术是保证良好的植发效果呢?
  疤痕植发原理
  疤痕植发手术,是从手术者自己的后枕部提取健康的毛囊组织,经过特殊的处理和培养以后,再将这部分毛囊合理的种植到疤痕部位,这样植入的新毛囊建立血液循环关系以后,就可以长出新的头发,从而遮盖头部的疤痕。
  怎样保证疤痕植发效果
  了解了疤痕植发手术操作的原理,那如何保证疤痕植发的成功率呢?毛囊是头发生长的基础 植发价格,一旦毛囊受到了损伤 植发手术,那么术后效果就难以得到保障,所以从另外一个角度来看,只有保证的毛囊成活率,才能达到更好的效果。
  其实为了保证疤痕植发技术的成功,需要选择一家正规的医院才能具有最基础的植发效果。另外,在植发手术之后,更要注意日常的护理问题,就可以拥有靓丽的秀发。如果您对疤痕植发还有其他的疑问 碧莲盛,可以关注我们网站的其他内容!
相关的主题文章:

  
   [/url]
  
   [url=http://tjyjs.org/bbswwwshowtopic-180.aspx]脂溢性脱发植发效果
级别: 风云使者
只看该作者 板凳  发表于: 2017-11-02
JeeWx 捷微 2.2 发布,微信管家平台
JeeWx,敏捷微信开发,简称“捷微”,捷微是一款免费开源的JAVA微信管家平台

?
西安软件开发培训班 ? 一、简介
Jeewx是一个开源、高效、敏捷的微信开发平台,采用JAVA语言基于Jeecg快速开发框架实现,Jeewx开源版实现了微信平台的基础功能,便于用户二次开发。支持微信第三方平台全网发布、支持微信插件开发机制,可轻松集成微信H5插件 西安java培训机构哪家好
? 二、升级日志:
?

? ?△新增功能:

? ? ?△修复bug:
三、平台功能列表
系统演示:


?
? 西安web前端培训机构 源码下载
相关的主题文章:

  
   小编教你轻松打造家庭影院
  
   使用Java API的5个技巧
级别: 风云使者
只看该作者 地板  发表于: 2017-11-03
乐屋家装怎么样 西境庆双节
家装网站日益在扩展,因为现在大家掀起了买房热潮,自然也少不了装修的活儿。我们都知道,大家又离不开互联网,很多事都喜欢在网上找答案。接下来就由一起装修网小编讲讲乐屋家装怎么样以及西境庆双节,有兴趣的朋友可以看一下,希望能为大家提供帮助。
乐屋家装怎么样 西境庆双节
一、乐屋家装怎么样
居然之家作为“先行赔付”和“绿色环保装修”的率先倡导者和推动者,在总结多年经营管理经验的基础上,成立了自营的专业家装公司——乐屋家装设计中心(北京居然之家装饰工程有限公司)。
乐屋家装主要承接家庭装饰设计和装修施工业务,为客户提供从设计、施工、主材及配饰选购,到售后服务的整套家庭装饰装修服务。乐屋家装秉居然之家中高端定位和诚信服务的经营理念,在居然之家品牌实力和良好信誉的保障下,依托居然之家强大的品牌材料优势 http://www.029zs.com/bgszx/,建立健全施工质量与环保管控体系,满足客户居室个性化的需求。
乐屋家装不仅致力于引导家装设计潮流,满足客户日益提升的家居品质需求,还自觉肩负起推动家装行业规范与行业自律的责任,通过推行“预交底”,切实防止了家装中的不合理增项与变相加价,坚决杜绝“钓鱼式”工程,使客户的装修变得更轻松、更快乐。
二、西境庆双节
1万 进口家具疯狂送
活动时间:2016年9月15日-10月7日
门店地址:
北四环店:朝阳区北四环东路65号居然之家北四环店一号馆西侧
丽泽店  :丰台区西三环南路甲27号居然之家丽泽店一层
西境进口家装品牌
10月签施工合同  4大优惠等你拿
定金礼 施工礼 西安装修网 特权礼 增值礼
国际大师参与设计
品质服务,装修有保障
乐屋家装怎么样 西境庆双节
装修的难题都有哪些?您是否都有所了解呢 西安全包装修?相信掌握了这些,您就能轻松装修的房子了。上面就是乐屋家装怎么样以及西境庆双节的内容,小编希望大家可以尽快解决装修问题,如有其他的装修问题,想了解相关资讯敬请关注一起装修网。
全国业主装修交流群:573032185
相关的主题文章:

  
   植发后脱发
  
   植发手术前患者需要做哪些准备?
级别: 风云使者
只看该作者 4楼 发表于: 2017-11-03
房子没有房产证能不能贷款
有些朋友因为一些原因纠结于是否能够将房子房产证作为抵押,有些房子可能不具备房产证,房产证贷款的内容是怎样的。那么接下来就由一起装修网小编讲讲房子没有房产证能不能贷款,有兴趣的朋友可以看一下 西安装修公司大全,希望能为大家提供帮助。
房子没有房产证能不能贷款
首先,房子没有房产证能贷款吗?据了解,没有房产证的房子,是一定不能贷款的。在用房产作抵押办贷款的时候,必不可少的资料就是房产证。没有房产证,就意味着房子的主人只有房子的居住权,而没有使用权,因此,没有房产证是不能办贷款的。不过,如果借款人有稳定合法的收入来源,并且信用良好,在需要资金的时候,可直接申请无抵押贷款。这就避免没有房产证而无法获得贷款的困境。
其次,如何办理房产证抵押贷款?借款人需提供的材料有:1、借款人本人的身份证、户口本、结婚证以及借款人配偶身份证、户口本; 2、借款人的个人收入证明(加盖单位公章);3、房屋所有权证、原购房协议正本和复印件;4、房屋所有人及共有权人同意抵押的公证书及贷款用途证明。这些大家都要真准备齐全。
第三,贷款金融、年限及利率:房产抵押消费贷款起点金为5000元,最高额度不得超过抵押房产评估价值的70%,贷款期限一般不超过5年,最长可到十年 西安全包装修。贷款利率按照中国人民银行规定的同期商业贷款利率执行,有利随本清,按月还本付息等方式。这些大家都要清楚。
通过这上面对房子没有房产证能不能贷款的了解,小编希望大家可以尽快解决装修问题,您是否都有所了解,装修的难题解决了没有,相信掌握了这些,您就能轻松装修的房子,如有其他的装修问题,想了解相关资讯敬请关注一起装修网 西安新房装修
全国业主装修交流群:573032185
相关的主题文章:

  
   哪种编程语言最吃香?
  
   [url=http://dtfbbs.datianfu.com/showtopic-45736.aspx][/url]
级别: 风云使者
只看该作者 5楼 发表于: 2017-11-03
Java中处理异常的9个最佳实践
引用原文:9 Best Practices to Handle Exceptions in Java
作者:Thorben Janssen
译者:Teixeira10
【译者注】在本文中,作者介绍了9个处理异常的最佳方法与实践,以举例与代码展示结合的方式,让开发者更好的理解这9种方式,并指导读者在不同情况下选择不同的异常处理方式。
以下为译文:
Java中的异常处理不是一个简单的话题。初学者很难理解,甚至有经验的开发人员也会花几个小时来讨论应该如何抛出或处理这些异常。
这就是为什么大多数开发团队都有自己的异常处理的规则和方法。如果你是一个团队的新手,你可能会惊讶于这些方法与你之前使用过的那些方法有多么不同。
然而,有几种异常处理的最佳方法被大多数开发团队所使用。下面是帮助改进异常处理的9个最重要的方法。
1. 在Finally中清理资源或者使用Try-With-Resource语句
通常情况下,你在try中使用了一个资源,比如InputStream,之后需要关闭它。在这种情况下,一个常见的错误是在try的末尾关闭了资源。
public void doNotCloseResourceInTry() { FileInputStream inputStream = null; try { File file = new File("./tmp.txt"); inputStream = new FileInputStream(file); // use the inputStream to read a file // do NOT do this inputStream.close(); } catch (FileNotFoundException e) { log.error(e); } catch (IOException e) { log.error(e); } }
问题是,只要不抛出异常,这种方法就可以很好地运行。try内的所有语句都将被执行,资源也会被关闭。
但是你在try里调用了一个或多个可能抛出异常的方法,或者自己抛出异常。这意味着可能无法到达try的末尾。因此,将不会关闭这些资源。
所以应该将清理资源的代码放入Finally中,或者使用Try-With-Resource语句。
使用Finally
相比于try,无论是在成功执行try里的代码后,或是在catch中处理了一个异常后,Finally里的内容是一定会被执行的。因此,可以确保清理所有已打开的资源。
public void closeResourceInFinally() { FileInputStream inputStream = null; try { File file = new File("./tmp.txt"); inputStream = new FileInputStream(file); // use the inputStream to read a file } catch (FileNotFoundException e) { log.error(e); } finally { if (inputStream != null) { try { inputStream.close(); } catch (IOException e) { log.error(e); } } } }
Java 7的Try-With-Resource语句
另一个选择是Try-With-Resource语句,在introduction to Java exception handling中更详细地说明了这一点。
如果你的资源实现了AutoCloseable接口,就可以使用它,这正是大多数Java标准资源所做的。当你在try子句中打开资源时,它将在try被执行后自动关闭,或者处理一个异常。
public void automaticallyCloseResource() { File file = new File("./tmp.txt"); try (FileInputStream 西安java培训 inputStream = new FileInputStream(file);) { // use the inputStream to read a file } catch (FileNotFoundException e) { log.error(e); } catch (IOException e) { log.error(e); } }
2. 给出准确的异常处理信息
你抛出的异常越具体越好。一定要记住 java培训,一个不太了解你代码的同事,也许几个月后,需要调用你的方法,并且处理这个异常。
因此,请确保提供尽可能多的信息,这会使你的API更容易理解。因此,你方法的调用者将能够更好地处理异常,或者通过额外的检查来避免它。
所以,要尽量能更好地描述你的异常处理信息,比如用NumberFormatException代替IllegalArgumentException,避免抛出一个不具体的异常。
public void doNotDoThis() throws Exception { ... } public void doThis() throws NumberFormatException { ... }
3. 记录你所指定的异常
当你在方法中指定一个异常时,你应该在Javadoc中记录下它。这与前面提到的方法有着相同的目标:为调用者提供尽可能多的信息,这样他们就可以避免异常或者更容易地处理异常。
因此,请确保在Javadoc中添加一个@throws 声明,并描述可能导致的异常情况。
/** * This method does something extremely useful ... * * @param input * @throws MyBusinessException if ... happens */ public void doSomething(String input) throws MyBusinessException { ... }
4. 使用描述性消息抛出异常
这一最佳实践的理念与前两个相似。但这一次,你不用给调用方法的人提供信息。异常消息会被所有人读取,同时必须了解在日志文件或监视工具中报告异常时发生了什么。
因此,应该尽可能准确地描述问题,并提供相关的信息来了解异常事件。
别误会,你不需要写一段文字,而是应该用1-2个简短的句子解释异常的原因。这可以帮助开发团队理解问题的严重性,同时也使你能够更容易地分析任何服务事件。
如果抛出一个特定的异常,它的类名很可能已经描述了这种类型的错误。所以,你不需要提供很多额外的信息。一个很好的例子就是,当你以错误的格式使用字符串时,如NumberFormatException,它就会被类 java.lang.Long的构造函数抛出。
try { new Long("xyz"); } catch (NumberFormatException e) { log.error(e); }
NumberFormatException已经告诉你问题的类型,所以只需要提供导致问题的输入字符串。如果异常类的名称不具有表达性,那么就需要提供必要的解释信息。
17:17:26,386 ERROR TestExceptionHandling:52 - java.lang.NumberFormatException: For input string: "xyz"
5. 最先捕获特定的异常
大多数IDE都可以帮助你做到这点,当你试图捕获不确定的异常时,它会报告一个不可到达的代码块。
问题是只有第一个匹配到异常的catch语句才会被执行,所以,如果你最先发现IllegalArgumentException,你将永远不会到达catch里处理更具体的NumberFormatException,因为它是IllegalArgumentException的一个子类。
所以要首先捕获特定的异常类,并在末尾添加一些处理不是很具体异常的catch语句。
你可以在下面的代码片段中看到这样一个try-catch语句的示例。第一个catch处理所有NumberFormatExceptions异常,第二个catch 疯狂极客培训怎么样 处理NumberFormatException异常以外的illegalargumentexception异常。
public void catchMostSpecificExceptionFirst() { try { doSomething("A message"); } catch (NumberFormatException e) { log.error(e); } catch (IllegalArgumentException e) { log.error(e) } }
6. 不要在catch中使用Throwable
Throwable是exceptions 和 errors的父类。当然,你可以在catch子句中使用它,但其实你不应该这样做。
如果你在catch子句中使用Throwable,它将不仅捕获所有的异常,还会捕获所有错误。JVM会抛出错误,这是应用程序不打算处理的严重问题。典型的例子是OutOfMemoryError或StackOverflowError。这两种情况都是由应用程序控制之外的情况引起的,无法处理。
所以,最好不要在catch中使用Throwable,除非你完全确定自己处于一个特殊的情况下,并且你需要处理一个错误。
public void doNotCatchThrowable() { try { // do something } catch (Throwable t) { // don't do this! } }
7. 不要忽略Exceptions
你是否曾经分析过只有用例的第一部分才被执行的bug报告吗?
这通常是由一个被忽略的异常引起的。开发人员可能非常确信它不会被抛出,并添加一个无法处理或无法记录它的catch语句。当你发现它的时候,你很可能就会明白一句著名的话“This will never happen”。
public void doNotIgnoreExceptions() { try { // do something } catch (NumberFormatException e) { // this will never happen } }
是的,你可能在分析一个不可能发生的问题。
所以,请千万不要忽略一个例外。你不会知道代码在将来会发生什么变化。有些人可能会删除阻止异常事件的验证,而没有意识到这造成了问题。或者抛出异常的代码被更改,现在抛出了同一个类的多个异常,而调用的代码并不能阻止所有这些异常。
你至少应该写一个日志信息,告诉每个人,需要检查一下这个问题。
public void logAnException() { try { // do something } catch (NumberFormatException e) { log.error("This should never happen: "   e); } }
8. 不要记录和抛出一个异常
这可能是最常被忽略的。你可以在许多代码片段或者库文件里发现,有异常会被捕获、记录和重新抛出。
try { new Long("xyz"); } catch (NumberFormatException e) { log.error(e); throw e; }
当它发生时记录一个异常,然后重新抛出它,以便调用者能够适当地处理它,这可能会很直观。但是它会为同一个异常写多个错误消息。
17:44:28,945 ERROR TestExceptionHandling:65 - java.lang.NumberFormatException: For input string: "xyz" Exception in thread "main" java.lang.NumberFormatException: For input string: "xyz" at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) at java.lang.Long.parseLong(Long.java:589) at java.lang.Long.(Long.java:965) at com.stackify.example.TestExceptionHandling.logAndThrowException(TestExceptionHandling.java:63) at com.stackify.example.TestExceptionHandling.main(TestExceptionHandling.java:58)
不添加任何额外的信息。正如在上述第4个中所解释的那样,异常消息应该描述异常事件。堆栈会告诉你在哪个类、方法和行中异常被抛出。
如果你需要添加额外的信息,应该捕获异常并将其包装在一个自定义的信息中。但要确保遵循下面的第9条。
public void wrapException(String input) throws MyBusinessException { try { // do something } catch (NumberFormatException e) { throw new MyBusinessException("A message that describes the error.", e); } }
因此,只需要捕获一个你想要处理的异常,在方法中指定它,并让调用者处理它。
9. 包装异常
有时最好捕获一个标准异常并将其封装到一个定制的异常中。此类异常的典型例子是应用程序或框架特定的业务异常。这允许你添加额外的信息,并且也可以为异常类实现一个特殊的处理。
当你这样做时,确保引用原始的异常处理。Exception类提供了一些特定的构造函数方法,这些方法可以接受Throwable作为参数。否则,你将丢失原始异常的堆栈跟踪和消息,这将使你很难分析导致异常的事件。
public void wrapException(String input) throws MyBusinessException { try { // do something } catch (NumberFormatException e) { throw new MyBusinessException("A message that describes the error.", e); } }
总结
正如你所看到的,在抛出或捕获异常时,有许多不同的事情需要考虑。以上大多数方法都可以提高代码可读性或API可用性。
异常通常是一个错误处理机制和一个通信媒介。因此,你应该确保同事一起讨论想要应用的最佳实践和方法,以便每个人都理解通用概念并以相同的方式使用它们。
相关的主题文章:

  
   [url=http://139.196.84.198/read.php?tid=420
级别: 风云使者
只看该作者 6楼 发表于: 2017-11-03
云皓装修 新房五大装修风格
近年来,新房的装修风格是越来越多了,所以很多业主在选择的时候都非常的迷茫,那么新房装修有哪些风格呢 西安二手房装修?下面一起装修网小编为大家介绍一下云皓装修以及新房五大装修风格吧。
云皓装修 新房五大装修风格
云皓装修:
云皓建筑装饰设计工程有限公司成立2006于年,是一家专业从事民用建筑装饰施工、设计的公司。
公司经营范围:各种涂料施工、居家、写字楼、店铺装饰、酒店、商场、娱乐城、别墅、二次装修及整改、防水工程、水电空调设备安装工程、及各种设计等。多年来,业绩非凡。所承接并完成的各类大、中、小型工程均受到了业主的一致好评,在装饰市场赢得良好的信誉 西安装潢公司,在业界享有较高的知名度。
新房五大装修风格:
地中海风格:地中海装修风格也是比较受欢迎的,它的主题是自由、宁静、慵懒、文艺。在地中海装修风格里面,蓝色,白色等象征海洋的颜色是永远不缺的,圆拱形的门也很多见。非常适合欧美范儿的人群。
现代简约风格:现代简约风格其实不是装修简单的意思,而是只通过简单的线条来勾画出复杂的事物。该风格外形简单,实际功能强大,基本上什么房型都适合。价格上也实在,是目前使用最多的装修风格。
云皓装修 新房五大装修风格
田园风格:田园风格装修下面又分为好几种,比如说中式田园啦,美式田园啦,地域性比较强。但是无论是哪种田园装修风格,都是带有一定的农村色彩,以田地和苗圃为基本元素,亲切朴实自然。田园装修风格是向往自然的人群首选。
中式风格:中式风格是比较自由的,装饰品可以是绿色植物、布艺、装饰画,以及不同样式的灯具等。这些装饰品可以有多种风格,但空间中的主体装饰物还是中国画、宫灯和紫砂陶等传统饰物。这些装饰物数量不多,在空间中却能起到画龙点睛的作用。
欧式风格:古典欧式风格别墅装修最大的特点是在造型上极其讲究,给人的感觉端庄典雅、高贵华丽,具有浓厚的文化气息。在家具选配上,一般采用宽大精美的家具,配以精致的雕刻 西安环保装修,整体营造出一种华丽、高贵、温馨的感觉。
以上就是一起装修网小编为大家介绍的关于云皓装修以及新房五大装修风格的具体内容,现在各位业主都已经有了一定的了解了吧,相信小编介绍的五大装修风格,一定会有你喜欢的一种。想要了解更多云皓装修相关资讯,请登录一起装修网查看相关讯息。
相关的主题文章:

  
   男性自体植发有用吗
  
   [url=http://jcjys.evai.pl/bbs/read.php?tid=23
级别: 风云使者
只看该作者 7楼 发表于: 2017-11-03
译文:谷歌将通过分类学习来打击垃圾网页
在过去的几年里,Google一直忙于建设已经成为众所周知的谷歌大脑团队,并通过观看大量的视频来深度学习,直到大脑能识别什么是猫的脸,什么是人的脸。


谷歌已经雇佣很多人来增强谷歌大脑的能力,在今年前一段时间,谷歌还出重金在英国进行人才收购。如外界所传言的那样:谷歌大脑还开始直接与谷歌的搜索团队进行了深度合作。



该专利描述的方法包括:


1,接收输入包含多个资源的特征,其中每个资源的特征都含有相应的属性;


2,利用嵌入函数给每一个资源特征属性赋予一个或几个数值;


3,使用一个或多个神经网络层把资源特征属性值进行处理,其中采用一个或多个非线性的转换来处理浮点值;


4,给输入的数值预先设置多个分类器,每个分类器有不同的评分方案,其中给每个类别设定上下阀值,以此阀值来判断资源该属于哪个类别。


预设的资源分类可能包含不同类别资源作弊的特征,也可能仅仅包含本类资源的作弊特征。不同类别的分数可以应用在以下几个方面:
西安seo顾问

1,来决定这个网页是否会被索引;


2,来决定这个网页是否会被展示在搜索结果页面上。


深层网络能有效地将资源分类。例如,资源可以被有效地分类为垃圾内容或者非垃圾内容。垃圾内容又可以进行细分为不同的类型,而垃圾资源则属于其中的一种或多种。专利告诉我们:


使用深层网络分类系统,可以让搜索结果能够更好地满足用户对信息的需求。比如我们可以通过检测垃圾的资源,让这些资源不展示的搜索结果中,或者让某类搜索资源只出现在这类信息的 搜索结果中。


文摘:


方法、系统和设备,包括计算机程序编码在计算机存储媒体,得分概念术语,都在使用深网络。


其中的一种的方法包括:


1,接收输入包含多个资源的特征,其中每个资源的特征都含有相应的属性;


2,利用嵌入函数给每一个资源特征属性赋予一个或几个数值;


3,使用一个或多个神经网络层把资源特征属性值进行处理,其中采用一个或多个非线性的转换来处理浮点值;


4,给输入的数值预先设置多个分类器,每个分类器有不同的评分方案,其中给每个类别设定上下阀值,以此阀值来判断资源该属于哪个类别。


西安seo 专利告诉我们,这个资源资源分类系统可以让我们辨别出哪些是垃圾资源,比如:


级别: 风云使者
只看该作者 8楼 发表于: 2017-11-07
Spring思维导图,让Spring不再难懂(mvc篇)
写在前面
生活就像海洋,只有意志坚强的人才能到达彼岸。已经很久没有发文章了呀,想必大家都挂念我了,哈哈。温故而知新,今天一起来复习一下spring mvc的内容吧。
spring mvc简介与运行原理
Spring的模型-视图-控制器(MVC)框架是围绕一个DispatcherServlet来设计的,这个Servlet会把请求分发给各个处理器,并支持可配置的处理器映射、视图渲染、本地化、时区与主题渲染等,甚至还能支持文件上传。
主要注解
ContextLoaderListener
在讲ContextLoaderListener之前,首先来了解一下web.xml的作用。
而spring mvc启动过程大致分为两个过程:
其中ContextLoaderListener监听器它实现了ServletContextListener这个接口,在web.xml配置这个监听器,启动容器时,就会默认执行它实现的方法。在ContextLoaderListener中关联了ContextLoader这个类,所以整个加载配置过程由ContextLoader来完成。
ContextLoaderListener在web.xml中的配置
<!-- 配置contextConfigLocation初始化参数 --> <context-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/applicationContext.xml</param-value> </context-param> <!-- 配置ContextLoaderListerner --> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener>
ServletContextListener 接口有两个方法:contextInitialized,contextDestroyed
DispatcherServlet
Spring MVC框架,与其他很多web的MVC框架一样:请求驱动;所有设计都围绕着一个中央Servlet来展开,它负责把所有请求分发到控制器;同时提供其他web应用开发所需要的功能。不过Spring的中央处理器,DispatcherServlet,能做的比这更多。
下图展示了Spring Web MVC的DispatcherServlet处理请求的工作流。熟悉设计模式的朋友会发现,DispatcherServlet应用的其实就是一个“前端控制器”的设计模式(其他很多优秀的web框架也都使用了这个设计模式)。
流程图
spring mvc处理请求的流程.jpg
在web.xml中的配置
<!-- 西安网站建设培训 servlet定义 --> <servlet> <servlet-name>dispatcher</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>dispatcher</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping>
其中
在Spring MVC中,每个DispatcherServlet都持有一个自己的上下文对象WebApplicationContext,它又继承了根(root)WebApplicationContext对象中已经定义的所有bean。这些继承的bean可以在具体的Servlet实例中被重载,在每个Servlet实例中你也可以定义其scope下的新bean。
WebApplicationContext继承自ApplicationContext,它提供了一些web应用经常需要用到的特性。它与普通的ApplicationContext不同的地方在于,它支持主题的解析,并且知道它关联到的是哪个servlet(它持有一个该ServletContext的引用)
spring mvc同时提供了很多特殊的注解,用于处理请求和渲染视图等。DispatcherServlet初始化的过程中会默认使用这些特殊bean进行配置。如果你想指定使用哪个特定的bean,你可以在web应用上下文WebApplicationContext中简单地配置它们。
其中,常用的ViewResolver的配置。以jsp作为视图为例
<!-- 对模型视图名称的解析,即在模型视图名称添加前后缀 --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/jsp/" /> <property name="suffix" value=".jsp" /> </bean>
配置上传文件限制MultipartResolver
<!-- 西安seo 上传限制 --> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <!-- 上传文件大小限制为31M,31*1024*1024 --> <property name="maxUploadSize" value="32505856"/> </bean>
applicationContext.xml中的标签
文件上传
前面说到DispatcherServlet中有个特殊的Bean叫MultipartResolver,可用于限制文件的上传大小等。当解析器MultipartResolver完成处理时,请求便会像其他请求一样被正常流程处理。
表单
<form method="post" action="/form" enctype="multipart/form-data"> <input type="text" name="name"/> <input type="file" name="file"/> <input type="submit"/> </form>
控制器
@RequestMapping(path = "/form", method = RequestMethod.POST) public String handleFormUpload(@RequestParam("name") String name, @RequestParam("file") MultipartFile file) { if (!file.isEmpty()) { byte[] bytes = file.getBytes(); // store the bytes somewhere return "redirect:uploadSuccess"; } return "redirect:uploadFailure"; }
异常处理
先来说下常见的异常处理有几种方式,如下图:
Spring的处理器异常解析器HandlerExceptionResolver接口的实现负责处理各类控制器执行过程中出现的异常。也是上面提到的,是DispatcherServlet中的特殊bean,可以自定义配置处理。
某种程度上讲,HandlerExceptionResolver与你在web应用描述符web.xml文件中能定义的异常映射(exception mapping)很相像,不过它比后者提供了更灵活的方式。比如它能提供异常被抛出时正在执行的是哪个处理器这样的信息。
HandlerExceptionResolver 提供resolveException接口
public interface HandlerExceptionResolver { ModelAndView resolveException( HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex); }
在BaseController中使用 @ExceptionHandler注解处理异常
@ExceptionHandler(Exception.class) public Object exceptionHandler(Exception ex, HttpServletResponse response, HttpServletRequest request) throws IOException { String url = ""; String msg = ex.getMessage(); Object 西安软件开发培训班 resultModel = null; try { if (ex.getClass() == HttpRequestMethodNotSupportedException.class) { url = "admin/common/500"; System.out.println("--------毛有找到对应方法---------"); } else if (ex.getClass() == ParameterException.class) {//自定义的异常 } else if (ex.getClass() == UnauthorizedException.class) { url = "admin/common/unauth"; System.out.println("--------毛有权限---------"); } String header = req.getHeader("X-Requested-With"); boolean isAjax = "XMLHttpRequest".equalsIgnoreCase(header); String method = req.getMethod(); boolean isPost = "POST".equalsIgnoreCase(method); if (isAjax || isPost) { return Message.error(msg); } else { ModelAndView view = new ModelAndView(url); view.addObject("error", msg); view.addObject("class", ex.getClass()); view.addObject("method", request.getRequestURI()); return view; } } catch (Exception exception) { logger.error(exception.getMessage(), exception); return resultModel; } finally { logger.error(msg, ex); ex.printStackTrace(); } }
在web.xml中处理异常
<!-- 默认的错误处理页面 --> <error-page> <error-code>403</error-code> <location>/403.html</location> </error-page> <error-page> <error-code>404</error-code> <location>/404.html</location> </error-page> <!-- 仅仅在调试的时候注视掉,在正式部署的时候不能注释 --><!-- 这样配置也是可以的,表示发生500错误的时候,转到500.jsp页面处理。 --> <error-page> <error-code>500</error-code> <location>/500.html</location> </error-page> <!-- 这样的配置表示如果jsp页面或者servlet发生java.lang.Exception类型(当然包含子类)的异常就会转到500.jsp页面处理。 --> <error-page> <exception-type>java.lang.Exception</exception-type> <location>/500.jsp</location> </error-page> <error-page> <exception-type>java.lang.Throwable</exception-type> <location>/500.jsp</location> </error-page> <!-- 当error-code和exception-type都配置时,exception-type配置的页面优先级高及出现500错误,发生异常Exception时会跳转到500.jsp-->
来一个问题:HandlerExceptionResolver和web.xml中配置的error-page会有冲突吗?
解答:如果resolveException返回了ModelAndView,会优先根据返回值中的页面来显示。不过,resolveException可以返回null,此时则展示web.xml中的error-page的500状态码配置的页面。
当web.xml中有相应的error-page配置,则可以在实现resolveException方法时返回null。
API文档中对返回值的解释:
return a corresponding ModelAndView to forward to, or null for default processing.
写在最后
下篇文章将会写Spring aop的内容,同样以思维导图的方式编写。可视化学习,让java不再难懂。
相关的主题文章:

  
   植发价格大概是多少
  
   Spring思维导图,让Spring不再难懂(mvc篇)
级别: 风云使者
只看该作者 9楼 发表于: 2017-11-15
什么是疤痕植发技术?
  对于植发技术,很多人在传统认知中都是以为头发稀疏才能成功进行种植头发的一种技术 植发价格。但是很多的先进植发技术,在有疤痕的情况下,也能完成头发植发。先进的技术带来了完美享受。那么 碧莲盛,疤痕植发技术是保证良好的植发效果呢?
  疤痕植发原理
  疤痕植发手术,是从手术者自己的后枕部提取健康的毛囊组织,经过特殊的处理和培养以后,再将这部分毛囊合理的种植到疤痕部位,这样植入的新毛囊建立血液循环关系以后,就可以长出新的头发,从而遮盖头部的疤痕。
  怎样保证疤痕植发效果
  了解了疤痕植发手术操作的原理,那如何保证疤痕植发的成功率呢?毛囊是头发生长的基础,一旦毛囊受到了损伤,那么术后效果就难以得到保障,所以从另外一个角度来看,只有保证的毛囊成活率,才能达到更好的效果。
  其实为了保证疤痕植发技术的成功,需要选择一家正规的医院才能具有最基础的植发效果。另外,在植发手术之后,更要注意日常的护理问题,就可以拥有靓丽的秀发。如果您对疤痕植发还有其他的疑问 碧莲盛,可以关注我们网站的其他内容!
相关的主题文章:

  
   储藏室装修攻略 储藏室施工规划
  
   [url=http://139.196.84.198/read.php?tid=695
快速回复

限100 字节
如果您提交过一次失败了,可以用”恢复数据”来恢复帖子内容
 
上一个 下一个