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

2013年2月8日 星期五

[Android] Take Notes

沒有留言:
最近一直在跟android的UI做奮戰,老是覺得用官方提供的UI,而想要做最佳的使用體驗是這麼難。

以下是自己遇到的一些雜問題

1. ListView ,ListAdaptor 支援section header

找到不錯的討論
http://stackoverflow.com/questions/4640731/simplecursoradapter-with-sections-in-android
和提到的作法
http://jsharkey.org/blog/2008/08/18/separating-lists-with-headers-in-android-09/
這算是蠻不錯的作法,且很清楚。

但是麻煩的是我用ListFragment,還是CursorAdapter 查詢DB,這又讓我困擾了。
這時候由上面的討論得到了另一條線索

SectionCursorAdapter.

看完了之後,發現自己改成繼承SimpleCursorAdapter,終於搞定了。不過要注意的是Header的Layout的xml要用TextView。

2. 像日曆一樣的橫向卷軸滑動(PageView)

最後找到以下Demo Api,要注意的是使用到android v4 support
Pakerfeldt
Acton Bar Sherlock
View Pager Indicator
Paging indicator widgets compatible with the ViewPager from the Android Support Library and ActionBarSherlock. Originally based on Patrik Åkerfeldt's ViewFlow.

3. java.lang.IllegalStateException: Recursive entry to executePendingTransactions


雖然可以弄出ViewPager切換特效,後搭配我使用的fragment中在包一層ViewPager 和 FragmentPagerAdapter就出問題了
原來Android不讓你使用巢狀的Fragment。
根據以下討論有些解法

http://stackoverflow.com/questions/7700226/display-fragment-viewpager-within-a-fragment

但目前在我每次且換主 fragment後,有畫面爛掉的bug
另一方面是說android 4.2 (API Level 17) 有提供支援了。但我還是4.0.3 API Level 15阿

相信寫完沒人會看懂這篇在寫什麼,反正就是take notes ... XD

2013年1月29日 星期二

Google Plugin and Eclispe version

沒有留言:


使用 Eclipse 專用的 Google 外掛程式
https://developers.google.com/appengine/docs/java/tools/eclipse

測試demo應用程式

appengine-java-sdk\bin\dev_appserver.cmd appengine-java-sdk\demos\guestbook\war

2009年7月26日 星期日

ajax file upload monitor struts2 fix

沒有留言:
最近試玩著plurk後,原本應該來寫篇plurk api java版的心得,但想想Plurk api已經氾濫了,也就算了。而大部分就是揣測http request接收何種網址與參數,這些在參考php api都可以做出來,實際上參考jPlurk的寫作,就可把剩下來的methods依樣畫葫蘆改成Java版的,也就差不多了完成了。

說到這邊來點有趣的東西吧,其實想說也就是 Monitored Ajax File Upload - For Struts 2。
其實在Java的Web App中寫些upload的功能是很基本的需求,早已存在各種fileupload套件,不得不提到的,apache的commons project對java真的貢獻良多。他們當也提供fileupload的處理。這對我們的好處是既然使用struts2當作是web framework,使用apache提供的自然不在話下。

其實要講的就是能夠使用ajax的fileupload方式,並且能夠即時更新上載的進度。參考demo網站。可以在該網站試著丟上任意檔案看看效果,該網站會自動把上載的檔案刪掉。本文章可算是該網站的延伸閱讀。使用ajax file upload for struts2 套件,可在google code下載AjaxFileUpload-0.03.zip。上面也有0.04版,但是卻是用jdk6版本包的,一般使用5.0開發環境會出現Java版本號碼錯誤。

一般開發者在看過他的簡單使用說明後,應該是可以正常使用的,但是結果並不怎麼如意。因為其中有幾個隱藏問題沒有解決。到頭來是為了解決小小簡單的問題,反而挖了該套件裡面的程式來看。

設定步驟:
1.當然是下載該套件0.03版,並且擁有struts2的開發環境。

2.在你的jsp頁面,加上該fileupload tag
<%@ taglib uri="http://www.davidjc.com/taglibs" prefix="djc" %>
<head>
...
<djc:head />
...
</head>
<body>
...
<djc:ajaxfileuploadform action="demo" dobefore="" doafter="" />
...
</body>


3. 設定strust.xml
<package name="ajaxfileupload" namespace="/" extends="ajaxfileupload-default">
<action name="demo" class="com.davidjc.ajaxfileupload.action.Demo">
<interceptor-ref name="fileUploadStack" />

<result name="success" type="httpheader">
<param name="status">200</param>
</result>
</action>
</package>



4. 撰寫pojo action Extend com.davidjc.ajaxfileupload.action.FileUpload

package com.davidjc.ajaxfileupload.action;

import java.io.File;
import org.apache.log4j.Logger;
import com.opensymphony.xwork2.Action;

public class Demo extends FileUpload{

private final Logger logger = Logger.getLogger(Demo.class);

public String execute() {
File uploadedFile = this.getUpload();
String contentType = this.getUploadContentType();
String fileName = this.getUploadFileName();


return Action.SUCCESS;
}

}


但是簡單的設定完你會發現不work,跳出一個錯誤訊息

沒錯,是個javascript錯誤。逼不得以只好從AjaxFileUpload-0.03.jar package中挖掘這是哪來的script,沒錯。
在裡面中的一隻ajaxFileUploadProgress.js中,找到

/**
* Gets the upload progress from the server and then recursively calls itself until
* the upload is complete
*/

function getProgress() {
jQuery.ajax({
type: "POST",
url: "uploadprogress.action?rnd=" + new Date().getTime(),
dataType: "json",
success: function(jsonData) {
....

},
error: function(request, error, exception) {
alert("Error detected: " + error + " and exception " + exception);
}
});
}


也就是說他在這段呼叫ajax的請求回傳錯誤了。這也是說要來檢查一下呼叫這隻action時,在不使用ajax時結果是如何。這邊的麻煩是該action是包在class中,需要使用log4j來開啟原本程式中的debug log,但結果在需要知道程式跑到的地方沒有寫log訊息。這也是一常常在debug別人套件的苦惱。要是這個套件寫的沒很好,又exception沒有拋出、log也沒寫到這就慘了。還好現在大家都是用google code 去maintain很自然的,也懶得裝svn就上google code去browser了,直接把code抓回來貼上去跑。關鍵的地方是還得解開AjaxFileUpload-0.03.jar 中的struts-plugin.xml去看實際的action是哪程式,原來是位於com.davidjc.ajaxfileupload.action中的UploadProgress我們可以看到。

當部屬好的時候我們直接去run該action,並觀察已經修改程式的log顯示,最後發現程式都跑到取得upload file info後要塞到json並return時某行就沒有往下跑。很納悶一定是哪邊有exception沒有throws或是print出來。這也是跟他使用json-lib有關。在發現直接catch該段程式碼無效後,只好一行一行插棋子找,最終確定是發生在塞資料在json object的地方有問題。只好就來研究json-lib這個套件了,在官方網站看到原來他有相依的package要使用
Json-lib requires (at least) the following dependencies in your classpath:

* jakarta commons-lang 2.4
* jakarta commons-beanutils 1.7.0
* jakarta commons-collections 3.2
* jakarta commons-logging 1.1.1
* ezmorph 1.0.6

最終則發現少了ezmorph的package...

後記:
1. 原作者少提到的一個相依套件
2. json-lib在缺少某個package時,竟然沒有拋出ClassNotFound之類的exception 這點很奇怪,可能是舊版的json-lib問題。
3. 在解決跑progressAction時,也發現struts config xml沒有設定好,故讀不到該package的action
4. 另外還有把json回傳成text string時遭遇到小困難,因為包在AjaxFileUpload-0.03.jar有寫一個return type來回傳json type 成 text string,但是他的程式出現NoSuchMethod Exception,可能是我用struts2 2.1.6版原因,不過從google code重抓上邊新的code貼回去後就好了。
5. 過程中有參考一個討論範例會比較清楚,他們也是用同個套件,遇到類似的問題
http://www.struts2.org/ajax-file-upload-in-struts2-using-ajax-file-upload-plugin/

2007年2月4日 星期日

XMI mapping to XML, 用 XSLT

沒有留言:
預官考試結束了,別人正在放年假的時候,我剛好有時間可以趕工一下進度...
我的工作其實比較像XML 整合 整合 在整合,編輯器 存庫 檔案,真是名符其實的中介軟體呀

xsl 是 XML Style Sheets,當要使用xsl ( XML Style Sheets)的轉換時,一般用網頁瀏覽器支援的xsl 轉換已可,即是像css幫html着裝一樣,撰寫xsl然後依附在xml檔案連結來着裝。
詳細可以觀看 w3school的範例如: http://www.w3schools.com/xsl/cdcatalog_with_xsl.xml
本身是讀xml檔,但是會載入xsl 樣式來呈現。這個簡單的做法是靜態的,好處是不用寫到程式,而只要寫一個style sheets即可透過IE 或 firefox 瀏覽器來讀取樣式顯示。

但是xsl的使用不僅僅於此,利用其中的xslt甚至可以把xml給轉換成另一種形式,不過這個轉換所需要就是支援xslt的parser和程式工具才能隨心所欲的利用 xsl 轉換。這點跟使用 dom 、SAX不同,因為你只要xml和 xsl檔 丟入程式,就可以依據xsl的檔案去轉換,不是直接把 xml編輯過程寫在程式裡。例如我們使用 apache Xalan Project 來幫我們做轉換的工作,它必須支援xslt、xpath等。你只要寫幾行轉換程式就可以利用xalan 來幫我們工作,xalan之好用jdk 1.5之後就有內入其中了。

接下來要使用UML/XMI了,依照發現目前支援XMI工具雖多,但是XMI內容無法規定到完全依樣的格式,所以每家的tool 轉成XMI都會有些微格式不相容,大概是XMI還在訂定的關係。以下是些 XMI支援的工具:
  • rational rose 2002/2003 需要安裝xmi addins,只支援到 UML 1.3 XMI export,有1.4的無法匯入
  • Eclipse 建模框架(EMF)但xmi格是挺怪的,找不到直接匯出成
  • netBeans MDR (自從3.6版後就找不到了更新的樣子)
  • hyperModel
  • Poseidon for UML
  • Codagen
  • jdeveloper 10g
感覺支援最好的是rational rose和 jdeveloper 10g,不過後面四項還沒實際用過。

有個原來會做的SVG ,似乎可以用了

相關網址:
Working XML: UML, XMI, and code generation, Part 1~3
UML SVG
在 Oracle JDeveloper 中通過 XMI 開發 UML 圖表
http://xml.apache.org/xalan-j/samples.html
Using JDOM and XSLT

2007年1月25日 星期四

就叫它 預官的一週吧!

沒有留言:
正巧,當每次有閒的時候,準備預官考試都只剩下整整一週
當初如此,想不到這次想早點準備都不行,今天開始就叫它
預官的一週吧,垂死掙扎的一週吧 XD。

不過剛發現Blogger的"文章標題" 變成了 "書名"????












這挺怪的,反正google有時候用語已經大陸化了,不管它。

懶人包的懶人包
由 bbs ptt 上鄉民用語產生而來的名詞
多重觸控
看過者 無不稱奇跟 iphone 有關,彷彿是關鍵報告電影一般
提到這個是剛好實驗室有人要買觸控式螢幕 . . .
eXist
Java based 的 XML File 資料庫 是 opensource 的
使用XQuery語法,實現了w3c的XML 資料庫理想。
其實只要是以Java 而有釋出的套件 通常是open 的
不必強調 opensource 因為binary code關係,
本身無法防治decompile source code被瀏覽
大家釋出套件時,基本上會附帶原始檔
除非是商業使用的套件軟體,他們會盡可能保護。

伊蘇之始源
最近突然在玩的遊戲,極好玩的ARPG,講求故事據情和過關,
這次交代了歷史前半段的緣由,伊蘇迷不可錯過。


昨天有兩位在職的數位學習班口試完,
老闆要我們來整理一下一位做的office addins的相關東西。
另一位作blog註解的,好像不太work,只架一個blog全班用實在是不夠力阿
每人一個blog,全班再利用 web rss reader來匯集訂閱才是王道,最好自己能寫個
web rss reader系統,直接大家使用來訂閱每個人的blog就更強了,
最好有支援OPML來分享訂閱,要分散式有分散式,要註解就加到reader系統上的功能就好了。

2007年1月8日 星期一

NetBeans 5.5使用心得

3 則留言:
今天一早就看到hate版上有人說 師大工業科技教育系的網站 http://www.ite.ntnu.edu.tw
出現怪怪的頁面 http://www.ite.ntnu.edu.tw/index.htm
看起來很有趣吧,大概被駭了。連首頁都看到asp的vbscript模樣。
師大還真是容易被駭的對象 =.=

題外話結束還是來寫寫NetBeans使用心得吧...
說起NetBeans 最近真有比較進步了。擺脫3.6版那時候難看的模樣。痾,應該說還在開發階段。
從4.0版到5.5版,進步真是蠻多的。如果說已經在用eclipse了,未何還用netbeans呢?
我只能說是興趣吧。當初選用IDE時,我第一個使用的是 JCreator,
這是最容易上手的IDE,預設的語言highlight,看起來最漂亮,用起來順眼。
執行效能,比方說開啟一個檔案比起其他的軟體都快很多。因為它是用c++寫的,
比起 java based的 ide ,整體感覺都比較快。不過隨著專案發展的複雜度變大。
IDE發展的進步,有支援ant、cvs 和 code template、 code complete和code folding等
需要的設定變的比較複雜,這時候就換Eclipse或NetBeans上場了。
當然IDE發展最快的巨大怪物JBuilder也是佼佼者。但是因為JBuilder系統需求關係,
所以使用 Eclipse 變成熱門的開發工具。既是IBM丟出來,又提供良好中文化和擴充支援。

當初想找比JCreator功能更好,程式碼色彩顯度漂亮的IDE是主要考量,再來才是一些功能。
像是那時候當紅的code folding功能等等。

說到NetBeans跟Eclipse最主要的不同,我覺得最主要的不一樣是他們的專案開發方式。
Eclipse跟大部分IDE最大不同是,他使用jre驗證錯誤,在寫的過程就會自動編譯來除錯。
這把編譯式的Java 變成直譯式的感覺。且通常寫完無錯誤時,.class 也自動產生了。

使用NetBeans的不同是,當初用起來比eclipse好上手。在classpath或程式庫的支援上,
當初只要掛載目錄就很方便抓到所有的 jar檔。而現在他們進階改成用 ant 部署為基礎
來開發,讓你沒有IDE時 ,也能透過 build.xml 來編譯和產生jar、javadoc等等。
這點是我一直想在eclipse尋求方法時,找不到完整支援的方式。除非取消他的 pre-compile
而我想在不同IDE找到一個相容平衡點,就是利用build.xml 方式部署。甚至可以有支援
圖形化介面讓自己編寫客製化的 build.xml 方式最好,不一定都是要完整複雜的build.xml檔。

當java最麻煩的package classpath 部署解決,IDE好用的地方就是其它他的輔助功能。
以下列出IDE 常用的輔助功能

基本

程式碼自動完成
程式碼範本
程式碼摺疊
Javadoc查詢
程式碼自動排版
錯誤提示修正 code assistant

進階

自動產生get/set methods
快速加入註解
快速加入 import 所需 package
快速加入 try catch 例外處理的呈述式
快速加入繼承、實作覆寫方法

其他

新增J2EE Project (Web 專案等)
圖形化編寫 xml、properties、GUI等
設定server 、tomcat runtime環境等
連結至資料庫設定含查詢功能

NetBeans很多功能預設就已經有了,不需像 Eclipse每次都要自己另外裝擴充
專案放置的位置也不必一定要放在workspace。彈性比 Eclipse好許多
而使用方式可以參考NetBeans 幾分鐘 demo
Abbreviations
Edit Hints
Code Completion
Navigation
Source Tools

有些code template和code assistant
有起來是不是很神奇呢? 大概受到 Ruby on rails 刺激吧
說起NetBeans唯一缺點大概就是目前還沒有繁體中文版吧。

2007年1月4日 星期四

security-constraint - tomcat

沒有留言:
Security Constraint 是 tomcat 一種有趣的設定方式,
這是tomcat 他 container 內建的安全機制。
使用預設BASIC的可以是

<security-constraint>
<display-name>Security constarint</display-name>
<web-resource-collection>
<web-resource-name>Java Application</web-resource-name>
<url-pattern>/folder/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>tomcat</role-name>
</auth-constraint>
</security-constraint>

<login-config>
<auth-method>BASIC</auth-method>
<realm-name>OnJava Application</realm-name>
</login-config>


登入利用tomcat-users.xml

Tomcat Web 限定IP存取

沒有留言:
再又一次回到 Tomcat 來玩它的安全性設定時 ,
發現有一個不錯的功能,也就是Valve
tomcat configuration 文件也有相關說明,
他可以方便你 filter 特定的主機存取
使用設定還蠻簡單的,他可以在(Engine, Host, or Context)加入設定,
例如只要在Context裡加上
<Context path="/path/to/secret_files" ...>
  <Valve className="org.apache.catalina.valves.RemoteAddrValve"
    allow="127.0.0.1" deny=""/>
</Context>

這樣就只能在127.0.0.1 IP下存取該資源。
如果沒指定 deny 樣式,則只會允許符合allow的樣式,而拒絕其他的樣式,反之亦然。

2007年1月1日 星期一

Java 物語

2 則留言:
有人說 Java 就是一堆名詞 ,這道盡了走入 Java 世界後有多麼繁多的專業技術要學習。
或許有些不是那麼重要。不過慢慢跨入 Java 世界的同時,一堆障礙一一浮現漸漸擋在你眼前。

如果拿求學的階段來比擬 Java 技術的養成學習的話,基本語法算是小學低年級。你可以寫 applet、awt、 swing 當回家作業,繼承、封裝、多型是告訴你世界的長相,存取scope教你怎麼交朋友。而執行緒是你的體育課。最後SCJP就是你的期末考試。

接著學習Jsp/servlet 使你從小學跨到中學,J2EE會成為你的學校,你學的東西比小學想像的還多,Java beans、java mail、jdbc、Design Pattern 這些都會成為你的回家作業,你總是有寫不完的回家作業,考不完的試;你需要學得隱含物件、EL、JSTL這些字彙,然後你還是要準備SCWCD期末考試。

當你想再往前跨入大學時,這時候你會跑jakarta project補習班,
另外SCJP、SCWCD是你的準考證,進到大學後 struts 老師就開始考驗你的耐心,
你會覺得 spring 學長是多麼受新鮮人歡迎的,hibernate 好像你的女友,改變了你的想法。
再來你可能會想修 jwsdp 輔系,面對 thinking 、effective可能是你啟蒙老師,有時候修課老師會突然丟個像 JSF、EJB 的東西當你的苦作業,而當你發現 json、ajax、ruby on rails 後,這會讓你驚訝懷疑得說, "他們作弊!" 。 最後老闆內心偷笑,才會跟你講,有個叫 POJO 的東西。

關於EJB,你的老闆說,想作學術研究的再來吧。

以上是看到下面文章後的出發奇想,其實不怕新名詞,只是怕沒時間學
這時候我想,怎沒人要出一本 Java 辭典。

《POJOs in Action》最佳J2EE減肥寶典

2006年12月29日 星期五

JSPWiki 安裝使用心得

沒有留言:
從今年初還是去年末左右,看到Xexex's Java和其他二三事大大
的一篇尋求支援中文Wiki ,我就開始就跨入了JSPWiki 使用摸索之旅。

關於jsp的好處,這篇關於JSPWiki兩三事每個 team 都該裝個 Wiki 介紹很多就不細談了。

在JSPWiki安裝和使用中其實問題還蠻多的,因為版本更新還蠻快的。
當初我在使用的時候,就像Xexex's Java尋求中文解決方面一樣的問題。
比如說在2.23版 的搜尋需改成lucene(在jspwiki.properties),才可以搜尋中文,

接下來過程中要使用附加檔有中文檔名的、頁面連結有中文名稱的,那時候都會有問題。

而有人提及在tomcat的{catalina.home}\conf\server.xml設定中

<Connector port="8080"              
maxThreads="150"
....

.....
URIEncoding="UTF-8"
/>

需要加上設定URIEncoding="UTF-8"。可以解決部分中文 URI連結問題。
現在在使用到2.471以後的版本好像都自動解決了,不需手動設定。

但是我最大的問題在於它新版的登入功能始終有疑問。
好像不完整還是有bug,實際去觀察其實這問題蠻大的。
因為我用了兩三台電腦去安裝,它使用jass登入系統都不 work。
登入會一直產生invalid login。
這時只好翻查許多 bug回報和觀看log記錄檔

2006-12-28 11:21:17,631 [http-80-Processor25] ERROR com.ecyrd.jspwiki.auth.AuthenticationManager
- Couldn't retrieve login configuration.
Message=無針對 JSPWiki-container 配置的LoginModules
2006-12-28 11:21:17,631 [http-80-Processor25] ERROR com.ecyrd.jspwiki.auth.AuthenticationManager
No login context. Please double-check that
JSPWiki found your 'jspwiki.jaas' file or the contents have been appended to your regular JAAS file.
看起來是 jaas 配置的問題,不過這也很奇怪,因為一般使用預設的方式即可自動設定。
官方似乎有這樣的FAQ -Login does not work, create new users does
根據jspwiki.properties裡描述

# See the jspwiki.properties and jspwiki.jaas files for more details on
# how to do this. These files contain addition configuration options
# for the JSPWiki security policy and authentication, respectively, although
# the defaults should work fine. If you don't set the JRE properties,
# JSPWiki will use default versions from the WEB-INF directory.

# AUTHENTICATION
# For authentication, JSPWiki uses JAAS (Java Authentication and Authorization
# Service). The Authentication system is configured in the jspwiki.jaas
# file; by default it will attempt to leverage your servlet container's
# authentication services, if present. JSPWiki also can use its own
# authentication system, which is separate from the container.
有說跟沒說一樣 =.=
後來發現 JSPWiki的jaas程序是這樣子的,如果使用者自己有設定jaas則他會讀取該jaas設定。
若是沒有設定jaas,則JSPWiki會自動改用預設在WEB-INF\底下的jspwiki.jaas檔。
這個問題在此有提及到 多個wiki使用jaas問題(有點展露署光):D
Our default strategy is to try to install a JAAS configuration and supplemental J2SE policy if we detect that the user hasn't set them up already. We do this so that the administrator doesn't have to fool around with config files, and that it runs out of the box. On a multi-wiki system or one that's used in production, of course, we recommend setting the location of the JAAS and J2SE files manually so that they run JVM-wide.
這個立意良好的設定,在此卻是造成我們使用上的最大困擾。

為什麼呢? 後來我發現在我安裝在多台電腦上的JSPWiki唯一一台成功可以使用wiki登入系統的
電腦(最乾淨的 jdk、tomcat 沒有裝過其他可能會用到 jaas的web系統的)
在其log檔發現載入jaas設定部份
2006-11-23 10:09:18,921 [main] INFO com.ecyrd.jspwiki.auth.AuthenticationManager 
- JAAS not configured. Installing default configuration:
file:/C:/jakarta-tomcat-5.0.28/webapps/JSPWiki/WEB-INF/jspwiki.jaas.
You can set the java.security.auth.login.config system property to point to your jspwiki.jaas file,
or add the entries from jspwiki.jaas to your own JAAS configuration file.
而在不行的電腦上log 為
2006-12-28 11:20:48,053 [Thread-0] INFO com.ecyrd.jspwiki.auth.AuthenticationManager 
- JAAS already configured by some other application (leaving it alone...)

知道為什麼了嗎?因為我其他的電腦上都裝過一些會用到web services的元件,其中也可能有用到
jaas的東西,所以他都讀到其他那個的jaas設定,而WEB-INF\jspwiki.jaas檔完全就不會讀到了,
除非我把系統正規讀到jaas設定檔,加入jspwiki.jaas的部分,或是移掉可能有設定到jaas 的部份。
可惜我還是找不到那個設定 jaas的檔在哪裡。

最後在只好利用客製化設定 在系統變數加上參數
Customizing JSPWiki's JAAS Configuration
export CATALINA_OPTS="-Djava.security.auth.login.config==/etc/jspwiki.jaas"
or
set CATALINA_OPTS="-Djava.security.auth.login.config==C:\xxx\jspwiki.jaas"
才使登入系統可以正確操作。
其他又可以開始玩換佈景和加入些外掛插件增強功能了
不過插件的相容版本問題,又是挺討厭的。
目前使用2.4.87版本

2006年12月28日 星期四

防止Tomcat底下 目錄列出

沒有留言:
在 {catalina home}/conf/底下,找到web.xml檔案,尋找

<servlet>


....
<init-param>
<param-name>listings</param-name>
<param-value>true</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>


把true改成false即可

2006年12月24日 星期日

登入系統 規劃

沒有留言:
需求:
  • JSP/Servlet (先不考慮framework,從簡單着手)
  • 為求簡單使用 xml 替代一般database 系統
  • 為求密碼安全,使用md5/HSA 轉編碼(缺點:md5碰撞...有人解了,md5為單向密碼,忘了無法還原)
保障目錄安全性--幾種方法
  • 關閉tomcat 目錄展列 (簡單 無法各自設定)
  • Filter 撰寫目錄安全性,無權限錯誤檢視畫面。(最客製化)
  • 預設servlet導向子目錄(比Filter容易些)
  • 使用apache當上層管理,tomcat 子目錄(使用apache安全特性)
  • 使用Filter 檢查是否已登入,未登入者導向登入頁面。
不知道有遺漏什麼?
有人有建議嗎?

2006年12月8日 星期五

OMAR R/R WebStart Java UI

沒有留言:
Java UI 的 WebStart
就是說你可以不需要自己編譯Java UI,透過網路和你的jre就可以用了

網址SourceForge網址

不虧是Sun工程師

2006年9月15日 星期五

Eclipse JS Encoding

沒有留言:
在使用Eclipse 編輯 JS 時 ,不管用哪個外掛編輯器,
再輸入中文字後存檔,在打開時都會發生字體變成亂碼????
這是由於Eclipse一個顯示bug
原因就是 JS 的文件他是用 US ASCII 寫的,所以預設編碼是 ASCII
在改成UTF-8即可以了,不過改的地方需要注意
Preferences -> General -> Editers 這邊 改Text File encoding (預設是MS850) 是沒用的
需到 Preference -> General -> content type 點選 JavaScript
在 Default Encoding: US ASCII Code 改成 UTF-8 即可

這裡指的是文件編碼,和網頁編碼不一樣喔。檔案編碼常受限編輯器設定關係。

2006年8月20日 星期日

Eclipse Callisto Project

沒有留言:
從換了新電腦後今天安首度裝了新的Eclipse,其中比較有趣的是 Eclipse 提供了新的專案,也就是 Callisto
Callisto 是在六月底的時候公佈下載的,我想這是 Eclipse 對 plugin 煩雜的外掛程式和本版相容性問題,終於提供一個解決方式了。
在我試用個過程中不難感受到是一種像 Firefox 的擴充套件管理,事實上Eclipse 的這個方法,在我以前使用 jEdit 的經驗中早已見識過了,對編輯器有興趣的人可以去下載來使用。
jEdit 是 java based的文字編輯器,相當於好用的ultraedit一樣;不同的是他是免費的,且具有龐大的外掛支援著各種功能 。它的plugin 之多不比 eclipse 少,並且你可以任意擴充成你想寫的程式環,最重要的是他的 plugin可以透過管理功能直接查閱清單,並點選下載。也可以看到你已安裝的plugin,就像你的firefox一樣。現在的 Callisto 就有點這個味道,不過 Callisto主要提供了十種官方進行中的專案讓你下載,我想這是Eclipse想一統煩雜plugin的目的,因為他就像提供官方的外掛程式一樣 ,也就是Callisto清單了。將eclipse更新選項 改成 Callisto list 就可以連到那邊進行下載更新。
不過看似像 jedit 方便 ,但無法像 jedit 自由的安裝官方以外的外掛程式。
這難免讓我又想到 EasyEclipse 的出現,就是為了擺脫Eclipse煩雜外掛安裝和版本相容問題。
對於Callisto , EasyEclipse 是另一個不錯的選擇,它幫助各種開發者測試了很多常用的外掛程式和版本相容性,相信會更多人使用。
對Callisto有興趣的可以去看網站上Tutorial Demo

2006年8月15日 星期二

tomcat 5 手動安裝 系統服務

沒有留言:

使用原始檔為zip的 tomcat,手動安裝 windows系統服務

command line :
手動安裝服務最安全的方法就是使用service.bat。
使用service.bat安裝名字為''''Tomcat5''''的服務
C:\jakarta-tomcat-5.0.28\bin> service.bat install tomcat5
觀看服務是否安裝成功
開啟 系統管理工具-> 服務 來觀看結果
安裝服務後可以使用bin\tomcat5w.exe 開起GUI服務界面
移除服務
要移除服務,你需要使用tomcat5.exe的//DS//參數。如果服務正在執行,將首先關閉然後刪除。
移除名字為''''Tomcat5''''的服務
C:\> tomcat5 //DS//Tomcat5

======簡單方式======

C:\jakarta-tomcat-5.0.28\bin> service.bat install/remove [service_name]

相關連結:

2006年5月9日 星期二

ebxml Registry Repository - omar 雜記

沒有留言:

前天和昨天終於把 SCORM RR 給搞定了,
從之前到現在,觀察許久OMAR本身的專案,架設他們的omar server ,使用他們的Java & Web UI
以下總結一下心得:
以前學長使用的是 omar 3.0 alpha 2 ,我們新版的使用的是 omar 3.0 beta ..
光這兩種就改了不少地方。
首先在classification node 路徑 or concept 路徑上 新舊版的差別:
舊版的 path 學長是用:
/urn:uuid:3188a449-18ac-41fb-be9f-99a1adca02cb/RegistryObject/RegistryEntry/ExtrinsicObject/SCORM/
新版的 path 是
/urn:oasis:names:tc:ebxml-regrep:classificationScheme:ObjectType/RegistryObject/ExtrinsicObject/SCORM/
前者學長是複製到uuid的路徑,所以有些字串變成了16進位碼,而這段路徑在別台omar server上就不適用;我則是使用非uuid的名稱路徑,在別台這樣的路徑也可以使用。
而後半段,是新舊版classificationschema 樹狀路徑的差別,舊版有著RegistryEntry 這個 Concept
再來新舊版有個差異,如果沒有碰omar project 的原始碼是看不出來的。
新版的資料庫已經用了Hibernate 中文
而在資料庫設定上,利用omar.properties屬性檔設定。
omar 共有三大屬性設定檔 omar.properties、omar-common.properties、jaxr-ebxml.properties
omar.properties 是關於 server 的設定(資料庫這方面在這邊可以找到)
omar-common.properties 關於安全性和其他設定。
omar-jaxr.properties 是關於client的設定(Java UI 、 Web UI等 )
而在WEB-INF\classes\底下除了properties檔以外還有一堆 xml 檔,這些就是 hibernate 使用的。
OMAR Project 的 package套件,共分為
org.freebxml.omar.client ,
org.freebxml.omar.common
org.freebxml.omar.server
三大類,底下細分更多繁不備載。
那除了屬性檔以外,新版omar 有加強 security 的實作,像是在Java UI (registry-browser.jar) 新版的使用
使用者的新增會註冊你的CA 憑證 在omar的一個地方,像是C:\omar\data\security\keystore.jks
他的Use Case 如下:
首先在Omar Server 尚未註冊新使用者時,你可以新增 new account,新增需填入的資訊會包含兩樣,一是User Info 、二是CA alias & password 用來產生新的 CA。
通常是你沒有自己的CA時,omar 實作幫你產生自己新的CA (.p12格式),
但是官方不建議用omar產生的CA。
填完資料註冊新增後。底下會有兩個動作:一是把User Info 存入 RR,
二是把自動產生的CA資訊(alias / password)存入你設定的
C:\omar\data\security\keystore.jks 這個位置。
第二種情境,則是使用你已經有的CA來新增註冊使用者。它會存入新使用者資訊和把這個 CA 和新增的使用者 map 在一起,以後登入是用CA 的alias / password 就可以登入。

第三種是你已經有user account 和對應的CA 時,但是你在不同的電腦上想登入遠方的 omar server;
這時候有兩種情況,一是用 Java UI (即 JAXR),二是Web UI;
先說Java UI(registry-browser.jar),新版的已經有一個功能,是把你的CA載入至這台電腦的Java UI ,實際動作就是會載入至 JAXR,假如你再用自己寫的 Client /JAXR 這點就很重要,你可以用Java UI 預先載入已經新增註冊過的CA,這樣你利用(alias / password)登入後,就可以用程式去新增修改RO。
第二種如果使用WEB UI 話,只要Server的
Tomcat 有開啟 SSL https 8443 port 功能,你在遠端可以直接載入CA到Web borwser上,即可以自動認證登入使用了。tomcat 上的設定看起來是這樣:
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" disableUploadTimeout="true"
acceptCount="100" debug="0" scheme="https" secure="true"
clientAuth="want" sslProtocol="TLS"
truststorePass="ebxmlrr"
truststoreType="jks"
truststoreFile="C:/Java/omar/data/security/keystore.jks"/>
詳細請看官網 omartomcat ssl
在使用學長的SCORM RR 時,他的 user 是事先載入至JAXR過的,
就是先利用Java UI 新增 account,並存入omar\data\security\keystore.jks
所以使用時 連C:\omar (原來部屬用的原檔) 也要複製過去。
而舊版沒有讓你備份你的CA 檔案(.p12格式)的功能。
新版的則可以利用 Client UI 讓你產生並存放和帶著走。
這個omar安全性限制下,就是只有該帳號才能作新增和修改刪除自己所屬的RO。
再談談OMAR RR在新舊版的差異,除了查詢和新增修改外,新版的規格路徑不同外,
在其中的一項功能處理getRegiestyObject(顯示xml),和get RepositoryItem時 ,
這邊新舊API 差距甚大,其實在學長呼叫omar package裡得 QueryManagerImpl 並使用時,新版同樣有這個 Class。 不過其中API裡使用的RegistryException已經由 org.freebxml.omar.common.RegistryException
改成 javax.xml.registry.RegistryException
這是 omar package 的改變。大概認為原先的不妥,不使用了。或是 javax 已經釋出新的 api
都改好程式碼後,我曾遇到錯誤 Exception,這個Exception還不是我寫的地方,而是我使用
omar package 裡的 類別
這怎可能呢"NullPointException"
Trace 了半天 omar package 原始類別後,也沒辦法重新編譯,這是別人釋出的 package。怎麼會有呢?大約花了快一天的時間把 source code 找了出來,並且code出一段段來執行,
終於知道那個環節錯了。但是知道是哪一段,卻不知到怎麼發生的。
NullPointException 這個看似基礎的問題,卻又發生得很莫名其妙。竟然找不出為什麼會是Null,所以開始檢查那個 instance是取得Null的。畢竟這是龐大的 omar package source code
經過一段段檢查後發現了是那一段用到 org.freebxml.omar.server.persistence.PersistenceManager 類別
他是null 。(這中間不知道經過多少個檔案搜尋、trace 他的design pattern、factory、manager、singleton、interface等等,好多個QueryManage(qm) 、bussiness query manager、bqm 、lcm、 xxm, xxqm, xxqmImpl.....什麼有的沒有的.等等。
最終呢發現了一個錯誤訊息,終於不是外層的NullPointExcetion了,從print stack中發現上述 PersistenceManager沒有 instantiate成功,所以找找他到底是什麼時候 new 出來的?
結果終於發現啦 ^^" ,他...OMAR 有使用Hibernate啦,用這個 omar.properties 和 一推看起來像是repository.jdbc.cfg.xml 的檔案裡設定啦。而我就少了這些檔,這個在舊版omar 3.0 alpha 裡是沒有用到的技術啦。所把新版的檔案溝過去就ok了 \0o0/
結語:程式是實際碰過後才會知道其中的奧妙,資源都擺上去了,碰不碰在自己。沒試過很懶的就不要問令人生氣的問題。因為一聽就知道你連基本功課都沒作,等著別人弄好給你,坐享其成。

2006年4月23日 星期日

Axis下使用SOAPMonitorService

沒有留言:
參考網址
http://ws.apache.org/axis/java/user-guide.html#AppendixUsingTheSOAPMonitor

環境:
AXIS 1.3
Eclispe 3.1.1

axis web已經建立在tomcat上如: axisdemo
在 Axis 中使用SOAP Monitor:

1.在axisdemo目錄下 先編譯 SOAPMonitorApplet.java (classpath 加入 axis.jar)
如果沒有axisdemo 請先下載 axis package,
從%axis_home%\webapp\ 複製axis 到 %catalina_home%\webapp\
隨便rename axis 為名稱axisdemo

2.在 C:\Java\workspace\axisdemo\WEB-INF> java -Djava.ext.dirs=%AXIS_HOME%\lib org.apache.axis.client.AdminClient
-lhttp://localhost:8080/axisdemo/services/AdminService
deploy-monitor.wsdd

3.
deploy-monitor.wsdd
--------------------------------------------------------------
<deployment xmlns="http://xml.apache.org/axis/wsdd/"
xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
<handler name="soapmonitor"
type="java:org.apache.axis.handlers.SOAPMonitorHandler">
<parameter name="wsdlURL"
value="/axis/SOAPMonitorService-impl.wsdl"/>
<parameter name="namespace"
value="http://tempuri.org/wsdl/2001/12/SOAPMonitorService-impl.wsdl"/>
<parameter name="serviceName" value="SOAPMonitorService"/>
<parameter name="portName" value="Demo"/>
</handler>
<service name="SOAPMonitorService" provider="java:RPC">
<parameter name="allowedMethods" value="publishMessage"/>
<parameter name="className"
value="org.apache.axis.monitor.SOAPMonitorService"/>
<parameter name="scope" value="Application"/>
</service>
</deployment>
---------------------------------------------------------------

4.在需Monitor的services deploy裡加入
--------------------------------------------
<service name="xxx" provider="java:RPC">
<requestFlow>
<handler type="soapmonitor"/>
</requestFlow>
<responseFlow>
<handler type="soapmonitor"/>
</responseFlow>
</service>
-------------------------------------------
5.檢示 http://localhost:8080/axis/SOAPMonitor

參考網址:http://ws.apache.org/axis/java/user-guide.html#AppendixUsingTheSOAPMonitor

2006年4月22日 星期六

基本OO變數

沒有留言:
Java基本OO的變數種類

Java物件導向中有:類別變數(class variable)、物件變數(object variable)、區域變數(local variable)
等基本類型

他們在存取的範圍(scope)、生命週期(lift cycle time),都有不同的用法。

不談死記的方法,想像在OO中的理念,一個物件的定義可以用Class來表示。即自己描寫製作一個類別

class Animal{

}

在一個類別裡,我們會有幾個元素,理所當然就好像他會有名字、年齡、性別,這種可以描述物件的屬性attribute或稱為metadata;然後是這個類別的行為,如喝水、說話、做等行為。以Java來說一個 class裡就包含這樣的元素,你可以稱之為 variables 和 methods,

class Animal{
String name;
public void speak(){
}
}

簡單的 class 定義其實就只是一堆 variable 和 method 的集合,全部都屬於該 class 的member
所以在C++又有稱之 member variable or member function ,表示這些為該類別的"成員"

說到這裡知道 class 的基本要素後,你要想想把 class 當作你的對 object 的定義,
你可以用 你所自訂的 class 去產生許多物件,即產生物件的多個實例(instance)。

這裡要注意的是,後面只會提 "class" 和 用 class 產生的 "instance",
不會在用"object" 來解釋 Java 的 OO,以免你把 instance 跟一般所述的 object 搞混,
object 會讓你把 class 和 instance 弄混。

當你知道什麼是 instance 之後,你可以用你所寫的 class 去產生一個 instance
(一個有自己資料的個別instance), 當設定他的資料欄位或操作他的方法時,
都屬於該instance的操作。

Animal a1 = new Animal( );

//這是產生一個 instance 的語法。

Animal a2 = new Animal( );

//則是另一個 instance

a1.name 就是 instance variable ,該變數 name 是屬於 al 的 ( 雖然a1.name存取方式有違封裝性 )
instance variable 的特性是 不同的 instance 間,各自 instance variable 並不相干。
a1 的 name 可以是"小白" , a2 的 name 可以是"阿花"。

//-------------------------------分隔線 ------------------------------------------------------ ------------
瞭解什麼是instance variable後,皆下來可以想想是否會有 variable 是同一種 class所共享的變數,
有種全域變數的感覺,答案是有的。 即是 "class variable"

class Animal{
static int max_age_limite ;
}

static 是 java 的 關鍵字,可以宣告class variable,如果宣告成 class variable 時,
整個 class 共享同一個變數。通常使用時不會在去instance 後在存取 ,
可以直接使用class name去存取,如 Animal.max_age_limite,
若是用
a1.max_age_limite ++ ;
a2.max_age_limite ++ ;

則 max_age_limite 會被加兩次,他們指的是同一個變數

注意,當能用" . " 去直接存取變數時,表示該變數是宣告成 public scope ,可能違反物件封裝性質

待續...

2006年4月8日 星期六

無責任 Eclipse教學 (更新2013)

1 則留言:

在經過幾年的Java IDE戰爭後,幾乎專業的Java程式開發者都須向於Eclipse,除非你曾經在昇陽工作,或是Oracle Java教育訓練講師,或許還仍使用NetBeans。我也曾經是NetBeans的推崇者。不過本文主要使講解使用Eclipse 開發工具,Eclipse目前已經已經是非常Popular的Java開發工具IDE。 

此文曾經發表於2006年4/8號。但當時Eclipse 使用度還未甚高。開發web app仍比較麻煩需要自己選擇WTP Plugin。現在大可直接透過Eclipse官網選擇Java EE版本的Eclipse即可。
http://www.eclipse.org/downloads/
目前最新版為代號 JUNO

以下為個人開始使用後 ,歷屆舊版版本代號(參考 維基百科 Eclipse)
Europa3.32007年6月27日2007年9月28日2008年2月29日
Ganymede3.42008年6月25日2008年9月24日2009年2月25日
Galileo3.52009年6月24日2009年9月25日2010年2月26日
Helios3.62010年6月23日2010年9月24日2011年2月25日
Indigo3.72011年6月22日2011年9月23日2012年2月24日
Juno4.22012年6月27日2012年9月28日2013年2月22日

下載後其實只要解壓縮即可以啟動使用

Step1. 使先開啟Eclipse,然後設定Preference 開啟喜好設定
Step2. 切換到 server 項目,Installed Runtimes
Step3. 點選Add runtimes ,選擇 Apache > Tomcat 7 ,按 Next

Step4. 選擇Tomcat 目錄位置,和 JRE位置,然後Finish。把新增runtime server打勾。
Step5. File>New>Project,選Web/Dynamic Web Project> Next,填上Project Name,這裡我填入MyFirstWeb,Target runtime選剛剛新增的。
Step6. Select Project Facets 不變Next,Web Module設定WEB Context、WEB-INF和SRC
這裡使用預設
Step7. 好了之後可以在套件瀏覽器上面看到下面圖
Step8. 在WebContent裡新增一個index.jsp檔吧,並在body 間打入<%="Hello World"%>存檔。
Step9. 在套件導覽器選index.jsp右鍵,執行為run on server,選擇Tomcat server 5.0
Step10. Tomcat 自動啟動並且開啟browser完成


PS . 若沒有安裝JDK需要先行安裝,因為使用預設JRE無法進行JSP Compile

相關文章: