Google Code Prettify

2009年5月18日 星期一

fedora10 安裝PostgreSQL8.3.7

建立群組與使用者

     groupadd postgres
     useradd -g postgres postgres

安裝RPM source安裝方式可參考這裡

     rpm --import http://yum.pgsqlrpms.org/RPM-GPG-KEY-PGDG

     rpm -ivh postgresql-libs-8.3.7-1PGDG.fc10.i386.rpm
     rpm -ivh postgresql-debuginfo-8.3.7-1PGDG.fc10.i386.rpm
     rpm -ivh postgresql-docs-8.3.7-1PGDG.fc10.i386.rpm

     rpm -ivh postgresql-8.3.7-1PGDG.fc10.i386.rpm
     rpm -ivh postgresql-devel-8.3.7-1PGDG.fc10.i386.rpm
     rpm -ivh postgresql-server-8.3.7-1PGDG.fc10.i386.rpm
     rpm -ivh postgresql-plperl-8.3.7-1PGDG.fc10.i386.rpm
     rpm -ivh postgresql-plpython-8.3.7-1PGDG.fc10.i386.rpm
     rpm -ivh postgresql-test-8.3.7-1PGDG.fc10.i386.rpm
     rpm -ivh uuid-1.6.1-3.fc9.i386.rpm
     rpm -ivh uuid-pgsql-1.6.1-3.fc9.i386.rpm
     rpm -ivh postgresql-contrib-8.3.7-1PGDG.fc10.i386.rpm
     rpm -ivh tcl-8.5.3-1.fc10.i386.rpm
     rpm -ivh postgresql-pltcl-8.3.7-1PGDG.fc10.i386.rpm

---------------------------------------------------------------------------
初始化DB

     service postgresql initdb -D /var/lib/pgsql/data -E UTF-8 --locale=zh_TW

修改設定檔

     cd /var/lib/pgsql/data

     vi postgresql.conf

          listen_addresses = '*'
           port=5432

     vi pg_hba.conf

          host all all 192.168.0.0/16 trust


修改iptables,開放5432 port連線
     vi /etc/sysconfig/iptables

           -A INPUT -m state --state NEW -m tcp -p tcp --dport 5432 -j ACCEPT
     service iptables restart

     service postgresql start
     ps auxww | grep ^postgres


設定開機時啟動

     chkconfig postgresql on

Spring MultiActionController 也能應用在檔案下載功能

public ModelAndView download(HttpServletRequest req, HttpServletResponse res) throws Exception {
     String sno = req.getParameter("abc");

     try{
          List list = dao.Select("select * from abc_file where abc="+abc);
          if(list.size() != 0){
               Map map = (Map) list.get(0);
               String file_name = map.get("file_name")==null?"":(String)map.get("file_name");
               Long file_size = map.get("file_size")==null?Long.valueOf(0):(Long)map.get("file_size");
               byte[] file_contents = (byte[]) map.get("file_contents");
               String content_type = map.get("content_type")==null?"":(String)map.get("content_type");

               String agent = req.getHeader("User-Agent");

               res.reset();

               if(agent.indexOf("MSIE") != -1){
                    file_name = URLEncoder.encode(file_name,"UTF8");
               }else{
                    file_name = new String(file_name.getBytes("UTF-8"),"ISO8859-1");
               }

               res.setHeader("Content-disposition","attachment; filename="+file_name);
               res.setContentLength(file_size.intValue());
               res.setContentType(content_type);

               BufferedOutputStream ou = new BufferedOutputStream(res.getOutputStream());
               ou.write(file_contents);
               ou.flush();
               ou.close();
          }

     } catch ( Exception e ) {
          logger.error(e);
          throw e;
     }

     return null;
}

Spring MVC + Velocity

參考手冊

http://www.javaworld.com.tw/confluence/display/opensrc/Spring
http://velocity.apache.org/engine/devel/user-guide.html


開發外掛

SpringIDE http://springide.org/updatesite/
VeloEclipse http://veloeclipse.googlecode.com/svn/trunk/update/
Dreamweaver Velocity http://velocity.gilluminate.com/


設定
  1. 相關jar檔
    commons-collections.jar
    commons-lang.jar
    commons-logging.jar
    log4j-1.2.15.jar
    spring.jar
    spring-web.jar
    spring-webmvc.jar
    velocity-1.6.2.jar
    velocity-tools-generic-1.4.jar
    velocity-tools-view-1.4.jar

  2. web.xml
    將所有網址.do的頁面導向spring servlet做處理。

  3. spring-servlet.xml
    Bean id=velocityConfig,設定Velocity參數。
    Bean id=viewResolver,解析*.vm頁面。



    Bean id=paramMethodResolver,解析url上的method參數,導入至對應的Method,預設值為view。
    Bean id=thinkonDao,宣告為Bean方式,方便其它Bean注入引用。
    Bean id=urlMapping,解析url,導入至對應的Bean id。
    Bean id=indexAction,測試範例,對應/index.do,注入dao引用。




範例
  1. index.java (Spring MultiActionController)
    輸出參數至ModelAndView,導入index.vm做剖析輸出畫面。

  2. index.vm (Velocity)
    ${title}會對應至ModelAndView的title參數。
    #set($a = ‘abcsdfsd’) 為宣告頁面變數。
    ${a}會對應至#set($a)的值。


  3. 輸出結果
    ${uic}因尚未找到任何對應的變數,所以不處理。

2009年5月15日 星期五

基本JSR-168 Portlet 開發範例

以下範例採用NetBeans 6.5開發,Portlet開發外掛為 Portal Pack 3.0

1.建立新專案



2.填入專案名稱



3.選擇Portlet Supper相關設定
     Portlet Version: 1.0(JSR-168) 2.0(JSR-286)
     Create Portlet:產生Portlet java source
     Create Jsps:產生 Portlet Mode對應的Jsp
     Package: java source路徑
     Portlet Mode: View 瀏覽模式,也是預設進入的模式。
     Edit 編輯模式,通常用來修改設定參數。
     Help 說明模式。



4.Portlet java source簡介
     此檔類似於 Servlet
     processAction:變更事件時的進入點,執行完此處在會進入所對應的事件funciton。
     doView:執行VIEW模式時,所對應的function。
     doEdit:執行EDIT模式時,所對應的function。
     doHelp:執行HELP模式時,所對應的function。


5.processAction簡易應用
     request.getPortletMode(),取得現在執行的模式。
     request.getParameter(),取得傳入的參數。
     request.setAttribute(),塞入參數,對應的模式或jsp顯示時,能取得此參數。
     responese.setPortletMode(),修改預定要執行的模式。


6.JSP撰寫
     Portlet java source中的RenderRequest會變成renderRequest。
     Portlet顯示時不需要寫出完整的HTML(不需<html><body>),僅將區塊顯示出來即可,最好使用div的區塊方式。

Solaris10 安裝PostgreSQL 8.3.7

1.下載postgresql-8.3.7-S10.i386-32.tar.bz2

2.到postgres的目錄解壓縮檔案
     cd /usr/postgres
     bunzip2 < postgresql-8.3.7-S10.i386-32.tar.bz2 | tar xpf -

3.修改/etc/profile,增加設定
     PATH=/usr/postgres/8.3-community/bin:$PATH
     MANPATH=/usr/postgres/8.3-community/man:${MANPATH}
     PGDATA=/var/postgres/8.3/data
     export PATH MANPATH PGDATA

4.修改postgresql_83.xml內容,更新至最新版路徑
     檔案路徑/var/svc/manifest/application/database/postgresql_83.xml

5.匯入設定
     svccfg import /var/svc/manifest/application/database/postgresql_83.xml
     svcs postgresql_83

6.初始化DB
     su - postgres
     /usr/postgres/8.3-community/bin/initdb -D /var/postgres/8.3/data -E UTF-8 --locale=zh_TW

7.啟動DB
     /usr/sbin/svcadm enable postgresql_83:default_32bit

HTTP + SSL

//受信認的憑證方式,加入一行程式碼即可


System.setProperty( "java.protocol.handler.pkgs", "com.sun.net.ssl.internal.www.protocol" );

URL url = new URL("https://xxx.xxx.xxx");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();

-----------------------------------------------------------------------------------------------
//非受信認的憑證方式


TrustManager[] trustAllCerts = new TrustManager[] { new X509TrustManager(){
public java.security.cert.X509Certificate[] getAcceptedIssuers(){
return null;
}
public void checkClientTrusted(java.security.cert.X509Certificate[] certs, String authType){}
public void checkServerTrusted(java.security.cert.X509Certificate[] certs, String authType){}
}};

SSLContext sc = SSLContext.getInstance("SSL");
sc.init(null, trustAllCerts, new java.security.SecureRandom());

//不判斷Hostname是否正確


HostnameVerifier hv = new HostnameVerifier(){
public boolean verify(String hostname, SSLSession session) {return true;}
};

HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
HttpsURLConnection.setDefaultHostnameVerifier(hv);

URL url = new URL("https://xxx.xxx.xxx");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();

WebService + SSL

WebService Server 上的SSL憑證,為非公開受信任的憑證時

可手動將憑證匯入JDK之中

cd C:\jdk1.6.0_03\jre\lib\security

keytool -keystore client.keystore -import -file ooxx.crt

查詢清單
keytool -list -keystore cacerts

2009年5月11日 星期一

VirtualBox 筆記

版本:VirtualBox 2.2.2

VirtualBox vdi 複製方式

至 VirtualBox 目錄
cd C:\Program Files\Sun\xVM VirtualBox

複製 fedora10.vdi 為 fedora10_1.vdi
VBoxManage clonevdi E:\fedora10.vdi E:\fedora10_1.vdi


---------------------------------------------------------------------------

內部網路無法正常互連

可將網路卡設定為Host-only-Adapter