我的工程名是PersonalPlatform,每次启动Tomcat在IE输入地址后,workspace都会生成一个PersonalPlaform(注意:比真正的工程名少一个“t”),里面有个work/tldCache.ser文件。我肯定是某个地方的工程名写错了,但是查了好久都没有查出来,请问一下出现这种情况一般是什么地方出错了?
记录一下这个重要时刻!
今天书上看到的代码我自己总算配置成功了!!!
想哭,熬了两个晚上,看代码看到凌晨四点,早上八点又接着做,状态非常差,都要崩溃了。现在朋友封了我个名号:拼命三娘!
刚开始的时候Eclipse老是出现404错误,找不到指定文件,这个问题都烦了我1个月了。今早无意中打开Tomacat的server.xml文件,发现<Context>里面全是乱码,终于恍然大悟,我的文件夹用中文命名,当然找不到路径啦,改完路径之后运行Tomcat,还是出现org.apache.jasper.JasperException: File "/WEB-INF/struts-bean.tld" not found的错误
看了半天Struts的配置文件和web.xml文件以及Struts-bean.tld文件,完全没有错误,再打开tomcat的conf文件,还是那个server.xml文件的<Context>里面虽然不是乱码了,但是路径还是错的,于是改成自己的PersonalPlatform的路径改为<Context path="/PersonalPlatform" reloadable="true" docBase="F:\biyesheji\workspace\PersonalPlatform" workDir="F:\biyesheji\workspace\PersonalPlatform\work" />
没抱多大希望,居然....居然.....居然给打开了!!!!!!
虽然页面的文字还是乱码,但是这个我有思路。抱着小萍差点要哭起来!
要谢谢这位同学:http://blog.csdn.net/jrq/archive/2004/10/29/157762.aspx
他打了个比喻很有趣。他说学STRUTS就像是跟struts在恋爱一样,这位恋人很很难很难接近,性格很难琢磨,对他要有百分百的耐心。
“请再检查一遍。
然后请再检查一遍。
不要烦躁,一定要像对待初恋情人一样对待它,不然会死的很难堪!
一定要好好检查。
这个MVC中的C很要命的,流程控制全靠它了,一定要小心呵护的。
我在网上看到有人对这个问题说“试了千百回,改了千百次,就是不知道什么原因”。
如果你也恰好和struts是初恋,也恰好试了千百回,改了千百次,
那么,请不要灰心”
那么,我现在跟struts算不算是认识了呢?真希望可以多加了解!
下来的时间用一天半再读熟代码,然后就开始自己动手改了!
有信心了!加油~
org.apache.jasper.JasperException: File "/WEB-INF/struts-bean.tld" not found
org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:50)
org.apache.jasper.compiler.ErrorDispatcher.dispatch(ErrorDispatcher.java:411)
org.apache.jasper.compiler.ErrorDispatcher.jspError(ErrorDispatcher.java:118)
org.apache.jasper.compiler.TagLibraryInfoImpl.<init>(TagLibraryInfoImpl.java:159)
org.apache.jasper.compiler.Parser.parseTaglibDirective(Parser.java:418)
org.apache.jasper.compiler.Parser.parseDirective(Parser.java:483)
org.apache.jasper.compiler.Parser.parseElements(Parser.java:1539)
org.apache.jasper.compiler.Parser.parse(Parser.java:126)
org.apache.jasper.compiler.ParserController.doParse(ParserController.java:220)
org.apache.jasper.compiler.ParserController.parse(ParserController.java:101)
org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:203)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:470)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:451)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:439)
org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:511)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:295)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
转载自:http://www.blogjava.net/realsmy/archive/2007/05/07/115694.html
今天,看了几个N站长的BLOG,看了之后真的好羡慕。真希望自己以后也和他们一样。他们会的技术我都想去学习。但是,沉思了一阵子之后,我想通了。我有自己要学习的技术,我有自己要发展的路线。不能见一个N人就效仿一个。那样,我可能最终会一事无成。
学习之前,首先明确自己是做什么的,我不是专门做网站的,不是专门做产品的,我是做软件外包的。我要首先明确自己现在所在的位置,然后,去摸索,去思考,弄清楚在这个行业中,我该掌握哪些技能才能立足。
下面,是我首先要了解的事。
网上搜到的资料:http://www.mylinux.com.cn/HTML/1172743480434.html
所谓软件外包就是一些发达国家的软件公司将他们的一些非核心的软件项目通过外包的形式交给人力资源成本相对较低的国家的公司开发,以达到降低软件开发成本的目的。众所周知,软件开发的成本中70%是人力资源成本,所以,降低人力资源成本将有效地降低软件开发的成本。
软件外包已经成为发达国家的软件公司降低成本的一种重要的手段。目前,全球软件的销售额为6,000亿美元,而其中软件外包的销售额即达到500~600亿美元。预期到2005年软件外包的销售额将达到1,000亿美元。软件外包的大幅度增长为人力资源成本相对较低的印度和中国带来了新的发展机会。
中国目前已经有不少的公司开始介入软件外包这一领域。目前软件外包产业较为发达的地区有上海、北京、大连以及深圳等城市。以北京为例,有40%的软件企业参与外包项目,软件行业60%~70%的营业额来自外包。在上海和北京,一个软件外包工程师的月薪达到7,000~10,000元人民币,而同样能力的软件工程师在武汉只需要三~四千元人民币。资本的特征是向成本更低的地方流动,所以,近一段时间以来已经有大量的东部软件公司准备迁移到中部地区,目前首选的地区主要是武汉和西安。
软件外包将为中国软件业带来什么呢?不仅仅是经济发展的机会,还有先进的软件开发管理流程,以及严格的软件质量控制体系。通过发展软件外包产业,我国的软件产业将逐渐地告别手工作坊式的开发时代,进入工程化、规模化的开发领域。
为抓住这一历史性的机遇, 我国政府正全力为这些软件外包公司营造更好的投资环境,政府已经在多个重点城市建立开发区,设立多个全新的软件开发园区,并对于入园的软件企业给予相当优惠的政策条件。但是,仅有政策条件和环境条件是不够的,对软件企业影响最大的是人力资源成本,能否提供多数量多的、成本较低并在质量方面满足需要的软件外包工程师是我国能否抓住这一历史机遇的重要条件。
中国软件外包市场现状
全球软件外包市场规模已达1000亿美元。发包市场主要集中在北美、西欧和日本,接包市场主要是印度、爱尔兰等国家。其中,美国市场被印度垄断,欧洲市场则被爱尔兰垄断。现在,菲律宾、巴西、俄罗斯、澳大利亚等国也加入了世界软件外包的竞争行列。
IT外包服务是社会分工不断细化和IT技术发展相结合的产物。与硬件外包相比,软件外包起步较晚,但发展很快。目前印度是软件外包最大市场。除此之外,爱尔兰,以色列和中国也是软件外包的主要市场。
IDG统计数据表明,全球软件外包市场规模已达到1000亿美元。全球软件外包的发包市场主要集中在北美、西欧和日本等国家,其中美国占40%,日本占10%。外包接包市场主要是印度、爱尔兰等国家。其中,美国市场被印度垄断,印度软件业80%的收入依赖软件外包业务,印度已经成为软件外包的第一大国。而欧洲市场则被爱尔兰垄断。现在,菲律宾、巴西、俄罗斯、澳大利亚等国家也加入了世界软件外包的竞争行列。
虽然中国IT外包服务市场一直高速增长,但截至目前,IT外包服务的用户群还相当狭小。就IT外包服务的内容和服务方式而言,还主要局限于基础架构层面的网络基础设施和桌面设备的支持与维护。2003年IT外包服务的市场规模只有人民币42.6亿元。其中IT运营管理外包服务的规模为21.6亿,应用管理外包服务为1.5亿,软件外包19.5亿。
计世资讯的《2003~2004年中国IT服务市场研究年度报告》显示, 2003年中国IT外包市场规模达35.2亿人民币,同比增长42.5%。中国软件外包的主要目标市场是日本和美国。
趋势与预测
BPO成为未来外包发展的趋势。
合作关系及无缝集成模式将成为外包的主要方式
外包市场集中度较高
外包市场成熟,形成了规范的外包市场
IT外包在行业中的应用深入
国内的外包服务市场的发展趋势为:
由市场不成熟高度分散走向市场逐渐成熟集中
国内外包市场保持快速增长。
中国将成为继印度后新的外包产业中心
IT外包服务结构转化,服务向高端发展
软件外包大型企业出现
我国软件外包业赶上印度还缺什么?
中国经济巨大的成功使人们不禁推测:中国的软件外包业很快将和印度不相上下。但是麦肯锡公司最近对中国软件部门进行研究后发现,中国要想在软件外包业对印度形成威胁还需要很多年的时间。首先,中国必须巩固其高度分散的软件行业,培育获得大型国际项目所必需的规模和技术。
目前,中国向这个方向所做出的努力还并不多。
差距
有一点可以肯定,中国的IT业正在健康的扩张。近几年,中国IT行业专门人才的数量增长很快。从1997年起,软件和IT行业的年收入平均每年增长42%,2003年达到68亿美元。尤其是,这个行业中,2000年到现在,说英语的毕业生(在软件外包业中很重要)翻了一番,已经超过2400万。但是,中国IT业自身的很多不足,致使这些变化不能被彻底的利用。尽管中国IT行业的收入在增加,但是却只有印度的一半(印度IT行业每年的收入是127亿美元)。中国IT行业的增长受国内需要的驱使,其多数客户都是中小型的中国企业,他们需要的是根据他们的需要专门为他们定制的软件。中国初生的软件外包业务只点到IT行业总收入的10%,而印度的这个数字则高达70%。尽管成本相对较低,但是中国软件服务公司的营业毛利只有7%,而世界同类公司的营业毛利的平均水平可以达到11%,原因是他们接手的项目往往规模不大,但报价又相对较低。
规模
要想在全球的外包业中形成有力的竞争,中国必须巩固其软件业。中国排名前十的IT服务公司所占的市场份额仅为20%,而印度的十大IT公司占有的市场份额高达45%。中国大约有8000家软件服务供应商,其中员工少于50人的占四分之三,只有5家拥有2000名以上的员工。印度的软件服务供应商不到3000家,至少有15家拥有2000名以上的员工,其中的塔塔谘询服务公司(TCS)、威普罗公司(Wipro)、信息系统技术有限公司(Infosys)都已经获得国际上的认可,在全球拥有客户。没有适当的规模,中国企业不可能吸引到顶尖的国际客户。因为人们通常认为,小公司是风险相对较大,可靠度相对不高的合作伙伴。麦肯锡的研究发现,只有12%的中国软件服务公司认为合并、收购和结盟是应优先考虑的事务。中国软件服务公司的经理人中,有兼并收购经验的不多,尽管他们的文化有
利于组织的发展,但是依靠这种文化来对抗新的竞争对手显然不是很理想。相反,印度的几家公司正在考虑并购中国公司来扩大他们的业务。
质量
行业的分散状态使中国软件行业的另外一些问题显得比较突出,如过程控制和产品管理不够严格。中国30家大型软件公司当中只有6家达到CMM五级或四级,而印度的30家大型软件公司全部达到这一专业水准。调查发现,四分之一的中国公司在尝试执行CMM质量标准,但是有一半多的公司在调查中表示,做这各努力没有必要,不可行,或者认为不值得。
人才
中国的软件服务提供商还应加强人才的管理。绝大多数中国公司都不重视帮助员工成长,他们当中很少懂得将股权、培训项目或其它激励机制引入对人才的管理。麦肯锡的调查发现,中国软件公司中人员的更新率每年高达20%,而美国虽然拥有流动性很强的IT劳务市场,但它的这个数字只有14%。
其它
有了更大的规模和更好的人才基础,中国的软件服务公司就会具备解决其它问题的条件,比如在国际市场建立可信的品牌,开发特定行业,如金融和制约行业的技术。另外,还要注意保护客户的知识产权,要克服基于项目的短期效应心理,要致力于为客户提供长期服务。
我不歧视自己这个行业,虽然这个行业看起来就是为外国人打杂的行业,相反的,我喜欢这个行业。
要想超越别人,首要就要敢于承认自己比别人差,并且能够虚心的向他们学习。外包,大多是一个个的软件项目。这就需要一个管理有序,技术够硬的团队。那么很明显,这样的团队需要什么样的人,就是我可以选择的发展路线。
而且,也不乏看出,中国IT教育这个方向目前也隐藏着很大的“发展钱力”,我的思想没那么伟大,不想推动哪个行业的发展,我所指的,都是个人利益。所以有机会的话,我可能会选择当一名讲师。
这些词老师经常说,但我都不知道具体的意思。现在整理如下。
1.什么是JSP?
JSP是目前流行的动态网页开发技术之一。在传统网页HTML文件中加入JSP标记和Java程序段,就构成了JSP网页。JSP(Java Server Page)技术是由Sun公司提出、多个IT公司参与合作建立的一种动态网页开发技术标准。JSP规范是Web服务器、中间件应用服务器、交易系统以及软件开发工具厂商间广泛合作的成果,该技术为创建显示动态生成内容的Web页面提供了一个简洁而快速的方法。JSP的设计目的是使的构造基于Web架构的应用系统更加容易、方便和快捷,而这些应用程序可以和各种Web服务器、中间件应用服务器、浏览器和各种开发工具协同工作。
2.什么是Servlet?
Servlet是位于Web服务器内部的服务端的java类。JSP规范建立在JavaServlet规范上,同一个应用程序里可以同时包含JSP页面和Servlet。Servlet是对支持Java的服务器的一般扩充,因而是JSP的重要技术基础。其最常见的用途是扩展Web服务器,提供安全、可移植、易于使用的CGI替代品。Servlet可以被看作一种动态加载的模块,并为服务器接受的请求提供服务,完全运行在Java虚拟机上。由于Servlet在服务器端运行,所以不依赖于浏览器。此外,从理论上讲,只要是Java能实现的功能,Servlet也可以实现。
Servlet还可以堪称服务器的Applet,能被Web服务器加载和执行,并能接收客户端发来的请求(通过Web服务器)执行需要的操作,然后返回结果给服务器。
3.什么是JavaBean?
Bean的中文含义是“豆子”,顾名思义,JavaBean是指一段特殊的Java类。简单的说,JavaBean是用Java语言描述的软件组件模型,其实际上是一个类。这些类遵循了一个接口格式,以便于使函数命名、底层行为以及继承或实现的行为,可以把类看作标准的JavaBean组件进行构造和应用。
JavaBean一般分为可视化组件和非可视化组件两种。可视化组件可以是简单的GUI元素,如按钮或者文本框,也可以是复杂的,入报表组件;非可视化组件没有GUI表现形式,用于封装业务逻辑、数据库操作等。其最大的优点在于可以实现代码的可重用性。对于有过其他语言编程经验的人而言,JavaBean可以看作类似于ActiveX的编程组件。但区别在于JavaBean是跨平台的,ActiveX组件则仅局限于Windows系统。
JavaBean组件与EJB(Enterprise JavaBean ,企业级JavaBean)组件完全不同。EJB是J2EE的核心,是一个用来创建分布式应用、服务器端以及基于Java应用的功能强大的组件模型。JavaBean组件主要用于存储状态信息,而EJB组件可以存储业务逻辑。
未完待续....
今天再说二句,发表一下鄙见,关于压力和动力。
在一个项目中,甚至做任何事情,在没有压力的情况下所做的东西,一般进步不是太大,或是做的所是以前有的,或是还不如以前的,并且所用的时间可以说是实际时间的二三倍,包括项目的管理者在内,都要给自己点压力。不然压力会在“说而不做”中过去,可是压力却又有量度的,分配给每一个人的任务,他都会说“我做的活太多了,量太大了,这本来是二个人的活,我现在一个人加班也加个差不多了”,这时候你怎么好意思再给他压力呢,然后,客户又说“这点功能还不多实际吗,给你这些钱都不少了。”所以作为项目的领导者不要全部听取其它人的话,为什么你的工资比别人高那么多呢?就是因为你有经验,你做过这东西,做这样的东西对每个人来说用多长时间,做成怎么样,你心里有个数,可是也不能不听弟子的话,毕竟每个项目都有它具体的方面。
再者,不管公司再小,项目组再小,也得有成套成型的规矩,也时不时把公司的稍层一点的东西给弟子讲一讲,比如说公司马上拿到什么什么项目了等等,让弟子们感觉到这个公司是可持续发展的,是有前途挣大钱的,不然,都会感觉到反正就这样了,混一天是一天,反正马上就要完蛋。或是弟子以他的意见来渡公司上层的意见,肯定会有偏见,这样都不能给他们以动力,也不利于公司的发展。我们要有一个很好的激励机制来激励弟子们自愿的给你干活,自愿加班。
话说项目管理,我本人系刚刚毕业的大学生,说起来在这空谈项目管理简直不是瞎胡闹吗,嗨,可别这样说,小心你缺少的就是我所说的。
以为我的理解,沟通分为二种,一种是向下的沟通,也就是与自己的小弟沟通了,一种是向上的沟通,那就是与大经理以及客户沟通了,客户是上帝,理所当然也是向上的沟通了,沟通是以与项目相关的所有人的素质和能力为基础,是以项目经理为核心,在各个小弟不断理解的情况下建立起来是一种能使项目流畅进行的笼统说法,在项目中项目管理者经常与上与下沟通,能及时发现问题,解决问题,能很好的与上与下沟通,能发现更多的问题,而更好的解决问题,从而使项目更加成功,不管是书面沟通还是口头沟通,无非都是想让对方彼此了解自己的意思,而不论多有才华,管理能力有多强,我们都是具体问题具体分析,都是在当时这个环境下,当时这个时间,我们沟通的效果,还有点,一个问题能二去沟通好的,就不要插第三者,比如说,客户的详细需求能让做程序的程序知道的,就不要再找一个人,让他先了解需求,然后再告诉程序员,这样很容易造成信息的失真,确确实实是这样,如果就是这个程序员,请你也不要往上说出,尽你最大的努力把项目做好就行了,因为什么?呵呵,大家理解一下就知道,如果你是项目经理,尽量避免这类问题,即节省开支,又能很好地解决问题,我们何乐而不为呢?
好,能给大家看的就这么多,还有一部分不能给大家看的,那就是我自己的一些很锋利的思想,为了“做人还是低调点好”,只能放入我的私人日记,也许有一天我有权利拿出来给大家看时,再来共享我很幼稚的理念。
你能看到这,我非常感谢你,就像我们的客户在使用我们做的软件一样,我们要感谢他,因为他们在使用我们做的软件,如果人家偏不用你做的软件你能怎么样?所以说我们能给客户做软件我们都是幸运的。
经过了,就会有感受,今天说一下我对项目管理之项目设计的看法,因为我是做开发的,所以对设计了解点,项目管理除了设计还有沟通,风险控制等等,对项目的管理就是一个项目的指挥棒,其中对项目的设计是所有项目管理的核心部分,中等以上的公司都要对项目按照概要设计,详细设计,实现,这样的步骤走,不过国内的很多项目都没有按照这样的步骤,做的好像是三边六拍的项目,边思考,边设计,边实现,这样做会做很多重复的工作,效率会很低,在国内为什么会出现这种现象呢?也许是对项目的风险的控制不是那么指挥若定,每个项目需求和设计都是要占一多半的时间的,实现也就是用那么几天就可以了,所以,我们一直会担心,就那么几天行吗?如果实现不了不是白白设计了吗?其实没有必要对自己的小弟不放心的,多给他二个银子,他通宵也会给你实现的,再说了,你都设计好了,实现起来就比较容易了,如果我们对这方面有预知感,也许项目会做的就会得心应手了,如果边设计边实现,等程序员做一半时感觉这样设计不好,就会回头再设计再实现,我们不是说原型模型的软件设计不好,但我们的资金往往不像微软那样有钱,投入和效益的周期不能太长,所以我们不要浪费了我们的代码。把整个项目做到心中有数。
注:非常不喜欢文章中“小弟”这个称呼......让人不舒服。
1.
(1)代码自动完成功能:Alt+/
(2)代码格式化功能:Ctrl+shift+F
(3)jar包关联源代码
(4)打开类型,查看父类实现,查看类型层次结构,查看方法调用
2.代码搜索
原代码如下:
ckage com.comnew.demo;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class JDBCDrive {
public void testDB() throws ClassNotFoundException,SQLException{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection cn=null;
PreparedStatement stmt=null;
try
{
cn=DriverManaget.getConnection("jdbc:odbc:MQIS");
stmt=cn.prepareStatement("update T_T1 set FAge=20");
stmt.execute();
cn.clearWarnings();
StringBuffer sb=null;
}
catch(SQLException e)
{
throw e;
}
finally
{
if(stmt!=null)
{
stmt.close();
}
if(cn!=null)
{
cn.close();
}
}
}
public static void main(String[] args) {
}
}
糟糕,明天要交毕业设计初稿,这个先放一边....
1.方法抽取:Extract Method
将calcCost中参数校验部分抽取成方法verify.
选定代码--->右键Refactor-->Extract Method
2.重命名:Rename
(1)重命名类名Test1为CostCalculator
(2)重命名User为UserInfo
选定类名-->右键Refactor-->Rename
3.内联:Inlining
内联方法add
内联原因:调用方法越多,运行速度越慢
选定方法名("add")-->右键Refactor-->Inline
4.常量抽取:Extract Constant
原因:避免手误
将"normal","vip"抽取成常量
选定字符串-->右键Refactor-->Extract Constant
5.抽取局部变量:Extract Local Voriable
将user,userType抽取成变量
原因:减少代码长度,增加代码可读性
选定要抽取的变量(user.userName)-->右键Refactor-->Extract Local Variable
6.包装字段:Encapsulate Field
重构user类,用set,get包装
主菜单-->Refactor-->Encapsulate Field
7.抽取接口:Extract Interface
选定方法名(calcCost)-->右键Refactor-->Extract Interface-->Name:ICcstCalculator
重构后的代码为:
(一)UserInfo.java
package com.comnew.demo;
public class UserInfo {
private String userName;
private String userType;
private int amount;
public void setUserName(String userName) {
this.userName = userName;
}
public String getUserName() {
return userName;
}
public void setUserType(String userType) {
this.userType = userType;
}
public String getUserType() {
return userType;
}
public void setAmount(int amount) {
this.amount = amount;
}
public int getAmount() {
return amount;
}
}
(二)CostCalculator.java
package com.comnew.demo;
public class CostCalculator implements ICostCalculator {
private static final int VIPPRICE = 0;
private static final int NORMALPRICE = 10;
private static final String VIP = "vip";
private static final String NORMAL = "normal";
/* (non-Javadoc)
* @see com.comnew.demo.ICostCalculator#calcCost(com.comnew.demo.UserInfo)
*/
public int calcCost(UserInfo user)
{
verify(user);
int ret=0;
String userType = user.getUserType();
if(userType.equals(NORMAL))
{
ret=user.getAmount()+NORMALPRICE;
}
else if(userType.equals(VIP))
{
ret=user.getAmount()+VIPPRICE;
}
else
{
throw new IllegalArgumentException("useType的类型错误!必须未如下几种:"+NORMAL+","+VIP);
}
return ret;
}
private void verify(UserInfo user) {
String useType = user.getUserType();
if(useType==null)
{
throw new IllegalArgumentException("userType不能为空!");
}
if(user.getAmount()<=0)
{
throw new IllegalArgumentException("amount必须大于0!");
}
}
public static void main(String[] args)
{
String userName="tom";
String userType=NORMAL;
int amount=20;
UserInfo user=new UserInfo();
user.setUserName(userName);
user.setUserType(userType);
user.setAmount(amount);
System.out.println(new CostCalculator().calcCost(user));
}
}
(三)ICostCalculator.java
package com.comnew.demo;
public interface ICostCalculator {
public abstract int calcCost(UserInfo user);
}