⑴ 怎麼還原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;
}