SmileFace
          與java一起走過的日子
          posts - 41,  comments - 8,  trackbacks - 0
          使用J2SEAPI讀取Properties文件的六種方法:

            1。使用java.util.Properties類的load()方法示例:
          ??????????????? InputStream in=new BufferedInputStream(newFileInputStream(name));
          ??????????????? Properties p=new Properties();
          ??????????????? p.load(in);

            2。使用java.util.ResourceBundle類的getBundle()方法示例:
          ????????????????? ResourceBundle rb=ResourceBundle.getBundle(name,Locale.getDefault());

            3。使用java.util.PropertyResourceBundle類的構造函數示例:
          ?????????????????? InputStream in=newBufferedInputStream(newFileInputStream(name));
          ????????????????? ResourceBundle rb=newPropertyResourceBundle(in);

            4。使用class變量的getResourceAsStream()方法示例:
          ?????????????????? InputStream in=JProperties.class.getResourceAsStream(name);
          ?????????????????? Properties p=newProperties();
          ?????????????????? p.load(in);

            5。使用class.getClassLoader()所得到的java.lang.ClassLoader的getResourceAsStream()方法示例:??????????

          ?????????????????? InputStream in=JProperties.class.getClassLoader().getResourceAsStream(name);
          ?????????????????? Properties p=new Properties();
          ??????????????????? p.load(in);

            6。使用java.lang.ClassLoader類的getSystemResourceAsStream()靜態方法示例:InputStreamin=ClassLoader.getSystemResourceAsStream(name);Propertiesp=newProperties();p.load(in);

            補充

            Servlet中可以使用javax.servlet.ServletContext的getResourceAsStream()方法示例:

          ???????????????? InputStream in=context.getResourceAsStream(path);
          ???????????????? Properties p=newProperties();
          ?????????????????p.load(in);
          posted @ 2006-12-22 05:11 SmileFace 閱讀(310) | 評論 (0)編輯 收藏

          首先:java沒有叫 全局變量 的東西(有全局變量還叫OO嗎?);原因:Java將所有設計都基于對象的基礎上。Java的全局變量只能對一個類內部而言。能夠在類內的任何地方使用的變量就是全局變量,而只在某個特定的函數或者局部的程序塊內使用的變量則是局部變量。

          所以:聲明為static的變量實質上就是全局變量。當聲明一個對象時,并不產生static變量的拷貝,而是該類所有的實例變量共用同一個static變量。

          使用:java中只有static和非static變量,這個屬于每個類的,如果需要全局變量比如PI(3.14...),可以寫一個類Math,定義static變量PI,調用Math.PI就可以使用了,這樣就達到我們使用全局變量的目的了。

          1、將一個 package 中需要的常量集中到一個 XyzConstants 之類的 interface 里聲明,
          就像普通的 field 那樣聲明就行了。
          public interface SomeConstants {
          ?? public intPORT = 80;
          ?? public String IP = "166.111.16.1";
          ?? public boolean test = true;
          }
          就可以。
          用到常量的類 implements 這個接口 .. 簡單情況這樣就行樂。

          2、更 formal 的做法是寫一個類維護所有的常量,負責從配置文件(例如properties文件或xml文件)讀取所有的常量的值。
          可以在一個 static {} 塊里從配置文件中初始化所有 static 的變量。 這樣有利于提高軟件的可配置性。改些東東不用動代碼,比較好。
          最好要有 config Tool 負責寫配置文件。

          3.其他說明:

          定義一個公開類,在里面加static 變量。
          public class infos{
          ??private infos(){
          ??}
          ?? public static int PORT = 80;
          ?? public static String IP = "166.111.166.111";
          ?? public static boolean test = true;
          ?? public static finale String MYNAME="zzz"; //定義中用了finale,就是不能改變指的。
          }
          在別的class中調用這些變量就是: infos.PORT,infos.IP,infos.test,infos.MYNAME
          多個class交互時可以通過改變這些變量的值來傳遞信息。比如 infos.test被別的class改成了false,可能表示某一件事已經失敗或已經做過,其它class就可以提前知道這些信息。
          posted @ 2006-12-21 04:06 SmileFace 閱讀(10297) | 評論 (1)編輯 收藏
          出處:http://www.360doc.com/showWeb/0/0/162473.aspx

          一、前言
          ????JDOM是Breet Mclaughlin和Jason Hunter兩大Java高手的創作成果,2000年初,JDOM作為一個開放源代碼項目正式開始研發。JDOM是一種解析XML的Java工具包。

          ????DOM適合于當今流行的各種語言,包括Java,JavaScripte,VB,VBScript,Perl,C,C++等。它了為HTML和XML文檔提供了一個可應用于不同平臺的編程接口。W3C DOM的最新信息可從http://www.w3.org/TR2001/WD-DOM-Lever-3-Core-20010913查閱。微軟在http://msdn.microsoft.com/library/default.asp?url=/library/en-us/xmlsdk30/htm/xmconxmldomuserguide.asp上也有DOM的詳細技術信息。

          ???DOM的設計為了適用于不同的語言,它保留了不同語言中非常相似的API。但是它并不適合于Java編程者的習慣。而JDOM作為一種輕量級API被制定,它最核心的要求是以Java為中心,只適合于Java語言,它遵循DOM的接口主要規則,除去了DOM中為了兼容各語言而與Java習慣的不同。

          二、使用JDOM的前提條件
          ???須要有SAX、DOM解析器的類文件,JDOM只是一種適合Java程序員來使用的Java XML解析器,目前流行的Java XML解析器還有:Apache Xerces Java、JAXP。
          Xerces Java解析器是完全用Java編寫的XML解析器,最新版本是2.5,它支持以下標準和API:
          (1) XML1.0規范(第二版本)
          (2) XML命名空間規范
          (3) DOM2核心標準規范
          (4) SAX2核心擴展
          (5) JAXP1.2 :是Sun提供的使用Java處理XML的接口API。
          (6) XML Schema結構和數據類型標準

          ??????還有最好的是它開放源代碼,我們可以在http://xml.apache.org/dist/xerces-j/ 處去下載。下載文件Xerces-J-bin.2.5.0.zip。
          解壓下載文件,得到四個壓縮包加到項目的路徑中(其實不要全加,但不熟的情況下考慮這么做)。
          JDOM的二進制版本下載:http://www.jdom.org/downloads/index.html
          把解壓后的jdom.jar文件加到項目的類路徑中,另外便于調試,還要下載它的源代碼。

          三、使用JDOM解析XML
          ?????好了,現在該是正題了。下面通過一個簡單的例子說明一下怎么用JDOM這一適合Java程序員習慣的工具包來解析XML文檔。
          為了簡單,我用了如下XML作為要解析的XML文件:
          <?xml version="1.0" encoding="gb2312"?>
          <books>
          ???<book email="zhoujunhui">
          ?????<name>rjzjh</name>
          ?????<price>60.0</price>
          ??</book>
          </books>
          夠簡單的吧,但它對于我們關心的東西都有了,子節點,屬性。
          下面是用于解析這個XML文件的Java文件:

          1 public class JDomParse {
          2	public JDomParse(){
          3		String xmlpath="library.xml";
          4		SAXBuilder builder=new SAXBuilder(false);
          5		try {
          6			Document doc=builder.build(xmlpath);
          7			Element books=doc.getRootElement();
          8			List booklist=books.getChildren("book");
          9			for (Iterator iter = booklist.iterator(); iter.hasNext();) {
          10				Element book = (Element) iter.next();
          11				String email=book.getAttributeValue("email");
          12				System.out.println(email);
          13				String name=book.getChildTextTrim("name");
          14				System.out.println(name);
          15				book.getChild("name").setText("alterrjzjh");
          16
          17			}
          18
          19			XMLOutputter outputter=new XMLOutputter();
          20			outputter.output(doc,new FileOutputStream(xmlpath));
          21
          22		} catch (JDOMException e) {
          23			e.printStackTrace();
          24		} catch (IOException e) {
          25			e.printStackTrace();
          26		}
          27	}
          28	public static void main(String[] args) {
          29		new JDomParse();
          30	}
          31}
          不到30行代碼,現在我對代碼解釋一下:
          四、解釋代碼
          引用的類:
          import java.io.FileOutputStream;
          import java.io.IOException;
          import java.util.Iterator;
          import java.util.List;
          //下面是引用到JDOM中的類
          import org.jdom.Document;
          import org.jdom.Element;
          import org.jdom.JDOMException;
          import org.jdom.input.SAXBuilder;
          import org.jdom.output.XMLOutputter;
          (1)使用JDOM首先要指定使用什么解析器。如:
          ????????SAXBuilder builder=new SAXBuilder(false); 這表示使用的是默認的解析器
          (2)得到Document,我們以后要進行的所有操作都是對這個Document操作的:
          ????????Document doc=builder.build(xmlpath);
          (3)得到根元素:
          ????????Element books=doc.getRootElement();
          在JDOM中所有的節點(DOM中的概念)都是一個org.jdom.Element類,當然他的子節點也是一個org.jdom.Element類。
          (4)得到元素(節點)的集合:
          ??????List booklist=books.getChildren("book");
          這表示得到“books”元素的所在名稱為“book”的元素,并把這些元素都放到一個List集合中
          (5)輪循List集合
          ?????for (Iterator iter = booklist.iterator(); iter.hasNext();) {
          ???????Element book = (Element) iter.next();
          ????}
          還有一種輪循方法是:
          ????for(int i=0;I<booklist.size();I++){
          ??????Element book=(Element)booklist.get(i);
          ????}
          (6)取得元素的屬性:
          ????String email=book.getAttributeValue("email");
          ???取得元素book的屬性名為“email”的屬性值。
          (7)取得元素的子元素(為最低層元素)的值:
          ????String name=book.getChildTextTrim("name");
          ????注意的是,必須確定book元素的名為“name”的子元素只有一個。
          (8)改變元素(為最低層元素)的值:
          ????book.getChild("name").setText("alterrjzjh");
          ????這只是對Document的修改,并沒有在實際的XML文檔中進行修改
          (9)保存Document的修改到XML文件中:
          ???XMLOutputter outputter=new XMLOutputter();
          ????outputter.output(doc,new FileOutputStream(xmlpath));

          我們先要有一個XMLOutputter類,再把已經修改了的Document保存進XML文檔中。
          到此。用JDOM解析和處理XML文檔講解完了,麻雀雖小,五臟俱全。現在已對JDOM有個整體上的概念了吧。

          進一步可以參考的文章:http://www.1-100.org/JSP/13190.htm
          posted @ 2006-12-21 02:40 SmileFace 閱讀(333) | 評論 (0)編輯 收藏
          建設一個完整的J2EE應用總會有很多系統參數,例如Datasource、INITIAL_CONTEXT_FACTORY、PROVIDER_URL等等,怎么才能最方便的存取,并且便于系統部署,移植呢?

          就是--.properties屬性文件。

          掌握他的使用方法后,您可以象使用一個Class一樣使用您的.properties屬性文件。

          Java中提供了一個java.util.Properties工具類,使用Properties類您可以方便的從一個.properties屬性文件中讀取設置參數,示例代碼如下:

          ????Properties props = new Properties();
          ????props.load(new FileInputStream("filename.properties"));
          ????String value = props.getProperty("propertyname");

          如果您的.properties文件打包入一個Jar或War文件,您可以使用ClassLoader的getResourceAsStream()方法得到一個InputStream對象,示例代碼如下:

          ????????Properties props = new Properties();
          ????????props.load(getClass().getResourceAsStream("com/company/application/application.properties"));
          ????????String value = props.getProperty("propertyname");

          不過這種方式應該適用于較少量的訪問吧,比如應用系統的初始化等等。
          如果需要頻繁得到信息,就不太適合了。


          另解: 他就象是數據可以存放在*.txt中,但是當數據變得很復雜,就要用專門的東西來存放---數據庫,用java.util.Properties類來存儲配置參數提供一種以Java為中心的數據存儲配置方案,對Java有一定的依賴性,另外功能上也很匱乏,相當于*.txt,目前對于稍微復雜一些的系統存儲配置都采用通用的xml方案,可以充分利用xml的強大功能,相當于數據庫。

          Properties文件就象一個文本文件,文件中使用屬性和值來保存數據,如:abc.name=Colin。使用Porperites文件來保存實際上就是創建一個Properites文件,在程序關閉的時候,將數據寫入文件,再等程序啟動的時候,從這個Properties文件中讀出數據。

          出處:http://www.cjsdn.net/post/view?bid=2&id=109&sty=3&age=0&tpg=1&ppg=1#109
          posted @ 2006-12-19 13:36 SmileFace 閱讀(358) | 評論 (0)編輯 收藏

          首先要了解java默認的序列化行為,java將一切關于對象的信息都保存了下了,也就是說,有些時候那些不需要保存的也被保存了下來。一般情況下,我們僅僅需要保存邏輯數據就可以了。不需要保存的數據我們可以用關鍵字transient標出。

          例如:

          import java.io.*;

          public class Serial implements Serializable {

           int company_id;

           String company_addr;

           transient boolean company_flag;

          }


          其中的company_flag字段將不會參與序列化與反序列化,但同時也增加了為它初始值的責任。這也是序列化常常導致的問題之一。因為序列化相當于一個只接受數據流的public構造函數,這種對象構造方法是語言之外的。但他仍然是一種形式上的構造函數。如若你的類不能夠通過其他方面來保證初始化,則你需要額外的提供readObject方法,首先正常的反序列化,然后對transient標示的字段進行初始化。

          在不適合的時候,使用java默認的序列化行為可能會帶來速度上的影響,最糟糕的情況是,可能導致溢出。在某些數據結構的實現中,經常會充斥著各種的循環引用,而java的默認序列化行為,并不了解你的對象結構,其結果就是java試圖通過一種昂貴的“圖遍歷”來保存對象狀態。可想而知,不但慢而且可能溢出。這時候你就要提供自己的readObject,來代替默認的行為。

          note: http://developer.51cto.com/art/200601/20017.htm

          posted @ 2006-12-16 04:11 SmileFace 閱讀(282) | 評論 (0)編輯 收藏
          5月份的時候,我的一篇blog里提到這個內容,那時候沒有深入寫,現在還是補補吧:

          在配置之前需要把數據庫啟動程序copy到tomcat的common/lib下。

          1、在Tomcat 的“管理”工具中,添加“數據源”。鍵入以下值:
          • JNDI 名稱:jdbc/blue
          • 數據源 URL:jdbc:mysql://localhost/home
          • JDBC 驅動程序類:org.gjt.mm.mysql.Driver
          • 用戶名:root
          • 口令: ×××

          2、在conf/catalina/localhost下找到與“項目名.xml”文件,程序名是webapps目錄下的項目文件夾名稱。在此文件中的 <context> 標記之間添加以下資源鏈接:

             <ResourceLink name="jdbc/blue" type="javax.sql.DataSource" global="jdbc/blue"/>

          注意:一定要加在這個文件中,而不是在項目文件夾里的web.xml中。至少我這樣做時結果不對。

          3、 接下來就是測試了。測試程序很重要,盡量用簡單的了。以下是我的測試程序:





          <%@ page contentType="text/html; charset=GBK"%>
          <%@ page import="java.sql.*,javax.sql.DataSource,javax.naming.*"%>
          <html>
          <head><title>test.jsp</title></head>
          <body bgcolor="#ffffff">
          <% 
          Context initCtx=new InitialContext();
          DataSource ds = (DataSource)initCtx.lookup("java:comp/env/jdbc/blue");
          try
          {
          out.println("test! <br>");
          Connection conn=ds.getConnection();
          out.println("data from database:<br>");
          Statement stmt=conn.createStatement();
          ResultSet rs =stmt.executeQuery("select * from dept");
          while(rs.next())
          {
          out.println(rs.getString(1));
          out.println(rs.getString(2));
          }
          rs.close();
          stmt.close();
          }
          catch(Exception e)
          {
          e.printStackTrace();
          }
          %>
          </body>
          </html>





























































          Good Luck!
          posted @ 2006-12-01 05:03 SmileFace 閱讀(315) | 評論 (0)編輯 收藏

          There are two conditons before you want to run *.jsp file in your web.

          1. You have to put the *.jsp into a project which have already registered in the server.xml of conf folder in Tomcat,or the project which under the webapps folder directly
          2.?In the project, you must have WEB-INF folder which have classes and lib subdirectory.

          posted @ 2006-10-13 04:22 SmileFace 閱讀(307) | 評論 (0)編輯 收藏
          今天才知道,有2種方法:

          1、適用于所有的servlet:只需修改conf目錄下的server.xml即可自動匿名訪問所有的servlet。

          To let Tomcat run anonymous servlet classes that have not been defined in a web.xml file, you can enable the Tomcat "invoker" servlet by removing the comments around the servlet-mapping element in the web.xml file in the Tomcat conf directory:
            <!-- The mapping for the invoker servlet -->
          
          <!--
          
            <servlet-mapping>
          
              <servlet-name>invoker</servlet-name>
          
              <url-pattern>/servlet/*</url-pattern>
          
            </servlet-mapping>
          
          -->

          When you edit web.xml in the Tomcat conf directory, the servlet is ready to go。

          例如,after saving Ch09_06.java and building the project, start Tomcat with the Tomcat plug-in's buttons and navigate to http://localhost:8080/Ch09_06/servlet/org.eclipsebook.ch09.Ch09_06.

          2、就是編輯每個項目中的web.xml文件:

          lternatively, if you don't want to edit web.xml in the Tomcat conf directory to enable anonymous servlets, you can create a local web.xml for each project you create with the Tomcat plug-in.

          posted @ 2006-10-11 03:01 SmileFace 閱讀(290) | 評論 (0)編輯 收藏

          今天下載了一個Toad for mysql, 是freeware。 可是安裝它之前還要裝.Net的framework2讓我很不舒服。Anyway,? I?still need to use it, right? So, I decide not to think about it. Ok, just install everything it asked. The result is important to me. I have not too much time. Go ahead, my great plan?!!!

          posted @ 2006-09-29 02:11 SmileFace 閱讀(209) | 評論 (0)編輯 收藏

          1 安裝JDK:
                 下載,解壓到想要的目錄;
                  修改、/etc/profile 文件,增加4行:
                     export JAVA_HOME=/usr/hong/tools/jdk1.5.0_08
                    export PATH=$JAVA_HOME/bin:$PATH              
                    CLASSPATH=.:/usr/hong/tools/jdk1.5.0_08/lib/tools.jar:$CALSSPATH
                    export CLASSPATH

                     驗證: 輸入java -version 。如果版本信息正確,ok

          2 eclipse: 下載,解壓即可
          3 安裝tomcat:
                  下載,解壓到想要的目錄;
                   修改、/etc/profile 文件,增加4行:      

                    CATALINA_BASE="/usr/hong/tools/jakarta-tomcat-5.0.28"
                    CATALINA_HOME="/usr/hong/tools/jakarta-tomcat-5.0.28"
                    PATH=$PATH:$CATALINA_HOME/bin 
                    export CATALINA_BASE CATALINA_HOME PATH 

                    啟動:Tomcat/bin/startup.sh
                     驗證:配置好環境變量以后你試試在瀏覽器中敲入: http://localhost:8080

           為Tomcat新建一個管理用戶,為此需要編輯jakarta/conf/tomcat-users.xml,在里面添加類似的一行:
            <user user-name="admin" password="20006600" roles="????" />
            這樣在Tomcat主頁面中點擊左面的"Tomcat Administration"的鏈接,就可以對服務器進一步配置.

          注冊自己的項目:假設你有一個自己的JSP項目,他應該安裝在下面的目錄下:/tomcat/webapps/myproject。你必須在tomcat/conf/server.xml中加入一行

              <Context path="/myproject" docBase="myproject" debug="0"/>

          在瀏覽器中對應的地址為:http://localhost/myproject


          Note:  
                      when I install tomcat again, I found a wonderful document regarding how to installtomcat in linux, I am highly recommanding it for you. pls check with the  url:  http://linux-sxs.org/internet_serving/book1.html



              

          posted @ 2006-09-20 03:34 SmileFace 閱讀(529) | 評論 (0)編輯 收藏
          僅列出標題
          共5頁: 上一頁 1 2 3 4 5 下一頁 

          <2025年6月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          常用鏈接

          留言簿(2)

          隨筆分類

          隨筆檔案

          文章檔案

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 独山县| 化德县| 卓资县| 揭阳市| 铜陵市| 云安县| 江永县| 嘉祥县| 六枝特区| 固原市| 榆林市| 婺源县| 泰州市| 乐东| 攀枝花市| 南丹县| 阿鲁科尔沁旗| 西林县| 景宁| 黄大仙区| 环江| 来凤县| 应用必备| 汝南县| 万源市| 当雄县| 麻阳| 普兰店市| 古交市| 乐昌市| 贡嘎县| 来宾市| 新丰县| 桂平市| 日照市| 灵璧县| 平顺县| 来宾市| 明溪县| 紫云| 南雄市|