顯示具有 Java WEB 標籤的文章。 顯示所有文章
顯示具有 Java WEB 標籤的文章。 顯示所有文章

2014年9月23日 星期二

AngularJS 教學 - Java RESTful 範例

在 AngularJS 教學 - $resource service 詳細介紹到如何使用 ngResource 的 $resource service 進行後端的 RESTful 溝通

所以我花點時間打算寫一些 AngularJS RESTful 一個完整的前後端範例

可能想到要用 Java 和 Node.js 作為範例後端吧,所以本篇先提供以 Java 為後端的範例程式吧


以下我用 Todo 作為範例,整個程式我並不會介紹太多,基本的可以先看 AngularJS 教學 - $resource service

先列出專案目錄結構





























2012年9月6日 星期四

【jQuery】Ajax to Servlet

這裡介紹一下在jQuery用Ajax發出 Request到後端的 Servlet 時

遇到關於Cross domain 的問題,以下放一些之前做介紹內容


jQuery Ajax

•參考(必讀):http://api.jquery.com/jQuery.ajax/ 
•常用的setting屬性:
  contentType
 data 
 dataType
 error(jqXHR, textStatus, errorThrown)
 success(data, textStatus, jqXHR)


2012年9月5日 星期三

Struts 教學 - validwhen 介紹

Validwhen 是 Struts Validations 中的一個 validation rules

從Struts 1.2之後開始支援,其內容最主要的目的是

在我們驗證目前Field的值的時候,可能要從其他Field的值綜合起來進行判斷

譬如,我要驗證當購買數量的欄位值不為空的時候 那麼到貨日期也不能為空

首先 要使用 Validwhen 的話記得要放入 antlr.jar 檔

否則當 Struts 在進行驗證的時候會拋出如下的錯誤訊息

java.lang.noclassdeffounderror antlr/ token stream

以下貼出一段範例解說


<field property="emailAddress" depends="validwhen">
      <arg0 key="userinfo.emailAddress.label"/>
        <var>
          <var-name>test</var-name>
          <var-value>((sendNewsletter == null) or (*this* != null))</var-value>
        </var>
 </field>


2012年9月2日 星期日

Struts 教學 - html:checkbox

最近剛好遇到 在 Struts 中使用 html tag 的 checkbox element

在 Struts 中 CheckBox 的寫法如下


<html:checkbox styleId="hasInsuranceCHbox" name="insuranceVO" 
               property="hasInsurance" value="Y"
               onclick="javascript: checkHasInsurance ();"></html:checkbox>


跟其他 Struts 的 html tag 一樣

styleId 會辦替換為 HTML 標籤的 id

而 name 則是可以為一個Struts from bean 或是一個 requestScope 的屬性

其中 如果我們要讓這個Check box 能夠隨著 name 屬性所設定的物件

的hasInsurance這個attribute值被打勾或不打勾的話

可以透過 html:checkbox 的 value 屬性去設定,要注意的是

如果不設定的話 default 的值為 "on"  ((( 表示當 hasInsurance 為 on 才會被打勾

所以這裡依據你的需求去定義 value 值吧!!

另外 如果要對 html:checkbox 實作 javascript 的onclick的話

那麼 html:checkbox 也有提供 onclick 的屬性喔!



2012年3月28日 星期三

Hibernate 教學 - 繼承 : Table per concrete class with implicit polymorphism

本篇介紹的是Hibernate繼承機制方案中的另一解法

跟上一篇大同小異 Hibernate 教學 - 繼承 : Table per concrete class with unions (<如需看以下內容請先看這篇)

基本上Discount 和 Free 這兩個實體類別都會對應一個Table

差別式在於Table per concrete class with unions 這個作法下

他只需透過一個映射檔就能夠交代繼承關係(union-subclass)

那麼在 Table per concrete class with implicit polymorphism 這個情況下

你必須針對每個實體類都撰寫一份映射文件

這樣子的狀況下 就會出現共同屬性(父類別的屬性) 會出現在每份映射文件內

也就是說 會寫到一些重複的代碼,如之前的範例就會造成

在 Preferential 這個父類別下的 id 和 name 屬性必須重複在

Discount.hbm.xml 和 Free.hbm.xml 中去定義

當然Table per concrete class with implicit polymorphism 這個方法是繼承架構下

最易懂也易學的一個基本概念。

2012年3月17日 星期六

Hibernate 教學 - 繼承 : Table per concrete class with unions

本篇介紹 Hibernate 中的繼承機制裡的其中一個  Table per concrete class with unions

從字面上翻譯,可以看得出一個table會對應到一個具體類

但是它不像 Table per concrete class with implicit polymorphism 需要一個具體類別就要一個映射檔

Table per concrete class with unions  只需要一個映射檔並透過 union-subclass 

來指名具體類是對映到哪個資料表即可

以下以一個"優惠(Preferential)"為一個抽象的父類別,並有兩個子類別

"折扣(Discount)" 以及 "免費(Free)"

首先先來看這三個簡單的Java程式

Preferential.java

2012年3月16日 星期五

【DisplayTag】Excel亂碼問題

在使用DisplayTag的時候多,如果你會出Excel檔案的時候,多半會發生中文亂碼問題

因為DisplayTag並沒有針對中文作良好的編碼,因此如果你遇到類似問題

不仿採用下面介紹的方法解決亂碼的情況吧

先去下載 displaytag-export-poi-1.1.jar





這是目前官方推薦的作法,它已經將POI導出Excel的一些過程整合到

DisplayTag下以解決中文亂碼的問題,所以你只需要額外下載displaytag-export-poi-1.1這個JAR即可。

  並將它放到/WEB-INF/lib/  最後在classpath下的displaytag.properties中新增這一段

        export.excel.class=org.displaytag.export.excel.ExcelHssfView

        就可以解決問題了。

注意我使用的是 display1.1.1版本,所以你如果抓錯POI的JAR檔,就無法有效解決你的問題



2012年3月15日 星期四

【DisplayTag】匯出檔案

如果有要匯出 Excel,Xml,Pdf,RTF,CSV檔案的話,不仿可以考慮使用 DisplayTag

首先你必須先下載 displayTag相關的JAR檔案

在以下的範例環境我採用displaytag1.1.1版的

接著如果我們想針對網頁上的某份報表進行匯出的動作

可以將原本呈現報表的tabel標籤轉成如下所示:


<display:table export="true" name="show_query" pagesize="10"  >
    <display:column property="userName" title="姓名"  />
    <display:column property="email" title="連絡電話" />         
</display:table>


export="true" 告訴display:table 開啟匯出功能

pagesize="10" 則是每個table會有10筆資料

name="show_query" 資料的來源,這裡的show_query是request裡的一個屬性資料
                                                            等同於 request.getAttribute("show_query")

2011年12月21日 星期三

【DWR】使用 DWR 取得 JavaBean

這篇介紹在DWR的運用下,透過 Javascript 乎教遠端的 Java 方法

並回傳一個 JavaBean 的物件,最後呈現在網頁上

這也是一個典型的 Java 與 Javascript 物件之件的轉換,以下來看看範例吧

首先環境就不多說了,可以看,上一篇文章

一開始我們先定義一個 JavaBean

package org.bean;
public class PersonBean 
{
    private String name;
    private String dollar;
 
    public PersonBean(){}
 
    // getter&setter 省略
}
接著同樣的要定義一個遠端的服務,透過Javascript 呼叫 它會建立一個 PersonBean 並將這個物件回傳回去
package org.service;
import org.bean.PersonBean;
public class PersonService{
    public PersonBean getPerson(){
        PersonBean personbean = new PersonBean();
        personbean.setDollar("1000");
        personbean.setName("Allen");
        return personbean;
    }
}
最後要定義 dwr.xml

2011年12月19日 星期一

【DWR】範例

最近因為打工又要學一些東西,這次是 DWR。以下先介紹它一下巴

簡單說它簡化了AJAX的開發在一個以Java為主的WEB應用上

它的範疇主要是在 Javascript to Java 的一種 RPC 框架  跟ZK比起來就比較不一樣了

更進一步解釋就是它能夠讓你在前端的網頁程式中運用 Javascript 遠端呼叫

Java 的程式,也可以讓Javascript 接收 Java 端自定義的 Bean。

以下用一個簡單的範例來呈現 DWR

首先環境是 Apache Tomcat 6,並去http://directwebremoting.org/dwr/downloads/ 下載JAR檔

額外補充的是 DWR 需要用到 Apache 的開源套件 commons-logging

所以還是要去 http://commons.apache.org/logging/download_logging.cgi 在下載JAR檔

下載完成後同樣先透過 Eclipse 建立一個 Dynamic Web Project

並將這兩個 JAR 檔放到 WEB-INF/lib 裡,完成後就可以寫個 Hello world 的程式

第一步驟要先在 WEB-INF/web.xml 加上一段程式

2011年11月14日 星期一

【Java Web】載入Spring 的 ApplicationContext

如果要在 Java web project 的初始階段就完成 Spring 的 ApplicationContext 的建立

那麼這裡提供一個簡單的方法,首先先建立 AppContext.java

package org.util;
import org.springframework.context.ApplicationContext;
public class AppContext 
{
    private static ApplicationContext ctx;  
 
    public static void setApplicationContext(ApplicationContext applicationContext) {  
        ctx = applicationContext;  
    }  
 
    public static ApplicationContext getApplicationContext() {  
        return ctx;  
    }  
}

2011年11月7日 星期一

【Java Web】JNDI 配置

本篇介紹如何運用 JNDI 的方式來存取資料庫資源

以下以 Tomcat 5.5 為環境 資料庫為 MySQL

首先需要在你的 Tomcat 5.5 的目錄下,例如以下

C:\Program Files\Apache Software Foundation\Tomcat 5.5\conf\server.xml

將 server.xml 開啟並加入以下的 Resource 資源訊息
 ((記得放在 GlobalNamingResources 的標籤當中


<Resource name="jdbc/mxsql/datasource"
      factory="org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory"
      type="javax.sql.DataSource"
      driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver"
url="jdbc:sqlserver://{Your ip}:1400;DatabaseName={Your db name}"
      username="test"         
      password="test"
      maxIdle="2"
      maxWait="1000"              
      maxActive="4"
              />

2011年10月23日 星期日

【Java Web】Tomcat 5.5 無法表示 EL 表達式

最近用 Tomcat 5.5 遇到 EL 無法表示的問題

雖然我在 web.xml 中設定了 el-ignored 標籤 還是不行

這裡提供兩種方法

1. 修改 web.xml 的 schema 的版本改為 2.4

2. 在要運用 EL 的 JSP 中加上  isELIgnored="false" 



2011年10月13日 星期四

【Axis2】Java Web Services 資料庫範例

這邊來介紹 Java Web Services 存取資料庫的範例

以下 demo 的資料庫是用 SQL Server  所以要先去下載適當的 JDBC Driver

下載下來後將JAR檔放到 Tomcat 5.5 安裝目錄下的 common\lib 裡面

接著要設定資料庫連線的參數

一樣開啟 Tomcat 5.5 安裝目錄下的 webapps\axis2\WEB-INF\conf\axis2.xml 檔案

並將以下相關參數寫入


<parameter name="DB_driverClassName">com.microsoft.sqlserver.jdbc.SQLServerDriver</parameter>
<parameter name="DB_url">jdbc:sqlserver://xxx.xxx.xx.xxx:1400;DatabaseName=test</parameter>
<parameter name="DB_username">XXXX</parameter>
<parameter name="DB_password">123456</parameter>


完成之後建立一個 Server 端的程式  開啟 Eclipse

2011年10月10日 星期一

【Axis2】Java Web Services 範例

上一篇【Axis2】Java Web Services 環境配置  介紹了 Axis2 的環境配置之後

接著就來寫一個簡單的 Hello World 範例

第一步先建立 Server 端的部分

1. 建立一個一般的 Java project 名稱為 HelloWorld4WS

2. 匯入 Axis2 的 Library

3.接著建立一個簡單的 HelloService 類別

package org.service;
public class HelloService 
{
        // method : sayHello, return String
        public String sayHello(){
                return "Hello Web Services";
        }
}

接著要定義一個 services.xml 來說明你的 Web service 提供哪些服務及服務名稱

在 project 的目錄下建立一個資料夾 名為 META-INF

並在該資料夾內新增一個  services.xml 檔案

2011年10月9日 星期日

【Axis2】Java Web Services 環境配置

這邊帶大家用一個簡單的 Hello World 的例子來介紹 Java Web Service 的開發

首先我們運用 Apache 的 AXIS2 當作 Web service

前置作業:

l   Sun JDK 1.5已安裝且環境變數已設定完成

l   Apache Tomcat 5.5已安裝完成
     註:若無安裝Server Runtime,Eclipse會無法建立Web Services Client


首先先配置 Client 的部分


第一步:先安裝 AXIS2

先到這裡下載 AXIS2 下載     ((選擇1.5版的

下載完成後解壓縮放到適當位置 例如 C:\axis2-1.5

在該目錄下的 lib 是 AXIS2 所有能用到的 JAR 檔

接下來設定一下環境變數

2011年9月25日 星期日

Struts 教學 - 檔案下載

在 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年8月7日 星期日

Java 網路程式 - org.apache.commons.httpclient 傳送檔案給 Servlet

本篇介紹運用 apache commons 中的 httpClient 模擬一個 Http Post 的方法

關於 詳情可以看 RFC1867:

他同樣是運用 Form-based File Upload in HTML

將檔案送到一個 Servlet,在 Servlet 中運用 apache commons 的 fileUpload 執行存檔動作

以下為簡圖說明之











在 Client 端部分不限於 Servlet 裡,已下看看Client程式的sample

2011年7月18日 星期一

【ZK】Javascript 開新視窗

本篇繼上一篇 【ZK】開新視窗 的應用之後

這邊我來介紹一下如何運用 Javascript 的技巧開啟一個新的視窗

當然 ZK 也能夠支援 Javascript 的運作

再運用 Javascript 開心視窗時,程式通常如下

window.open('目標 URL', '', '');  總共可帶三個參數進去

延續之前的例子,當 User select 某個 item 的時候就要開新一個視窗的話

可以在 listbox 的 onSelect 時,執行你所需要的 Javascript

程式大致如下 :


<attribute name="onSelect">    
       <![CDATA[
              String acc_id = Executions.getCurrent().getDesktop().getAttribute("select_id");
              String acc_name = Executions.getCurrent().getDesktop().getAttribute("select_name");
              String userId = Executions.getCurrent().getDesktop().getAttribute("loginId");

2011年7月7日 星期四

Hibernate 教學 - HQL 基本介紹

HQL 為 Hibernate 的查詢語句,他很類似於 SQL 但是比所能達到的功能有些許限制

重點是 HQL 為一種物件導向式的查詢語言,簡單說 HQL 是可以直接針對實體物件進行查詢、修改...等

而不像 SQL 是針對 Table,以下用一個最簡單的 select...from 來介紹 HQL

一般的 SQL 的 select * from t_product --- 指 撈出 t_product 這個 table 的所有欄位資料

如果是 HQL 會這樣寫 select p from Product p --- 這裡的 Product 為一個實體物件

以上這樣的寫法 可以簡化成 from Product as p 或是 from Product p

甚至還可以這樣寫 from Product

只要記得的是 from 後面接的是一個 Java 的實體類別,如果只是要撈出 t_product 的 name 欄位呢?

HQL : select p.name from Product --- 注意這裡的 p.name

p 目前唯一個 Product 的物件,p.name 表示了 p 物件的 name 屬性