今天是2017年最後一天的工作日,回顧一下今年及展望明年,寫些瑣事。
網頁
2017/12/27
2017/12/26
2017/12/25
2017/12/24
Katalon Automation Recorder Chrome extension簡介
最近要導入自動化測試,所以開始研究一下Selenium,正要安裝的時候才發現Chrome沒有,新版的Firefox也沒有,然後看到了Katalon Automation Recorder這個工具。
2017/12/20
Mybatis 共用resultMap
Mybatis如果有許多的Mapper用到相同的resultMap
,例如使用者資料之類的model,則可以把這個被共用的resultMap
獨立出來成為一個Mapper,然後將使用到這個resultMap
的Mapper的<select >
的resultMap
的值指向其id
即可。
2017/12/18
2017/12/17
Java 為什麼在Service層要使用Interface
在Java Web應用程式中,SpringMVC的@Controller
,@Service
及@Repository
的分層架構是經常被使用的架構。在實作Service層時,通常會先定義Service的介面,然後才撰寫具體類別實作該介面。我曾經認為為什麼要這麼麻煩呢? Service直接寫成類別不就好了,寫一個介面然後再來繼承不是多此一舉很麻煩嗎? 後來查了一下才知道這樣做的原因其實就是符合SOLID原則的設計,不直接依賴類別的好處如下。
2017/12/14
2017/12/12
2017/12/11
如何停止MySQL在Windows 7的自動更新
為什麼要停止MySQL的自動更新呢? 因為我懷疑是自動更新導致原本能啟動的MySQL服務變成無法啟動,因為某些資料夾或設定在自動更新後被覆寫掉了,真的很煩。
Spring MVC 從Controller的方法重新導向至頁面
如果要從SpringMVC的Controller的方法重新導向到jsp或html頁面,可以回傳prefix為redirect:
的字串。
2017/12/7
記帳簿 從Github clone Maven Web專案並匯入至Eclipse專案
首先取得Github專案的位置,例如https://github.com/matthung0807/moneynote.git
。
2017/12/6
JBoss Unable to get managed connection for [JNDI_NAME]
如果你的應用程式在透過JBoss JNDI設定連不上資料庫並出現
javax.resource.ResourceException
Unable to get managed connection for [JNDI_NAME]
那很有可能你的jdbc driver有問題,請檢查JBoss的library目錄(例如[JBOSS_HOME]/server/default/lib
)中的jdbc driver版本是否正確,或是放了多個jdbc都可能導致此錯誤。
MyBatis 返回整數 resultType
在MyBatis查詢如果要返回整數,則resultType
屬性要設為java.lang.Integer
。
<select id="select" resultType="java.lang.Integer">
SELECT COUNT(*)
FROM USER_PROFILE
</select>
呼叫的Interface的方法如下。
public Integer select();
2017/12/5
在URL參數中傳遞日期Date至Spring MVC Controller的@ModelAttribute參數
從前端頁面要透過url參數傳遞日期至Spring MVC的@ModelAttribute
參數,而該Model物件的屬性為java.util.Date
,則日期成員變數前可加上@DateTimeFormat
並根據前端傳來的格式設定pattern
屬性,
MyBatis java.lang.IllegalArgumentException: invalid comparison: java.util.Date and java.lang.String 錯誤
今天在用MyBatis查詢根據輸入Date的條件查詢時,發生下面錯誤。
2017/12/4
2017/12/1
2017/11/29
MyBatis JsonMappingException: Could not write JSON: (was java.lang.NullPointerException)
如果在使用MyBatis存取資料庫時,出現下面錯誤時
JsonMappingException: Could not write JSON: (was java.lang.NullPointerException)
解決方式如下。
2017/11/28
2017/11/27
Spring JBoss AS 5.1 JNDI Oracle Datasource 連線設定
JBoss AS 5.1 連線Oracle資料庫的設定檔預設為[JBOSS_HOME]/server/default/deploy/oracle-ds.xml
2017/11/22
jQuery document ready
要用JavaScript操縱網頁的DOM元素時,必須等網頁完全載入後才可安全地進行操作,而要確保網頁載入,可使用jQuery的$( document ).ready()
。
2017/11/21
Spring MVC Content type 'application/x-www-form-urlencoded;charset=UTF-8' not supported for @RequestBody MultiValueMap
當使用jQuery.ajax()呼叫Spring MVC Controller的方法時,如果該方法的參數有@RequestBody
則會拋出下面錯誤。
org.springframework.web.HttpMediaTypeNotSupportedException: Content type 'application/x-www-form-urlencoded' not supported
2017/11/20
第二正規化(Second Normal Form, 2NF)
第二正規化(2NF)是指資料表中所有欄位的資料都必須和該資料表的主鍵(or複合主鍵)有完全依賴關係。如果在複合主鍵的情況下,非主鍵的欄位只和部分主鍵有關,則必須獨立出來成為一個資料表,或歸類到該主鍵的資料表。
2017/11/19
2017/11/17
2017/11/16
MyBatis xml綁定interface的設定
MyBatis可以透過在xml中撰寫SQL,並將xml綁定到一個給程式呼叫的interface,如此程式就可以透過呼叫interface的方法來執行xml中對應的SQL,而綁定xml和interface的設定是在mapper(xml)檔的<mapper namespace>
。
<mapper namespace="idv.matt.dao.mapper.UserMapper">
如何解決Eclipse專案程式碼修正後仍出現錯誤的問題
如果Eclipse中的專案程式碼都已修改正確,但仍出現錯誤,此時Eclipse功能選單的Project -> Clean...
或許可以解決這樣的問題。
2017/11/15
2017/11/14
Eclipse Subversion (SVN) 如何查詢專案的respoistory url
在Eclipse Subversion要查詢從SVN checkout下來的專案的repository url的步驟如下。
2017/11/10
2017/11/9
在Visual Studio Code直接開啟html於瀏覽器
在Visual Studio Code(簡稱VS Code)中如果要直接開啟html檔於瀏覽器,可以安裝擴充套件open in browser。
2017/11/7
2017/11/6
2017/11/5
2017/11/1
Node.js 使用yargs模組取得命令列執行時傳入的參數
Node.js以命令列執行時,原本是透過process.argv取得輸入的參數,本篇介紹yargs模組除了讓我們更輕鬆地存取參數,還可建立命令列式的操作介面,如參數說明,或必要的參數等等。
2017/10/31
Visual Studio Code 開啟內建終端機(Integrated Terminal)快速鍵
開啟Visual Studio Code內建的終端機(Terminal)快速鍵為Ctrl + `(鍵盤左上角的那顆,在Esc下面),或功能選單 -> View -> Integrated Terminal
。
JavaScript ES6 建立物件時定義方法的簡短語法
JavaScript ES6(ECMAScript 2015)使用object initializer notation建立物件時,定義方法時可簡寫如下。
2017/10/30
如何開啟Chrome開發人員工具的console
2017/10/29
2017/10/27
JavaScript ES6的箭頭函式(arrow function)
JavaScript在ES6(ECMAScript 2015)加入了箭頭函數表示式(arrow function expression)的語法,使函式的語法更為簡潔
2017/10/26
2017/10/25
Node.js nodemon模組
nodemon模組是開發Node.js應用程式時的工具,這個模組會持續監視你的程式碼是否有異動狀況,一旦內容改變nodemon便會自動重新執行應用程式,讓你可以很快的觀察修改程式碼所造成的影響。
Ant build.xml的project
Ant建置檔(buildfile)使用XML格式撰寫,預設為build.xml
,內容為建置時要執行的各種任務。build.xml
中必須且只能有一個project
節點,project
為build.xml
的根節點(root element)。
2017/10/24
Eclipse SVN checkout連線時出現E175002: handshake alert: unrecognized_name錯誤
如果你的Eclipse在使用SubVersion checkout專案時出現以下錯誤的解決方式如下。
E175002: Connection has been shutdown: javax.net.ssl.SSLProtocolException: handshake alert: unrecognized_name svn: E175002: OPTIONS request failed on [URL]
2017/10/22
Oracle ORA-06553: PLS-306: 呼叫 'xxx' 時參數類型的數目錯誤
呼叫Oracle的Store Procedure時,出現錯誤如下
ORA-06553: PLS-306: 呼叫 'xxx' 時參數類型的數目錯誤
ORA-06553: PLS-306: wrong number or types of arguments in call to 'xxx'
2017/10/20
PL/SQL Developer 找不到oci.dll的問題(could not locate oci.dll)
當開啟PL/SQL Developer時出現could not locate oci.dll
導致無法連線到資料庫的解決方式如下。
2017/10/19
如何修改PL/SQL Developer的SQL編輯區的字體大小
本篇的PL/SQL Developer是指Allround Automations的PL/SQL Developer(v12.0),而不是Oracle SQL Developer
2017/10/18
Java synchronized 同步的意思
在Java多執行緒中,可使用synchronized
關鍵字用來宣告一個method或一段程式區塊為同步。同步的意思是,在同步方法/區塊/成員變數中一次只允許一條執行緒存取被鎖定的物件。
2017/10/17
2017/10/16
Java LinkedList 簡介
Java LinkedList
同時實作了List
與Deque
介面。為雙鏈接串列(Double-linked List),串列中的每個節點都有指向前一個及下一個節點的指標。
2017/10/15
2017/10/12
2017/10/11
Java 執行緒 wait()
Java 多執行緒中,在目前的執行緒呼叫物件的wait()
方法可以讓目前的執行緒暫停執行,等到其他的執行緒呼叫該物件的notify()
或notifyAll()
方法後才會繼續執行。
2017/10/9
2017/10/6
2017/10/5
Java Thread Life Cycle 執行緒的生命週期
Java執行緒的生命週期(life cycle)可分為New,Runnable,Running,Blocked/Waiting,Terminated/Dead狀態。
2017/10/4
2017/10/3
2017/10/2
2017/10/1
2017/9/30
如何關閉Eclipse的jsp或html編輯預覽
最近在Eclipse匯入一個專案後,開啟web專案的jsp
或html
檔會同時出現預覽及文字編輯畫面,因為我習慣用瀏覽器顯示修改的結果,覺得預覽模式除了佔去一半的文字編輯區,用起來又卡卡的,找了好久才知道怎麼改成原本編輯器。
2017/9/29
2017/9/28
日誌 20170929
最近的任務是把Struts2專案翻成Spring MVC框架。由一位沈默寡言的資深工程師帶著我做,還好MVC分層有做好且只是個小後台系統,基本上就是把Strust2 的Action換成Spring MVC的Controller,然後修改需要的配置檔即可。
Spring MVC form tag的屬性modelAttribute和commandName差別
Spring MVC的form tag有modelAttribute
和commandName
的屬性,這兩個屬性的功能是一樣的,都可以建立<form:form>
表單所對應的model物件。
2017/9/27
2017/9/26
2017/9/25
2017/9/22
2017/9/21
Java Thread.sleep()
Java的Thread.sleep(long millis)
方法可以使目前的執行緒暫停執行一段時間,傳入的參數為要暫停的時間長短,單位為毫秒(millisecond)
Java Lambda替代匿名內部類別範例
Java 8的Lambda Expresions(Labmda語法)可用來取代匿名內部類別(anonymous inner class)的寫法,令程式更簡潔可讀性更高,下面是一些基本範例。
2017/9/20
IE8 不支援JavaScript的Object.keys
Object.keys
方法讓我們可以輕鬆地取得一個物件中的所有的屬性,但這個功能在IE8不支援所以無法使用,使用時會出現undefine的錯誤(IE9以上才支援)。
2017/9/19
Regex 字符組 character class [ ... ]
Regex正則表示式的字符組(character class, or character set)為中括弧[...]
包夾的數個字符。
2017/9/18
日誌 20170919
SD文件交出了,教同事使用Astah Community來畫類別圖(Class Diagram),使用者案例圖(Use Case Diagram)及循序圖(Sequence Diagram)。
2017/9/17
日誌 20170918
美好的星期一。
天氣有點涼,秋天到了。
依舊在寫SD文件,今天應該就可以完成。
此時的我在台北西門町街上抽菸喝咖啡。
記得這個約在2017年六月多開始的專案在九月份已經有個收尾,所以現在再補當初寫得程式的SD文件給客戶。
接下來進入UAT階段就是開始修修補補的時候,事情就會變得比較少一點。
2017/9/15
2017/9/14
如何第一次將local repository push到Github專案
在工作中通常都是pull別人的專案,修改檔案後直接用git push
將commit推送到Github或GitLab上。不過對新手來說,要自己第一次把電腦中的專案push(推送)到Github上就有點困擾,本篇一步步說明如何將local的專案push到github上。
2017/9/13
2017/9/12
2017/9/11
Struts 2 url直接呼叫action
在JSP通常都在form表單設定action並提交來呼叫struts.xml中mapping的Action類別的方法,如果要直接點選連結來呼叫action,請參考下面
2017/9/9
2017/9/8
Java java.lang.UnsupportedClassVersionError錯誤
java.lang.UnsupportedClassVersionError
錯誤是因為runtime的JRE版本比編譯class檔的JRE要舊。
2017/9/6
2017/9/5
2017/9/4
Oracle Schema
Schema是多個邏輯結構資料的集合,這些邏輯結構資料又稱作schema objects,例如Table及Store Procedure就是schema object的一種。
2017/9/3
2017/9/1
2017/8/31
2017/8/30
Oracle SQL Developer DBMS_OUTPUT.PUT_LINE() 無法顯示印出結果
如果在Oracle SQL Developer使用DBMS_OUTPUT.PUT_LINE()
無法顯示印出結果時,執行下面指令。
2017/8/28
2017/8/27
2017/8/25
2017/8/24
2017/8/23
IE 頁面內容無法依資料庫內容更新
IE 預設會把網頁結果cache起來,所以若是網址不變的情況下,會返回cache的頁面。然而如果網頁的內容是動態的情況下,會導致資料庫內容有更動但頁面內容無法正確反應的問題,簡單說就是頁面內容無法刷新。
2017/8/21
如何製作直接幫柯文哲親自留言按讚
這兩天最紅的詞就是王八蛋這三個字了,出自於台北市長柯文哲在facebook的霸氣回覆。因為回覆及留言的人數太多所以很多網友要去朝聖時都找不到了,所幸有一位吳姓網友做了一個"如何製作直接幫柯文哲親自留言按讚"的網頁,讓想去朝聖的鄉民可以直接幫王八蛋按讚。
修改Mac Terminal終端機的命令提示符號 change Mac Terminal Prompt
Mac的Terminal終端機bash的命令提示符(prompt)預設是一串由使用者和主機名稱的組合,如果覺得太長可用以下方法修改。
2017/8/20
在Eclipse新增不同版本的JDK
Eclipse執行專案的預設JVM會使用環境變數Path中JAVA_HOME
路徑的JDK,但若專案的JDK使用的是不同版本,此時就要在Eclipse中加入新的JDK。
2017/8/19
關閉Eclipse編輯區的拼字檢查(turn off eclipse spell check)
拼字檢查功能會在拼字錯誤的單字下方標上波浪底線,但寫程式時看到這種很像錯誤的標示還蠻煩的,關閉此功能的方法如下。
2017/8/18
網頁中的鍵盤熱鍵操作說明的css
撰寫技術文章時,常會有按鍵操作的說明,例如ctrl + h或是ctrl + shift + l等,但若沒有特別的標示,和一般的內容文字容易混淆在一起,雖然在HTML5中多了<kbd>
標籤,用來標示按鍵用的標籤,但預設的效果只是把字型改為monospace而已,所以可使用下面的css讓<kbd>
的效果更明顯一點。
2017/8/17
如何使用Bootstrap 3
簡單紀錄一下Bootstrap的用法,先介紹一下什麼是Bootstrap,要了解Bootstrap前的必備知識是HTML,CSS及Javascript,若不懂上述三種技術則看不懂以下內容是正常的。
Java Servlet PrintWriter 中文亂碼
在Java Servlet中使用PrintWriter將中文字串寫出時,常會碰到寫出的內容變成亂碼,這是因為在用PrintWriter寫出之前沒有設定回應物件的編碼(encoding)。
解決Chrome瀏覽器很慢很卡的問題
最近Chrome不曉得為什麼變得很慢,會卡住5秒以上才會有反應,卡住的時候Chrome會鎖死,無法進行任何操作或點擊,即使是到Google搜尋也是如此,所以不是網站的問題。
CSS font-size em的預設大小
CSS font-size的單位em預設大小為16px,也就是1em = 16px
,所以2em = 32px
。不過若em的parent element有的font-size大小為14px,則1em = 14px
。
2017/8/16
ServletConfig簡介
Web容器(web container)在啟動時,會先讀取DD文件(即web.xml
),然後幫每一個Servlet
建立一個ServletConfig
的實例,接著根據DD文件的設定建立一些name/value參數,然後Web容器將參數交給ServletConfig
物件,最後產生Servlet
的實例時會呼叫Servlet的init(ServletConfig config)
方法把ServletConfig
物件傳入Servlet
。
iReport 5.6.0 Edit Query freeze SQL編輯器卡死的問題
今天在使用iReport Designer 5.6.0時,不論在專案上右鍵>Edit Query或是按Edit Query的圖示,Edit Query視窗沒有彈出,程式整個卡住了。
2017/8/15
MySQL Exception錯誤訊息參數中文亂碼
在Java JDBC連線MySQL資料庫時,若執行錯誤會丟出Exception錯誤訊息,但錯誤訊息中的中文參數在Eclipse的console出現亂碼如下
Regex 使用 ^ 符號排除特定字元
在正規表示式可用^
(caret)符號來排除後接的字元。^
是正規表示式的metacharacter(metacharacter的中文翻譯很多,例如元字符,中繼字符,特用字符,特殊自元,詮譯字元,中介字元等)