在 AngularJS 教學 - $resource service 詳細介紹到如何使用 ngResource 的 $resource service 進行後端的 RESTful 溝通
所以我花點時間打算寫一些 AngularJS RESTful 一個完整的前後端範例
可能想到要用 Java 和 Node.js 作為範例後端吧,所以本篇先提供以 Java 為後端的範例程式吧
以下我用 Todo 作為範例,整個程式我並不會介紹太多,基本的可以先看 AngularJS 教學 - $resource service
先列出專案目錄結構
2014年9月23日 星期二
2012年9月6日 星期四
【jQuery】Ajax to Servlet
這裡介紹一下在jQuery用Ajax發出 Request到後端的 Servlet 時
遇到關於Cross domain 的問題,以下放一些之前做介紹內容
遇到關於Cross domain 的問題,以下放一些之前做介紹內容
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
以下貼出一段範例解說
從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 的寫法如下
跟其他 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 的屬性喔!
在 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 這個方法是繼承架構下
最易懂也易學的一個基本概念。
跟上一篇大同小異 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
Preferential.java
從字面上翻譯,可以看得出一個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
因為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標籤轉成如下所示:
export="true" 告訴display:table 開啟匯出功能
pagesize="10" 則是每個table會有10筆資料
name="show_query" 資料的來源,這裡的show_query是request裡的一個屬性資料
等同於 request.getAttribute("show_query")
首先你必須先下載 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
並回傳一個 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 加上一段程式
簡單說它簡化了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
那麼這裡提供一個簡單的方法,首先先建立 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 的標籤當中
以下以 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"
雖然我在 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 檔案
並將以下相關參數寫入
完成之後建立一個 Server 端的程式 開啟 Eclipse
以下 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 類別
接著要定義一個 services.xml 來說明你的 Web service 提供哪些服務及服務名稱
在 project 的目錄下建立一個資料夾 名為 META-INF
並在該資料夾內新增一個 services.xml 檔案
接著就來寫一個簡單的 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
前置作業:
第一步:先安裝 AXIS2
下載完成後解壓縮放到適當位置 例如 C:\axis2-1.5
在該目錄下的 lib 是 AXIS2 所有能用到的 JAR 檔
接下來設定一下環境變數
首先我們運用 Apache 的 AXIS2 當作 Web service
前置作業:
l Sun JDK 1.5已安裝且環境變數已設定完成
l Apache Tomcat 5.5已安裝完成
註:若無安裝Server Runtime,Eclipse會無法建立Web Services Client
首先先配置 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 的路徑下的檔案
以下個別來看看他的範例
而是必須實做 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
關於 詳情可以看 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
程式大致如下 :
這邊我來介紹一下如何運用 Javascript 的技巧開啟一個新的視窗
當然 ZK 也能夠支援 Javascript 的運作
再運用 Javascript 開心視窗時,程式通常如下
window.open('目標 URL', '', ''); 總共可帶三個參數進去
延續之前的例子,當 User select 某個 item 的時候就要開新一個視窗的話
可以在 listbox 的 onSelect 時,執行你所需要的 Javascript
程式大致如下 :
<attribute name="onSelect">
<


