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 阅读(301) | 评论 (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 阅读(10288) | 评论 (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 阅读(320) | 评论 (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 阅读(348) | 评论 (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 阅读(270) | 评论 (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 阅读(309) | 评论 (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 阅读(301) | 评论 (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 阅读(285) | 评论 (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 阅读(199) | 评论 (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 阅读(528) | 评论 (0)编辑 收藏
仅列出标题
共5页: 上一页 1 2 3 4 5 下一页 

<2024年12月>
24252627282930
1234567
891011121314
15161718192021
22232425262728
2930311234

常用链接

留言簿(2)

随笔分类

随笔档案

文章档案

搜索

  •  

最新评论

阅读排行榜

评论排行榜