蕭秋水的博客


          帶著淡淡的倦意,輕輕的憂惺,宛若遠山含笑迷蒙,但又如閃電驚雷般震人心魄……

          #

          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>

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

          posted @ 2006-08-15 16:10 蕭秋水 閱讀(387) | 評論 (0)編輯 收藏

          任意增加或刪除一行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 @ 2006-08-15 16:07 蕭秋水 閱讀(640) | 評論 (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 @ 2006-08-15 16:05 蕭秋水 閱讀(276) | 評論 (0)編輯 收藏

          用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. }?
          16. </script>
          17. <body?onload=”detect()”>
          18. <a?id=”list”></a>
          19. </body>
          20. </html>


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

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

          posted @ 2006-08-15 16:05 蕭秋水 閱讀(416) | 評論 (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-08-15 16:03 蕭秋水 閱讀(233) | 評論 (0)編輯 收藏

          如何在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-08-15 16:03 蕭秋水 閱讀(404) | 評論 (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 @ 2006-08-15 16:01 蕭秋水 閱讀(896) | 評論 (0)編輯 收藏

          在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 @ 2006-08-15 16:00 蕭秋水 閱讀(519) | 評論 (1)編輯 收藏

          關于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 @ 2006-08-15 15:57 蕭秋水 閱讀(463) | 評論 (0)編輯 收藏

          使用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 @ 2006-08-15 15:55 蕭秋水 閱讀(257) | 評論 (0)編輯 收藏

          僅列出標題
          共4頁: 上一頁 1 2 3 4 下一頁 
          主站蜘蛛池模板: 通化县| 密云县| 桦川县| 阿克| 曲阜市| 禹城市| 绍兴县| 柘城县| 陆良县| 镇远县| 康乐县| 拉萨市| 佛坪县| 申扎县| 丹江口市| 邹城市| 新安县| 长治市| 吴堡县| 灵山县| 石泉县| 和政县| 大田县| 永昌县| 登封市| 永登县| 大洼县| 弥渡县| 克什克腾旗| 青龙| 贵溪市| 石门县| 申扎县| 广西| 长子县| 五原县| 阜新市| 神池县| 大名县| 河北区| 肃北|