2010年12月26日 星期日

JSP 教學 - 讀取HTML並輸出至網頁及亂碼處理

問題描述:
在部落格的自動建站中,如果使用者需要申請並建立部落格,可以將已經寫好的HTML
進行讀取並替換標籤的元素或是樣式等,並寫成一個 JSP 檔案,供使用者在網頁上瀏覽

首先先必須準備好你的HTML樣板並建立一個專們處理上述問題的類別

在使用者建立之後在後台進行呼叫,以下為 HomePageReplace.java
//import the class that you need...
public class HomePageReplace
{
    private HttpSession sess;
    private HttpServletRequest request;

    public HomePageReplace(){}
    //傳入HttpServletRequest及HttpSession 以便取得相關參數或路徑....等
    public HomePageReplace(HttpSession sess, HttpServletRequest request){
        //this.realPath = realPath;
        this.sess = sess;
        this.request = request;
    }
    //......some method

2010年12月24日 星期五

JSP 教學 - 文字段行

最近在寫部落格的模組,能讓使用者建立屬於自己的部落格

其中遇到一個問題就是如果使用者在撰寫文章時按下 Enter 鍵時,代表換行的意思

只是從後台的程式並無直接能夠知道使用者在哪邊有斷行

造成整篇文章幾乎都連在一起,以下介紹一下如何解決斷行已及偵測按下 Enter 的方法

斷行的問題在後台(例如: servlet) 可以先透過

String content = request.getParameter("參數");


content = content.replaceAll("\n", "<br />");

2010年12月22日 星期三

【C語言】Stack 堆疊實做

堆疊 .... 具有先進後出的特性,通常將資料放入推疊叫做 PUSH而將資料由堆疊中取出叫做 POP
在這邊分享一下我實做堆疊的程式


程式的實做有分三種,最簡單的是直接使用陣列製作,另一種是使用鏈結串列


而我以下的程式是以實做出 Stack (透過 struct )的方法實做堆疊的操作,如下

#define MAX_STACK_SIZE 10

typedef struct {
    int element[MAX_STACK_SIZE];
    int top;
}Stack;
//宣告 : Stack s;


以下為程式實做部份:

2010年12月21日 星期二

【C語言】二元搜尋樹的刪除實作

要考研究所,加上又是資結組的,所以無聊就來寫個.....二元搜尋樹的刪除吧

因為在書上都沒看過這類的實做,所以就實做一個吧

在刪除Binary Search Tree的某節點時,如果刪除的是樹葉節點 (Leaf) 就直接刪除

如果為非樹葉結點時 (non-Leaf) 時,就須以該刪除點為基準以左子數最大或是右子樹最小取代

以下程式的實作中,我統一以左子樹中最大的來取代刪除的點

在製作過程中較困難也最重要的是如果刪除該點後以左子樹最大取代

取代被刪除的點之後,左子樹最大的點及其父親節點和其而子結點該如何處理?

左圖為以下程式範例所建立的二元搜尋樹

以刪除20為例,程式會以左邊最大的節點15

去代 20。

2010年12月16日 星期四

十六進制轉八進制使用 C#

16進制轉成8進制,可以透過C# 的內建函數解決 Convert.toString()

如果想要實做的話就先了解如何轉換,首先 16 進制顧名思義就是遇到16就進位

所以可以表示的範圍為1 ~ 15, 但是10 ~ 15 以 A ~ F 取代

以下範例 先將 16 轉成 2 進制 > 針對每個16進制的數字 拆解成4個位元以表示2進制

 F > 1111 , 8 > 1000

最後再將 2 進制轉成 8 進制 > 針對二進位中從尾巴開始數每三個數字及組合成一個8進制數字
如果不足及補零

10101100 每三個分隔 > 10|101|100 > 不足則補零 > 010|101|100 > 轉8進制 > 254

以下為程式實做

2010年12月15日 星期三

2010年12月11日 星期六

Java 程式 - 螺旋矩陣

問題描述 :
螺旋矩陣是一個短陣,其中每個cell都填滿整數,且每個整數以螺旋的方式排列。

下圖為二個size = 8的螺旋矩陣。圖(a),數字由1開始,以逆時鐘的方向,螺旋狀地往中心排列。

而圖(b)則是一個順時鐘的螺旋矩陣,和圖(a)不一樣之處在於其數字的旋轉方向為順時鐘旋轉。


輸入說明:

輸入為一行字串,包含了兩個數值,每個數值以逗點隔開。
第一個數值為size,其值介於1到30間(i.e., 1 <= size <= 30)。
第二個數值為方向,1為順時鐘方向,2為逆時鐘方向。

2010年12月9日 星期四

JSP 教學 - 檔案下載

關於檔案下載,以下就直接以一個範例來下載一個檔案

當然這只是個最簡單的範例,其餘應用就靠各位自己發揮吧

首先在 JSP 或 HTML 可以用一個連結或是 form 請求後進入後台處理

以下為我以 C 槽的檔案進行下載
package fsc.regLogIdent.controller;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class getFile extends HttpServlet
{
    public void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException
    {
        java.io.File file = new java.io.File("C:\\bike_up.jpg");  //建立需下載檔案的 File 物件
        long length = file.length();   //取出該檔案長度
        java.io.FileInputStream fi = new java.io.FileInputStream(file);   //建立該檔案的輸入串流
        //取得客戶端的輸出流, 這邊以 OutputStream 為輸入串流的物件
        java.io.OutputStream os = response.getOutputStream();   
        //設定 response 封包中的標頭
        response.setHeader("Content-Disposition", "attachment; filename=" + "bike_up.jpg"); 
        //設定欲下載檔案的 ContentType
        response.setContentType("image/jpeg");
        //設定該檔案的長度
        response.setHeader("Content_Length", Long.toString(length));
        int r = 0;
        //將檔案讀入 FileInputStream  並寫入 OutputStream
        while((r =  fi.read()) != -1)
        {
            os.write(r);
        }
        os.close();
        fi.close();
    } 
}

2010年12月4日 星期六

JSP 教學 - 多檔上傳

前一篇介紹了檔案上傳,但是只能一次上傳一個檔案

而且做法是簡單說就是邊讀傳流的資料邊判斷編寫入,過程其實不好控制,也複雜

更重要的是也很難實現多檔上傳,所以那個方法並非非常理想,但也是個選擇

而這篇介紹的多檔上傳就是一次把串流的資料讀完再去做分檔即寫入的動作

還記得上傳的本文內容吧,以下來看看如果是多檔上傳時他的本文內容是啥樣子


------WebKitFormBoundaryGq7bBR8Pb4HYPKfp
Content-Disposition: form-data; name="uploadFile"; filename="m.txt"
Content-Type: text/plain

內容一內容一內容一內容一
 ------WebKitFormBoundaryGq7bBR8Pb4HYPKfp
Content-Disposition: form-data; name="uploadFile"; filename="m1.txt"
Content-Type: text/plain

內容二內容二內容二內容二
------WebKitFormBoundaryGq7bBR8Pb4HYPKfp--