在 Struts 架構下要實現檔案下載時,程式的 Action 不能實做 org.apache.struts.action.Action 介面
而是必須實做 org.apache.struts.actions.DownloadAction 並實現 getStreamInfo() method
如果你想要自行設定緩衝大小的話 你也可以覆寫 getBufferSize() method
而 Strust 預設的緩衝大小為 4096
接著來介紹兩種不同的做法來實現 Strust 的檔案下載 同樣都是 implements DownloadAction
1. FileStreamInfo
主要是針對主機上的檔案
2. ResourceStreamInfo
主要是針對你的 Web AP 的路徑下的檔案
以下個別來看看他的範例
2011年9月25日 星期日
2011年9月24日 星期六
【iText】建立 PDF 表格
這裡介紹一下如何運用 iText 這個套件來建立 PDF 檔中的表格
首先要先去下載 iText
目錄下有兩個 folder 一個是 iText 的 library 另一個是額外會用到的
在 extrajars 目錄下可以下載 iTextAsin 這個 JAR 檔 他能夠用來解決中文問題
完成配置之後就可以來建立一個簡單的 PDF 且內涵表格
也順帶說明如何解決中文文字的問題
首先要先去下載 iText
目錄下有兩個 folder 一個是 iText 的 library 另一個是額外會用到的
在 extrajars 目錄下可以下載 iTextAsin 這個 JAR 檔 他能夠用來解決中文問題
完成配置之後就可以來建立一個簡單的 PDF 且內涵表格
也順帶說明如何解決中文文字的問題
//設定 PDF 大小為 A4 樣式 Document document = new Document(PageSize.A4); // PDF_PATH 為你的 PDF 檔的輸出路徑/ PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(PDF_PATH)); PdfPTable table = new PdfPTable(2); //建立一個只有兩個欄位的表格 table.setWidthPercentage(100f); //設定表格寬 table.setWidths(new float[]{0.20f, 0.90f}); //課定這兩個欄位的比例大小 //中文字的解決 BaseFont bfChinese = BaseFont.createFont("c:\\windows\\fonts\\kaiu.ttf", "Identity-H", BaseFont.NOT_EMBEDDED); Font FontChinese = new Font(bfChinese, 12, Font.NORMAL); PdfPCell cell = new PdfPCell(); //建立一個儲存格 //透過 Paragraph 物件增加元素及指定編碼, 也可以直接存入字串 cell.addElement(new Paragraph("課程代碼", FontChinese)); table.addCell(cell); cell = new PdfPCell(); cell.addElement(new Paragraph("課程名稱", FontChinese)); table.addCell(cell); document.add(table); //將表格加入 PDF 檔案裡 document.close();
2011年9月23日 星期五
SQL Server 2005 遠端連線
如果要讓本機的 SQL server 連到外部的資料庫 就必須透過一些設定才能完成
首先 如果已經有安裝 SQL Server 2005 及 SQL Server Managerment Studio 的話就如下
首先先從開始 > 程式集 > SQL Server 2005 > 組態工具
並選擇 "服務與連接的介面區組態"
接著 展開左邊的 SQLEXPRESS > Database Engine > 點選遠端連線
並切換成 "使用 TCP/IP和具名的管道"
最後左邊區塊切回服務 點選暫停後再點選啟動 以重新啟動服務
接著再 從開始 > 程式集 > SQL Server 2005 > 組態管理員
並選擇左邊欄的 SQLEXPRESS 的通訊協定之後
在右方區塊對 "TCP/IP" 點選右鍵 > 內容
首先 如果已經有安裝 SQL Server 2005 及 SQL Server Managerment Studio 的話就如下
首先先從開始 > 程式集 > SQL Server 2005 > 組態工具
並選擇 "服務與連接的介面區組態"
接著 展開左邊的 SQLEXPRESS > Database Engine > 點選遠端連線
並切換成 "使用 TCP/IP和具名的管道"
最後左邊區塊切回服務 點選暫停後再點選啟動 以重新啟動服務
接著再 從開始 > 程式集 > SQL Server 2005 > 組態管理員
並選擇左邊欄的 SQLEXPRESS 的通訊協定之後
在右方區塊對 "TCP/IP" 點選右鍵 > 內容
2011年9月21日 星期三
SQL Server Managerment Studio 29506 錯誤
最近因為要弄某些需求 碰了我從來沒弄過的東西 "微軟"
好吧 問題來了只好做了 .....
首先我的環境是 Win 7 須架起 SQL Server 2005 的版本
這裡我選擇下載了 Microsoft SQL Server 2005 Express Edition Service Pack 3
記得沒錯的話 Win 7 需要安裝 Service Pack 3 以上的版本
至於載點在這裡 http://www.microsoft.com/download/en/details.aspx?id=15291
下載並安裝執行 完成後 我們需要一個看資料表和執行 SQL 的介面
這時候可以選擇安裝 SQL Server Managerment Studio Express 2005
SQL Server Managerment Studio Express 2005
如果再安裝時 如果出現 29506 的錯誤的話
那可以用以下的方法解決
1. 新建一個記事本 內容為
msiexec /i path\SQLServer2005_SSMSEE.msi
path 為你剛剛下載下來的安裝檔的路徑 ((檔名或許要換一下喔
最後將他另存成 .cmd 檔
2. 用系統管理員的身分執行該 .cmd 檔他就會開始安裝過程了
好吧 問題來了只好做了 .....
首先我的環境是 Win 7 須架起 SQL Server 2005 的版本
這裡我選擇下載了 Microsoft SQL Server 2005 Express Edition Service Pack 3
記得沒錯的話 Win 7 需要安裝 Service Pack 3 以上的版本
至於載點在這裡 http://www.microsoft.com/download/en/details.aspx?id=15291
下載並安裝執行 完成後 我們需要一個看資料表和執行 SQL 的介面
這時候可以選擇安裝 SQL Server Managerment Studio Express 2005
SQL Server Managerment Studio Express 2005
如果再安裝時 如果出現 29506 的錯誤的話
那可以用以下的方法解決
1. 新建一個記事本 內容為
msiexec /i path\SQLServer2005_SSMSEE.msi
path 為你剛剛下載下來的安裝檔的路徑 ((檔名或許要換一下喔
最後將他另存成 .cmd 檔
2. 用系統管理員的身分執行該 .cmd 檔他就會開始安裝過程了
2011年9月19日 星期一
Spring 教學 - Bean 的自動裝配
關於自動裝配在 Spring 中提供了一個規則來對 Bean 進行自動裝配
進而無須透過在 XML 顯式的方法進行設定,而 Spring IoC 容器會自動協調這個 Bean
之間的關連關係 一般而言有分為四種自動裝配的做法
1. byName
根據這個 Bean 的 id 值去對照物件的屬性名稱是否相同
通常較常用的是這個
2. byType
如果容器中存在一個與指定屬性型態相同的 Bean 如果相同就會自動裝配
如果有多個相同型態的 Bean 將會丟出例外
3. constructor
有點類似 byType,只是他是透過建構子的參數帶入而已
進而無須透過在 XML 顯式的方法進行設定,而 Spring IoC 容器會自動協調這個 Bean
之間的關連關係 一般而言有分為四種自動裝配的做法
1. byName
根據這個 Bean 的 id 值去對照物件的屬性名稱是否相同
通常較常用的是這個
2. byType
如果容器中存在一個與指定屬性型態相同的 Bean 如果相同就會自動裝配
如果有多個相同型態的 Bean 將會丟出例外
3. constructor
有點類似 byType,只是他是透過建構子的參數帶入而已
2011年9月17日 星期六
Spring 教學 - Bean 的基本裝配
針對前一篇 所述的 IoC
Spring IoC 設計的核心即是 Bean 容器
前一篇內容說到 我們會把所以實現 Car 介面的實作類別交由 Spring 管理
並由 Spring 來將不同種類的車子(BMW or Benz)注入給 Driver 這個類別
再來注入有兩種主要方法
1. Setter Injection 2. Constructor Injection
首先先來看看 第一種注入方法 程式如前一篇所示了 這邊不在多述
只提醒一點就是 要使用 Setter Injection 時,以此為例就需要再 Driver 類別內
替 car 這個 attribute 設定 getter/setter
直接看看 Bean 的配置檔如何進行
Spring IoC 設計的核心即是 Bean 容器
前一篇內容說到 我們會把所以實現 Car 介面的實作類別交由 Spring 管理
並由 Spring 來將不同種類的車子(BMW or Benz)注入給 Driver 這個類別
再來注入有兩種主要方法
1. Setter Injection 2. Constructor Injection
首先先來看看 第一種注入方法 程式如前一篇所示了 這邊不在多述
只提醒一點就是 要使用 Setter Injection 時,以此為例就需要再 Driver 類別內
替 car 這個 attribute 設定 getter/setter
直接看看 Bean 的配置檔如何進行
<bean id="bmw" class="org.BMW">
</bean>
<bean id="benz" class="org.Benz">
</bean>
<bean id="driver" class="org.Driver">
<property name="car">
<ref local="benz"/>
</property>
</bean>
2011年9月15日 星期四
Spring 教學 - IoC 的介紹
IoC 是 Spring 的核心,讓 Spring 能夠有效地整合 J2EE 個層級的物件
在物件的設計方面,讓各層物件的呼叫都面對 "介面" 當系統有一天需要進行變更時,
能夠大大減少對程式碼的修改 只需新增適當的新物見並修改 bean 的配置檔即可
而 IoC 的觀念即是 "控制反轉" 更進一步說 就是相依關係的轉移
例如以往的應用程式多半為 高層模組直接相依於低層模組
這樣會造成低層模組的變動必須修改高層模組的程式碼
加上高層模組多半為那些上頁邏輯的物件所組成的,其設計本應當具有重用性
也更不能依賴於低層的實現模組
回到前幾句的 "相依關係的轉移 "
可以這樣思考為 實現必須依賴於抽象,而不是抽象依賴於實現
假設 A 相依於 B 那麼代表了 B 擁有控制權,這樣我們需要轉移這種關係
讓控制權由實現的這方轉移到抽象的這方 使應用程式的元件獲得更多的可用性
以 IoC 來說,如果你以 Spring 容器的角度看它 即是 Don't call me,I'll call you
就是你不需要像容器要任何資源物件,容器會自動將它給你
在物件的設計方面,讓各層物件的呼叫都面對 "介面" 當系統有一天需要進行變更時,
能夠大大減少對程式碼的修改 只需新增適當的新物見並修改 bean 的配置檔即可
而 IoC 的觀念即是 "控制反轉" 更進一步說 就是相依關係的轉移
例如以往的應用程式多半為 高層模組直接相依於低層模組
這樣會造成低層模組的變動必須修改高層模組的程式碼
加上高層模組多半為那些上頁邏輯的物件所組成的,其設計本應當具有重用性
也更不能依賴於低層的實現模組
回到前幾句的 "相依關係的轉移 "
可以這樣思考為 實現必須依賴於抽象,而不是抽象依賴於實現
假設 A 相依於 B 那麼代表了 B 擁有控制權,這樣我們需要轉移這種關係
讓控制權由實現的這方轉移到抽象的這方 使應用程式的元件獲得更多的可用性
以 IoC 來說,如果你以 Spring 容器的角度看它 即是 Don't call me,I'll call you
就是你不需要像容器要任何資源物件,容器會自動將它給你
訂閱:
文章 (Atom)