controller返回ModelAndView,ModelAndView中的视图名称也要通过配置一个ViewResovler的Bean对象来进行解析。
请说明你为什么不直接实现controller接口,而是继承AbstractController类的理由?这里面涉及了一个什么设计模式?
MultiActionController有什么作用?在什么情况下使用?DisplaySortByXxx。
什么情况下用BaseCommandController?当要请求参数自动包装成一个Command对象时。
下午带着学员们去听了csdn与sun公司组织的技术讲座,下面是陈喆整理的笔记。
1.SSO(Single Sign-on单点登录)
单点登录功能使得用户只要登录了其中一个系统,就可以访问其他相关系统,而不用进行身份验证登录。目前开源社区已经有OpenSSO框架,源代码可以通过访问http://openSSO.dev.java.net获得。它提供安全身份管理的SSO功能。未来SUN的身份管理产品将基于OpenSSO。
2.JAVAEE开发中的性能调优
这里主要从三方面进行讨论:如何迅速定位、如何解决问题、调整步骤和过程。在具体定位方面,我们首先可以目测,以我们的知识经验来判断问题大致出现的范围。另外,我们可以用一些检测工具帮助我们检查WEB应用程序。例如IE插件HTTPWatch,它可以帮助WEB开发者检测:每个请求的响应时间、显示请求和响应消息、cookie等。
一般大公司都有自己一套完善的日志记录系统,例如通过servlet Filter技术,处理时间大于多少秒的请求都记录下来。对于普通用户,也应该尽力完善自己所开发系统的日志记录功能。在产品开发测试阶段,我们通过压力测试各个模块,因此能了解到各个模块的性能情况,这样,在产品运营时,我们可以利用日志记录的各个性能情况对比压力测试的情况,很快的定位出出问题的模块来,甚至是具体的代码段。
不少大公司里的千万级别用户访问的系统,经过分析后,往往发现SQL优化对整个系统的性能改善大有帮助。SQL调优主要关注点在如何避免FTS(全表扫描)。各个数据库提供商以及第三方厂商往往提供特定的数据库执行计划分析工具,以便DBA或程序员了解如何更好的优化。以下列举了几点常用的避免FTS的优化策略:
*“null”VS null。数据库在查找目标记录时,如果某字段的记录里有null值(这里的null值指没有确定的空白值),会造成该字段的索引失去作用,一般的调优策略时,对于null的记录,采用“null”填充其值。这样,数据库会当它是有确定记录,而启用索引。
*“>”or”<” VS “<>”。 “<>” 会破坏索引, 导致FTS, 应该使用“>”or”<”。
*where子句的条件顺序也会影响的性能差别可以达到10至20倍的时间差距。
以上是对于SQL优化的一些小总结。在用普通的策略不能搞定问题时,往往可以换个角度,采取非同寻常的策略。比如:
*运行库与历史库分开。虽然在数据库表结构设计上认为会造成数据冗余,但数据访问量大时,运行库与历史库分开的确能造成性能的改善。
*启动多个实例。一个服务器实例如果能支持500个线程访问,对于有多核的服务器来说,启用多个实例,让不同的CPU处理不同实例,这相当于群集服务器功能。3个实例就能支持1500个线程访问。
*不要频繁的使用“昂贵”方式:如EJB,由于要实现本地和远程接口,消耗的资源大;而System.out.println(); 由于要把信息打印在控制台,其实也是相对消耗性能。对于数据库资源访问,连接池机制应该提倡使用。
*HashTable与HashMap。HashTable由于实现了线程安全,比较消耗资源,对于基本没有并发访问的情况,应该使用HashMap代替。
*数据传递中的压缩。尽管网络带宽越来越大,但对于大量的数据传送,还是要在发送端先压缩再传,在接受端,先解压文件,再试用。
最后,列出了调优的步骤:分析症状——>重现症状——>性能调优——>测试——>测试成功的代码归并到产品中(失败的测试,迭代从性能调优阶段开始)
学员们听完讲座后,更有信心了,这些东西我们几乎都讲过,有学员说这次讲座也就是复习了一下我们以前讲解的知识。现在学生们听的知识很多了,眼界也很开阔了,但动手能力并不强,所以,后阶段都是以学员们动手练习为主,讲课为辅了。