上海Java培训学习选线上好还是线下好

线上一对一和线下有什么区别?
全部答案(共3个回答)
;线上一对一辅导和线下一对一辅导各有优缺点,选择线上还是线下一对一辅导要根据自身的情况,合理选择。
答: 成人英语培训班费用价格是相对的,便宜的课程课件几十到几百块不等,专业的培训课程也有几万元的。所以根据自己的学习方式和课程规划,费用预算选择英语培训方式和课程,这...
答: 中国英语教育培训市场发展趋势分析 -----2004
一、英语教育培训机构品牌化
品牌是生存之本,品牌效应体现了竞争力。如果说,国内英语教育培训市场在20世纪9...
答: Born in Sep.1973 graduated from Nanjing agricultural university now acts as the ...
答: 去网上看看,肯定有的~~~~~~~~~~~~~~~~~~~~
大家还关注
Copyright &
Corporation, All Rights Reserved
确定举报此问题
举报原因(必选):
广告或垃圾信息
激进时政或意识形态话题
不雅词句或人身攻击
侵犯他人隐私
其它违法和不良信息
报告,这不是个问题
报告原因(必选):
这不是个问题
这个问题分类似乎错了
这个不是我熟悉的地区全方位助力你无忧学习,自主研发30多个教学系统
从入学、学习、考核到面试、就业等步步跟踪贴心服务
位置:上海牵引力教育& &
上海java培训机构哪个好
为什么程序员独爱Java?
JAVA ADVANTAGE
当你准备从网络上下载一个程序时,你最大的担心是程序中含有恶意的代码,比如试图读取或删除本地机上的一些重要文件,甚至该程序是一个病毒程序等。当你使用支持Java的浏览器时,你可以放心地运行Java的小应用程序JavaApplet,不必担心病毒的感染和恶意的企图,Java小应用程序将限制在Java运行环境中,不允许它访问计算机的其它部分。
抢鲜免费体验七天!
请选择城市北京上海成都杭州广州长沙重庆石家庄武汉深圳太原昆明南昌西安青岛郑州南宁
到牵引力学JAVA,七大细微贴心服务
七大贴心服务,牵引力教育只为确保学员轻松无忧学习!
牵引力本着&以人为本&的教育情怀,为了确保学员能够轻松无忧学习,
牵引力教育从学习、生活、就业等多方面入手,多举措并施,
为学员提供七大贴心服务,确保所有学员都能轻松无忧地学习!
品质创新,牵引力教育八大特色优势
牵引力教育一直致力于IT教育创新,15年专注提高教学品质,使我们在人才培养模式上紧跟行业需求。
不断升级课程体系,在教学服务与管理上不断突破,形成以人为本,专业创新的牵引力情怀教育。
举办牵引力杯,开展国际合作,研发科技教学产品等,用先进理念打造专业、创新、综合素质高的人才,成就更具教育情怀的培训品牌!
牵引力教育线下整合实训公司人才资源及网络公司企业资源,线上运营&无忧网才&求职招聘网站,充分发挥线上线下的独家优势,打造中国互联网人才求职招聘第一平台,长期为国内各大互联网的用人企业提供人才推荐服务、猎头服务、人才外派服务及网站会员套餐服务,并为牵引力教育实训生提供终生高薪就业服务。
真实市场就业数据 震撼你的小心脏
Java革命开启,各行各业应用广泛,未来10年就业前景巨大,掌握热门语言,开启互联网&薪&时代
软件工程是计算机领域发展最快的学科分支之一,国家非常重视软件行业的发展。对软件工程师人才的培养给予了非常优惠的政策。在所有软件开发类人才的需求中对Java工程师的需求达到全部需求量的60~70%。应该说Java软件工程师就业前景是非常好的,再加上Java软件工程师不仅IT专业企业需要,广大的非IT企业也需要,前景是非常乐观的。
应用领域广泛 就业口径宽广
OPPORTUNITIES(机会)
第一阶段:web前端课程
java课程易学习,门槛低,不看工作经验,
适合对未来职业发展有梦想、肯努力、够踏实有志靴子,0基础、18周岁,梦想从牵引力起航!
纽曼项目&PS入门
HTML标签及规范
HTML标签、CSS基础
CSS浮动布局&盒模型
纽曼官网实现
CSS定位布局
jQuery基础
jQuery动画及事件
jQuery实战
jQuery插件
CSS3新特性学习
纽曼移动端微官网实战
CSS3基础属性
第二阶段: Java初级
&Java语法基础
Java面向对象
Java常用API
Java高级API,泛型,异常
Java语法基础
Java多线程
Java网络编程
WEB开发基础
WEB开发基础与数据库
结合掌握的知识完善项目
项目总结和高效开发技能
第三阶段:Java中级
项目演示&MySQL深入介绍
MySQL数据库进阶
MySQL数据库设计
JDBC深入介绍
JDBC深入介绍和HTTP协议
Servlet进阶
JSP介绍XML和JSON
SpringMVC框架
Freemarker框架
Mybatis3框架
后台功能实现
前端功能实现
集成支付宝el
第四阶段: Java高级
知彼-初探篇
利器-工具使用篇
修炼-内功篇
实战-框架搭建
实战-系统说明
实战-用户管理
实战-机构管理
实战-区域管理、菜单管理、角色管理
实战-字典管理、操作日志、连接池
工作流引擎1、2、3
Nginx、redis
Jenkins、shiro
实战型Java大牛,所有经验倾囊相授
牵引力教育不惜重金打造豪华教育团队,他们比你更清楚你需要学什么才能赢得大企业的青睐!
Java高级讲师--张圣
近10年IT从业经验,担任过高级Java开发工程师以及Java高级讲师 ,曾参加和主导过多个大型商业项目,精通Javase,servlet,jsp,struts、Hibernate、spring,springmvc,mybatis等J2EE架构体系设计和开发。
Java高级讲师--沈侯瑞
后端开发出身,基础扎实,深入原理。具有多年Java项目开发经验,对JavaEE技术体系结构、JavaWeb原理有深刻理解,精通多种主流框架;精通Oracle, MySQL, SQL server等关系型数据库;精通Android,HTML5,JavaScript、C#、C/C++等多种开发语言。
Java总监级讲师--张建
精通JavaOOP编程以及SSM,SSH等J2EE架构体系设计和开发,对html5、css3、js、ExtJS、EasyUI、Bootstrap等JavaWeb开发技术有深入研究,熟悉NIO,Netty,Dubbo,Restful等技术并深入了解Linux系统。
苦学16周,开启人生逆袭之旅
科学的职业生涯晋升规划,你每一次阶段性的进步都会得到相应的汇报!
百单网项目实战四个月,量身定制的实战项目,&
业精于勤荒于嬉,通过百单网接单,阶段项目实战源源不断,精细讲解+实战强化
牵引力教育就业服务完善,学员技术过硬
30000多家雇主企业喊你来上班!
牵引力教育与30000多家企业联合共建,定向输出Java高端人才;每月有专场招聘会、就业指导和就业推荐等一站式完善的就业服务。
舒适的教学环境 牵引力教育给你全方位安心保障
牵引力教学大楼,Hold住你的挑剔。牵引力教育在全国一二线城市拥有29家校区,
校区环境优雅舒适,确保学员能在一个静谧舒适的环境中全身心投入到学习中!
详情请进入
查看,文章来源:
开班时间: 滚动开班
课程费用:咨询
咨询电话: 咨询QQ:
在我做过的很多项目的过程中,我一直有一个悬而未决的问题在困扰我,那就是持久层的开发。持久层的开发一般来说要么用CMP,要么用JDBC+DAO。 CMP就不用说了,它对我来说是一种失败的实践,而JDBC+DAO也存在很多的困难,我很难做到把关系表记录完整的映射到持久对象的关系上来,这主要体现在多表的关系无法直接映射到对持久对象的映射上来,可能是一个表映射多个持久对象,有可能是多个表映射一个持久对象,更有可能的是表的某些字段映射到一个持久对象,但是另外一些字段映射到别的持久对象上。而且即使这些问题都处理好了,也不能直接按照对象的方式来对持久对象(PO)编程,因为存在1:N关系的持久对象的查询其实就是1+n次对数据库的SQL,我曾经有一次失败的持久层设计,结果是某个关联很多其它持久对象的PO一查询就是5n+1次 sql,速度慢的不得了,最后不得不整个修改底层设计,最后等于是完全抛弃了对象设计,完全是按照表字段进行操作。
但是这样做非常难受,因为系统的设计是从需求设计,系统设计这样自顶而下的,结果都到了详细设计阶段了,被持久层映射问题限制,不得不自底向上修改设计方案,又回到了按照过程进行编程的老路上来,非常的糟糕。
我对这个问题思考了很久,最后终于意识到这其实是一个很经典的问题:对象和关系的映射问题。实际上自从OOP编程流行以后,就存在这个难题了,所以才有人提出关系数据库进行重新设计,改用对象数据库,但实际上关系数据库并没有被淘汰,于是就只能在上层的应用层找解决方案。这时候我明白了我需要的实际上是一种 ORM产品。
我最早想到的ORM就是JDO,于是我下载了两个JDO产品,准备认真的学习一下,但是研究了一段时间之后,我发现我对JDO非常的失望,原因如下:
1、 JDO没有一个好的开源免费实现,好的产品都是商业产品,并且在国内没有销售和技术支持。这就造成了JDO只有学习之用,不能把它用在实际项目中,否则的话,你把软件卖给客户的时候,还要告诉他,你还要另外去买一个国外的软件产品,并且在国内没有技术支持,出了持久层的问题,我们也解决不了,请你自己打国际长途去解决问题,你认为客户能答应吗?
2、JDO不是一个轻量级封装,它试图建立一个完整的持久层框架,但是还很不完善,造成了JDO 感觉比较笨重,很多操作方式令人觉得烦琐和古怪。这加重了程序员学习和编程的负担,而且封装的太多会造成一个严重的问题就是一旦出现报错信息,调试起来非常困难,你很难准确的定位错误究竟出在哪里,封装的越轻,问题越容易定位,越容易解决,封装的越重,问题越复杂,越找不到原因,CMP就是一个很好的例子,出了错误,调试起来非常困难和麻烦。
3、JDO的标准很不完善,存在重大缺陷。最主要的问题体现在PO不能脱离PM(相当于 Hibernate的Session)而存在,这是个非常严重的问题,会造成编程的时候进行大量VO的拷贝操作,烦琐极了;另外一个重大缺陷是静态的 POJO的Enhancer,不能运行期动态Enhance,无法进行增量编译和调试,编程和调试起来非常烦琐,每次都要手共运行一个工具对POJO进行 Enhance;此外还有一些缺陷,例如JDOQL不完善,映射关系的表达不够强大等等。
4、JDO产品的分裂。这个问题也比较严重,由于JDO1.0标准的缺陷,而JDO2.0标准还遥遥无期,而各个JDO厂商为了能够在竞争中脱颖而出,那么除了在易操作性和性能上的提高之外,想要吸引客户,就必须有自己的产品特色。那么1.0标准的缺陷正好给了他们发挥的舞台,每个厂商都会有自己独到的解决方案来解决标准的缺陷,然而这却造成了JDO 产品事实上的分裂。这种分裂严重到什么程度?我可以简单举个例子:你写好的POJO,用一种JDO的Enhancer进行Enhance过以后得到的 PO,在另一个JDO产品上跑不起来。这很像当年Unix的分裂,结果就是二进制代码级的不兼容,而只能在C源代码级兼容。现在的JDO也有这样的趋势,就像App Server的差别一样,一个在Weblogic上开发好的EJB,移植到Websphere,你一定需要重新进行配置。
我心目中的ORM最好有如下的特点:
1、开源和免费的License,我可以在需要的时候研究源代码,改写源代码,进行功能的定制。
2、轻量级封装,避免引入过多复杂的问题,调试容易,也减轻程序员的负担。
3、具有可扩展性,API开放,当本身功能不够用的时候,可以自己遍码进行扩展。
4、开发者活跃,产品有稳定的发展保障。
抛弃了JDO以后,我根据上面的原则,先后排除了TopLink,CocoBase,Castor等,最后选择了Apache OJB和Hibernate。
OJB的排除很容易做出,一是因为它的文档太简单,太少;二是因为OJB计划下一个版本全面支持JDO,它的API会有重大变动,所以现阶段学习OJB是个错误,等它的API稳定了以后再学习不迟。
Hibernate的发现是很偶然的事情,只是在别人提到JDO的产品中,附带提了提而已,但当我开始研究Hibernate之后,我发现终于找到了我梦寐以求的ORM了。
Hibernate 完全符合我上面提到的标准之外,也解决掉了JDO的所有缺陷,而且方式之优雅令人赞叹。Hibernate的文档也是非常非常有特色的地方,它不仅仅是 Hibernate的功能介绍那么简单,它实际上是一个持久层设计的最佳实践的经验总结,文档里面的例子,文档里面的总结全部都是最佳设计的结晶。我认真的把Hibernate读下来的感觉就是,不单单把Hibernate掌握住了,而且对持久层的设计的经验都长了一大块,以前可从来没有觉得持久层的设计还有那么多的学问,也由此感觉到Gavin绝对是一个大牛人。
当然选择Hibernate最最重用的原因是Hibernate是一个我能够完完全全驾驭的了的软件。Hibernate的源代码非常少,而且写的非常简洁,我总觉得挺奇怪的,这么少的源代码能够实现这么多的功能,是个奇迹。 Hibernate的源代码树分的很清楚简单,源代码很易读,我一旦碰到文档中没有讲到的问题,或者文档中提到但是我搞不清楚的地方,我就去源代码中找,所有的问题都豁然开朗,而且让我对Hibernate的运行原理和细节搞的特别清楚,好像Hibernate就像自己写的代码一样,很清楚的知道,怎么写程序可以让Hibernate运行效率最高,最省内存,程序出了错误,很清楚的知道是什么地方的问题,怎么解决。所以用Hibernate让我特别放心,我能够驾驭它,而不像那些过于复杂的软件,本身框架就复杂的很,再加上不开源,出了问题也不知道怎么回事。
校区分布Related schools
师资介绍|教学环境|学员评论
教学点: 3个
教学点: 3个
教学点: 3个
教学点: 3个
教学点: 3个
教学点: 3个
教学点: 3个
教学点: 3个全方位助力你无忧学习,自主研发30多个教学系统
从入学、学习、考核到面试、就业等步步跟踪贴心服务
位置:上海牵引力教育& &
上海java培训哪个比较好
为什么程序员独爱Java?
JAVA ADVANTAGE
Java语言的设计集中于对象及其接口,它提供了简单的类机制以及动态的接口模型。对象中封装了它的状态变量以及相应的方法,实现了模块化和信息隐藏;而类则提供了一类对象的原型,并且通过继承机制,子类可以使用父类所提供的方法,实现了代码的复用。
抢鲜免费体验七天!
请选择城市北京上海成都杭州广州长沙重庆石家庄武汉深圳太原昆明南昌西安青岛郑州南宁
到牵引力学JAVA,七大细微贴心服务
七大贴心服务,牵引力教育只为确保学员轻松无忧学习!
牵引力本着&以人为本&的教育情怀,为了确保学员能够轻松无忧学习,
牵引力教育从学习、生活、就业等多方面入手,多举措并施,
为学员提供七大贴心服务,确保所有学员都能轻松无忧地学习!
品质创新,牵引力教育八大特色优势
牵引力教育一直致力于IT教育创新,15年专注提高教学品质,使我们在人才培养模式上紧跟行业需求。
不断升级课程体系,在教学服务与管理上不断突破,形成以人为本,专业创新的牵引力情怀教育。
举办牵引力杯,开展国际合作,研发科技教学产品等,用先进理念打造专业、创新、综合素质高的人才,成就更具教育情怀的培训品牌!
牵引力教育线下整合实训公司人才资源及网络公司企业资源,线上运营&无忧网才&求职招聘网站,充分发挥线上线下的独家优势,打造中国互联网人才求职招聘第一平台,长期为国内各大互联网的用人企业提供人才推荐服务、猎头服务、人才外派服务及网站会员套餐服务,并为牵引力教育实训生提供终生高薪就业服务。
真实市场就业数据 震撼你的小心脏
Java革命开启,各行各业应用广泛,未来10年就业前景巨大,掌握热门语言,开启互联网&薪&时代
目前Java在许多行业的企业信息应用方面的应用非常多,比如OA、邮箱、股票、金融、考试、物流、医疗、矿山等信息方面的系统。该方向和行业密切相关,所以,这是一个经验型的发展方向。Java开发者在这方面的需求也非常大,待遇也相当不错,工资水平与Java互联网方向的差不多,很容易在一些大型企业就业。
应用领域广泛 就业口径宽广
OPPORTUNITIES(机会)
第一阶段:web前端课程
java课程易学习,门槛低,不看工作经验,
适合对未来职业发展有梦想、肯努力、够踏实有志靴子,0基础、18周岁,梦想从牵引力起航!
纽曼项目&PS入门
HTML标签及规范
HTML标签、CSS基础
CSS浮动布局&盒模型
纽曼官网实现
CSS定位布局
jQuery基础
jQuery动画及事件
jQuery实战
jQuery插件
CSS3新特性学习
纽曼移动端微官网实战
CSS3基础属性
第二阶段: Java初级
&Java语法基础
Java面向对象
Java常用API
Java高级API,泛型,异常
Java语法基础
Java多线程
Java网络编程
WEB开发基础
WEB开发基础与数据库
结合掌握的知识完善项目
项目总结和高效开发技能
第三阶段:Java中级
项目演示&MySQL深入介绍
MySQL数据库进阶
MySQL数据库设计
JDBC深入介绍
JDBC深入介绍和HTTP协议
Servlet进阶
JSP介绍XML和JSON
SpringMVC框架
Freemarker框架
Mybatis3框架
后台功能实现
前端功能实现
集成支付宝el
第四阶段: Java高级
知彼-初探篇
利器-工具使用篇
修炼-内功篇
实战-框架搭建
实战-系统说明
实战-用户管理
实战-机构管理
实战-区域管理、菜单管理、角色管理
实战-字典管理、操作日志、连接池
工作流引擎1、2、3
Nginx、redis
Jenkins、shiro
实战型Java大牛,所有经验倾囊相授
牵引力教育不惜重金打造豪华教育团队,他们比你更清楚你需要学什么才能赢得大企业的青睐!
Java高级讲师--唐志强
5年企业大型Java开发实战经验、专注Web项目高并发、负载均衡等优化,曾经历过多次大型Web项目从开发到上线的全过程、思路严谨、逻辑清晰、授课风格幽默风趣、通俗易懂。
Java总监级讲师--李韩飞
12年以上互联网产品开发经验,曾任职外企资深项目经理和高级架构师,擅长JAVA,Android,iOS,WEB前端等热门技术,在大规模分布式系统和高性能系统架构方面有多年的实践经验。
Java高级讲师--李正虎
7年的项目开发和管理经验。精通Java,SQL Server,MySql,Oracle,JSP等语言和数据库系统,深入掌握Struts,springMVC,Mybatis,Hibernate,Spring,Maven,Springboot&
苦学16周,开启人生逆袭之旅
科学的职业生涯晋升规划,你每一次阶段性的进步都会得到相应的汇报!
百单网项目实战四个月,量身定制的实战项目,&
业精于勤荒于嬉,通过百单网接单,阶段项目实战源源不断,精细讲解+实战强化
牵引力教育就业服务完善,学员技术过硬
30000多家雇主企业喊你来上班!
牵引力教育与30000多家企业联合共建,定向输出Java高端人才;每月有专场招聘会、就业指导和就业推荐等一站式完善的就业服务。
舒适的教学环境 牵引力教育给你全方位安心保障
牵引力教学大楼,Hold住你的挑剔。牵引力教育在全国一二线城市拥有29家校区,
校区环境优雅舒适,确保学员能在一个静谧舒适的环境中全身心投入到学习中!
详情请进入
查看,文章来源:
开班时间: 滚动开班
课程费用:咨询
咨询电话: 咨询QQ:
你的J2EE应用是不是运行的很慢?它们能不能承受住不断上升的访问量?本文讲述了开发高性能、高弹性的JSP页面和Servlet的性能优化技术。其意思是建立尽可能快的并能适应数量增长的用户及其请求。在本文中,我将带领你学习已经实践和得到证实的性能调整技术,它将大大地提高你的servlet和jsp页面的性能,进而提升J2EE的性能。这些技术的部分用于开发阶段,例如,设计和编码阶段。另一部分技术则与配置相关。
技术1:在HttpServletinit()方法中缓存数据
服务器会在创建servlet实例之后和servlet处理任何请求之前调用servlet的init()方法。该方法在servlet的生命周期中仅调用一次。为了提高性能,在init()中缓存静态数据或完成要在初始化期间完成的代价昂贵的操作。例如,一个最佳实践是使用实现了javax.sql.DataSource接口的JDBC连接池。
DataSource从JNDI树中获得。每调用一次SQL就要使用JNDI查找DataSource是非常昂贵的工作,而且严重影响了应用的性能。Servlet的init()方法可以用于获取DataSource并缓存它以便之后的重用:
publicclassControllerServletextendsHttpServlet
privatejavax.sql.DataSourcetestDS=
publicvoidinit(ServletConfigconfig)throwsServletException
super.init(config);
Contextctx=
ctx=newInitialContext();
testDS=(javax.sql.DataSource)ctx.lookup("jdbc/testDS");
catch(NamingExceptionne)
ne.printStackTrace();
catch(Exceptione)
e.printStackTrace();
publicjavax.sql.DataSourcegetTestDS()
returntestDS;
技术2:禁用servlet和Jsp的自动装载功能
当每次修改了Servlet/JSP之后,你将不得不重新启动服务器。由于自动装载功能减少开发时间,该功能被认为在开发阶段是非常有用的。但是,它在运行阶段是非常昂贵的;servlet/JSP由于不必要的装载,增加类装载器的负担而造成很差的性能。同样,这会使你的应用由于已被某种类装载器装载的类不能和当前类装载器装载的类不能相互协作而出现奇怪的冲突现象。因此,在运行环境中为了得到更好的性能,关闭servlet/JSP的自动装载功能。
技术3:控制HttpSession
许多应用需要一系列客户端的请求,因此他们能互相相关联。由于HTTP协议是无状态的,所以基于Web的应用需要负责维护这样一个叫做session的状态。为了支持必须维护状态的应用,Javaservlet技术提供了管理session和允许多种机制实现session的API。HttpSession对象扮演了session,但是使用它需要成本。无论何时HttpSession被使用和重写,它都由servlet读取。你可以通过使用下面的技术来提高性能:
l在JSP页面中不要创建默认的HttpSession:默认情况下,JSP页面创建HttpSession。如果你在JSP页面中不用HttpSession,为了节省性能开销,使用下边的页面指令可以避免自动创建HttpSession对象:
<%@pagesession="false"%>
1) 不要将大的对象图存储在HttpSession中:如果你将数据当作一个大的对象图存储在HttpSession中,应用服务器每次将不得不处理整个HttpSession对象。这将迫使Java序列化和增加计算开销。由于序列化的开销,随着存储在HttpSession对象中数据对象的增大,系统的吞吐量将会下降。
2) 用完后释放HttpSession:当不在使用HttpSession时,使用HttpSession.invalidate()方法使sesion失效。
3) 设置超时值:一个servlet引擎有一个默认的超时值。如果你不删除session或者一直把session用到它超时的时候,servlet引擎将把session从内存中删除。由于在内存和垃圾收集上的开销,session的超时值越大,它对系统弹性和性能的影响也越大。试着将session的超时值设置的尽可能低。
技术4:使用gzip压缩
压缩是删除冗余信息的作法,用尽可能小的空间描述你的信息。使用gzip(GNUzip)压缩文档能有效地减少下载HTML文件的时间。你的信息量越小,它们被送出的速度越快。因此,如果你压缩了由你web应用产生的内容,它到达用户并显示在用户屏幕上的速度就越快。不是任何浏览器都支持gzip压缩的,但检查一个浏览器是否支持它并发送gzip压缩内容到浏览器是很容易的事情。下边的代码段说明了如何发送压缩的内容。
publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)
throwsIOException,ServletException
OutputStreamout=null
//ChecktheAccepting-EncodingheaderfromtheHTTPrequest.
//Iftheheaderincludesgzip,chooseGZIP.
//Iftheheaderincludescompress,chooseZIP.
//Otherwisechoosenocompression.
Stringencoding=request.getHeader("Accept-Encoding");
if(encoding!=null&&encoding.indexOf("gzip")!=-1)
response.setHeader("Content-Encoding","gzip");
out=newGZIPOutputStream(response.getOutputStream());
elseif(encoding!=null&&encoding.indexOf("compress")!=-1)
response.setHeader("Content-Encoding","compress");
out=newZIPOutputStream(response.getOutputStream());
out=response.getOutputStream();
技术5:不要使用SingleThreadModel
SingleThreadModel保证servlet一次仅处理一个请求。如果一个servlet实现了这个接口,servlet引擎将为每个新的请求创建一个单独的servlet实例,这将引起大量的系统开销。如果你需要解决线程安全问题,请使用其他的办法替代这个接口。SingleThreadModel在Servlet2.4中是不再提倡使用。
技术6:使用线程池
servlet引擎为每个请求创建一个单独的线程,将该线程指派给service()方法,然后在service()方法执行完后删除该线程。默认情况下,servlet引擎可能为每个请求创建一个新的线程。由于创建和删除线程的开销是很昂贵的,于是这种默认行为降低了系统的性能。我们可以使用线程池来提高性能。根据预期的并发用户数量,配置一个线程池,设置好线程池里的线程数量的最小和最大值以及增长的最小和最大值。起初,servlet引擎创建一个线程数与配置中的最小线程数量相等的线程池。然后servlet引擎把池中的一个线程指派给一个请求而不是每次都创建新的线程,完成操作之后,servlet引擎把线程放回到线程池中。使用线程池,性能可以显著地提高。如果需要,根据线程的最大数和增长数,可以创建更多的线程。
技术7:选择正确的包括机制
在JSP页面中,有两中方式可以包括文件:包括指令(<%@includefile="test.jsp"%>)和包括动作(<jsp:includepage="test.jsp"flush="true"/>)。包括指令在编译阶段包括一个指定文件的内容;例如,当一个页面编译成一个servlet时。包括动作是指在请求阶段包括文件内容;例如,当一个用户请求一个页面时。包括指令要比包括动作快些。因此除非被包括的文件经常变动,否则使用包括指令将会获得更好的性能。
技术8:在useBean动作中使用合适的范围
使用JSP页面最强大方式之一是和JavaBean组件协同工作。JavaBean使用<jsp:useBean>标签可以嵌入到JSP页面中。语法如下:
<jsp:useBeanid="name"scope="page|request|session|plication"class=
"package.className"type="typeName">
</jsp:useBean>
scope属性说明了bean的可见范围。scope属性的默认值是page。你应该根据你应用的需求选择正确的范围,否则它将影响应用的性能。
例如,如果你需要一个专用于某些请求的对象,但是你把范围设置成了session,那么那个对象将在请求结束之后还保留在内存中。它将一直保留在内存中除非你明确地把它从内存中删除、使session无效或session超时。如果你没有选择正确的范围属性,由于内存和垃圾收集的开销将会影响性能。因此为对象设置合适的范围并在用完它们之后立即删除。
1) 避免字符串连接:由于String对象是不可变对象,使用“+”操作符将会导致创建大量的零时对象。你使用的“+”越多,产出的零时对象就越多,这将影响性能。当你需要连接字符串时,使用StringBuffer替代“+”操作。
2) 避免使用System.out.println:System.out.println同步处理磁盘输入/输出,这大大地降低了系统吞吐量。尽可能地避免使用System.out.println。尽管有很多成熟的调试工具可以用,但有时System.out.println为了跟踪、或调试的情况下依然很有用。你应该配置System.out.println仅在错误和调试阶段打开它。使用finalBoolean型的变量,当配置成false时,在编译阶段完成优化检查和执行跟踪输出。
3) ServletOutputStream与PrintWriter比较:由于字符输出流和把数据编码成字节,使用PrintWriter引入了小的性能开销。因此,PrintWriter应该用在所有的字符集都正确地转换做完之后。另一方面,当你知道你的servlet仅返回二进制数据,使用ServletOutputStream,因为servlet容器不编码二进制数据,这样你就能消除字符集转换开销。
本文的目的是展示给你一些实践的和已经证实的用于提高servlet和JSP性能的性能优化技术,这些将提高你的J2EE应用的整体性能。下一步应该观察其他相关技术的性能调整,如EJB、JMS和JDBC等。
校区分布Related schools
师资介绍|教学环境|学员评论
教学点: 3个
教学点: 3个
教学点: 3个
教学点: 3个
教学点: 3个
教学点: 3个
教学点: 3个
教学点: 3个

我要回帖

 

随机推荐