練功房推薦書單

  • Google!Android 3手機應用程式設計入門(第四版)
  • 賈伯斯傳(軟皮精裝版)
  • 猛虎出閘制霸版:最新OCP Java SE 6 Programmer專業認證(附原始程式碼及範例檔)
  • SCWCD 5 猛虎出閘:Java Web 應用程式專業認證
Messages posted by: andowson
Forum Index » Profile for andowson » Messages posted by andowson
Message
使用上面的方法會改寫web.xml,並在原本的webapp中產生一些java及class檔,如果不喜歡這種方式,可以採用原本Tomcat對JSP檔的處理方式,將產生的.java檔及.class檔放在Tomcat的work目錄下。
一樣使用ant task方式來處理,步驟如下:
0.安裝ant,並設定ANT_HOME並將$ANT_HOME/bin加到$PATH去
1.將要預先編譯的webapp上傳到webapps目錄下,包含WEB-INF/web.xml檔,WEB-INF/lib目錄下的jar檔,及WEB-INF/classes目錄下的一些class檔,或者包成war檔由Tomcat自動解開。
2.將底下的ant task檔存檔為precompile.xml,放到隨便一個目錄下。
<?xml version="1.0" encoding="ISO-8859-1"?>
<!-- ********************************************************************* -->
<!-- Ant build script for JSP Precompilation in Tomcat -->
<!-- Version: $Id: precompile.xml,v 1.00 2008/02/28 18:40:00 andowson Exp $  -->
<!-- ********************************************************************* -->
<project name="Webapp Precompilation" default="all" basedir=".">
    <property name="tomcat.home" location="${tomcat.home}"/>
    <property name="tomcat.base" location="${tomcat.base}"/>
    <property name="webapp.hostname" value="${webapp.hostname}" />
    <property name="webapp.name" value="${webapp.name}" />
    <property name="webapp.path" location="${tomcat.base}/webapps/${webapp.hostname}/${webapp.name}"/>
    <property name="dir-path" location="${tomcat.base}/work/Catalina/${webapp.hostname}/${webapp.name}"/>

    <target name="jspc">
        <taskdef classname="org.apache.jasper.JspC" name="jasper2" >
            <classpath id="jspc.classpath">
                <pathelement location="${java.home}/../lib/tools.jar"/>
                <fileset dir="${tomcat.home}/server/lib">
                    <include name="*.jar"/>
                </fileset>
                <fileset dir="${tomcat.home}/common/lib">
                    <include name="*.jar"/>
                </fileset>
            </classpath>
        </taskdef>

        <jasper2
             validateXml="false"
             uriroot="${webapp.path}"
             webXmlFragment="${webapp.path}/WEB-INF/generated_web.xml"
             outputDir="${webapp.path}/WEB-INF/src" />
             
        <move todir="${dir-path}">
            <fileset dir="${webapp.path}/WEB-INF/src">
                <include name="**/*.*"/>
            </fileset>
        </move>
        
        <delete dir="${webapp.path}/WEB-INF/src" failonerror="false"/>
    </target>

    <target name="compile">
        <echo>Compile JSP in: ${dir-path}</echo>
        <javac destdir="${dir-path}"
               optimize="off"
               debug="on"
               failonerror="false"
               srcdir="${dir-path}">
            <classpath>
                <pathelement location="${webapp.path}/WEB-INF/classes"/>
                <fileset dir="${webapp.path}/WEB-INF/lib">
                    <include name="*.jar"/>
                </fileset>
                <pathelement location="${tomcat.home}/common/classes"/>
                <fileset dir="${tomcat.home}/common/lib">
                    <include name="*.jar"/>
                </fileset>
                <pathelement location="${tomcat.home}/shared/classes"/>
                <fileset dir="${tomcat.home}/shared/lib">
                    <include name="*.jar"/>
                </fileset>
            </classpath>
            <include name="**/*.java" />
        </javac>
    </target>

    <target name="all" depends="jspc,compile">
    </target>

</project>

3.執行ant,例如我的Tomcat安裝在/var/tomcat5目錄下,Tomcat worker目錄(即單部主機跑多重Tomcat時的TOMCAT_BASE)是/var/robust/worker1,網站名稱是www.andowson.com,webapp名稱是examples,則輸入以下:
ant -Dtomcat.home=/var/tomcat5 -Dtomcat.base=/var/robust/worker1 -Dwebapp.hostname=www.andowson.com -Dwebapp.name=examples -buildfile precompile.xml


執行完時會有下列變化:
(1)在WEB-INF目錄下產生generated_web.xml,裡面就是一些<servelt>和<servlet-mapping>的設定。
(2)在/var/robust/worker1/work/Catalina/www.andowson.com/examples目錄下建立org/apache/jsp目錄,並將產生的java原始檔存放於該目錄下。
(3)將編譯過的class檔放在/var/robust/worker1/work/Catalina/www.andowson.com/examples/org/apache/jsp目錄下。

4.由於我們直接替Tomcat產生.java和.class檔,故不必重新reload webapp。
5.此時存取原本的jsp網頁可以發現在Tomcat的work目錄下不會再產生org/apache/jsp目錄及.java檔和.class檔。

參考資料:
http://people.apache.org/~fhanik/tomcat-precompile-jsp.xml
使用ant task方式來處理,步驟如下:
0.安裝ant,並設定ANT_HOME並將$ANT_HOME/bin加到$PATH去
1.將要預先編譯的webapp上傳到webapps目錄下,包含WEB-INF/web.xml檔,WEB-INF/lib目錄下的jar檔,及WEB-INF/classes目錄下的一些class檔,或者包成war檔由Tomcat自動解開。
2.將底下的ant task檔存檔為jsp-precompile.xml,放到隨便一個目錄下。
<?xml version="1.0" encoding="ISO-8859-1"?>
<!-- ********************************************************************* -->
<!-- Ant build script for JSP Precompilation in Tomcat -->
<!-- Version: $Id: jsp-precompile.xml,v 1.00 2008/02/28 18:40:00 andowson Exp $  -->
<!-- ********************************************************************* -->
<project name="Webapp Precompilation" default="all" basedir="."> 

  <target name="jspc"> 

    <taskdef classname="org.apache.jasper.JspC" name="jasper2" > 
      <classpath id="jspc.classpath"> 
        <pathelement location="${java.home}/../lib/tools.jar"/> 
        <fileset dir="${tomcat.home}/bin"> 
          <include name="*.jar"/> 
        </fileset> 
        <fileset dir="${tomcat.home}/server/lib"> 
          <include name="*.jar"/> 
        </fileset> 
        <fileset dir="${tomcat.home}/common/lib"> 
          <include name="*.jar"/> 
        </fileset> 
      </classpath> 
    </taskdef> 

    <jasper2 
             validateXml="false" 
             uriroot="${webapp.path}" 
             webXmlFragment="${webapp.path}/WEB-INF/generated_web.xml" 
             outputDir="${webapp.path}/WEB-INF/src" 
             addWebXmlMappings="true" /> 

  </target> 

  <target name="compile">

    <mkdir dir="${webapp.path}/WEB-INF/classes"/>
    <mkdir dir="${webapp.path}/WEB-INF/lib"/>

    <javac destdir="${webapp.path}/WEB-INF/classes"
           optimize="off"
           debug="on" failonerror="false"
           srcdir="${webapp.path}/WEB-INF/src" 
	   excludes="**/*.smap">
      <classpath>
        <pathelement location="${webapp.path}/WEB-INF/classes"/>
        <fileset dir="${webapp.path}/WEB-INF/lib">
          <include name="*.jar"/>
        </fileset>
        <pathelement location="${tomcat.home}/common/classes"/>
        <fileset dir="${tomcat.home}/common/lib">
          <include name="*.jar"/>
        </fileset>
        <pathelement location="${tomcat.home}/shared/classes"/>
        <fileset dir="${tomcat.home}/shared/lib">
          <include name="*.jar"/>
        </fileset>
        <fileset dir="${tomcat.home}/bin"> 
          <include name="*.jar"/> 
        </fileset> 
      </classpath>
      <include name="**" />
      <exclude name="tags/**" />
    </javac>

  </target>

  <target name="all" depends="jspc,compile">
  </target>

  <target name="cleanup">
  	<delete>
        <fileset dir="${webapp.path}/WEB-INF/src"/>
        <fileset dir="${webapp.path}/WEB-INF/classes/org/apache/jsp"/>
  	</delete>
  </target>

</project>

3.執行ant,例如我的Tomcat安裝在/var/tomcat5目錄下,webapp放在/home/andowson/www/examples目錄下,則輸入以下:
ant -Dtomcat.home=/var/tomcat5 -Dwebapp.path=/home/andowson/www/examples -buildfile jsp-precompile.xml

執行完時會有下列變化:
(1)將WEB-INF/web.xml改寫加上一些<servelt>和<servlet-mapping>的設定。
(2)在WEB-INF目錄下建立src目錄,並將產生的java原始檔存放於WEB-INF/src目錄下。
(3)在WEB-INF/classes目錄底下建出org/apache/jsp目錄,並將編譯過的class檔放在WEB-INF/classes/org/apache/jsp目錄下。
4.重新載入webapp,可透過Tomcat Manager來reload。
5.此時存取原本的jsp網頁可以發現在Tomcat的work目錄下不會再產生org/apache/jsp目錄及.java檔和.class檔。

參考資料:
http://tomcat.apache.org/tomcat-5.5-doc/jasper-howto.html#Web%20Application%20Compilation
http://www.javaworld.com.tw/jute/post/view?bid=6&id=55117&sty=3&age=0&tpg=1&ppg=1#55117
如果不想刪除帳號,暫時性不讓某個使用者使用系統,可將該帳號鎖定,指令如下:
passwd -l username
參數說明如下:
       -l     This  option  is  used  to  lock the specified account and it is
              available to root only. The locking is  performed  by  rendering
              the  encrypted password into an invalid string (by prefixing the
              encrypted string with an !).


要恢復(解除鎖定)則用:
passwd -u username
參數說明如下:
       -u     This  is  the  reverse  of  the  -l  option - it will unlock the
              account password by removing the ! prefix. This option is avail-
              able  to  root  only.  By default passwd will refuse to create a
              passwordless account (it will not unlock  an  account  that  has
              only  "!" as a password). The force option -f will override this
              protection.

參考資料:
http://nmc.nchu.edu.tw/linux/User_mng.htm
最近客戶的網站當機了幾次, 由於客戶的網站用戶會打電話給他們申訴, 故客戶希望在障礙發生時系統可以發出一個通知, 至少一個email, 以便大家可以早點處理. 但是當機的系統自身都難保了, 怎麼還能發出email求救信?故我們可轉而採用由別的系統來監控該目標網站(TARGET), 透過wget這個指令可以抓取遠端網頁的功能, 進行HTTP連線測試, 如果無法成功抓首頁回來, 便判斷為網站連線失敗, 然後發信通知網站負責人(OWNER),底下是這個shell script的內容:
#! /bin/sh
# Name: webmon.sh
# Author: Andowson Chang (andowson [at] gmail [dot] com)
# Version: 0.2
# Created: 2008-02-16
# Last Modified: 2008-02-17
# Description: Web connection monitor (health check)
#              If target web server failed, then notify its owner.
#              Here email is used for the simplest and cheapest way.
# Usage: webmon.sh <hostname> <owner email>
# Example:
# 1. Single owner:
# /root/admin/webmon.sh www.yourcompany.com you@yourcompany.com
# 2.Multiple onwer:
# /root/admin/webmon.sh www.yourcompany.com you@yourcompany.com,yourboss@yourcompany.com
# 3. Set a cron job to keep checking a web site every few minutes.
# */5 * * * * root /root/admin/webmon.sh www.yourcompany.com you@yourcompany.com,yourboss@yourcompany.com
TARGET=$1
OWNER=$2
WEBMONLOG=/tmp/$TARGET.log
export LANG=en_US
wget -S -t 1 -T 5 http://$TARGET/ -O /tmp/index.html -o $WEBMONLOG
RESULT=`grep "HTTP/1." $WEBMONLOG | awk '{print $2}'`
TIMEOUT=`grep "timed out" $WEBMONLOG | wc -l`
if [ $TIMEOUT == 1 ] || [ ! $RESULT == 200 ]; then
   mail -s "[ALERT]$TARGET HTTP connection fail" $OWNER < $WEBMONLOG
fi
# clean up
rm -rf /tmp/index.html
rm -rf $WEBMONLOG

這裡用到了wget的幾個參數, 主要是要取得HTTP的回應代碼, 並控制重試次數及連線的Timeout時間, 詳細說明如下
-S
--server-response
Print the headers sent by HTTP servers and responses sent by FTP servers.

-t number
--tries=number
Set number of retries to number. Specify 0 or inf for infinite retrying. The default is to retry 20 times, with the exception of fatal errors
like connection refused or not found (404), which are not retried.

-T seconds
--timeout=seconds
Set the network timeout to seconds seconds. This is equivalent to specifying --dns-timeout, --connect-timeout, and --read-timeout, all at the same time.
另外,這邊使用了export LANG=en_US來控制wget輸出訊息時的編碼為英文,以便配合cron使用.
使用時, 只需將webmon.sh放到/root/admin目錄下, 並更改權限為可執行, 然後在/etc/crontab中新增一行即可:
*/5 * * * * root /root/admin/webmon.sh www.yourcompany.com you@yourcompany.com,yourboss@yourcompany.com
忘記密碼的原因有百百種,除了自身忘記外,還有人員異動時交接不清,尤其是那種越不常用的密碼,忘得越快。例如HiNet ADSL上網的撥接密碼,通常是HiNet人員來施工時幫你輸入進去之後就存起來,以後也沒再改過。等到買了第二台電腦時,才發現找不到當初的那張密碼卡了,或是當時也改了密碼,找到密碼卡也沒用了。如果打電話給HiNet的客服人員處理,通常需要傳真身分證件影本,實在是很麻煩。不過如果原來的電腦還可以上網的話(表示系統內儲存的密碼是正確的),就可以自救一下,到NirSoftPassword Recovery Utilities裡面下載Dialupass,解壓縮並執行就可以看到舊的密碼了。
其它的密碼工具就請大家依照場合應用吧。

參考資料:
http://blog.pixnet.net/dearguo/post/9454030
最近把原本在Windows平台上的系統轉移到Linux平台來,網頁檔案也一樣複製了一份過來,可是轉移過去之後卻發現有些網頁無法正常顯示,原因就是檔案或目錄名稱大小寫不一致。
對於目錄名稱,可以用mv指令將大寫的目錄改為小寫的目錄名稱,例如:
mv ABC abc

同樣的,單一檔案,也可以使用mv的方式來處理,但是如果一個目錄裡面有很多同樣檔名開頭的檔案,例如IMG001.jpg~IMG999.jpg,總共上千個檔案,總不可能還一個一個去mv吧?
可是也不能不處理啊?再換回Windows平台去?雖然也是一招,但也是我們盡量不要採用的最後一招,常用這種方式會消磨自己的志氣,遇到問題正是促進我們學習的機會。
上網查了一下Linux rename,沒想到Linux還真的有這個指令可以用來大量取代檔案名稱的共同部分,使用起來也很簡單:
rename IMG img IMG*

第一個參數是被替換掉的字串,
第二個參數是要替換成的字串,
第三個參數是要替換的檔案清單
這樣就會把所有大寫的IMG檔名替換成小寫的img了。

參考資料:
http://linux.die.net/man/1/rename
http://linux.die.net/man/1/mv
沒想到這個問題今天在Windows Server 2003上又碰上了,為了幫客戶升級Tomcat到新的版本5.5.26,想說順便升級JDK到6.0 Update 4,通常我都是用Windows Installer安裝方式並勾選將Tomcat安裝成Service,結果安裝完成居然無法啟動,趕緊設定了JAVA_HOME及CATALINA_HOME和PATH參數都無效,乾脆改裝Tomcat 6.0.16,也是一樣起不來,火了 smilie ,全部移除重新開機又重裝也不行,檢查了一下Tomcat的logs目錄下,有一個jakarta_service_20080214.log的log檔,裡面的訊息如下:
[2008-02-14 00:26:45] [info] Procrun (2.0.3.0) started
[2008-02-14 00:26:45] [info] Running Service...
[2008-02-14 00:26:45] [info] Starting service...
[2008-02-14 00:26:45] [174 javajni.c] [error] 找不到指定的模組。
[2008-02-14 00:26:45] [986 prunsrv.c] [error] Failed creating java C:\Program Files\Java\jre1.6.0_04\bin\client\jvm.dll
[2008-02-14 00:26:45] [1260 prunsrv.c] [error] ServiceStart returned 1
[2008-02-14 00:26:45] [info] Run service finished.
[2008-02-14 00:26:45] [info] Procrun finished.

想起了在安裝過程中Tomcat詢問了J2SE 5.0 JRE的目錄是不是它找到的那個,
image
這裡特別標明5.0難道說非得用JDK 5.0才行嗎?果然換成JDK 5.0 Update 14就一切正常了。

上網用Google找了一陣子終於找到了JDK 6.0+Tomcat 5.5/6.0在Windows上無法啟動問題的解法:
將JDK或JRE的bin目錄下的msvcr71.dll複製到Windows的system32目錄下或Tomcat的bin目錄下即可。
copy %JAVA_HOME%\bin\msvcr71.dll %SystemRoot%\system32

我個人是偏好複製到system32目錄,主要的考量是對於日後升級到別的Tomcat版本較為方便。
看到參考資料的最後一篇,才發現這個問題不只是我遇到而已,真是「江湖一點訣,說破不值錢」。smilie

參考資料:
http://tw.myblog.yahoo.com/ttoduepxo/article?mid=786&next=694&l=f&fid=29
http://www.javaworld.com.tw/jute/post/view?bid=9&id=206538&sty=1&tpg=1&age=0
http://www.nabble.com/Tomcat-not-starting-to12554960.html
http://issues.apache.org/bugzilla/show_bug.cgi?id=41538
今天找到了JGS goodsolutions GmbH一篇比較OLAT和Moodle的文章,OLAT-Moodle comparison,對於想要找Open Source e-Learning Platform的人可以做個參考。
JForum 2.x以前的版本都是使用自己的MVC架構來開發,唯一有使用的framework就是freemarker這個template engine。而template就是在html頁面上加上一些輸出控制碼,這些控制碼在系統執行時可以與運算資料一起結合而轉譯成真正的html標籤,變成真正顯示出來的web page。但如果直接用瀏覽器器開啟這些檔案,因為並未透過系統執行,故本質上就是副檔名為.htm的一個文字檔而已,但瀏覽器看到.htm的副檔名,卻會以正常的網頁方式處理,結果就是那些非html標籤的輸出控制碼就變成你看到的東西了。所以直接用IE去開/templates/default/底下的這些htm檔是沒有意義的。
預先安裝函式庫:Apache Commons HttpClient 3.x, Apache Commons Codec, Apache Commons Logging
程式碼:
httpclient.jsp:
<%@ page contentType="text/html;charset=big5" %>
<%@ page import="org.apache.commons.httpclient.*" %>
<%@ page import="org.apache.commons.httpclient.methods.*" %>
<%@ page import="org.apache.commons.httpclient.params.HttpMethodParams" %>
<%@ page import="java.io.*" %>
<%    
    String url = "http://tw.stock.yahoo.com/";
    
    String stockId = request.getParameter("stock_id");
    if (stockId != null) { 
      url += "q/q?s="+stockId;
    }
    
    // Create an instance of HttpClient.
    HttpClient client = new HttpClient();

    // Create a method instance.
    HttpMethod method = new GetMethod(url);
    
    // Provide custom retry handler is necessary
    method.getParams().setParameter(HttpMethodParams.RETRY_HANDLER, 
    		new DefaultHttpMethodRetryHandler(3, false));

    try {
      // Execute the method.
      int statusCode = client.executeMethod(method);

      if (statusCode != HttpStatus.SC_OK) {
        System.err.println("Method failed: " + method.getStatusLine());
      }

      // Read the response body.
      byte[] responseBody = method.getResponseBody();

      // Deal with the response.
      // Use caution: ensure correct character encoding and is not binary data
      //System.out.println(new String(responseBody));
      
      String result = new String(responseBody, "Big5");
      if (stockId != null) {        
        result = result.substring(result.indexOf("nowrap><b>")+"nowrap><b>".length());
        result = result.substring(0, result.indexOf("</b>"));
        out.println(stockId + " Price Now: " + result);
      } else {
        out.println(result);
      }
    } catch (HttpException e) {
      System.err.println("Fatal protocol violation: " + e.getMessage());
      e.printStackTrace();
    } catch (IOException e) {
      System.err.println("Fatal transport error: " + e.getMessage());
      e.printStackTrace();
    } finally {
      // Release the connection.
      method.releaseConnection();
    } 
%>

參考資料:
http://hc.apache.org/httpclient-3.x/tutorial.html
edwin wrote:你好, 我是第一次來的, 我近期需要編寫一個web mail system, 但是 自動forward 我老是想不通logic 是怎樣, 若然定時login , 那不是對系統有一定負荷, 還是另有logic 呢?! 可唔不可以指教一下呢(又或者提議一些網站給我自學呢)?!

1.自動forward:一般是在mail server的主機上,自己的家目錄下設定一個.forward檔,可以參考底下這篇的說明
http://www.phys.sinica.edu.tw/computer_lab/forward.htm
還有,樓主的webmail近期老是connection fail or invalid account, 不論是透過您的webmail 網頁或者我download下來用本人的tomcat也是一樣, 早一陣子還是行的, 是不是本人電腦或者isp的問題呢? thx

2.本站的webmail我用來登入HiNet信箱是正常的,不知道您是用來登入哪裡?
1. PING不到Gateway(default router)
檢查並修改/etc/defaultrouter
如果有修改,需重新啟動
sync; sync; sync; init 6


2.PING不到同一個LAN上的某部主機
檢查是否有設定static route
$ netstat -rn

Routing Table: IPv4
  Destination           Gateway           Flags  Ref   Use   Interface
-------------------- -------------------- ----- ----- ------ ---------
172.16.244.0         172.16.244.240       U         1     35  ce0
224.0.0.0            172.16.244.240       U         1      0  ce0
default              172.16.244.254       UG        1    268
127.0.0.1            127.0.0.1            UH        3    287  lo0

如果有UGH的Flags,可透過route delete destination gateway的方式來刪除

3.PING不到其他不同LAN上的主機
可能原因很多,如果兩邊都各自PING得到Gateway,先檢查防火牆設定看看
如果防火牆設定有允許PING,則可用traceroute指令追蹤看看
如果是由防火牆後的內部網段主機PING外面Internet主機,因需配發一個Public IP給該主機出去的封包,故要順便檢查防火牆有沒有設定為NAT mode,如果是routing mode則需對每部要連出去的主機設定一個mapping IP。
今天花了一整天終於把現有的OLAT由5.2.2升級至5.2.3, 步驟如下:
cd ~/download
mv olat3 olat-5.2.2
wget http://www.olat.org/downloads/stable/OLAT-5.2.3.zip
unzip OLAT-5.2.3.zip
mv OLAT-5.2.3-PUBLIC-* olat3
cd olat3
sed -e "s/\/usr\/local\/opt\/olat\/olat3/\/home\/andowson\/download\/olat3/g" \
-e "s/\/usr\/local\/opt\/olat\/olatdata/\/home\/andowson\/www\/olatdata/g" \
-e "1,$$s/myolat/andowson/g" \
-e "s/smtp.host=smtp.andowson.com/smtp.host=mail.andowson.com/" \
-e "s/\/usr\/local\/opt\/tomcat/\/var\/tomcat5/g" \
-e "1,$$s/net.sf.hibernate/org.hibernate/g" \
-e "48c\server.modjk.enabled=true" \
-e "86,108d" \
-e "1,$$s/#db/db/g" \
-e "s/instantMessaging.enable=false/instantMessaging.enable=true/" \
-e "s/instantMessaging.server.name=jabber.andowson.com/instantMessaging.server.name=www.andowson.com/" \
-e "s/instantMessaging.generateTestUsers=false/instantMessaging.generateTestUsers=true/" \
-e "s/instantMessaging.db.name=wildfire/instantMessaging.db.name=openfire/" \
-e "s/instantMessaging.db.user=wildfire/instantMessaging.db.user=olat/" \
-e "s/instantMessaging.db.pass=wildfire/instantMessaging.db.pass=olat/" build.properties.default > build.properties
ant install
ant jsmath
sudo /etc/init.d/tomcat stop
mv ~/www/olat /tmp/olat-5.2.2
cp -rf ~/download/olat3/webapp ~/www/olat
cp -rf ~/download/olat3/htdocs/* ~/www/olat
sed -i -e "13c\        <\!-- default session timeout -->" ~/www/olat/WEB-INF/web.xml
rm -rf ~/www/olat/WEB-INF/src
rm -rf ~/www/olat/WEB-INF/patchesSrc
chgrp -R tomcat ~/www/olat
chgrp -R tomcat ~/www/olatdata
chmod 775 ~/www/olat/static
sudo /etc/init.d/tomcat start
http://www.webappers.com/
作者因自身需要花了很多的時間針對網頁程式開發上常需要用到的元件、功能、素材等尋找Open Source的Solution並分門別類的整理起來,每個都是高品質的資源,並且保證每天都會更新,下次遇到些網頁元件的需求可以先過去找找看,應該可以節省一些搜尋跟測試的時間。

資料來源:
joaoko's blog: 網路應用開發人員不可錯過的好站
CSS Tab Designer is a freeware that let you visually make css-based list / tabs.
Various styles and colors are included (currently, there are 60+ different styles and colors included).

You may see that JForum uses the tabs10 style for Poll and Attachments Options on adding a new post.

Download from:
http://www.highdots.com/products/css-tab-designer/
 
Forum Index » Profile for andowson » Messages posted by andowson
Go to: