跳到主要內容

發表文章

目前顯示的是有「Java EE」標籤的文章

Java make SOAP call

參考文章 https://docs.oracle.com/cd/E19879-01/819-3669/bnbhw/index.html SOAP的定義請參考 wiki 雖然目前已經是過時的資料交換技術 不過像是在台灣只會 Microsoft (舊)技術的廠商還是不少 有時候還是只能跟著用這些方式配合 這次 sample code 的 github連結 會寫這篇是因為Java的SOAP相關的 library 體積都滿龐大的 不過若工作上用不到太複雜的設定,靠 Java 本身的支援也能避免 library 的依賴及帶來的麻煩 因為跟SOAP搭配的回傳資訊大多是XML格式,所以下面的code示範將結果當成XML的處理方式

Java 實現 JavaScript 的 encodeURIComponent

參考文章: encodeURIComponent and decodeURIComponent in Java 很多時候需要將字串轉成 UTF-8 編碼後的ascii,特別是在 Web 端的輸出 Java 裡的內建 Class URLEncoder 裡的 encode 方法看起來雖然像是為此產生 少部分沒那麼嚴謹的教學也會說用這個方式就能編譯 UTF-8 但之後可能會碰到意料之外的問題 雖然大部分的文字編碼結果都沒有問題,但極少部分的符號編碼卻跟JavaScript的不同 最明顯的就是 space,空白用Java的 URLEncoder 會編譯成 + 而不是 %20 在 Java 端產生的網址字串可能就因此不能作用

範例 - JSP 使用Gmail為SMTP server

此範例單純寄信,不夾帶檔案 另外可能是google本身有GAE(google app engine)服務 Gmail不適合當作商業用的mail server 除了安全認證外,本身也有寄信上限100封 / per day 在Server上也可能有認證交換阻擋之類的限制 我在自己的電腦上使用沒問題,但也曾經在Linux的Server上碰到認證的Exception 如果要找商業使用的mail server最好還是另尋他途(例如:sendGrid)

JavaEE Session、Cookie處理

last update:2013/6 一般的網頁連線過程裡,server端與client端的互動就像丟球遊戲一般 由client端丟球(連線)到server端,server端再根據過來的資訊把球丟給(回傳資訊)client端 而每一次的連線行為都是獨立的 server端專注接球並把球傳回去,並不會注意是誰把球丟過來 如果過程中有需求要持續辨識使用者的身分,則會透過Cookie、Session兩種機制來辨識 Cookie是將資訊記錄在client端,並連線時將訊息一併傳遞給server端 用比喻來形容就是在球上面簽名,server端接到球後就會知道是誰把球丟過來 Session則是將資訊存放在server端的記憶體中,並依此辨識 比喻是接球的server端用大腦記著每一個丟球給他的人 當然以上比喻對於細節也許不是那麼符合 而當系統對連線的辨識需求較多,或是即時性的要求較高(例如:twitter、線上聊天等系統) 使用Cookie、Session機制就不是那麼有效率了 包含HTML5也提出WebSocket機制來處理這類需求,而過去也有幾種標準作法 介紹可以參考JosephJ大的文章 - Browser 與 Server 持續同步的作法介紹

JavaEE 上傳機制

Servlet 3.0 加入了上傳機制 之前寫過的 cos套件 也可以拿來比對 除了本篇介紹,另外可參考 良葛格的介紹 使用時對於提供上傳的form表單有些前置需求,如下 上傳的頁面demo.jsp================== <!-- action指向處理後續的頁面/Servlet   實作上傳功能時method只能用post         enctype沒指定的話會用預設值application/x-www-form-urlencoded        使用上傳功能時則設定為multipart/form-data--> <form action="uploadTest" method="post" enctype="multipart/form-data">     <p>選擇檔案:</p><input type="file" name="file1" value="" /><br />     <p>選擇檔案:</p><input type="file" name="file2" value="" /><br />     <input type="submit" name="upload" value="upload" /> </form> 成果大概長這樣:

談以壓縮、cache機制加速網路應用

談到壓縮資料時必須先有個概念 壓縮資料可以減少資料的傳輸成本,但相對的會增加計算上的成本 CPU可能會因為壓縮的工作而降低系統的整體處理能力,使用上必須依需求選擇 當然現行系統主要的資料傳遞需求仰賴網路,通常啟用壓縮會是較好的選擇 以網路應用實務上的一般情況來說,效率的瓶頸主要是資料的傳輸 上圖是分別以3G和4G通信取得 20KB 資料的時間,可以看出資料量大時的影響 另一個要點則是行動裝置的電量,行動裝置使用網路時會大幅減少其電池使用時間

Glassfish 效能調校

Glassfish 是有 open source 版本的 Java EE Server 另一個在Java EE開發中常用到的Tomcat相較之下只涵蓋了web container的部分 以支援的規格、後台的豐富性來說,這是Glassfish較出色的部分 雖然Glassfish功能較多也較強大些,但配置的設定也會較為複雜 如果開發上用不到這麼多東西的話,較輕量且被大量運用的Tomcat會是較好的選擇

除錯 - java.lang.IllegalStateException: getOutputStream() called

今天碰上的這個錯誤訊息是在JSP頁面發生 ServletResponse.getOutputStream() ServetResponse.getWriter() 這兩個方法都會有可能在JSP輸出頁面內容的時候被調用 當其中一個方法被調用過後,再呼叫另一個方法就會報錯誤 解決的方法不外如下: out.clearBuffer();                           //清除buff out = pageContext.pushBody();     //更新out的內容

JavaEE 請求與回應處理

updated:2013/05 container載入類別後執行Servlet的建構式 建構式不應自行撰寫,使用預設即可 建構完成之後container會先執行Servlet的 init() 假使有程式碼(資料庫連結之類的)需要初始化,可覆寫 init() 達成需求

JavaEE Web 基礎概念

updated:2012/08 Java用來建置Web Application所使用的技術是Servlet與JSP Servlet是用來撰寫網頁或是需求的類別 而JSP是提高Servlet可讀性極易維護性所的技術,在執行時會轉譯成Servlet 要撰寫Java Web Application首先要準備好Java開發環境以及Tomcat  Tomcat是做為container來支援client端的請求與Server間的溝通 另外提供的功能尚有Servlet的生命週期管理、多執行緒支援、宣告式的權限管理、JSP轉譯

JavaEE 檔案上傳範例-使用Cos套件

Java EE規格雖然是針對網路應用開發的,但直到 Servlet 3.0 前都沒有提供檔案上傳的功能 Servlet 3.0的上傳機制可以參考 這篇 因為還沒打算轉換到Servlet 3.0 的打算下,先研究使用套件的解決方案 時下較為流行的上傳套件共有 Cos、FileUpload、SmartUpload Cos套件是 O'reilly 公司提供,可至 http://www.servlets.com/cos 下載套件(cos-26Dec2008.zip) FileUpload 的下載位置: http://commons.apache.org/fileupload/ FileUpload 使用須具備的套件: http://commons.apache.org/io/ SmartUpload 的網站已關閉,大概未來也不會繼續開發了 FileUpload 具有較多的功能,也有提供方便用來做 Ajax 應用的 listener 不過純以上傳效率來說Cos是最優秀的,贏過其他套件不少 這次實作選擇使用Cos

JSP 頁面透過JSTL格式標籤庫取得整數

在一般的JSTL頁面,若是以 EL 進行運算會取得有小數點的 Float 數值 例如 ${6/9} 這行EL會在JSP頁面中轉換成0.6666666666666666 在不寫Java程式碼於JSP頁面的前提下,我們可以考慮使用JSTL的格式標籤庫 使用時先引入JSTL的格式標籤庫: <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> 這樣就可以在JSP頁面中使用formatNumber標籤                <fmt:formatNumber type="number" value="${requestScope.page / 10}" maxFractionDigits="0" var="num" /> maxFractionDigits指定成0,表示取0個小數點,也就是取整數的意思 這樣就能夠在網頁中用EL: ${var} 取得運算後的整數值