⑴ 怎么还原mac etc/hosts 文件. 因为我不小心乱更改,怎么把hosts恢复,把它再次修改成正常
新建记事本文件,将文件存为.BAT为后缀名的文件
自动修改脚本代码如下:
@echo off
echo proj 自动修改本机HOST文件
echo.
c:
cd \
if not exist proj-test\con md proj-test
if exist proj-test\hosts.bak goto backup_exists
echo 正在创建备份……
cd \windows\system32\drivers\etc
/y hosts \proj-test\hosts.bak > null
echo 完成!
echo.
goto backup_start
:backup_exists
echo 备份文件已经存在,无需备份。
echo.
:backup_start
echo 正在写入HOST数据……
echo 127.0.0.1 localhost > hosts
echo 192.168.3.170 proj.com >> hosts
echo 192.168.3.170 www.proj.com >> hosts
echo 192.168.3.170 pics.proj.com >> hosts
echo 192.168.3.170 files.proj.com >> hosts
echo 完成!
echo.
echo 建立 HOST 本地测试环境完成。按任意键退出……
pause > null
⑵ 请问怎么才可以把英语的阅读分数高点
阅读是主动地、积极地获取信息的创造行为,是培养学生通过视觉感知书面文字符号并获取信息能力的途径,更是提高听、说、写能力的有力杠杆,它在英语学习中起着至关重要的作用。在近几年的高考英语试卷中,阅读的分值(阅读理解,完形填空,改错)占了整个试卷分值的一半以上。99年高考英语试卷阅读理解的篇幅在增长,难度也有所加大。笔者认为要提高英语阅读水平,学生需做到以下几点:
一、多采用Top-down阅读法
自上而下(Top-down)阅读是从语篇整体出发,把注意力集中在通过文字符号获取信息上,即按文章所给的标题先对文章的内容与含义作出推断,理解作者所要表达的意思。
运用自上而下的阅读法的关键是培养学生预测、推断文章内容和含义的能力,从而提高阅读理解能力。
通过略看文章的总体结构安排或文章的标题来预测文章的内容及深层含义,可从下列几方面去推测:
1.文章写了哪几方面的内容?
2.作者将从哪几方面来阐述?
3.内容将如何发展下去?
在阅读时要注意不同的英文文体,因为文体对信息的组织和布局模式有着重大影响。训练掌握各种英语文体的结构特征,有利于归纳文章和进行逻辑推理。例如:记叙文以叙事为主必定有三个要素:情节、人物和背景。情节的发展多以时间、地点的转移为线索。因此,阅读记叙文时,必须抓住时间这条线索,以人物为中心,弄清故事的发生、发展、结局。再如议论文和说明文有一个共同点,就是段落大多有主题句(较多地出现在段首或段末),要抓住主题句,发掘每一个主旨,弄清文章的中心论点,以便更加详细地预测文章的内容,吃透整篇文章的表层及深层含义。
二、正确处理好精读与泛读间的关系。
精读和泛读是阅读时两种主要方法,两者相辅相存,不可偏废也无法代替。
1.注重阅读材料的选择。
选择合适的精泛阅读材料是提高英语阅读的重要手段。选择字数为200左右,后面配有习题的阅读材料为宜。阅读材料体裁要多样化——叙事类、科普类、议论或说明类、广告类等。要注重文章的实用性。所选材料的难易程度以理解正确率达60%~70%,生词量不超过4%为恰当。
2.精读泛读相辅相存。
比起泛读,精读是点。对一些有一定难度写得较好的文章要进行剖析,要归纳、总结作者的写作意图、思路及中心论点,最后达到获取详细信息和深层次内容的目的。如果说精读是点,泛读即是面。只有通过大量阅读,才能积累大量词汇、结构和句型,才能积累大量词汇、结构和句型,才能扩大知识面,培养语感,提高对文字的反应能力。在泛读时,要根据上下文提高自己猜测生词的能力,不要一看到生词就查词典,要弄清文中批示代词和人称代词所指代的对象。要对自己进行限时阅读。一篇200字左右难度适中的阅读文章,争取6分钟之内做完其阅读理解题。在阅读时,要多积累英、美等国家的社会、历史、地理、文化及风俗方面的知识,这有利于提高阅读水平。要培养良好的阅读习惯。阅读时,要从意群上去看,不要逐字读,更不要用笔或手指边指边出声读,这样有碍理解文章的意思,而且影响阅读速度。
阅读是一个综合过程,阅读能力的提高更是一个循序渐进的过程。学生只有坚持不懈,锲而不舍地改进阅读方法,培养阅读兴趣,才能达到事半功倍的效果。
影响阅读理解的因素可分为知识性障碍和非知识性障碍。知识性障碍包括:1.词汇障碍2..语法障碍 3.背景知识障碍 。非知识性障碍包括:1. 心理障碍 2.阅读习惯. 3..阅读速度4.阅读技巧
(一)重视英语词汇和习惯用法的积累
美国语言学家Driller (1978)根据词汇统计特征指出:如果我们认得25个最常见的英文单词,平均每页纸上的词我们会认得33%;如果认得135个常用词,则为50%;如果认得2500个,则为78%;如果认得5 000个,则为80%;一旦记得10 000个,可达92%。可见,阅读能力的高低和词汇量的大小是分不开的,目前大部分学生的词汇量偏少, 这是影响阅读能力提高的主要因素。那么怎样才能提高学生的词汇量呢?
1. 构词记忆法
据估计,英语词汇有100万到120万,但大部分单词是由构词法构成的。构词法包括派生、合成和转化。在教学中,让学生掌握常用的前缀(un/dis/im/il /super.)、后缀( ly/ less/ ful/ ment…)的含义及用法,就可以根据已知词猜出它的派生词,从而达到扩大词汇的目的。如:前缀super 有超过,超越的含义,就可以猜出supermarket (超级市场)supernatural (超自然的)、 superman (超人)、superstar (超级明星)等词的含义。。
2. 联想记忆法
由一个词联想到和它有关或无关的词,如看到live vi 生活,联想到其他词性及用法,如,直播的、活的等词义。
3. 广泛阅读记忆法
“To read well, you need a strong vocabulary.. To build a strong vocabulary, you need to read well.” 这句名言道出了阅读和词汇量的关系。要有流利的阅读,就必须有丰富的词汇。大量的阅读可以丰富你的词汇。
(二) 牢固掌握语法知识
近年来的NMET阅读理解短文的句式结构趋向复杂,语法知识在阅读中的作用已经突显出来。如在阅读中遇到另人费解的长句、难句,就可以借助语法,对句子进行适当的分析,搞清各部分的关系,从而准确理解整句的意思。以Decision-thinking is not unlike poker-it often matters not only what you think, but also what others think you think and what you think they think you think.(NMET 2000) 为例。该句的29个词中包含了主语从句,宾语从句、并列句和破折号连接的附加说明等多种关系。其中并列句中又有复合句,复合句中又有并列句。只有把句子的成分一一理清,才能掌握其意思。
(三)、积累一定的文化背景知识和生活知识
英语阅读能力的提高不仅需要一定的语言知识,还要有一定的文化背景知识和生活知识。例如在NMET2003的阅读理解A篇,该篇选材涉及地理,介绍了两座farthest/ most distant inhabited islands,一个为Guinness Book of Records 所认定的Tristan da Cunha;另一为复活岛(Easter Island)文章中出现了较多的专有名词,对于阅读经验不足的同学会形成干扰,而对于那些对Easter Day 等背景知识了解的同学,相对就会好些。另外在C篇中,出现了书刊号,如果熟悉这些,就会减少好多阅读困难。
(四)培养良好的阅读习惯,掌握有效的阅读技巧
要养成良好的阅读习惯,就要求平时多朗读,背诵精彩段落和文章,以培养语感。另外,有的同学在阅读时出声读、点读或回读,这些不良习惯都会影响阅读速度和对文章的理解。所以要克服这些不良习惯,作到不回读,不声读,不点读等。只有这样,阅读速度才能加快,理解的准确率才能提高。
除了良好的阅读习惯外,也要掌握正确的阅读技巧。教师要指导学生形成正确的思维方法。一般阅读时应注意以下几点:
1、略读(Skimming)即迅速浏览全文,抓住文章大意和主题句,明确作者的态度和意图。
2、跳读(Skipping) 即快速查找某一相关信息,读时要一目十行,对不相关的内容一带而过。
3、猜测生词(Guessing the new words) 在阅读过程中,不可避免的会遇到生词。如果一遇到生词就去查字典,或跳过去不看,都会影响对文章的理解。这样就要猜测生词的意思。不同的语境,单词的意思也就不一样。所以要根据上下文线索和构词法等知识去猜测。
“冰冻三尺,非一日之寒” 提高阅读能力,不是一朝一夕就能做到的。只要坚持正确的阅读方法,培养兴趣,广泛阅读,积累词汇,并且养成良好的阅读习惯,阅读理解能力一定会逐步提高。
英语阅读理解技巧
新的高中英语教学大纲明确规定:"侧重提高阅读能力"。纵观近几年的高考英语试题,我们不难看出,阅读理解能力是高考考查的重点,自始至终占着主导地位,并且有逐年增加的趋势。可以毫不夸张地说,做好阅读理解题,是获得高考英语高分的关键!
阅读理解能力测试的主要要求是:
1. 读材料的主旨和大意,以及用以说明主旨和大意的事实和细节。
2. 既理解具体的事实,也理解抽象的概念。
3. 既理解字面的意思,也理解深层的含义,包括作者的态度,意图等。
4. 既理解某句,某段的含义,也理解全篇的逻辑关系,并据此进行推理和判断。
5. 既能根据所提供的信息去理解,也能结合中学生应有的常识去理解。根据这五项要求,我们可将阅读理解多项选择题归纳为以下几种题型:细节理解题,词句理解题,主题、主旨题,猜测词义题,推理判断题。下面作者结合平时教学中的经验体会,谈一谈做英语阅读理解题的技巧与策略。
一、 先看题干,带着问题读文章。
即先看试题,再读文章。阅读题干,首先要掌握问题的类型,分清是客观信息题还是主观判断题。客观信息题可以从文章中直接找到答案;而主观判断题考查的是对文章的感情基调,作者未加陈述的观点以及贯穿全文的中心主旨的理解等,这类题必须经过对作者的态度、意图以及对整篇文章进行深一层的推理等。其次,了解试题题干以及各个选项所包含的信息,然后有针对性地对文章进行扫读,对有关信息进行快速定位,再将相关信息进行整合、甄别、分析、对比,有根有据地排除干扰项,选出正确答案。此法加强了阅读的针对性,提高了做题的准确率,节省了宝贵的时间。特别适用于对图形表格类题材的理解。
二、 速读全文,了解大意知主题。
阅读的目的是获取信息。一个人的阅读能力的高低决定了他能否快速高效吸收有用信息。阅读能力一般指阅读速度和理解能力两个方面。阅读速度是阅读最基本的能力。没有一定的阅读速度就不能顺利地输入信息,更谈不上运用英语。近几年的高考阅读速度大约是每分钟40个词左右。考生必须在十分有限的时间内运用略读、扫读、跳读等技巧快速阅读,搜寻关键词、主题句,捕捉时空、顺序、情节、人物、观点,并且理清文章脉络,把握语篇实质。
抓主题句这是快速掌握文章大意的主要方法。主题句一般出现在文章的开头和结尾。用归纳法撰写的文章,都是表述细节的句子在前,概述性的句子居后。此时主题句就是文章的最后一句。通常用演绎法撰写的文章,大都遵循从一般到个别的写作程序,即从概述开始,随之辅以细说。这时,主题句就是文章的第一句。当然也有些文章没有主题句,需要读者自己去归纳。主题句往往对全文起提示、启迪、概括、归纳之作用,主旨大意题,归纳概括题,中心思想题往往直接可从主题句中找到答案。
试试看,你能找出下面一段文章的主题句吗?
The panda is a popular animal. Stories about the panda in the Washington Zoo are always front page news and important features on television newscasts. Stuffed pandas are among the most popular toys for children, and panda postcards are always in demand in zoo gift shops.
不难看出,文章的第一句是主题句,后面的句子都围绕这个句子展开。
三、 详读细节,理顺思路与文章脉络。
文章绝不是互不相干的句子杂乱无章的堆砌。作者为文,有脉可循。如记叙文多以人物为中心,以时间或空间为线索,按事件的发生、发展、结局展开故事;论述体则包含论点、论据、结论三大要素,通过解释、举例来阐述观点。你可根据文章的特点,详读细节,以动词、时间、地点、事件、因果等为线索,找出关键词语,运用"画图列表法",勾画出一幅完整清晰的文章主题和细节的认知图。
四、 逻辑推理,做好深层理解题。
在实际阅读中,有时作者并未把意图说出来,阅读者要根据字面意思,通过语篇逻辑关系,研究细节的暗示,推敲作者的态度,理解文章的寓义。这就是通常所说的深层理解。深层理解主要包括归纳概括题(中心思想,加标题等)和推理判断题,是阅读理解中的难点。深层理解是一种创造性的思维活动。它必须忠实于原文;要以文章提供的事实和线索为依据,立足已知推断未知,不能凭空想象,随意揣测;它要求读者对文字的表面信息进行分析、挖掘和逻辑推理,不能就事论事,以偏概全。只有吃透文章的字面意思,推理才有前提和基础。
推理题在提问中常用的词有:infer, imply, suggest, indicate等。
例如高考题:
Annealing
Annealing is a way of making metal softer by heating it and then letting it cool very slowly. If metal is heated and then cooled very quickly, for example by dipping (浸) it in water, it will be very hard but also very brittle-that is, it will break easily. Metal that has been annealed is soft but does not break as easily. It is possible to make metal as hard or as soft as it is wished, by annealing it. The metal is heated, and allowed to cool slowly for a certain length of time. The longer the heated metal takes to cool slowly, the softer it becomes. Annealing can also be used on other material, such as glass.
1. Why do people put hot metal in water?
A. To make it hard. B. To make it soft.
C. To make it cool. D. To make it brittle.
2. In annealing, the required hardness of metal depends on __.
A. the quantity of water used B. the temperature of the metal
C. the softness of the metal D. the timing of the operation
3. As suggested by the text, how can glass be made less brittle?
A. It can be heated and then cooled quickly.
B. It can be cooled and then heated slowly.
C. It can be heated and then cooled slowly.
D. It can be cooled and then heated quickly.
1、 答案为A,此题属推断归纳题。文中第二句说如果把金属加热,然后迅速放到水里冷却,也就会变得非常硬,但也变得脆。hard 是工艺的主观目的。brittle是伴随的客观结果,故选A而不选D。B项明显错误;C项是手段不是目的,因此,都可排除。
2、 答案为D,此题属概括归纳题。timing 是时间的选择。本答案的依据是5和6两句,"The metal is heated,…length of time.","The longer…the softer it becomes."cool 的时间是可以控制的,时间越长越 soft,即硬度就越低。由此我们可得出结论:在退火过程中,金属的硬度是受到冷却的时间长短影响的。
3、 答案为C此题属推理判断题。文中提到"metal"。最后一句说退火工艺同样可用于象玻璃一类的其他材料。文中我们已知"annealing"就是先"heat"后"cool slowly"。由此推断C是正确的。
五、 猜词悟义,扫除阅读拦路虎。
猜词是应用英语的重要能力,也是高考中常用的题型。它不但需要准确无误地理解上下文,而且要有较大的泛读量,掌握或认识较多的课外词汇。我们要学会"顺藤摸瓜",通过构词,语法,定义,同位,对比,因果,常识,上下文等线索确定词义。
a. 定义法
如:Annealing is a way of making metal softer by heating it and then letting it cool very slowly.
句子给予annealing 以明确的定义,即"退火"。
It will be very hard but also very brittle------that is , it will break easily.
从后面的解释中我们可以了解到brittle 是"脆"的意思。
The herdsman , who looks after sheep,earns about 650yuan a year.
定语从句中 looks after sheep 就表明了 herdsman 的词义为"牧人"。
b 同位法
如:
They traveled a long way , at last got to a castle, a large building in old times.
同位语部分a large building in old times 给出了 castle 的确切词义,即"城堡"。
We are on the night shift----from midnight to 8 a.m.---this week.
两个破折号之间的短语很清楚地表明night shift 是"夜班"的意思。
c. 对比法
She is usually prompt for all her class, but today she arrived in the middle of her first class.
but 一词表转折,因此but 前后的意思正相反。后半句的意思是她今天"第一节上了一半才来",因此反向推理,可得出她平时一向"准时"的结论。
d. 构词法(前缀、后缀、复合、派生等)
Perhaps, we can see some possibilities for next fifty years. But the next hundred?
possibility 是 possible 的同根名词, 据此可以判断定 possibility 意思是"可能性"。
e. 因果法
The lack of movement caused the muscles to weaken。Sometimes the weakness was permanent。So the player could never play the sport again.
从后面的结果"永远不能再运动"中,可以推测 permanent
参考资料:http://..com/question/1805973.html
⑶ 博微历史软件后缀
题主是否询问的是“博微历史软件后缀是什么”.bwproj。根据查询博微官网显示,博微历史软件的后缀为.bwproj,.bwproj文件包含了博微历史软件项目的所有信息,用户可通过该文件打开项目,继续编辑或分享给其他用户进行协作。
⑷ mac自带的svn怎么请求windows下的svn的代码
1、Xcode4中苹果有自带的SVN软件------>Organizer------>Repositories 2、SVN checkout到本地后,删除本地file,对服务器有影响吗? 不会影响服务器,当你执行“svn update”时会zai再次被自动下载;当删除后再执行“svn commit”就会在服务器上也对应删除。 3、连接服务器 点击file-》repositories-》点击坐下边的“+”-》然后名字及svn服务器的地址,还有type选中subversion然后next等等了。 4、Xcode4下,SVN中常用命令 Commit 提交 checkout 将服务器上下载到本地(我个正在使用的电脑) update 更新文件 File------->SourceController------->update 图片中第3个按钮,是视图对比按钮. 5、SVN中用法详解和注意事项 ①提交自己的代码 SVN更新的原则是要及时更新,及时提交。当完成了一个小功能,能够通过编译并且并且自己测试之后,尽量早的提交,这样也保存了历史版本,必要时候可以回滚;在开始一天的工作之前,最后update一下项目。 ②保持原子提交(不要不经意间修改并提交了别人的文件) 仅提交你修改的部分,最好不要一下子将整个项目提交; 当完成一个功能或文件后,最好提交。我就遇到完成某个功能后,没有提交,后来又做了更改,结果代码出现bug,无法恢复到正常时的代码。 ③不要提交自动生成的文件 VisualStudio等开发工具在生成过程中会产生很多自动文件,如.suo等配置文件,Debug,Release,Obj等编译文件,以及其他的一些自动生成,同编译代码无关的文件,这些文件在提交的时候不应该签入,如果不小心签入了,需要从仓库中删除。 ④不要提交不能通过编译的代码 代码在提交之前,首先要确认自己能够在本地编译。进行SVN提交更新时最好是代码在提交前已经通过自己的测试。 SVN中常用命令详解 1、将文件checkout到本地目录 svn checkout path(path是服务器上的目录) 例如:svn checkout svn://192.168.1.1/pro/domain 2、往版本库中添加新的文件 svn add file 例如:svn add test.php(添加test.php) 3、删除文件 svn delete path -m “delete test fle“ 例如:svn delete svn://192.168.1.1/pro/domain/test.php -m “delete testfile” 4、查看日志 svn log path 5、比较差异 svn diff path(将修改的文件与基础版本比较) 6、将两个版本之间的差异合并到当前文件 svn merge -r m:n path SVN使用方法 更新(update),经常地update没有坏处,特别是多人项目中。如果每次提交(commit)前不进行更新(update)的到最新的版本的话,svn会提示当前的拷贝过期,需要更新。 提交(commit),一定要写上这次提交的内容的摘要,便于以后查阅。 将文件checkout到本地目录 svn checkout path(path是服务器上的目录) svn update命令自动用服务器上的版本替换本地版本控制的文件 6、Xcode中使用SVN问题以及提交解决冲突问题 Xcode的SVN功能,和Eclipse中的subclipse或者windows下的tortoiseSVN比较起来功能还差很多。 我是索性不用的,直接用命令行。我看有的朋友是用subclipse,其实也挺好,不过,为了使用SVN功能要单独开一个耗费资源的Eclipse。 但是,不论使用什么SVN工具,都会遇到Xcode固有的问题,即project.pbxproj文件的提交冲突问题。 project.pbxproj文件里面包含了构建过程所需的所有文件,如果你在项目目录下增加了新文件,比如没有通过Xcode,该文件就不在project.pbxproj文件中,就不会生成到app中。同理,如果你从SVN中更新到其他项目成员增加的文件,而没有更新project.pbxproj文件(或者该成员根本就没有提交这个文件),则也会出现相同的现象。 如果项目成员提交了新的project.pbxproj文件,你这边没有在项目中增加新的文件,直接svn update就可以了。 7、Xcode中更新代码后项目文件打不开 若选择更新整个项目经常会出现冲突问题,尤其是project.pbxproj文件。此文件包含了构建过程所需的所有文件,如果在项目目录下增加了新文件,但没有通过Xcode, 该文件就不在project.pbxproj文件中,就不会生成到app中。同理,如果从SVN中更新到其他项目成员增加的文件, 而没有更新project.pbxproj文件(或者该成员根本就没有提交这个文件),则也会出现相同的现象。这一文件冲突将直接导致项目文件打不开。 解决更新代码后打不开项目文件方法: 当项目文件如tobacco.xcodeproj打不开时可以右键选择'显示包内容',会看到有三个文件,project.pbxproj/user.modelv3/user.pbxuser。 其中project.pbxproj有三个版本,和解决普通svn文件冲突一样解决冲突即可。 8、SVN 更新 提交 合并 区别 当本地文件没有改动,服务器文件改动的时候,更新会从服务器取文件覆盖当前文件 当本地文件有改动,服务器文件没改动的话,不会更新此文件 当本地文件有改动,服务器文件有改动的话,如果改动的部分不冲突,就会合并文件到本地,如果有冲突的话,会提示文件冲突,需要自己手动修改以后上传到服务器。 最后一个讲解合并: 服务器和本地的同一个文件(所谓同一个文件应该就是SVN相对路径相同,文件名相同的文件,这个由SVN留在本地的信息决定)已经修改,且修改的部分不重合,不重叠 当满足上面的条件的时候再更新,SVN就会自动合并 SVN的奥妙之处就在于别人提交了修改后的文件,你再提交你的话,他是不允许你提交滴。。。 >>>> <<< 里面标记的是冲突的区域,把冲突区域删除掉为什么还不能提交 解决办法1: 删掉的话还是没有解决冲突,文件后面还会有几个文件名相同,但是后缀不同的文件 如果你不知道用SVN解决冲突的话,最简单的办法是这样的 把这个文件改名字,然后在文件所在目录更新,这样就会把服务器文件下下来,然后把自己修改的部分添加到更新的文件里面,这样就可以提交了 解决办法2: 在文件上面点击右键,到SVN的菜单,应该有编辑冲突的按钮,选择就会出现一个窗口,一边是服务器版本,一边是自己修改的版本 。 9、xcode自带svn的使用 1、代码中 某文件后面有 “M” 标记,表示该文件已被修改,需要 commit. (右键该文件 -> source control -> commit selected file...) 2、代码中 某文件后面有 “A” 标记,表示该文件是新添加的,已受SVN管理,需要 commit. (右键该文件 -> source control -> commit selected file...) 3、代码中 某文件后面有 “?” 标记,表示该文件是新添加的,并且脱离了SVN的管理,首先需要add,然后 commit. (右键该文件 -> source control -> Add,这样该文件的标记就变为 “A”,然后在 commit).
⑸ java如何根据word模板生成word文档
首先是action的createDoc方法:
[java]
/**
* 通过HttpCient调用报告服务器的方法生成报告 DOC
*/
public String createDoc() throws Exception {
//定义放回成功与否的判断码
String prMsg="";
// 获取当前登录的用户
UserVo userVo = CommonUtils.getUserMessage();
//获取模版类型
docType = Struts2Utils.getParameter("docType");
//重新创建文档
String creatOrnot = Struts2Utils.getParameter("creatOrnot");
//获取组组编号参数
workgroupId = Struts2Utils.getParameter("workgroupId");
//获取评估用例实例ID参数
evtcaseInstId = Struts2Utils.getParameter("evtcaseInstId");
if(CommonUtils.isNotNull(docType)){
//获取项目Id
projectId = Struts2Utils.getParameter("projectId");
if(!CommonUtils.isNotNull(projectId)){
if(CommonUtils.isNotNull(this.getIdFromSession("PM_PROJECTID"))){
projectId = this.getIdFromSession("PM_PROJECTID").toString();
}else{
Struts2Utils.getRequest().setAttribute("msg", "请先选择项目!");
}
}
if(CommonUtils.isNotNull(projectId)){
prMsg = infoSystemDescService.downloadFileByUrl(projectId, userVo.getUserId(), workgroupId, evtcaseInstId, docType, creatOrnot);
}
}
return "docList";
}
注:在我贴出来的代码中,能看懂就行了,有些不用管他(可能是其他业务方面的判断),关于最后返回的prMsg---代表各种状态 主要表示成功与否或者是出错的信息。
接着我贴出service层的方法downloadFileByUrl
[java]
</pre><p></p><p></p><pre name="code" class="java"><pre name="code" class="java">/**
* 功能:
* 1.(生成报告文档)
* 2.保存指定URL的源文件到指定路径下
* @param projectId
* @param userId
* @param workgroupId
* @param evtcaseInstId
* @param docType
* @param creatOrnot
* @return
* @throws Exception
*/
@SuppressWarnings("deprecation")
public synchronized String downloadFileByUrl(String projectId,String userId,String workgroupId,String evtcaseInstId,String docType,String creatOrnot) throws Exception {
String msg = "1";//"1":默认为创建成功的提示信息 "2":标识创建失败
String srcUrl = ""; //报告服务器的执行路径
HttpResponse response = null;
FileOutputStream out = null;
HttpClient httpclient = null;
HttpGet httpget = null;
long time1 = System.currentTimeMillis();
//获取保存后的路径
TProjDoc projDoc = projectDocDao.findFileByType(userId, Integer.parseInt(docType), Long.parseLong(projectId), workgroupId,evtcaseInstId);
if(projDoc == null || (projDoc != null && CommonUtils.isNotNull(creatOrnot) && creatOrnot.equals("1"))){ //FT_任务编号_[FID]
try {
//获取报告服务器的执行路径
srcUrl = xmlPathDef.getActionUrl(docType, projectId,userId,workgroupId,evtcaseInstId);
HttpParams httpParams = new BasicHttpParams();
// 设置最大连接数
ConnManagerParams.setMaxTotalConnections(httpParams, 1);
// 设置获取连接的最大等待时间
//ConnManagerParams.setTimeout(httpParams, 6000);
// 设置每个路由最大连接数
ConnPerRouteBean connPerRoute = new ConnPerRouteBean(1);
ConnManagerParams.setMaxConnectionsPerRoute(httpParams,connPerRoute);
// 设置连接超时时间
HttpConnectionParams.setConnectionTimeout(httpParams, 6000);
// 设置读取超时时间
if(docType.toString().equals(XmlPathDef.SPOTTEST_DOC) && docType.toString().equals(XmlPathDef.FTEST_DOC)){
HttpConnectionParams.setSoTimeout(httpParams, 2400000);
}else{
HttpConnectionParams.setSoTimeout(httpParams, 600000);
}
SchemeRegistry registry = new SchemeRegistry();
registry.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80));
registry.register(new Scheme("https", SSLSocketFactory.getSocketFactory(), 443));
ClientConnectionManager connectionManager = new ThreadSafeClientConnManager(httpParams, registry);
httpclient = new DefaultHttpClient(connectionManager, httpParams);
httpget = new HttpGet(srcUrl);
//执行返回
response = httpclient.execute(httpget);
//如果是本机既当服务器,又当报表服务器,那么就只生成一遍
String ipvalues = xmlPathDef.getRepUrl();
if(CommonUtils.isNotNull(ipvalues)){
if(ipvalues.indexOf(":") != -1){
ipvalues = ipvalues.substring(0,ipvalues.lastIndexOf(":"));
}
}
HttpEntity entity = response.getEntity();
//获取保存后的路径
projDoc = projectDocDao.findFileByType(userId,Integer.parseInt(docType), Long.parseLong(projectId), workgroupId,evtcaseInstId);
String filePath = "";
if(projDoc != null)
filePath = projDoc.getPath();
if(CommonUtils.isNotNull(filePath)){
String basepath = XmlPathDef.getBasePath();
String outFilePath = (basepath + filePath).replaceAll("\\\\", "\\/");
XmlPathDef.isExists(outFilePath);
File wdFile = new File(outFilePath);
out = new FileOutputStream(wdFile);
int l;
byte[] tmp = new byte[2048];
while ((l = instream.read(tmp)) != -1) {
out.write(tmp, 0, l);
}
out.flush();
out.close();
System.out.println("****************************** ");
System.out.println("");
System.out.println("*************** 恭喜! 报告创建成功 结束 ***************");
System.out.println("");
}else{
msg = "8";//说明word创建成功,但是数据没有保存成功
response = null;
}
}else{
msg = "2";
}
} catch (ClientProtocolException e) {
msg = "7";
e.printStackTrace();
} catch (IOException e) {
msg = "7";
logger.error("数据库报告服务器地址配置错误或网络不通!!2.连接是否超时" + e.getMessage());
e.printStackTrace();
}finally{
if(out!=null){
try {
out.close();
} catch (IOException e) {
msg = "7";
logger.error("数据库报告服务器地址配置错误或网络不通!!2.连接是否超时" + e.getMessage());
e.printStackTrace();
}
}
}
}
long time2 = System.currentTimeMillis();
long numTime = time2 - time1;
if(docType.toString().equals(XmlPathDef.SPOTTEST_DOC) && docType.toString().equals(XmlPathDef.FTEST_DOC)){
if(numTime >= 2401000){
msg = "9";
}
}else{
if(numTime >= 601000){
msg = "9";
}
}
System.out.println("");
String loggerinfo = "********* 报告类型为 :" + docType + " 执行时间为: " + (time2 - time1) /1000 + " 秒!***************";
System.out.println(loggerinfo);
System.out.println("");
System.out.println("*****************************");
logger.info(loggerinfo);
return msg;
}