顯示具有 JSP 標籤的文章。 顯示所有文章
顯示具有 JSP 標籤的文章。 顯示所有文章

2011年5月19日 星期四

【Java Web】commons-fileUpload 使用方法

說到檔案上傳,可以直接採用讀取串流的方式,例如之前的文章 檔案上傳多檔上傳

以上兩篇文章都是用擷取串流的方式,不過做法不同,如果要採用的話盡量以多檔上傳那篇比較好

但是相對的在寫程式時就要顧慮到很多東西,所以可以採用現在比較常用的檔案上下傳的模組

本篇來介紹一下 Apache 的 Commons-fileUpload 說實在的 它比 jspSmartUpload 好用太多了

包含對中文亂碼的處理,相信用過 jspSmartUpload 的人都知道這個困擾

要使用 Commons-fileUpload 的話必須先到 Apache 下的目錄將它下載下來

將 JAR 檔加到你的Java Web 專案中的 WEB_INF 的 lib 裡,就可以了

接下來在次說明一下檔案上傳時的網頁欄位寫法要點,記得就是

要將 form 表單的 enctype 屬性設定成 "multipart/form-data"

接下來就剩下請求路徑的 Servlet 的寫法了,以下以一個範例作呈現

2011年4月9日 星期六

JSP 教學 - org.apache.jasper.JasperException:Invalid standard action

at org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:40)
at org.apache.jasper.compiler.ErrorDispatcher.dispatch(ErrorDispatcher.java:407)
at org.apache.jasper.compiler.ErrorDispatcher.jspError(ErrorDispatcher.java:88)
at org.apache.jasper.compiler.Parser.parseStandardAction(Parser.java:1172)
at org.apache.jasper.compiler.Parser.parseElements(Parser.java:1461)
at org.apache.jasper.compiler.Parser.parseBody(Parser.java:1670)
at org.apache.jasper.compiler.Parser.parseOptionalBody(Parser.java:1020)
at org.apache.jasper.compiler.Parser.parseCustomTag(Parser.java:1288)
at org.apache.jasper.compiler.Parser.parseElements(Parser.java:1462)
at org.apache.jasper.compiler.Parser.parse(Parser.java:137)
at org.apache.jasper.compiler.ParserController.doParse(ParserController.java:255)
at org.apache.jasper.compiler.ParserController.parse(ParserController.java:103)
.......

這類錯誤基本上是初學者或是老手都可能常犯的錯誤

一個不小心有時還真的不知道錯在哪

簡言之  如果在JSP裡有用 JSP 的標準標籤的 <jsp:useBean> 

而且錯誤有此錯誤訊息 寫出錯的行數是在 <jsp:useBean> 的話

那要注意一下 你是不是寫成了 <jsp:usebean>


B要大寫不是小寫喔 !!

2011年3月5日 星期六

JSP 教學 - 運用 Javabean 製作分頁功能

一般在製作 JSP 的分頁功能時,最簡單的想法應該是直接寫一些 Scriptlet

並透過參數的方式達到分頁以及由資料表中選取所需的資料

不過往往會在 JSP 裡產生過多的 Java 程式碼,所以可以透過 JavaBean 的特性

並透過 EL 和 JSTL 的運用來減少 JSP 裡的過多的 Java 程式,簡單說就是以 JavaBean 當作一個工具

首先以下範例為一個購物網站,假設在資料庫中有 20 筆資料,而網站內容是每頁展示9筆

程式的主要架構是將先是商品的網頁嵌入在一個 iframe,且此網頁必由 servlet 轉送而來

為什麼一定要從 servlet 轉送過來,因為我需要在 Servlet 內執行一些 SQL 語句和 javabean 的處理

以下來看看這個 Servlet 程式 listgoods.java
package org.controller;
import org.tool.Pagebean;
import org.model.Good;
import org.dao.GoodDAO;
import java.io.IOException;
import java.util.ArrayList;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class listgoods extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException 
    {
        request.setCharacterEncoding("UTF-8");
        int nowPageNumber = 1;  //目前頁數

        if(request.getParameter("nowP") != null){  //檢查看看是否有 nowP 參數
            nowPageNumber = Integer.parseInt(request.getParameter("nowP"));
        }else{
            nowPageNumber = 1; //代表目前請求的是第一頁
        }
        Pagebean pagebean = new Pagebean();   //Pagebean 為產生分頁程式碼的 JavaBean 
        pagebean.setPageLink(nowPageNumber);   //產生分頁功能的程式碼
        //查詢當前頁面所需的資料,透過 GoodDAO 實現
        ArrayList goods = new GoodDAO().getAllGoods(nowPageNumber);  

        request.setAttribute("goods", goods);   //設定屬性,方便在JSP 顯示商品
        request.setAttribute("pagebean", pagebean);   //設定屬性,方便在JSP 顯示分頁功能
        //重新導向到 listgoods.jsp 以顯示商品內容
        request.getRequestDispatcher("listgoods.jsp").forward(request, response);
    }
}

2011年1月22日 星期六

JSP 教學 - 動態輸出 HTML 樹狀結構

HTML 的樹狀結構東常有很多做法,在很多網站上譬如說部落格裡以時間來顯示文章的部份

即是一種樹狀結構,一般在 HTML裡能讓使用者點及某標籤及展開內容的作法

通常都是透過 CSS 中的 display:none; 來達成,以下範例以 span 標籤為例

以下的水藍色地假設很重要喔 等等 JSP 程式會用到

<span id="spanID" onClick='showhide('show')' >//假設這邊叫標頭
    <p>點我展開</p>
<span>
<span id="show" style="display:none;">  //假設這邊叫內容

<ul>
        <li><a href="http://tw.yahoo.com/">YAHOO</li>
        <li><a href="http://www.google.com.tw/">Google</li>
        <li><a href="http://www.youtube.com/">Youtube</li>

</ul>
</span>

2011年1月16日 星期日

JSP 教學 - JFreeChart 製作及中文亂碼問題

JFreeChart 唯一個能運用 JAVA 程式來繪製出各種多樣化的報表圖型,如圓餅圖,長條圖等

此為它的官網,http://www.jfree.org/jfreechart/ 先將壓縮檔下載下來後解壓縮

我是下載 jfreechart-1.0.13 版的,解壓縮後在目錄下的 lib 目錄中的所有JAR複製到WEB專案

路徑下的 /WEB-INF/lib 中,其實只要兩個就夠用啦 jcommon-1.0.16.jar jfreechart-1.0.13.jar


佈置完成後先可以用個 JSP 來測試一下,在 JSP  中寫入 img 標籤

<img src='/vote/showJFreeChart' alt='投票統計'/>  //vote為我的 WEB 專案的名稱
接著可以建置一個 Servlet 來動態產生圖形  showJFreeChart.java

以下來介紹一下最常見的圓餅圖:

2011年1月14日 星期五

JSP 教學 - 檔案讀取與寫入

測試目標:能在網頁上讀取檔案,並且能修改檔案內容,

注意  以下範例是針對一個放在根目錄下的檔案進行測試

首先先來看看網頁如何呈現,那以下我分兩種來說明ㄧ個是針對字串依個是針對二元碼作處理

在JSP中寫入一些 scriptlets

<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="UTF-8"%>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
//省略 HTML....
<%
     //透過 application 隱含物件 取得真實路徑
  String path = application.getRealPath("simple.txt");  
  java.io.BufferedInputStream bi = new java.io.BufferedInputStream(new java.io.FileInputStream(path));
  byte[] b = new byte[1024];  //1KB
  int num = 0;
  while((num = bi.read(b)) != -1){

2011年1月3日 星期一

JSP 教學 - kindeditor 介紹

kindeditor 也是類似於 fckeditor 的套件,為 google 的產品。


兩著比起來,kindeditor 的文字編輯樣板比較精簡好看,也提供各式各樣的樣板

其官網以及所有樣板如下:

http://www.kindsoft.net/ 和 http://www.kindsoft.net/ke/examples/




接下來介紹如何使用 kindeditor  ,首先先去下載最新版的主程式 kindeditor-3.5.2.zip

2011年1月1日 星期六

JSP 教學 - fckeditor 介紹

fckeditor 是提供文字編輯的模組,譬如一般在寫部落格文章或是論壇等

以下為他們的官方網站,可以上去學習一下 

http://ckeditor.com/

先來介紹一下如何在 Java Web 的環境中(以Netbeans 為例)使用 fckeditor

首先要下載兩個東西,先進入以下網址,並下載 2.3 版以及主文件  2.4.2

http://sourceforge.net/projects/fckeditor/files/FCKeditor.Java/

下載完畢並解壓縮後先來看看 2.3 的內容,最重要的是目錄底下的


web\WEB-INF\  這應該很熟西吧,先將這目錄下的 lib 複製到你專案下的 WEB-INF 中

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月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-- 

2010年11月28日 星期日

JSP 教學 - 檔案上傳

檔案上傳廣泛運用在網路硬碟上,提供使用者一個空間儲存資料,接下來介紹一下檔案上傳的一些關鍵點

首先是 HTML 的部份,通常都會用一個 form 來執行,而讓使用者選擇檔案的標籤則是 input type="file",看看底下的HTML片段吧
<form action="/regLogIdent/upload.do"method="post"
                                        enctype="multipart/form-data" >
            <input type="file" name="uploadFile" />
            <input type="submit" value="submit" />
</form>
以上的 form 標籤中有一個要點即是 enctype="multipart/form-data",這是上傳文件時須加載的屬性,所以 form 送出請求時的封包格式會有些差異
以下來看看上傳檔案時封包所顯示的格式,以下為程式片斷,觀察封包的標頭及值


//透過 HttpServletRequest 的 getHeaderNames() 取得所有標頭,注意型態為 Enumeration
Enumeration e = request.getHeaderNames(); 

while(e.hasMoreElements()){
    String headername = (String)e.nextElement(); //取得標頭
      out.println(headername + " : " + 
        request.getHeader(headername) + "<br />");//用 getHeader(String headerName) 取得該標頭值
}

2010年11月21日 星期日

JSP 教學 - PreparedStatement 的使用

在一般的 Java 程式裡如果要插入一筆資料到資料表中,最基本的方法都是用 java.sql.Statement 去做,譬如:
Statement state = connection.createStatement();
state.executeUpdate("SQL 語法");
通常上面的 SQL 語法會寫的太凌亂,譬如太多的單引號和雙引號交錯導致可讀性不易,例如


state.executeQuery("INSERT INTO temp(account, user, password) VALUES('" + account + "','" + username + "','" + password + "')"); //以上的三個變數都為字串
以上有個替代方法就是利用 java.sql.PreparedStatement
可以很簡單的表示成以下


String sql = "INSERT INTO temp(account, user, password) VALUES(?, ? ,?)";
PreparedStatement prestate =  connection.prepareStatement(sql); //先建立一個 SQL 語句並回傳一個 PreparedStatement 物件
prestate.setString(1, account); //對應到第一個問號
prestate.setString(2, user); //對應到第二個問號

2010年11月15日 星期一

JSP 教學 - JavaMail 電子郵件處理

我們可以透過 JavaMail API 來進行電子郵件的處理,首先必須先去下載 JavaMail 套件

可以到 http://www.oracle.com/technetwork/java/javamail-1-4-2-141075.html

下載最新的 JavaMail 1.4.2 API ,可以選擇下載壓縮檔,下載完成並解壓縮後

我們需要的是 mail.jar 即可,如果需要處理附加檔案的話則還要另外下載

JavaBeans Activation FrameworkJAF來配合 JavaMail
接下來介紹一下 JavaMail 的用途,在寫 JSP 的登入的時候如果使用者忘記密碼


那就是用到 JavaMail 的時候了,我以 NetBeans 為例實現寄送電子郵件的功能


首先將剛剛下載的 mail.jar 匯入到 project 中,在側邊欄的 Liberaries 點擊右鍵 > Add Library

接下來可以在一個 Servlet 中進行郵件處理,在這之前可能需要先讓使用者

2010年11月13日 星期六

JSP 教學 - 圖文驗証碼製作

概述:在登入或是註冊的時候加上驗證碼,可以防止有心人批量的註冊或登入或是到取別人的
帳密。

圖形驗證碼的製作以 Java 2D 為基礎,透過 Servlet 動態產生驗證碼

這邊作法有兩種,一種是已經事先產生好大量的驗證碼再去隨機取一張,另一種是如上述的方法

動態產生一張圖形驗證碼,這樣是比較安全的狀況,如果把驗證的圖放在某目錄下又沒加以保護

很容易讓人直接以URL取得你的所有圖檔,

以 Xuite 為例就是如此,在我這製作專題的過程中就是碰到類似問題幸好.....Xuite 不是動態產生,不然專題早掛摟....

首先先配置一個 Servlet 吧,以下為 SignalPage.java

2010年9月1日 星期三

JSP - package org.apache.taglibs.standard.tag.rt.core does not exist

今天無聊在寫個討論區當練習

結果遇到了一個莫名奇妙的問題

在 compile 的時候出錯的,狀況如下:

Compiling 1 source file to C:\Documents and Settings\Administrator\My Documents\NetBeansProjects\useJSTL\build\generated\classes
C:\Documents and Settings\Administrator\My Documents\NetBeansProjects\useJSTL\build\generated\src\org\apache\jsp\index_jsp.java:93: package org.apache.taglibs.standard.tag.rt.core does not exist
org.apache.taglibs.standard.tag.rt.core.OutTag _jspx_th_c_005fout_005f0 = (org.apache.taglibs.standard.tag.rt.core.OutTag) _005fjspx_005ftagPool_005fc_005fout_0026_005fvalue_005fdefault_005fnobody.get(org.apache.taglibs.standard.tag.rt.core.OutTag.class);

2010年7月21日 星期三

J2EE - JSP 檔案讀取

在 JSP 中讀取檔案,不會很難 但可能會遇到一些編碼的問題

讀檔的這個動作可能在你開發系統的時候

可以把一些數值,譬如說總瀏覽人數、或是一些紀錄存在文字檔案裡

當然總瀏覽人數你也可以透過 servletContext 或是資料庫去做

最常見的也有可能是讀取一個 PDF 檔或文字檔了

基本過程如下:

2010年7月6日 星期二

J2EE - JSP 運算式語言(EL)

JSP 2.0 引入一個新概念 -- 運算式語言,簡稱 EL。

它可以和 JSTL 或是 Scriptles 結合使用,在我平常撰寫 JSP 時也大量運用到 EL
因為比起再 JSP 裡寫一大堆雜亂的 Scriptlets 實在是不怎美觀
所以盡量能用 EL 就盡量用,但也是有些部份是 EL 沒辦法表達的,那還是要回歸到 Scriptlets。

特點:

EL 通常都長這個樣子 > ${Mybean}