2014年3月28日 星期五

Linux - Crontab - 手動正常排程失敗

重點應該在Crontab執行SH檔案跟直接使用root執行還是有些許差異,
在於【系統環境】的配置不同,找了許多文章都教導:
 1.使用絕對路徑。
   2.使用前先執行/etc/profile系統配置檔案。
而我遇到的問題是Tomcat引入的環境變數編碼不同,造成原本正常的中文字都變亂碼
手動執行引入的編碼是UTF-8
排程執行引入的編碼卻是ANSI_X3.4-1968

所以解決方式就是在SH檔案的開頭加入。
#!/bin/ksh
source /etc/profile


2014年3月14日 星期五

Shell Script 指令置換 (命令替換)

` 反引號、 $(command) 皆可以用來做指令置換 (命令替換),將反引號、 $(command) 中的字符串做為命令來執行,我們在用shell編程時經常用的到。將系統命令的執行結果賦給一個變量。

A=`date`
echo $A 顯示的不是date而是當時的時間串
比如有一文件A的內容如下
ABCDEFG
1234456
abcdefg

B=`cat A|grep 234` # 檢索文件A中含有字符串234的行
echo $B 將顯示為1234456
echo "$B" 將顯示為什麼?
echo "\$B" 將顯示為什麼?


String contains in Shell Script

string='My string';

if [[ $string == *My* ]]
then
  echo "It's there!";
fi

Linux 運用 date 指令取得日期時間


1. 取得今天的日期時間
date '+%Y%m%d%H%M%S'

2. 取得昨天的日期時間
date -d'-1 day' 或 date -d'1 day ago'

3. 取得明天的日期
date -d'1 day'

4. 取得上個月的日期
date -d'-1 month'

5. 取得上星期的日期
date -d'-1 week'



$ date --date="now"   // 現在時間

$ date --date="yesterday"  // 昨天

$ date --date="1 days ago"  // 昨天

$ date --date="3 days ago"  // 三天前

$ date --date="tomorrow" // 明天

$ date --date="1 days" // 明天

$ date --date="3 days" // 三天後

 

格式化輸出:

date [+format]

$ date +"%Y %m-%d, %H:%M"

2014年3月6日 星期四

Java Applet 開啟本地資料夾

Java Applet 簡介與範例可以參照 Wiki
http://zh.wikipedia.org/wiki/Java_applet

import java.applet.Applet;
import java.io.File;
import java.io.IOException;

public class OpenExplorer extends Applet {
/**

*/
private static final long serialVersionUID = 1L;

public void init() {
        //Execute a job on the event-dispatching thread; creating this applet's GUI.
String url = getParameter("filepath").replace("file:", "").replaceAll("\\\\|/", "\\"+System.getProperty("file.separator"));
System.out.println(getParameter("filepath"));
File f = new File(url);
String command = "";
if(!f.isDirectory()) command = "/select,";

        try {
Process p = new ProcessBuilder("explorer.exe", command + url).start();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
        
    }

}

2013年10月29日 星期二

Web Services 觀念


Web Services的起源
Web應用的巨大成功和不斷發展,使其滲透到商業領域和個人生活的各個方面。人們只要使用瀏覽器,就可以享受到各種各樣的Web服務,例如網上購物,網上交易,網 ​​絡遊戲,預定車票,網上聊天和交友等等。與此同時,由於Web技術所帶來的優勢(統一的客戶端和較好的維護性),使一些傳統的應用紛紛轉型到BS結構上。
然而,在發展中,逐步暴露了一些問題。所有這些Web頁面都是為人準備的,是讓人去閱讀,去輸入,去判斷。因此各 ​​種反映視覺效果的內容佔用了大量的網絡帶寬,例如各種圖片,字體信息,文字排版樣式等。而真正含有高價值的一些信息,被深深埋在這些顯示信息中,很難被其他應用和程序所使用。更重要的是,各種web服務之間缺少交互和通訊的機制。
程序之間的互相通訊很重要嗎?簡單舉一個例子。
假設你經常去國外出差,在你回國以後,第一件事就是費用報銷了。而你們公司有這樣的財務規定,所有的報銷款,都按報銷當天的外匯比價進行結算。因此在你填寫報銷單的時候必須先填寫每一筆在各個國家的花消,然後上網查出當天的外匯比價,填寫到報銷單上。剩下的事情也許不用你做了,你的報銷單填寫工具會自動進行換算和統計。
覺得有什麼不妥嗎?作為IT公司的員工,也許都有一個特點,計算機能做的事情,盡量要計算機去做。外匯比價的查詢可以讓計算機自動去做嘛!然而,讓你的程序自動去網頁上查找指定的外匯比價可不是一件容易的事。因為這些網頁是給人閱讀的, ​​人眼和大腦的反應速度有多快,它們可以從一整頁信息中快速定位到你所要的內容,而且無論網頁怎樣變化和改版都不會帶來太大的影響。而應用程序想要做同樣的事就差得太遠了。因此,現在需要的是專門為應用程序制定的Web服務。
隨著應用程序之間通訊的需求越來越大,這就需要製定統一的標準和協議。HP公司是最先提出這個觀點的公司,他們制定了有關 e-Speak”的標準來保證應用程序之間的交互,並聲稱將成為下一代Internet信息交互的標準。而隨後,MicroSoft意識到此計劃的美好前景,便推出了.Net戰略;IBM很快就發布了Web Services Toolkit(WSTK),和Web Services Development Environment(WSDE),申明對Web Services的全力支持。與此同時,Oracle也開發出自己的Dynamic Services,並和Oracle 8i Release 2集成在一起。在這以後,W3C統一制定了Web Services的各種標準。而SUN公司在宣布了自己的Web Services的框架以後,將Web Services的標準溶入J2EE的環境,使Web Services有了廣泛支持的基礎和平台。

Web Services的基本原理
Web Services是通過一系列標準和協議來保證程序之間的動態連接。其中最基本的協議包括:SOAP, WSDL, UDDI
·         SOAP: Simple Object Access Protocol”的縮寫,SOAP是消息傳遞的協議,它規定了Web Services之間是怎樣傳遞信息的。簡單的說,SOAP規定了:
1.
傳遞信息的格式為XML。這就使Web Services能夠在任何平台上,用任何語言進行實現。
2.
遠程物件方法調用的格式。規定了怎樣表示被調用對像以及調用的方法名稱和參數類型等。
3.
參數類型和XML格式之間的映射。這是因為,被調用的方法有時候需要傳遞一個複雜的參數,例如,一個Person物件。怎樣用XML來表示一個物件參數,也是SOAP所定義的範圍。
4.
異常處理以及其他的相關信息.
·         WSDL: Web Services Description Language”的縮寫.意如其名,WSDLWeb Services的定義語言。當你實現了某種服務的時候(,股票查詢服務),為了讓別的程序調用,你必須告訴大家你的服務的接口.例如,服務名稱,服務所在的機器名稱,監聽端口號,傳遞參數的類型,個數和順序,返回結果的類型等等.這樣別的應用程序才能調用你的服務。WSDL協議就是規定了有關Web Services描述的標準。
·         UDDI:Universal Description, Discovery, and Integration的縮寫。簡單說,UDDI用於集中存放和查找WSDL描述文件,起著目錄服務器的作用。

2013年10月18日 星期五

一些名詞簡易解釋


SDK(Software Develop Kit,軟件開發工具包):用於幫助開發人員的提高工作效率。各種不同類型的軟件開發,都可以有自己的 SDK。Windows 有 Windows SDK,DirectX 有 DirectX 9 SDK,.NET開發也有 Microsoft .NET Framework SDK。JAVA 開發也不含糊,也有自己的 Java SDK。

Java SDK(JDK):最早叫 Java Software Develop Kit,後來改名為 JDK,即 Java Develop Kit。JDK 作為 Java 開發工具包,主要用於構建在 Java 平台上運行的應用程序、Applet 和組件等。

JRE(Java Runtime Environment,Java 運行環境):也就是 Java 平台。所有的 Java 程序都要在 JRE 下才能運行。JDK 的工具也是 Java 程序,也需要 JRE 才能運行。為了保持 JDK 的獨立性和完整性,在 JDK 的安裝過程中,JRE 也是安裝的一部分。所以,在 JDK 的安裝目錄下有一個名為 jre 的目錄,用於存放 JRE 文件。

JVM(Java Virtual Machine,Java 虛擬機):是 JRE 的一部分。它是一個虛構出來的計算機,是通過在實際的計算機上仿真模擬各種計算機功能來實現的。JVM 有自己完善的硬件架構,如處理器、堆棧、寄存器等,還具有相應的指令系統。Java 語言最重要的特點就是跨平台運行。使用 JVM 就是為了支援與操作系統無關,實現跨平台。

另外還有幾個名詞需要解釋一下:
J2EE – Java 2 Enterprise Edition(企業版)
J2SE – Java 2 Standard Edition(Java2標準版)
J2ME – Java 2 Micro Edition(微型版)

J2EE、J2SE、J2ME 的概念區別
J2EE:Java 2 Enterprise Edition,是 Java 的一種企業版,用於企業級的應用服務開發。
J2SE:Java 2 Etandard Edition,是 Java 的標準版,用於標準的應用開發。
J2ME:Java 2 Micro Edition,是 Java 的微型版,常用於手機上的開發。

J2SE、J2EE、J2ME 是 java 針對不同的的使用來提供不同的服務,也就是提供不同類型的類庫。針對企業網應用的 J2EE(Java 2 Enterprise Edition)、針對普通 PC 應用的 J2SE(Java 2 Standard Edition)和針對嵌入式設備及消費類電器的 J2ME(Java 2 Micro Edition)三個版本,對於初學者,都是從 J2SE 入手的。

2005年6月,JavaOne大會召開,SUN公司公開Java SE 6。此時,Java的各種版本已經更名以取消其中的數字「2」:J2EE更名為Java EE, J2SE更名為Java SE,J2ME更名為Java ME。