|
2016/11/23
Missing Artifact JDK Tools Jar
2016/11/7
java.lang.UnsupportedClassVersionError
- 原因 :
- 專案使用之JDK版本高於Runtime server之 JDK版本
- 解決辦法 :
- 確認專案與runtime server欲使用之JDK版本
- 在 windows => preference => server => runtime environments重新建立伺服器並選擇自己欲使用之JDK版本
- 在下方server處重新建立伺服器 , 選擇剛建立之伺服器匯入專案 , 並執行伺服器
2016/10/16
建立 自定義JSTL (尚未完成)
- 準備事項
- web.xml設定
- Tld檔案
- Java檔
- 需先在web.xml定義Tld檔位置 , 但也可以利用其他方式設定Tld位置
- 在 jsp-config 裡面定義一個 <taglib> , 也可以定義多個
- 裡面包含了 taglib-uri , 即是JSP在匯入 tag 網址時
- 建立tld檔案 , 定義 tag
- short-name : 預設名稱
- uri
2016/9/28
正則表示式筆記
- 使用 String 的 replaceAll( String "Rex" , String "replace")時 , Rex 是找出符合正則表示式的目標
- 逗點 "." 代表任意字元 , 屬特殊字元
- " \ " 為跳脫用
- " \. " 此時仍為 java的特殊字元 的 "物件 . 方法"
- " \\. " 此時為字串的" . " , 不屬特殊字元
2016/9/4
增進SQL查詢速度的方式 , SARGs
- 最佳化where子句需符合 SARGs規範 , 否則DB易掃描所有資料影響查詢速度 , 查詢速度也跟索引有關 , 為能利用索引搜尋資料 , 就要下正確的SQL方式 , 符合 SARGs規範
- Like不用%開頭當搜尋條件
- 錯誤 select * from A where B like ' %2 '
- 不對欄位做運算
- 錯誤 select * from A where B+1='2'
- 正確 select * from A where B='2'
- 負向查詢
- 錯誤 select * from A where B != 0
- 正確 select * from A where B>0 and B<0
- 不要對資料欄位使用函數
- 錯誤1 select * from A where substring(B,1,1)='3'
- 正確1 select * from A where B like '3%'
- 正確1 select * from A where B >='3' and B < '4'
- 錯誤2 select * from A where abs(A-100) < 1
- 正確2 select * from A where B > 99 and B < 101
- 使用 OR 運算子查詢時 需每個欄位皆有索引 , 才能增進查詢速度
2016/9/2
[maven 7] 加入LOG4J
- 參考網誌
- Log4j 是一套開放源碼的工具,方便編程人員在程式中加入 log 機制,並輸出到各種目標上
- 設定方式 , 可在server端設定 , 也可在project
- properites
- XML
- 三大元件
- Logger - 由編程人員在程式中使用,進行 logging 的元件
- Appender - 負責將 log message 輸出到各種裝置上
- Layout - 決定 log message 的格式
- Logger
- 等級 : FATAL > ERROR > WARN > INFO > DEBUG
- 當Logger設為 INFO時 , 只有比INFO高等級的結果才會被記錄下來 , 例如 FATAL、ERROR、WARN
- Appender
- 一個Logger物件可以同時輸出記錄到不同Appender(裝置)上
- 一般情況 , 當子類別輸出紀錄時 , 父類別同時輸出相同訊息
- Layout
- %r [%t] %-5p %c - %m%n
- 176 [main] INFO org.foo.Bar - Located nearest gas station.
- PatternLayout 的 格式字元列表如下:
- %c 輸出日誌訊息所屬的類別的全名
- %d 輸出日誌時間點的日期或時間,指定格式的方式:%d{yyy-MM-dd HH:mm:ss }。
- %l 輸出日誌事件的發生位置,即輸出日誌訊息的語句處於它所在的類別的第幾行。
- %m 輸出訊息,如log(message)中的message。
- %n 輸出一個列尾符號。
- %p 輸出優先階層,即DEBUG,INFO,WARN,ERROR,FATAL。如果是調用debug()輸出的,則為DEBUG,依此類推。
- %r 輸出自應用啟動到輸出該日誌訊息所耗費的毫秒數。
- %t 輸出產生該日誌事件的線程名。
- %r 輸出自應用啟動到輸出該日誌訊息所耗費的毫秒數。
- %f 輸出日誌訊息所屬的類別的類別名。
- 在src./main/resources目錄新增 log4j.properties
- 設定logger等級為 INFO , 有console與syslog兩個appender
- 其中syslog將把紀錄寫至 C:/usr/log/MyApp2.log裡
- 輸出樣式可改變 , 例如 11 、12行可互換 成 HTML樣式
- 建立一支程式Log4j.java , 使用logger紀錄 INFO
- static : 此為靜態方法 , 不用實體化Log4j類別 , 即可呼叫 init方法
- Logger logger = Logger.getLogger(Log4j.class);
- 產生logger物件時需要class名稱 Log4j
- logger.info("hello");
- 程式讀到此行時 , 將 INFO訊息 hello 寫入 MyApp2.log
- 在上一個單元 maven 6 的IndexController 類別塞入Log4j.init(); , 因為init 是靜態方法 , 不用先 new Log4j類別
- 啟動專案後 , 在網址列 送出 request
- http://localhost:8080/MyApp2/index1
- 然後至 C:/usr/log/MyApp2.log 查看有無寫入即完成 , 且內容格式會按照log4j.properties 設定之方式呈現 , 以及hello 訊息
2016/9/1
[maven 6] 建立SpringMVC , 捨去Struts
- 捨去 Struts ,專案使用之框架只有 Spring + Mybatis , 記得把 web.xml 與 pom.xml的 struts設定都拿掉
- 此範例建立方式有兩種
- XML設定
- Annotation設定
- XML設定
- 將 SpringMVC 加入 maven的 pom.xml 並update project
- 在web.xml 新增SpringMVC的分派器 dispatcher , 告訴 web 我的request要由springMVC解析 , 此時原本的 application.xml 與 mvc-config.xml共存 , 或者可以將application 的檔案放置於 mvc-config.xml中將 application刪除
- 依照下面的設定中則會讀取mvc-config.xml中的定義,檔案路經變更為 classpath底下。
- 預設檔名:如果不設置 "contextConfigLocation"初始參數,xml檔名預設為「Servlet名稱- servlet.xml ,以下圖範例為 " SpringMVCServlet-servlet.xml "
- 預設路徑:WEB-INF
- 在Resources目錄下建立 mvc-config.xml檔案 , 且設定如下 ,
- prefix是指 jsp檔案的路徑位置 , 也可設置在 WEB-INF底下 ,
- suffix是指副檔名
- bean name /index1 是指 url requet
- 在這邊使用的是 spring的注入觀念 , set property 在程式的一端 將有一個setter 對應 , 將value menu/indexTest1 注入到 viewPage這個屬性
- 程式端 , 在controller這個自定義的 package建立一個class ,並且 implement spring的controller interface , 內容如下
- 屬性 viewPage :回傳之 jsp 檔案與路徑
- ModelAndView :
- 參數一 :回傳之 jsp 檔案與路徑
- 參數二 :頁面變數或物件 ?
- 參數三 :參數二內容
- 建立menu目錄 , 建立 indexTest1.jsp , 並且接應 controller端的 user
- Spring MVC會將所有的Request先導向給一支叫做DispatcherServlet的程式,接著DispatcherServlet會決定要把這個Request交給哪個Controller做處理
- 以上組合的總結 : client 送出 request /index1 , spring 將${user}塞入 /menu/indexTest1.jsp 並送回client
- XML設定方式預設會呼叫handleRequest方法 , 至於能不能改變就待個人去研究 , 往後不多磊述 , 此篇只是簡單實現MVC
- Annotation設定
- 與XML設定方法比較 , 不需要設定bean name "/index1" , 直接透過寫annotation的方式即可完成MVC
- 需在mvc-config中啟動 annotation , 告訴annotation在哪
2016/8/23
用 Bottom Up 實現web service (jax-ws)
- 簡單的小小範例練習
- 製作web service 有兩種路徑 , top down 與 bottom up
- Bottom Up 是由 Object Class 和 Functional Class 先做起,做起後放上 Application Server 由 Application Server自動產生出 XML Schema (XSD) 和 Web Services Description Language (WSDL)。 方法簡單 , 所以適合初學者練習 , 就算不懂得 XML Schema 和 Web Services Description Language 也一樣可以製作出一個 Web Service。
- Top Down 則反之
- 環境準備
- jboss studio 9.1 ( eclipse 也可)
- java jdk 1.8.0_92
- Apache CXF2 (幫助IDE產生WS的框架)
- tomcat 8.0
- 環境設定
- CXF 2設定 : Windows-->Preferences-->Web Service -->CXF 2.x Preferences
- 因為我的建立方式為bottom up , 所以需要建立class與 function
1. 建立 Server 端
- 先新建一個 war project WS_Server , 並建立一個class EchoServer
- 建立方法 echo
- 在EchoServer 類別上按右鍵選擇Web Service->Create Web Service
- 然後不斷下一步至 start server 後 , 可以開啟以下網址 , 如有資料代表成功
http://localhost:8080/WS_Server/services/EchoServerPort?wsdl - CXF套件會自動幫我們產出Web Service的相關檔案
2. 建立 Client 端
- 新建一個 Java Project WS_Client
- 在專案的WS_Client的 src 右鍵 --> other --> Web Service Client
- 輸入相關資訊 , 將server 端的 url 填入 , 注意server需在運行中才找的到
- 按下確認後 , 套件會為我們自動產生package server與 Web Service Client的相關類別 。 手動新增一個package client 與 含main的EchoDemo類別
- 在main 填入以下內容 , 呼叫 service端的echo方法
- 執行WS_Client , 查看console是否得到回覆即成功
訂閱:
文章 (Atom)