無名的博客

          2005年10月18日 #

          如何在TOMCAT配置數據源,調用數據源

          1、在TOMCAT里配置數據源,在<host></host>之間加上下面的代碼,具體的參數根據自己情況修改
          ???<Context path="" docBase="E:\WEB_CODE\DEMO\WEB" debug="0">
          ???
          ???<Logger className="org.apache.catalina.logger.FileLogger"
          ???????????????????? prefix="localhost_xzm_log." suffix=".txt"
          ??????? ?? timestamp="true"/>

          ????????? <Environment name="maxExemptions" type="java.lang.Integer"
          ????????????????????? value="15"/>
          ????????? <Parameter name="context.param.name" value="context.param.value"
          ???????????????????? override="false"/>?????????
          ?????????
          ????????? <Resource name="jdbc/tzwdb" auth="Container"
          ??????????????????? type="oracle.jdbc.pool.OracleDataSource"/>
          ????????? <ResourceParams name="jdbc/tzwdb">
          ??????????? <parameter><name>factory</name><value>oracle.jdbc.pool.OracleDataSourceFactory</value></parameter>???????????
          ??????????? <parameter><name>driverClassName</name><value>oracle.jdbc.driver.OracleDriver</value></parameter>
          ??????????? <parameter><name>url</name><value>jdbc:oracle:thin:@127.0.0.1:1521:ORCL</value></parameter>
          ??????????? <parameter><name>username</name><value>demo</value></parameter>
          ??????????? <parameter><name>password</name><value>demo</value></parameter>
          ??????????? <parameter><name>serverName</name><value>127.0.0.1</value></parameter>???????????
          ??????????? <parameter><name>databaseName</name><value>ORCL</value></parameter>???????????
          ??????????? <parameter><name>portNumber</name><value>1521</value></parameter>
          ??????????? <parameter><name>maxActive</name><value>30</value></parameter>
          ??????????? <parameter><name>maxIdle</name><value>10</value></parameter>
          ??????????? <parameter><name>maxWait</name><value>500</value></parameter>???????????
          ??????????? <parameter><name>description</name><value>oracle</value></parameter>???????????
          ????????? </ResourceParams>
          ???????????
          ????????? <Resource name="mail/Session" auth="Container"
          ??????????????????? type="javax.mail.Session"/>
          ????????? <ResourceParams name="mail/session">
          ??????????? <parameter>
          ????????????? <name>mail.smtp.host</name>
          ????????????? <value>localhost</value>
          ??????????? </parameter>
          ????????? </ResourceParams>
          ???
          ???</Context>

          2、連接數據庫

          import java.sql.Connection;
          import java.sql.PreparedStatement;
          import java.sql.SQLException;
          import java.sql.Statement;

          import javax.naming.Context;
          import javax.naming.InitialContext;
          import javax.sql.DataSource;

          import org.apache.log4j.Logger;

          /**
          ?* @author :?蕭秋水
          ?*
          ?* @contact me :
          cnyanhai@hotmail.com
          ?*
          ?*/
          public class DBManager {


          ??? static Logger logger = Logger.getLogger(DBManager.class.getClass());

          ??? private Context initCtx = null;

          ??? private Context ctx = null;

          ??? private DataSource ds = null;

          ??? private long timeout = 5000;

          ??? private Statement theStatement = null;

          ??? private PreparedStatement thePstmt = null;

          ??? private static final String userName = "tzw";

          ??? private static final String password = "ywsoft";

          ??? /***************************************************************************
          ???? *
          ???? * 初試化initCtx
          ???? *
          ???? * 取得數據源對象
          ???? *?
          ???? **************************************************************************/

          ??? public DBManager() {
          ??????? try {
          ??????????? initCtx = new InitialContext();
          ??????????? //init context,read config web.xml
          ??????????? if (initCtx == null) {
          ??????????????? throw new Exception("Initial Failed!");
          ??????????? }
          ??????????? ctx = (Context) initCtx.lookup("java:comp/env");
          ??????????? //find "jdbc/tzwdb" object this configruation in the SERVER.XML of
          ??????????? // Tomcat
          ??????????? if (ctx != null) {
          ??????????????? ds = (DataSource) ctx.lookup("jdbc/tzwdb");
          ??????????? }
          ??????????? if (ds == null) {
          ??????????????? throw new Exception("Look up DataSource Failed!");
          ??????????? }
          ??????? } catch (Exception e) {
          ??????????? logger.error("Look up DataSource error! -- " + e.getMessage());
          ??????? }
          ??? }

          ??? /***************************************************************************
          ???? *
          ???? * get Connection
          ???? *
          ???? * @return Connection
          ???? *?
          ???? **************************************************************************/

          ??? public synchronized Connection getConnection() {
          ??????? //get connection and set to delay time
          ??????? long startTime = new java.util.Date().getTime();
          ??????? Connection con = null;
          ??????? while (con == null) {
          ??????????? con = newConnection();
          ??????????? if (con != null) {
          ??????????????? logger.info("Create New Connection!");
          ??????????????? break;
          ??????????? }
          ??????????? try {
          ??????????????? logger.info("Connection timeout,Please wait " + timeout + "ms");
          ??????????????? wait(timeout);
          ??????????? } catch (InterruptedException e) {
          ??????????????? logger.warn("Connection timeout! -- " + e.getMessage());
          ??????????? }
          ??????????? if ((new java.util.Date().getTime() - startTime) >= timeout) {
          ??????????????? logger.warn("Connection timeout!");
          ??????????????? break;
          ??????????? }
          ??????? }
          ??????? return con;
          ??? }

          ??? private Connection newConnection() {
          ??????? Connection con = null;
          ??????? try {
          ??????????? con = ds.getConnection(userName, password);
          ??????????? if (con == null) {
          ??????????????? throw new Exception("Create Connection Failed!");
          ??????????? }
          ??????? } catch (Exception e) {
          ??????????? logger.warn("Create Connection Failed! -- " + e.getMessage());
          ??????? }
          ??????? return con;
          ??? }

          ??? /***************************************************************************
          ???? *
          ???? * release the connection
          ???? *?
          ???? **************************************************************************/

          ??? public synchronized void freeConnection(Connection conn, PreparedStatement pstmt) {
          ??????? try {
          ??????????? //close PreparedStatement
          ??????????? if (pstmt != null) {
          ??????????????? pstmt.close();
          ??????????????? pstmt = null;
          ??????????? }
          ??????? } catch (Exception e) {
          ??????????? logger.warn("release stmt,pstmt error! -- " + e.getMessage());
          ??????? }
          ??????? try {
          ??????????? //close Connection
          ??????????? if (conn != null) {
          ??????????????? conn.close();
          ??????????????? conn = null;
          ??????????? }
          ??????? } catch (SQLException e) {
          ??????????? logger.warn("release conn error! -- " + e.getMessage());
          ??????? }
          ??? }

          }
          ???

          posted @ 2006-01-19 10:04 十三郎 閱讀(1452) | 評論 (0)編輯 收藏

          在TOMCAT下JSP的中文處理解決方案

          方法一:new String(request.getParameter("test").getBytes("iso-8859-1"),"GBK")

          方法二:
          1、
          在jsp中加入下面兩行
                    <%@ page contentType="text/html; charset=GBK" language="java" %>
                    <meta http-equiv="Content-Type" content="text/html; charset=GBK">
          2、
          在TOMCAT中找到SetCharacterEncodingFilter.java,他們位于D:\Tomcat5.0.27\webapps\jsp-examples\WEB-INF\classes\filters,加到你的工程文件里去,并修改包名。
          3、
          配置WEB.XML,
          在web.xml里加入這一段
           <filter>
              <filter-name>Set Character Encoding</filter-name>
              <filter-class>utils.SetCharacterEncodingFilter</filter-class>
              <init-param>
                <param-name>encoding</param-name>
                <param-value>GB2312</param-value>
              </init-param>
            </filter>
            <filter-mapping>
              <filter-name>Set Character Encoding</filter-name>
              <url-pattern>/*</url-pattern>
            </filter-mapping>
          4、修改server.xml中兩個部分
          <Connector port="8090"
                         maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
                         enableLookups="false" redirectPort="8443" acceptCount="100"
                         debug="0" connectionTimeout="20000"
                         disableUploadTimeout="true" URIEncoding='GB2312'/>
          <Connector className="org.apache.coyote.tomcat5.CoyoteConnector"
                         port="8009" minProcessors="5" maxProcessors="75"
                         enableLookups="true" redirectPort="8443"
                         acceptCount="10" debug="0" connectionTimeout="0"
                         useURIValidationHack="false" protocol="AJP/1.3"
                        
          protocolHandlerClassName="org.apache.jk.server.JkCoyoteHandler" 
                         URIEncoding='GB2312'/>

          posted @ 2006-01-09 10:46 十三郎 閱讀(237) | 評論 (0)編輯 收藏

          一些比較好的javascript

          1、window.opener.location.reload();
          當A頁面彈出B頁面時,在B頁面如果調用這句js代碼,則會刷新A頁面。

          posted @ 2005-12-23 16:49 十三郎 閱讀(421) | 評論 (1)編輯 收藏

          異常錯誤解決辦法,不斷更新新中......

          在用JAVA編寫程序時時常會遇到一些異常錯誤,本人把握以往遇到的異常及其解決辦法在此寫下來,不斷增加,希望其他朋友把自己遇到的一些異常解決方法根貼。

          1、 java.sql.SQLException: 操作不允許: Unsupported syntax for refreshRow()
          這個異常時在用純jsp分頁時遇到的,在這里會用到absolute(),isAfterLast()等方法,
          解決方法:
          statement=connection.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE);

          posted @ 2005-12-15 14:28 十三郎 閱讀(506) | 評論 (0)編輯 收藏

          兩個漸變效果進度條

          請看效果 ,具體程序如下:

          <html>
          <head>
          <title>漸變效果進度條</title>
          <script language="javascript">
           var i;
           function go()
           {
            bar_width = document.getElementById("bg").clientWidth;
            i = bar_width;
            setTimeout('start();',300);
           }
           function start()
           {
            if(i-->0)
            {
             ps.style.width = i;
             bn.innerHTML = Math.floor((bar_width-i)/bar_width*100)+"%";
             setTimeout('start();',20);
            }
           }
           
          </script>
          <style type="text/css">
          #bg {
          filter:progid:DXImageTransform.Microsoft.Gradient
          (GradientType=1, StartColorStr=#FFFF00, EndColorStr=#FF0000);
          width:300px;
          height:20px;
          border:1px solid black;
          z-index:0;
          position:absolute;
          }
          #ps {
          float:right;
          background-color:#FFFF00;
          width:100%;
          }
          #bn {
          position:absolute;
          text-align:center;
          width:100%;
          height:100%;
          cursor:default;
          }
          </style>
          </head>
          <body onload="go();">
          <div id="bg"><div id="ps"></div><span id="bn">0%</span></div>
          </body>
          </html>


          請看效果 ,具體程序如下:

          <html>
          <head>
          <title>漸變效果進度條</title>
          <script language="javascript">
          var _Hex = Array("00","01","02","03","04","05","06","07","08","09",
          "0A","0B","0C","0D","0E","0F","10","11","12","13","14","15","16","17","18","19",
          "1A","1B","1C","1D","1E","1F","20","21","22","23","24","25","26","27","28","29",
          "2A","2B","2C","2D","2E","2F","30","31","32","33","34","35","36","37","38","39",
          "3A","3B","3C","3D","3E","3F","40","41","42","43","44","45","46","47","48","49",
          "4A","4B","4C","4D","4E","4F","50","51","52","53","54","55","56","57","58","59",
          "5A","5B","5C","5D","5E","5F","60","61","62","63","64","65","66","67","68","69",
          "6A","6B","6C","6D","6E","6F","70","71","72","73","74","75","76","77","78","79",
          "7A","7B","7C","7D","7E","7F","80","81","82","83","84","85","86","87","88","89",
          "8A","8B","8C","8D","8E","8F","90","91","92","93","94","95","96","97","98","99",
          "9A","9B","9C","9D","9E","9F","A0","A1","A2","A3","A4","A5","A6","A7","A8","A9",
          "AA","AB","AC","AD","AE","AF","B0","B1","B2","B3","B4","B5","B6","B7","B8","B9",
          "BA","BB","BC","BD","BE","BF","C0","C1","C2","C3","C4","C5","C6","C7","C8","C9",
          "CA","CB","CC","CD","CE","CF","D0","D1","D2","D3","D4","D5","D6","D7","D8","D9",
          "DA","DB","DC","DD","DE","DF","E0","E1","E2","E3","E4","E5","E6","E7","E8","E9",
          "EA","EB","EC","ED","EE","EF","F0","F1","F2","F3","F4","F5","F6","F7","F8","F9",
          "FA","FB","FC","FD","FE","FF");
           function go()
           {
            setTimeout('start();',100);
           }
           var i=0;
           function start()
           {
            if(i++<256)
            {
             ps.innerHTML += "<span style='width:1px;background-color:#FF"+_Hex[256-i]+"00;'>";
             bn.innerHTML = Math.floor(i/2.56)+"%";
             setTimeout('start();',10);
            }
           }
           
          </script>
          <style type="text/css">
          #ps {
          background-color:#FFFF00;
          width:256px;
          margin: 1px;
          float:left;
          }
          #bn {
          width:39px;
          margin: 1px;
          float:right;
          text-align:center;
          color:#FFFFFF;
          font-family:Arial;
          font-size:13px;
          }
          </style>
          </head>
          <body onload="go();">

          <div style="background-color:black;width:300px;height:20px;"><div id="ps"></div><div id="bn"></div></div>
          </body>
          </html>

          posted @ 2005-11-29 10:24 十三郎 閱讀(570) | 評論 (0)編輯 收藏

          常用正則表達式

          非負整數(正整數 + 0)
          [^\\d+$] 

          正整數                 
          [^[0-9]*[1-9][0-9]*$]   

          非正整數(負整數 + 0)
          [^((-\\d+)|(0+))$]        

          負整數
          [^-[0-9]*[1-9][0-9]*$]  

          整數
          [^-?\\d+$]       

          非負浮點數(正浮點數 + 0)
          [^\\d+(
          \\.\\d+)?$]  

          正浮點數
          [^(([0-9]+\\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\\.[0-9]+)|([0-9]*[1-9][0-9]*))$]  

          非正浮點數(負浮點數 + 0)
          [^((-\\d+(
          \\.\\d+)?)|(0+(\\.0+)?))$]  

          負浮點數
          [^(-(([0-9]+\\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\\.[0-9]+)|([0-9]*[1-9][0-9]*)))$]  

          浮點數
          [^(-?\\d+)(
          \\.\\d+)?$]  

          由26個英文字母組成的字符串
          [^[A-Za-z]+$]  

          由26個英文字母的大寫組成的字符串
          [^[A-Z]+$]  

          由26個英文字母的小寫組成的字符串
          [^[a-z]+$]  

          由數字和26個英文字母組成的字符串
          [^[A-Za-z0-9]+$]  

          由數字、26個英文字母或者下劃線組成的字符串
          [^\\w+$]  

          email地址
          [^[\\w-]+(
          \\.[\\w-]+)*@[\\w-]+(\\.[\\w-]+)+$]    

          url
          [^[a-zA-z]+://(
          \\w+(-\\w+)*)(\\.(\\w+(-\\w+)*))*(\\?\\S*)?$]  


          匹配中文字符的正則表達式: [\u4e00-\u9fa5]
          匹配雙字節字符(包括漢字在內):[^\x00-\xff]


          中國電話號碼驗證
          匹配形式如:0511-4405222 或者021-87888822 或者 021-44055520-555 或者 (0511)4405222
          正則表達式 "((d{3,4})|d{3,4}-)?d{7,8}(-d{3})*"

          中國郵政編碼驗證
          匹配形式如:215421
          正則表達式 "d{6}"

          電子郵件驗證
          匹配形式如:justali@justdn.com
          正則表達式 "w+([-+.]w+)*@w+([-.]w+)*.w+([-.]w+)*"

          身份證驗證
          匹配形式如:15位或者18位身份證
          正則表達式 "d{18}|d{15}"

          常用數字驗證
          正則表達式 
          "d{n}" n為規定長度
          "d{n,m}" n到m的長度范圍

          非法字符驗證
          匹配非法字符如:< > & / ' | 
          正則表達式 [^<>&/|'\]+

          日期驗證
          匹配形式如:20030718,030718
          范圍:1900--2099
          正則表達式((((19){1}|(20){1})d{2})|d{2})[01]{1}d{1}[0-3]{1}d{1}

          posted @ 2005-11-29 09:54 十三郎 閱讀(447) | 評論 (0)編輯 收藏

          Java中一些關于日期、日期格式、日期的解析和日期的計算

               Java 語言的Calendar(日歷),Date(日期), 和DateFormat(日期格式)組成了Java標準的一個基本但是非常重要的部分. 日期是商業邏輯計算一個關鍵的部分. 所有的開發者都應該能夠計算未來的日期, 定制日期的顯示格式, 并將文本數據解析成日期對象.

              Date 類實際上只是一個包裹類, 它包含的是一個長整型數據, 表示的是從GMT(格林尼治標準時間)1970年, 1 月 1日00:00:00這一刻之前或者是之后經歷的毫秒數.

          一、創建一個日期對象
              使用系統的當前日期和時間創建一個日期對象并返回一個長整數的簡單例子. 這個時間通常被稱為Java 虛擬機(JVM)主機環境的系統時間.

          Date date = new Date();
          System.out.println(date.getTime());

              上面的例子在系統輸出設備上顯示的結果是 1001803809710. 在這個例子中,值得注意的是我們使用了Date 構造函數創建一個日期對象, 這個構造函數沒有接受任何參數. 而這個構造函數在內部使用了System.currentTimeMillis() 方法來從系統獲取日期.
          二、日期數據的定制格式
              定制日期數據的格式, 比方星期六-9月-29日-2001年. 下面的例子展示了如何完成這個工作:

          SimpleDateFormat bartDateFormat = new SimpleDateFormat("EEEE-MMMM-dd-yyyy");
          Date date = new Date();
          System.out.println(bartDateFormat.format(date));

              只要通過向SimpleDateFormat 的構造函數傳遞格式字符串"EEE-MMMM-dd-yyyy", 我們就能夠指明自己想要的格式. 你應該可以看見, 格式字符串中的ASCII 字符告訴格式化函數下面顯示日期數據的哪一個部分. EEEE是星期, MMMM是月, dd是日, yyyy是年. 字符的個數決定了日期是如何格式化的.傳遞"EE-MM-dd-yy"會顯示 Sat-09-29-01.
              下面是一些格式:
          Date and Time Pattern Result
          "yyyy.MM.dd G 'at' HH:mm:ss z" 2001.07.04 AD at 12:08:56 PDT
          "EEE, MMM d, ''yy" Wed, Jul 4, '01
          "h:mm a" 12:08 PM
          "hh 'o''clock' a, zzzz" 12 o'clock PM, Pacific Daylight Time
          "K:mm a, z" 0:08 PM, PDT
          "yyyyy.MMMMM.dd GGG hh:mm aaa" 02001.July.04 AD 12:08 PM
          "EEE, d MMM yyyy HH:mm:ss Z" Wed, 4 Jul 2001 12:08:56 -0700
          "yyMMddHHmmssZ" 010704120856-0700


          三、將文本數據解析成日期對象
              假設我們有一個文本字符串包含了一個格式化了的日期對象, 而我們希望解析這個字符串并從文本日期數據創建一個日期對象. 我們將再次以格式化字符串"MM-dd-yyyy" 調用SimpleDateFormat類, 但是這一次, 我們使用格式化解析而不是生成一個文本日期數據. 我們的例子, 顯示在下面, 將解析文本字符串"9-29-2001"并創建一個值為001736000000 的日期對象.

          SimpleDateFormat bartDateFormat = new SimpleDateFormat("MM-dd-yyyy");
          String dateStringToParse = "9-29-2001";
          try {
          Date date = bartDateFormat.parse(dateStringToParse);
          System.out.println(date.getTime());
          } catch (Exception ex) {
          System.out.println(ex.getMessage());
          }

          四、使用標準的日期格式化過程

          既然我們已經可以生成和解析定制的日期格式了, 讓我們來看一看如何使用內建的格式化過程. 方法 DateFormat.getDateTimeInstance() 讓我們得以用幾種不同的方法獲得標準的日期格式化過程. 在下面的例子中, 我們獲取了四個內建的日期格式化過程. 它們包括一個短的, 中等的, 長的, 和完整的日期格式.

          Date date = new Date();

          DateFormat shortDateFormat = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT);
          DateFormat mediumDateFormat =DateFormat.getDateTimeInstance( DateFormat.MEDIUM, teFormat.MEDIUM);
          DateFormat longDateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG); DateFormat fullDateFormat = DateFormat.getDateTimeInstance( DateFormat.FULL, DateFormat.FULL);

          System.out.println(shortDateFormat.format(date));
          System.out.println(mediumDateFormat.format(date));
          System.out.println(longDateFormat.format(date));
          System.out.println(fullDateFormat.format(date));

          注意我們在對 getDateTimeInstance的每次調用中都傳遞了兩個值. 第一個參數是日期風格, 而第二個參數是時間風格. 它們都是基本數據類型int(整型). 考慮到可讀性, 我們使用了DateFormat 類提供的常量: SHORT, MEDIUM, LONG, 和 FULL.
          運行例子程序的時候, 它將向標準輸出設備輸出下面的內容:
          9/29/01 8:44 PM
          Sep 29, 2001 8:44:45 PM
          September 29, 2001 8:44:45 PM EDT
          Saturday, September 29, 2001 8:44:45 PM EDT

          五、Calendar 類

          假設你想要設置, 獲取, 和操縱一個日期對象的各個部分, 比方一個月的一天或者是一個星期的一天. 為了演示這個過程, 我們將使用具體的子類 java.util.GregorianCalendar. 考慮下面的例子, 它計算得到下面的第十個星期五是13號.


          DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.FULL);

          GregorianCalendar cal = new GregorianCalendar();

          cal.setTime(new Date());
          System.out.println("System Date: " + dateFormat.format(cal.getTime()));

          // Set the day of week to FRIDAY
          cal.set(GregorianCalendar.DAY_OF_WEEK, GregorianCalendar.FRIDAY);
          System.out.println("After Setting Day of Week to Friday: " +
          dateFormat.format(cal.getTime()));

          int friday13Counter = 0;

          while (friday13Counter <= 10)
          {

          // Go to the next Friday by adding 7 days.
          cal.add(GregorianCalendar.DAY_OF_MONTH, 7);

          // If the day of month is 13 we have
          // another Friday the 13th.
          if (cal.get(GregorianCalendar.DAY_OF_MONTH) == 13)
          {
          friday13Counter++;
          System.out.println(dateFormat.format(cal.getTime()));
          }
          }

          在這個例子中作了有趣的函數調用:
          cal.set(GregorianCalendar.DAY_OF_WEEK, GregorianCalendar.FRIDAY);

          cal.add(GregorianCalendar.DAY_OF_MONTH, 7);

          set 方法能夠讓我們通過簡單的設置星期中的哪一天這個域來將我們的時間調整為星期五. 注意到這里我們使用了常量 DAY_OF_WEEK 和 FRIDAY來增強代碼的可讀性. add 方法讓我們能夠在日期上加上數值. 潤年的所有復雜的計算都由這個方法自動處理.

          我們這個例子的輸出結果是:
          System Date: Saturday, September 29, 2001
          當我們將它設置成星期五以后就成了: Friday, September 28, 2001
          Friday, September 13, 2002
          Friday, December 13, 2002
          Friday, June 13, 2003
          Friday, February 13, 2004
          Friday, August 13, 2004
          Friday, May 13, 2005
          Friday, January 13, 2006
          Friday, October 13, 2006
          Friday, April 13, 2007
          Friday, July 13, 2007
          Friday, June 13, 2008

          GregorianCalendar類提供處理日期的方法。一個有用的方法是add().使用add()方法,你能夠增加象年,月數,天數到日期對象中。要使用add()方法,你必須提供要增加的字段,要增加的數量。一些有用的字段是DATE, MONTH, YEAR, 和 WEEK_OF_YEAR。下面的程序使用add()方法計算未來80天的一個日期。在Jules的<環球80天>是一個重要的數字,使用這個程序可以計算Phileas Fogg從出發的那一天1872年10月2日后80天的日期:

          GregorianCalendar worldTour = new GregorianCalendar(1872, Calendar.OCTOBER, 2);
          worldTour.add(GregorianCalendar.DATE, 80);
          Date d = worldTour.getTime();
          DateFormat df = DateFormat.getDateInstance();
          String s = df.format(d);
          System.out.println("80 day trip will end " + s);

          五、實現日期以天數的加減:
          /* 將當前日期加減n天數。
          * 如傳入字符型"-5" 意為將當前日期減去5天的日期
          * 如傳入字符型"5" 意為將當前日期加上5天后的日期
          * 返回字串 例(1999-02-03)
          */

          public String dateAdd(String to)
          {
          //日期處理模塊 (將日期加上某些天或減去天數)返回字符串
          int strTo;
          try {
             strTo = Integer.parseInt(to);}
          catch (Exception e) {
             System.out.println("日期標識轉換出錯! : \n:::" + to + "不能轉為數字型");
             e.printStackTrace();
             strTo = 0;
          }
          Calendar strDate = Calendar.getInstance(); //java.util包,設置當前時間
          strDate.add(strDate.DATE, strTo); //日期減 如果不夠減會將月變動 //生成 (年-月-日)
          String meStrDate = strDate.get(strDate.YEAR) + "-" +String.valueOf(strDate.get(strDate.MONTH)+1) + "-" + strDate.get(strDate.DATE);
          return meStrDate;
          }

          posted @ 2005-10-28 11:00 十三郎 閱讀(1063) | 評論 (0)編輯 收藏

          在HIBERNATE里投影查詢數據

              在數據庫中我們經常會用到類似這樣的sql語句:SELECT A,B,C FROM TABLE_A,在HIBERNATE里實現起來相比較而然,稍微復雜了一點。
              在HIBERNATE里語句應當這么來寫:SELECT tableA.a,tableA.b,tableA.c FROM tableA

              tableA-----------表TABLE_A對應的HIBERNATE的類名
              a,b,c-------------表TABLE_A里的三個列名對應的HIBERNATE的類的幾個屬性

              最后便是取出查詢的數據,整個返回值為Iterator,一行數據就是一個Object[]數組,數組里的每個變量對應tableA.a,tableA.b,tableA.c 的順序取出此行該列的數據值,然后根據tableA.a,tableA.b,tableA.c 在類里的類型在對其進行相應的強制類型轉換。
              但是在我測試時如果在語句中FROM之前用到一些類似TO_CHAR,DECODE的函數則就會報錯,提示沒有該列,也不能像tableA.a AS TP這樣來寫。如果有解決這種情況出現的問題的,請告知。

          posted @ 2005-10-25 14:57 十三郎 閱讀(1567) | 評論 (1)編輯 收藏

          window.showModalDialog()、confirm()方法使用

          運行描述:在A頁單擊按鈕彈出對話框B,選擇要選擇的欄目,彈出確認信息。確定后對話框B自動關閉,其所選擇的欄目值傳到A頁相應的文本框內。代碼如下

          A.htm
          <script>
          function openwin(){
          var value = window.showModalDialog("b.htm",window,"dialogWidth:370px;help:no;resizable:no;status:no;scroll:no");
          document.form1.a.value = value;
          }
          </script>
          選擇欄目:<a href="#" onClick="javascript:openwin();">click</a>
          <form name="form1">
          <input name="a" type="txt">
          </form>

          B.htm
          <script>
          function returnAll(str){
             if(confirm("是否選擇'"+str+"'")){
                window.returnValue=""+str+"";
                window.close();
             }
          }
          </script>
          <form name="form1">
          <a href="#" onClick="javascript:returnAll(this.innerText);" id="a">a</a>
          <a href="#" onClick="javascript:returnAll(this.innerText);" id="b">b</a>
          <a href="#" onClick="javascript:returnAll(this.innerText);" id="c">c</a>
          </form>

          posted @ 2005-10-18 10:49 十三郎 閱讀(1755) | 評論 (2)編輯 收藏

          任意增加或刪除一行html元素

          代碼如下:

          <script language="javascript">
          var curRow=null;
          function selectRow(tr1){
          if(curRow)
          curRow.bgColor="#FFFFFF";
          tr1.bgColor="e7e7e7";
          curRow=tr1;
          }
          function addRow(src){
          var newrow = src.insertRow(src.rows.length-1);
          newrow.attachEvent("onclick",function(){selectRow(newrow);});
          newrow.height=20;
          var i=4;
          while(i--){
          var newcell = newrow.insertCell();
          switch(i){
          case 0: newcell.innerHTML= '<input type="button" onClick="javascript:delRow(this.parentElement.parentElement)" value="刪除此行">';break;
          default: newcell.innerHTML=div1.innerHTML;break;
          }
          }
          }
          function delRow(src){
          src.parentElement.deleteRow(src.rowIndex);
          }
          </script>

          <table id="tb" width="100%"  border="1" >
            <tr>
              <th scope="col" width="25%">一</th>
              <th scope="col" width="25%">二</th>
              <th scope="col" width="25%">三</th>
              <th scope="col" width="25%">四</th>
            </tr>
            <tr id="blankRow" onClick="addRow(this.parentElement)">
              <td>&nbsp;</td>
              <td>&nbsp;</td>
              <td>&nbsp;</td>
              <td>&nbsp;</td>
            </tr>
          </table>
          <div id="div1" style="display:none "><inpute type="text"></div>

          posted @ 2005-10-18 10:47 十三郎 閱讀(753) | 評論 (1)編輯 收藏

          用xmlhttp和session監聽站內人數(session監聽、無刷新取server端數據)

            這個題目含有許多需要解釋的概念,最容易說明的是“站內消息”,這是很多論壇都有的功能,可以通過web向其他的在線用戶發送消息,很多用戶都使用過。站內消息的第一個好處是大家都不需要安裝客戶端,你不用知道對方的MSN或者QQ,就能與他聯系,稱贊他的觀點或者是給他一頓臭罵。第二個好處是客戶管理方便,利用session來維護在線名單,各種腳本都已經把session操作封裝得很易用了,不用像其他無狀態的即時通信工具(比如使用UDP通信的工具)一樣,要費一些腦細胞來解決在線名單的問題。缺點嘛,就是實時性不好,一般是在用戶跳轉或者刷新頁面才能探測消息、更新在線名單。

            Session監聽嘛,沒什么好解釋的,java提供了很靈活的事件機制來監聽session,可以監聽session的創建和銷毀,監控session所攜帶數據的創建、變化和銷毀,可以監聽session的銳化和鈍化(了解對象序列化的兄弟應該知道這個),其他的平臺是個什么情況我不太清楚,估計也差不多吧。如果能夠對所有客戶的session進行監控,就不用再去操作麻煩而危險的Application了。

            Xmlhttp是MS推的一項技術,功能很復雜,可以做很多事情,比如客戶端可以在簡單的HTML中打開HTTP連接,主動向server請求數據并獲得返回數據,是DOM技術一個非常重要的應用,利用它來寫無刷新的動態頁面簡直是so easy,做過web開發的兄弟應該明白它的意義有多么重大。

          一、 session監聽

            servlet中對session的監聽有很多接口,功能很靈活,最常用的是監聽Session和Attribute。這里要澄清一下概念,servlet中的session監聽和Attribute監聽含義有差別,session監聽指的不是我們一般所理解的放置一個session或者銷毀一個session,這是Attribute監聽的功能,因為servlet中放置session的語法是session.setAttribute(“session名”,要放入的對象)。而session監聽,監聽的是HTTP連接,只要有用戶與server連接,就算連接的是一個空白的jsp頁面,也會觸發session事件,所以此處的session實際上指的是connection,用來統計當前在線用戶數最合適了。不知道我說清楚了沒有。下面分別講解這兩種監聽方式。

          1、 session監聽

            首先編寫一個session監聽類,實作HttpSessionListener接口,它的作用是計算當前有多少個在線用戶:

          1. /**
          2. *@Author bromon
          3. *2004-6-12
          4. */
          5. package org.bromon.test;
          6. import javax.servlet.*;
          7. import javax.servlet.http.*;
          8. public class SessionCount implements HttpSessionListener
          9. {
          10.     private static int count=0;
          11.     public void sessionCreated(HttpSessionEvent se)
          12.     {
          13.         count++;
          14.         System.out.println(“session創建:”+new java.util.Date());
          15.     }
          16.     public void sessionDestroyed(HttpSessionEvent se)
          17.     {
          18.        count--;
          19.        System.out.println(“session銷毀:”+new java.util.Date());
          20.     }
          21.     public static int getCount()
          22.     {
          23.        return(count);
          24.      }
          25. }




            怎么樣,是不是一目了然?count被定義為static,是因為要保證整個系統只有這一個count。如果你實在不放心,可以把它寫成一個單例類。

            然后在web.xml中聲明這個監聽器:
          <listener>
          <listener-class>
          org.bromon.test.SessionCount
          </listener-class>
          </listener>

            編寫一個測試頁面test.jsp,內容是獲得count:
          <%
          int count=org.bromon.test.SessionCount.getCount();
          out.println(count);
          %>

            需要注意的是,這里根本不涉及任何session的操作。重啟動App server,試著連接test.jsp,可以看到監聽器已經開始工作。

          2、 Attribute監聽
            作為一個站內消息系統,肯定要獲得所有登陸者的ID,才有可能互發消息。這就涉及Attribute監聽。假設我們寫了個用戶登陸的模塊,用戶通過身份驗證之后會產生一個session,保存它的相關信息,比如:

          1. //check.jsp
          2. <%
          3.     String name=request.getParameter(“name”);
          4.     Name=new String(name.getBytes(“ISO8859-1”));
          5.     session.setAttribute(“user”,name);
          6. %>



            做過jsp的兄弟應該對這段代碼再熟悉不過了,下面寫個監聽器來監聽用戶登陸,把所有用戶的ID保存到一個List當中,這個監聽器實作HttpSessionAttributeListener接口:

          1. /**
          2. *@Author bromon
          3. *2004-6-12
          4. */
          5. package org.bromon.test;
          6. import javax.servlet.*;
          7. import javax.servlet.http.*;
          8. import java.util.*;
          9. public class OnlineList implements HttpSessionAttributeListener
          10. {
          11.     private static List list=new ArrayList();
          12.     public void attributeAdded(HttpSessionBindingEvent se)
          13.     {
          14.         if(“user”.equals(se.getName()))
          15.         {
          16.             list.add(se.getValue());
          17.          }
          18.     }
          19.     public void attributeRemoved(HttpSessionBindingEvent se)
          20.     {
          21.          if(“user”.equals(se.getName()))
          22.          {
          23.             list.remove(se.getValue());
          24.          }
          25.     }
          26.     public void attributeReplaced(HttpSessionBindingEvent se){}
          27.     public static List getList()
          28.     {
          29.          return(list);
          30.      }
          31. }



          寫個簡單的jsp來得到用戶列表:
          <%
              java.util.List list=org.bromon.test.OnlineList.getList();
              out.println(“共有”+list.size()+”名用戶已登陸:”);
              for(int I=0;I<lise.size();i++)
              {
                  out.println(list.get(i));
              }
          %>

          也許你說,這有什么神奇呢,監聽session而已,不著急,看看xmlhttp。

          二、 XMLHTTP

            XMLHTTP的用處很多,這里只說我們需要的,就是無刷新的與server通信,看這段代碼:

          1. <script language="javascript"
          2. xml = new ActiveXObject("Microsoft.XMLHTTP"); 
          3. var post=" ";//構造要攜帶的數據 
          4. xml.open("POST","http://localhost:7001/TestWL/index.jsp",false);//使用POST方法打開一個到服務器的連接,以異步方式通信 
          5. xml.setrequestheader("content-length",post.length); 
          6. xml.setrequestheader("content-type","application/x-www-form-urlencoded"); 
          7. xml.send(post);//發送數據 
          8. var res = xml.responseText;//接收服務器返回的數據 
          9. document.write(res); 
          10. </script>




            豁然開朗,這段代碼就是打開一個HTTP連接,以標準的HTTP格式傳遞數據,如果你喜歡,可以用XML的格式來傳遞。更改一下xml對象的構造方式就可以兼容Mozilla和Netscape。下面來寫一個輪詢,每隔一段時間刷新一次用戶列表,當然,是不需要刷新頁面的:

          1. <html>
          2. <head><title>探測器</title>
          3. <script language="javascript">
          4. function detect()
          5. {
          6. xml = new ActiveXObject("Microsoft.XMLHTTP"); 
          7. var post=" ";//構造要攜帶的數據 
          8. xml.open("POST","http://localhost:7001/TestWL/index.jsp",false);//使用POST方法打開一個到服務器的連接,以異步方式通信 
          9. xml.setrequestheader("content-length",post.length); 
          10. xml.setrequestheader("content-type","application/x-www-form-urlencoded"); 
          11. xml.send(post);//發送數據 
          12. var res = xml.responseText;//接收服務器返回的數據 
          13. list.innerText=res;
          14. setTimeout(“detect()”,5000);//每隔5秒鐘輪詢一次
          15. </script>
          16. <body onload=”detect()”>
          17. <a id=”list”></a>
          18. </body>
          19. </html>



            這樣的通信方式數據量很小,不用重新傳遞整個頁面,5秒鐘輪一次,普通PC也能承受較大的在線數。構造一個探測器來監聽在線列表和消息,效果是很好的,即使你的客戶坐在電腦前袖手旁觀,鍵鼠都不碰一下,也能保證數據即時傳遞,頁面也不會發生跳轉和刷新。

            Session監聽加上XMLHTTP通信,開發一個較為完善的站內消息系統實在易如反掌。

          posted @ 2005-10-18 10:45 十三郎 閱讀(581) | 評論 (0)編輯 收藏

          關于struts里中的集合里的javaBean里有集合和javaBean的顯示問題

          具體的代碼如下:
          cargoExport為一個存放在request的ArrayList。
           
          <logic:present name="cargoExport">
           <logic:iterate id="cargo" name="cargoExport" type="ywsoftware.ship.businessTable.TCtcargo">
            <logic:present name="cargo">
            
              <bean:write name="cargo" property="shipper" />
            
          //下邊為顯示javaBean里某個屬性也是javaBean的顯示格式
             <bean:define id="tctcg" name="cargo" property="ctcg" type="ywsoftware.ship.businessTable.TCtcg"/>
             <bean:write name="tctcg" property="marks" />
          //下邊為顯示javaBean里某個屬性是集合的顯示格式   
             <logic:iterate id="loadct" name="cargo" property="loadCTs" type="ywsoftware.ship.businessTable.TLoadct">
                    <logic:present name="loadct">
                     <bean:write name="loadct" property="cntrNo" />
                    </logic:present>
                </logic:iterate>
               
            </logic:present>
           </logic:iterate>
          </logic:present>

          --------------------------------------------------
          //下邊為顯示集和里存放的是數組 
          <logic:iterate id="element" indexId="ind" name="catalog">
            <bean:write name="ind"/>. <bean:write name="element" property="key"/><BR>
            <logic:iterate id="elementValue" name="element" property="value" length="23" offset="0">
                -----<bean:write name="elementValue"/><BR>
            </logic:iterate>
          </logic:iterate>

          posted @ 2005-10-18 10:40 十三郎 閱讀(470) | 評論 (0)編輯 收藏

          關于hibernate配置使用weblogic7.0里的連接池

              在經過了幾天的郁悶的日子后,終于把hibernate跟weblogic的連接池結合使用給搞定了,煞是開心啊。當配置成功后才感覺如此簡單,其實就是DataSource跟JNDi命名問題。以下為正確的配置。與大家分享(weblogic7.0+sql server2000)

          第一步、加載JDBC驅動,我用的是JTDS,在startWebLogic.cmd里加上set CLASSPATH=E:\jtds-1.0.3.jar;在weblogic啟動時,在DOS窗口里可以看到。

          第二步、啟動weblogic,設置連接池,如下圖所示:

          第三步、配置DataSource,如下圖所示:(注意:DataSource Name跟JNDI Name可以不相同。但是如果其中一個前面加了“jdbc/",則另一個也要加,要不就全不要加)

          第四步、配置hibernate.cfg.xml文件,如下所示:
          <!-- properties start-->
            
          <property name="connection.datasource">jdbc/DB</property>
           <property name="hibernate.dialect">
            net.sf.hibernate.dialect.SQLServerDialect
           </property>
          <!-- properties end-->

          好了,這就是配置的過程,程序不需要改動。以下附直接連接數據庫的配置
           <!-- properties start-->
           <property name="hibernate.connection.driver_class">
            net.sourceforge.jtds.jdbc.Driver
           </property>
           <property name="hibernate.connection.url">
            jdbc:jtds:sqlserver://localhost/tax_web
           </property>
           <property name="hibernate.connection.username">sa</property>
           <property name="hibernate.connection.password"></property>
           <property name="hibernate.connection.pool.size">8</property>
           <property name="hibernate.dialect">
            net.sf.hibernate.dialect.SQLServerDialect
           </property>
           <property name="hibernate.show_sql">false</property>
           <!-- properties end-->

          posted @ 2005-10-18 10:33 十三郎 閱讀(818) | 評論 (1)編輯 收藏

          在JSP中執行dos命令

               在JSP中我們經常要調用服務器端的一些dos命令,已達到一些特殊的效果,但同時調用服務器端的dos命令也存在著一些安全隱患,因此需要慎重使用。

               以下以一個例子來說明用jsp執行dos的過程,比如在服務器端每天都會自動生成一個目錄(目錄名稱為當天的日期),再此目錄下會生成一些當天的新聞文件,管理員會把這些文件幾個月作一次備份,備份完后在把這些文件刪除。

               如果在服務器上,我們可以在dos下直接執行c:\j2sdk\jar cf d:\bak\200502.jar d:\news\20050101 命令, 然后再把20050101目錄刪除即可。

               在JSP中我們應當這么來寫

          <%
          //執行dos命令
          String commandstr = "c:/j2sdk/jar cf d:/bak/200502.jar d:/news/20050101";
          Process p ;
          try {
             p = Runtime.getRuntime().exec(commandstr);
          //等待剛剛執行的命令的結束  
          while (true){  
                     if(p.waitFor() == 0)   break;
             }    
             
          } catch (Exception e) {
              out.println(e.toString());
             }

          //刪除已經打包的文件及其目錄
          File f = new File("d:/news/20020101");
          String[] allFiles = f.list();
          for (int i = 0; i < allFiles.length; i++) {
             File delF = new File("d:/news/20050101/"+allFiles[i]);
             delF.delete();
          }
          File delD = new File("d:/news/20050101");
          delD.delete();
          %>

               在jsp中以下代碼必須執行,如果沒有該代碼,則由于刪除文件的速度快于打包的速度,因此當壓縮包還沒有打包完成,一些文件已經被刪除,加入下面的代碼,會在此一直做循環,一直p.waitFor()(這個方法的說明是:等待子進程的結束,如果已經結束,一般返回0)返回0為止才會接著執行后面的代碼
          while (true){  
                     if(p.waitFor() == 0)   break;
             } 

          posted @ 2005-10-18 10:27 十三郎 閱讀(3705) | 評論 (0)編輯 收藏

          配置eclipse3.0.1的VE插件

          第一步、下載所需要的軟件和插件(本人測試的版本如下版本號相同)

          1. Eclipse3.0.1?(軟件)?
          2. emf-sdo-runtime-2.0.1??(插件)?
          3. GEF-runtime-3.0.1?(插件)
          4. VE-runtime-1.0.1.1?(插件)

          第二步、配置插件

          1. 把Eclipse3.0.1解壓到d:\,其目錄為d:\eclipse。
          2. 在d:\eclipse目錄下新建一個plugins-2的文件夾,然后把emf-sdo-runtime-2.0.1、GEF-?runtime-3.0.1、VE-runtime-1.0.1.1三個壓縮包解壓到該目錄,在解壓時點擊右鍵選擇“解壓到<文件名>”。
          3. 在d:\eclipse目錄下新建一個links的文件夾,在目錄下新建三個文件,擴展名都為.link,文件名為下載的三個插件的文件名,這三個文件里的內容分別填上相對應的內容,以下的path后的內容皆為三個插件的路徑,如下:
          • path=D:\\eclipse\\plugins-2\\VE-runtime-1.0.1.1
          • path=D:\\eclipse\\plugins-2\\GEF-runtime-3.0.1
          • path=D:\\eclipse\\plugins-2\\emf-sdo-runtime-2.0.1

          第三步、使用eclipse進行可視化編程

          1. 在eclipse目錄下找到eclipse.exe,點擊右鍵新建一個“桌面快捷方式”,在桌面上找到剛剛新建的快捷方式,點擊右鍵,選擇“屬性”,在彈出窗口的目標后面的文本框里?D:\eclipse\eclipse.exe 的后面加上 -clean,然后雙擊這個圖標啟動eclipse。
          2. 啟動eclipse后,點擊“文件---新建--項目”,按照新建一個項目。
          3. 點擊“文件---新建--其它”,再彈出的窗口里點擊java,在展開的列表里選擇AWT或SWING,接著按照接下來的提示新建一個文件。
          4. 在首次運行時可能看不到可供拖放的一些組件,需要在“窗口--顯示視圖--其它”,在彈出的對話框里里單擊“基本”,在列出的列表中選中“Plalette”,點擊確定。

          posted @ 2005-10-18 10:11 十三郎 閱讀(1242) | 評論 (7)編輯 收藏

          使用links方式安裝Eclipse插件

          ??? eclispe想必大家都很熟悉了,一般來說,eclipse插件都是安裝在plugins目錄下。不過這樣一來,當安裝了許多插件之后,eclipse變的很大,最主要的是不便于更新和管理眾多插件。用links方式安裝eclipse插件,可以解決這個問題。

          當前配置XP SP1,eclipse3.0.1

          ????? 現在假設我的eclipse安裝目錄是D:\eclipse,待安裝插件目錄是D:\plug-in ,我將要安裝LanguagePackFeature(語言包)、emf-sdo-xsd-SDK、GEF-SDK、Lomboz這四個插件。

          ????? 先把這四個插件程序全部放在D:\plug-in目錄里,分別解壓。如Lomboz3.0.1.zip解壓成Lomboz3.0.1目錄,這個目錄包含一個plugins目錄,要先在Lomboz3.0.1目錄中新建一個子目錄eclipse,然后把plugins目錄移動到剛建立的eclipse目錄中,即目錄結構要是這樣的:D:\plug-in\Lomboz3.0.1\eclipse\plugins

          ????? Eclipse 將會到指定的目錄下去查找 eclipse\features 目錄和eclipse\plugins 目錄,看是否有合法的功能部件和(或)插件。也就是說,目標目錄必須包含一個 \eclipse 目錄。如果找到,附加的功能部件和插件在運行期配置是將是可用的,如果鏈接文件是在工作區創建之后添加的,附加的功能部件和插件會作為新的配置變更來處理。

          ??? 其它壓縮文件解壓后若已經包含eclipse\plugins目錄,則不需要建立eclipse目錄。

          ??? 然后在 eclipse安裝目錄D:\eclipse目錄中建立一個子目錄links,在links目錄中建立一個link文件,比如 LanguagePackFeature.link,改文件內容為? path=D:/plug-in/LanguagePackFeature? 即這個link文件要對應一個剛解壓后的插件目錄。

          說明(其結構見下圖):

          1. ?插件可以分別安裝在多個自定義的目錄中。
          2. ?一個自定義目錄可以安裝多個插件。
          3. link文件的文件名及擴展名可以取任意名稱,比如ddd.txt,myplugin都可以。
          4. link文件中path=插件目錄的path路徑分隔要用\\或是/
          5. 在links目錄也可以有多個link文件,每個link文件中的path參數都將生效。
          6. 插件目錄可以使用相對路徑。
          7. 可以在links目錄中建立一個子目錄,轉移暫時不用的插件到此子目錄中,加快eclipse啟動。
          8. 如果安裝后看不到插件,把eclipse 目錄下的configuration目錄刪除,重啟即可。

          posted @ 2005-10-18 10:05 十三郎 閱讀(385) | 評論 (0)編輯 收藏

          配置Eclipse 3.0的JSP開發環境

              首先講一下環境配置,注意我配置的環境是在win 2000 server下的,不是linux下的,配置的大致流程和操作系統無關,僅僅是在具體的安裝上有差別。而配置成功與否,與操作系統無關。
            軟件安裝分為一下幾個部分:

          1. java環境安裝:
            這里使用的是jdk1.4.1(jdk1.4.2也可以),這個可以到sun公司的網站去下載;
          2. tomcat環境安裝:
            tomcat的版本是4.1的,安裝版或是解壓版都是可以的;
          3. eclipse 3 安裝:
            可以去下列地址下載
            http://www.eclipse.org/downloads/index.php
            我下載的是 3.1M4 版本,這個版本應該是比較新的。
          4. tomcat插件安裝:
            tomcat插件是要到下面地址下載
            http://www.sysdeo.com/eclipse/tomcatPlugin.html,下載之前需要查看插件是否適合eclipse的版本,我下載的是tomcatPluginV3.zip;
          5. lomboz插件安裝:
            lomboz插件需要下載兩個部分,一個是emf環境,另一個是lomboz插件,分別到下列地方去找
            http://forge.objectweb.org/project/showfiles.php?group_id=97
            http://download.eclipse.org/tools/emf/scripts/downloads.php#goto2.1.0I
            我下載的是emf-sdo-runtime-I200412160800.zip和org.objectweb.lomboz_3.1.0.N20050106.zip ;

            這里主要是根據eclipse選擇適當的lomboz插件,然后查看一下lomboz插件的 介紹,那里會介紹需要的emf插件的版本,然后再去下面的地址找emf插件。

            好了,該下載的都有了,下面我介紹一下如何安裝和配置。

            一、 java環境安裝

            這個只要直接安裝就可以了,不過最好能安裝在系統盤以外的地方,這樣可以更好理解jvm的配置;安裝好了以后,需要配置環境變量,新建JAVA_HOME,并且配置path,把jdk的bin目錄添加進去,這樣就可以在命令行的任何路徑使用jdk的命令了。

            [測試] :編寫一個hello world程序,然后在dos下使用javac hello.java和java hello命令,如果可以正常執行,就證明jdk安裝成功了。

            二、 tomcat安裝

            解壓版的直接解壓就可以了,然后配置TOMCAT_HOME,安裝版的要注意的兩點,一個是安裝完之后tomcat的服務就能夠啟動的了,但是還是要配置TOMCAT_HOME;第二個就是需要查看一下安裝程序是不是把tomcat服務注冊成為windows的啟動服務,需要到“服務”里查看,如果有這個選項就把它設置為手動啟動,并且先停止這個服務。

            [測試]:使用startup.bat命令,服務正常啟動之后,ie瀏覽器里輸入

            http://localhost:8080/ 如果出現正常的小貓頁面,那就應該沒有問題了。

            三、 eclipse 3安裝

            eclipse的安裝倒是很簡單,只要解壓,然后把eclipse目錄復制到盤符下就可以了,啟動的時候,系統會自動尋找jvm,當然可以再以后配置,但是好像是必須先安裝jdk。

            四、 tomcat插件安裝,emf插件安裝,lomboz插件安裝,

            這幾部分的步驟都是一樣的,解壓軟件包,然后根據里面的目錄結構,把目錄文件分別復制到feature或plugins目錄里,這樣就行了,也可以按照用link方式配置插件的方法來安裝這些插件,下面將詳細講述一下eclipse的配置。

            五、 配置eclipse

          1. 首先,打開配置界面 window->preferences。如果這幾個插件安裝成功,左邊的列表里應該有lomboz和tomcat的選項。如果沒有,檢查上面的步驟是不是正確。
              點擊java->Installed JREs,然后顯示如上,如果是初始安裝的,只有顯示第一個jre(不要問我什么是jre,自己查資料去),那是系統默認的安裝在c盤的jre,如果系統當中安裝了多個jdk,那么最好還是新建一個,點擊add,然后選擇你需要使用的jdk的位置,然后它會自動尋找其他的參數,點擊ok。返回界面之后,不要忘記點選剛剛添加的jdk,要不然是沒有用的。然后點擊ok關閉這個窗口。
          2. 再次打開配置界面,點擊tomcat選項,這里是配置tomcat的參數,根據你安裝的tomcat的版本,選擇tomcat version,然戶找到該tomcat的主目錄,輸入在tomcat home,下面的參數會自動配置,點擊apply。 然后在左邊選擇advanced,同樣把tomcat的主目錄復制在tomcat base,點擊apply。
              最后在左邊選擇jvm setting,選擇剛剛加入的jre,點擊apply,點擊ok。這樣就可以了。回到界面,點擊工具欄上的黃色小貓的圖標,如果配置正確,在console里應該有啟動tomcat的信息。如果有,就代表tomcat配置成功了。

            lomboz基本上不用什么配置,如果左邊有那個lomboz選項,基本上就是成功了。點擊lomboz,然后選擇剛才配置的jdk里的tools.jar,這樣配置就完成了。測試的方法是新建一個jsp文件,看看打開的時候是不是對script代碼有特殊顯示,并且建個測試類,看看jsp是不是能夠自動引用類里的函數。

          posted @ 2005-10-18 09:57 十三郎 閱讀(378) | 評論 (0)編輯 收藏

          主站蜘蛛池模板: 广德县| 治县。| 门源| 西贡区| 宣恩县| 凤山市| 阿鲁科尔沁旗| 绍兴县| 红河县| 浦江县| 如东县| 长葛市| 临武县| 宜州市| 儋州市| 龙门县| 耒阳市| 洞头县| 手游| 西和县| 克拉玛依市| 开远市| 武陟县| 嫩江县| 洪雅县| 宜都市| 道真| 巩义市| 留坝县| 阿尔山市| 疏勒县| 福清市| 昌宁县| 滦平县| 旌德县| 黄浦区| 江油市| 苗栗市| 洪洞县| 浙江省| 太仓市|