Java Tools

  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  83 随笔 :: 0 文章 :: 16 评论 :: 0 Trackbacks

2007年7月10日 #

     摘要:   阅读全文
posted @ 2008-01-23 14:26 和田雨 阅读(596) | 评论 (1)编辑 收藏

     摘要:   阅读全文
posted @ 2008-01-23 14:14 和田雨 阅读(327) | 评论 (0)编辑 收藏

下载相应的语言包,解压之后。
到Eclipse目录下建立一个 links文件夹,在文件夹下建立一个任意文件名的文件,例如link.txt.
将语言包的路径写到这个文件中,格式为path=语言包路径,注意用'/'或者'\\'代替'\'.原因是Java由Unix血缘。
posted @ 2007-11-18 14:33 和田雨 阅读(327) | 评论 (0)编辑 收藏

Java 概览(大部分内容需自己看)

如何获得JDK,JRE;网络资源介绍(SUN等,CSDN,MYBLOG)

安装JDK,设置PATH,CLASSPATH

演示简单的程序

自行演练,做三个例子,让其独立解决问题。
posted @ 2007-11-18 11:35 和田雨 阅读(268) | 评论 (0)编辑 收藏

    如果不使用IDE,对于初学者来说经常会出现  Exception in thread "main" java.lang.NoClassDefFoundError错误。
一般是以下几个原因。

建议:在你的硬盘上建立一个独立的存放代码的文件,比如D :\code,设置CLASSPATH指向这个文件夹;在创建一个专门存放类库(jar)文件夹,CLASSPAHT也指向这个文件夹,以后当你添加新的Jar包,例如JDBC驱动的时候,直接复制到这个文件夹下就可以了。

1、你的文件名对吗?
JAVA要求你的文件和你的类名严格对应的。
比如 public class HelloWorld{ .....
那么文件名一定只能是HelloWorld.java,看仔细了!

2、你的程序中有main方法吗?参数什么的对吗?
main方法的声明应该是这样子的:
public static void main(String[] args)
事实上如果你用开发工具来做的话,是不会错的。如果你用UltraEdit之类的来写程序的话,就一个字不要改的照抄吧!

3、记住,javac后面跟的参数是文件名,但java 后面跟的是类名!
这是我开始学JAVA是犯的错,java HelloWorld.class,然后就报错。后来才弄明白,应该是java HelloWorld。

4、设置了classpath了吗?
不仅是在安装JDK时要设置的内容,一般来说最好还要自己设置一个目录来存放自己的类文件的。比如d:\class目录。
设置classpath=%classpath%;d:\class
那么,现在将HelloWorld.class文件COPY到d:\class目录下,再java HelloWorld应该就OK了。

5、结合第3点和第4点
如果你的类是属于某一个包的,比如这样一个类sony.test.HelloWorld,那么按照我在第4点中说的目录来说,就应该将HelloWorld.class文件存放到d:\class\sony\test\目录下。
执行的时候应该参考第3点中说的,按类名执行:java sony.test.HelloWorld。

posted @ 2007-11-18 11:22 和田雨 阅读(357) | 评论 (0)编辑 收藏

     摘要:   阅读全文
posted @ 2007-08-09 19:31 和田雨 阅读(599) | 评论 (0)编辑 收藏

     摘要:   阅读全文
posted @ 2007-08-09 19:27 和田雨 阅读(1290) | 评论 (0)编辑 收藏

     摘要:   阅读全文
posted @ 2007-08-09 19:22 和田雨 阅读(271) | 评论 (0)编辑 收藏

我们已经知道,既可以使用主机名标识一台主帆,也可以使用IP地址标识。人们更愿意使用便于记忆的主机名标识符,而路由器则只愿使用长度固定并有层次结构的IP地址。
  
  我们可以通过多种方法来识别一个人。例如,通过出生证明上的姓名,还可以通过社会安全编号、通过驾驶执照编号。尽管这些标识都可以用来识别人,但是在某种背景下会有一种标识比其他的标识更加恰当。例如,IRS(美国的一个税收机构)中的计算机喜欢使用固定长度的社会安全编号而不是出生证上的姓名来标注。另——方面,日常生活中人们喜欢用更好记的出生证上的姓名而不是社会安全编号〔确实,你能想象出如果一个人说“嗨,我的名字是132—67—9875,请找一下我丈夫,178—87—1146”会是何等滑稽的场景)。
  
  因特网中的主机就像人一样能以多种力式标识。标识方法之一是使用主机名(hostname)。主机名(例如cnn.com,www.yahoo.com)是助记性的,人们更愿意使用。然而主机名几乎没有提供关于主机在因特网中的位置信息(主机名为sina.com.cn的主机也许是在中国境内,此外不再有别的位置信息了)。另外,主机名是由可变长度的字母数字字符构成的,路由器处理起来有困难。因此因特网中的主机也使用所谓的IP地址标识。我们将在以后深入讨论IP地址,这里只简单地说明一下。IP地址由4个字节构成,具有严格的层次结构。IP地址一般以点分十进制数格式表示,也就是说所有4个字节都以0—255之间的十进制数表示,各个字节之间以点号分隔,例如121.7.106.83。IP地址具有层次结构,当从左到右扫描某个地址时,我们得到关于其主机在因特网中所在位置的越来越明确的信息。这就像从下到上扫描某个邮政地址时,我们得到关于住宅所在位置的越来越明确的信息一样。
  
  DNS提供的服务
  
  我们已经知道,既可以使用主机名标识一台主帆,也可以使用IP地址标识。人们更愿意使用便于记忆的主机名标识符,而路由器则只愿使用长度固定民有层次结构的IP地址。为调解这两种不同的偏好,我们需要一个把主机名转换成IP地址的目录服务。这就是因特网的域名系统(Domain Name System,DNS)的主要任务。DNS既是一个在由名称服务器主机构成的层次结构中实现的分布式数据库,又是一个允许客户主机和名称服务器主机通信以使用域名转换服务的应用层协议。名称服务器主机通常是运行Berkeley Internet Name Domain(简称BIND)软件的UNIX主机。DNS协议运行在UDP之上,使用端口号53。
  
  其他应用层协议(例如HTTP,SMTP,FTP)普遍使用DNS把由用户提供的主机名转换成IP地址。作为例子,我们考虑某个用户使用运行在本地主机上的一个浏览器(也就是HTTP客户)请求http://www.yesky.com时会发生什么。为了把HTTP请求消息发送到名为www.yesky.com的web服务器主机,浏览器必须获悉这台主机的IP地址。我们知道,差不多每台主机都运行着DNS应用的客户端。浏览器从URL中抽取出主机名后把它传递给本地主机上的DNS应用客户端。DNS客户于是向某个DNS服务器发出一个包含该主机名的DNS查询消息。DNS客户最终收到一个包含与该主机名对应的IP地址的应答消息。浏览器接着打开一个到位于该IP地址的HTTP服务器的TCP连接。从这个例子中可以看出,DNS给使用它的因特网应用引入了额外延迟(有时还相当大)。所幸的是,正如我们即将讨论的那样.预期的主机名—IP地址对应关系往往高速缓存在就近的DNS名称服务器主机中,从而帮助降低了DNS访问延迟和DNS网络流量。
  
  除了从主机名到IP地址的转换,DNS还提供其他一些重要的服务:●主机别名(hody aliasing)。具有复杂主机名的主机还可以有一个或多个别名。例如,
  
  主机名为relay1.west-coast.enterprise.com的主机有两个别名:enterprise.com和www.enterprise.com。这种情况下,主机名relay1.west-coast.enterprise.com特称为正规主机名(canonical hostname),另外两个主机名则是别名主机名(alias hostname)。
  
  别名主机名往往比正规主机名更便于记忆。应用可以调用DNS获取所给定别名主机名的正规主机名和IP地址。
  
  ●邮件服务器别名(mall server aliasing)。电子邮件地址显然要求便于记忆。例如,如果Bob有一个hotmail账号,那么他的电子邮件地址可能是简单的bob@hotmail.com。然而hotmail邮件服务器的主机名要比hotmail.com复杂且不易记住。电子邮件应用可以调用DNS获取所给定别名主机名的正规主机名和IP地址。事实上,DNS允许一个公司的邮件服务器和Web服务器使用相同的别名主机名。例如,某个公司的web服务器和邮件服务器可以都称为enterprise.com。
  
  ●负载分担(load distribution)。DNS还越来越多地用于执行在多个复制成的服务器(例如复制成的Web服务器)之间的负载分担。像cnn.com那样的繁忙站点往往把Web服务器复制成多个,每个服务器运行在不向的端系统上,具有不同的IP地址。对于复制成的多个Web服务器,与其单个正规主机名相关联的是一组IP地址。DNS数据库中保存着这组IP地址。客户发出针对映射到一组IP地址的某个主机名的DNS查询后,服务器响应以整组IP地址,不过每次响应的地址顺序是轮转的。既然访问web站点时,浏览器一般把HTTP请求消息发送给内DNS客户否询到的一组IP地址中的第一个,DNS轮转于是把web站点的访问负载分担在所有复制成的服务器上。电子邮件应用也可以使用DNS轮转,这样多个邮件服务器可以有相同的别名。近来,有些公司已经以更为复杂的方式使用DNS提供web内容分发服务。
  
  DNS在RFC 1034和RFC 1035中有详细说明,并在另外若干个RFC中作了更新。DNS是一个复杂的系统,我们只在这儿讨论其操作的关键方面。感兴趣朗读者可以参见协议文档。
posted @ 2007-08-09 19:22 和田雨 阅读(330) | 评论 (0)编辑 收藏

     摘要:   阅读全文
posted @ 2007-07-31 22:00 和田雨 阅读(392) | 评论 (0)编辑 收藏

1.基本概念的理解

  绝对路径:绝对路径就是你的主页上的文件或目录在硬盘上真正的路径,(URL和物理路径)例如:
C:\xyz\test.txt 代表了test.txt文件的绝对路径。http://www.sun.com/index.htm也代表了一个
URL绝对路径。

  相对路径:相对与某个基准目录的路径。包含Web的相对路径(HTML中的相对目录),例如:在
Servlet中,"/"代表Web应用的跟目录。和物理路径的相对表示。例如:"./" 代表当前目录,
"../"代表上级目录。这种类似的表示,也是属于相对路径。

另外关于URI,URL,URN等内容,请参考RFC相关文档标准。

RFC 2396: Uniform Resource Identifiers (URI): Generic Syntax,
(http://www.ietf.org/rfc/rfc2396.txt)


2.关于JSP/Servlet中的相对路径和绝对路径。

2.1服务器端的地址

   服务器端的相对地址指的是相对于你的web应用的地址,这个地址是在服务器端解析的
(不同于html和javascript中的相对地址,他们是由客户端浏览器解析的)也就是说这时候
在jsp和servlet中的相对地址应该是相对于你的web应用,即相对于http://192.168.0.1/webapp/的。

  其用到的地方有:
 forward:servlet中的request.getRequestDispatcher(address);这个address是
在服务器端解析的,所以,你要forward到a.jsp应该这么写:
request.getRequestDispatcher(“/user/a.jsp”)这个/相对于当前的web应用webapp,
其绝对地址就是:http://192.168.0.1/webapp/user/a.jsp
sendRedirect:在jsp中<%response.sendRedirect("/rtccp/user/a.jsp");%>

2.22、客户端的地址
 
       所有的html页面中的相对地址都是相对于服务器根目录(http://192.168.0.1/)的,
而不是(跟目录下的该Web应用的目录)http://192.168.0.1/webapp/的。
 Html中的form表单的action属性的地址应该是相对于服务器根目录(http://192.168.0.1/)的,
所以,如果提交到a.jsp为:action="/webapp/user/a.jsp"或action="<%=request.getContextPath()%>"/user/a.jsp;
  提交到servlet为actiom="/webapp/handleservlet"  
   Javascript也是在客户端解析的,所以其相对路径和form表单一样。
 

  因此,一般情况下,在JSP/HTML页面等引用的CSS,Javascript.Action等属性前面最好都加上
<%=request.getContextPath()%>,以确保所引用的文件都属于Web应用中的目录。
另外,应该尽量避免使用类似".","./","../../"等类似的相对该文件位置的相对路径,这样
当文件移动时,很容易出问题。


3. JSP/Servlet中获得当前应用的相对路径和绝对路径
3.1 JSP中获得当前应用的相对路径和绝对路径
 根目录所对应的绝对路径:request.getRequestURI()
 文件的绝对路径     :application.getRealPath(request.getRequestURI());
 当前web应用的绝对路径 :application.getRealPath("/");
 取得请求文件的上层目录:new File(application.getRealPath(request.getRequestURI())).getParent()

3.2 Servlet中获得当前应用的相对路径和绝对路径
 根目录所对应的绝对路径:request.getServletPath();
 文件的绝对路径    :request.getSession().getServletContext().getRealPath
(request.getRequestURI())   
 当前web应用的绝对路径 :servletConfig.getServletContext().getRealPath("/");
     (ServletContext对象获得几种方式:
       javax.servlet.http.HttpSession.getServletContext()
       javax.servlet.jsp.PageContext.getServletContext()
       javax.servlet.ServletConfig.getServletContext()
     )

4.java 的Class中获得相对路径,绝对路径的方法
4.1单独的Java类中获得绝对路径
  根据java.io.File的Doc文挡,可知:
 默认情况下new File("/")代表的目录为:System.getProperty("user.dir")。
 一下程序获得执行类的当前路径
package org.cheng.file;
import java.io.File;

public class FileTest {
    public static void main(String[] args) throws Exception {      

  System.out.println(Thread.currentThread().getContextClassLoader().getResource(""));    

  System.out.println(FileTest.class.getClassLoader().getResource(""));       

  System.out.println(ClassLoader.getSystemResource(""));       
  System.out.println(FileTest.class.getResource(""));       
  System.out.println(FileTest.class.getResource("/")); //Class文件所在路径 
  System.out.println(new File("/").getAbsolutePath());       
  System.out.println(System.getProperty("user.dir"));   
 }
}

4.2服务器中的Java类获得当前路径(来自网络)
(1).Weblogic

WebApplication的系统文件根目录是你的weblogic安装所在根目录。
例如:如果你的weblogic安装在c:\bea\weblogic700.....
那么,你的文件根路径就是c:\.
所以,有两种方式能够让你访问你的服务器端的文件:
a.使用绝对路径:
比如将你的参数文件放在c:\yourconfig\yourconf.properties,
直接使用 new FileInputStream("yourconfig/yourconf.properties");
b.使用相对路径:
相对路径的根目录就是你的webapplication的根路径,即WEB-INF的上一级目录,将你的参数文件放

在yourwebapp\yourconfig\yourconf.properties,
这样使用:
new FileInputStream("./yourconfig/yourconf.properties");
这两种方式均可,自己选择。

(2).Tomcat

在类中输出System.getProperty("user.dir");显示的是%Tomcat_Home%/bin

(3).Resin

不是你的JSP放的相对路径,是JSP引擎执行这个JSP编译成SERVLET
的路径为根.比如用新建文件法测试File f = new File("a.htm");
这个a.htm在resin的安装目录下

(4).如何读相对路径哪?

在Java文件中getResource或getResourceAsStream均可

例:getClass().getResourceAsStream(filePath);//filePath可以是"/filename",这里的/代表web

发布根路径下WEB-INF/classes

默认使用该方法的路径是:WEB-INF/classes。已经在Tomcat中测试。

5.读取文件时的相对路径,避免硬编码和绝对路径的使用。(来自网络)
5.1 采用Spring的DI机制获得文件,避免硬编码。
   参考下面的连接内容:
   http://www.javajia.net/viewtopic.php?p=90213&
5.2 配置文件的读取
 参考下面的连接内容:
 http://dev.csdn.net/develop/article/39/39681.shtm
5.3 通过虚拟路径或相对路径读取一个xml文件,避免硬编码
 参考下面的连接内容:
 http://club.gamvan.com/club/clubPage.jsp?iPage=1&tID=10708&ccID=8
 
6.Java中文件的常用操作(复制,移动,删除,创建等)(来自网络)
 常用 java File 操作类
 http://www.easydone.cn/014/200604022353065155.htm
 
 Java文件操作大全(JSP中)
 http://www.pconline.com.cn/pcedu/empolder/gj/java/0502/559401.html

 java文件操作详解(Java中文网)
 http://www.51cto.com/html/2005/1108/10947.htm

 JAVA 如何创建\删除\修改\复制目录及文件
 http://www.gamvan.com/developer/java/2005/2/264.html

总结:
 通过上面内容的使用,可以解决在Web应用服务器端,移动文件,查找文件,复制
 删除文件等操作,同时对服务器的相对地址,绝对地址概念更加清晰。
建议参考URI,的RFC标准文挡。同时对Java.io.File. Java.net.URI.等内容了解透彻
对其他方面的理解可以更加深入和透彻。
==================================================================================

参考资料:
java/docs/

java.io.File
java.io.InputStream
java.io.OutputStream
java.io.FileInputStream
java.io.FileReader;
java.io.FileOutputStream
java.io.FileWriter;
java.net.URI
java.net.URL


绝对路径与相对路径祥解
http://www.webjx.com/htmldata/2005-02-26/1109430310.html

[『J道习练』]JSP和Servlet中的绝对路径和相对路径
http://w3china.org/blog/more.asp?name=pcthomas&id=9122&commentid=12376

JSP,Servlet,Class获得当前应用的相对路径和绝对路径
http://cy.lzu.edu.cn/cy/club/clubPage.jsp?ccStyle=0&tID=886&ccID=77

如何获得当前文件路径
http://www.matrix.org.cn/resource/article/44/44113_java.html

通过Spring注入机制,取得文件
http://www.javajia.net/viewtopic.php?p=90213&

配置文件的读取
http://dev.csdn.net/develop/article/39/39681.shtm

读取配置文件,通过虚拟路径或相对路径读取一个xml文件,避免硬编码!
http://club.gamvan.com/club/clubPage.jsp?iPage=1&tID=10708&ccID=8

常用 java File 操作类
http://www.easydone.cn/014/200604022353065155.htm

Java文件操作大全
http://www.pconline.com.cn/pcedu/empolder/gj/java/0502/559401.html

Java文件操作详解
http://www.51cto.com/html/2005/1108/10947.htm 

posted @ 2007-07-29 11:08 和田雨 阅读(12980) | 评论 (0)编辑 收藏

大家总是不喜欢看到<%和%>在jsp页面上,其实我们可以使用比较优雅的xml方式来表达
1,隐含的注释
JSP语法:<%-- 内容 --%>
XML语法:无
2,变量或函数的声明
JSP语法:<%! declaration;[declaration;]+... %>
例如:
<%! 
   int i=0;int a,b,c;
   Color red=new Color(255,0,0);
   private static final String OK="ok";
   public String getAnswer(){
       return OK;
   }
%>
XML语法:
<jsp:declaration>
    declartion;[declaration;]+...
</jsp:declaration>
例如:
<jsp:declaration>
   int i=0;int a,b,c;
   Color red=new Color(255,0,0);
   private static final String OK="ok";
   public String getAnswer(){
       return OK;
   }
</jsp:declaration>
3,表达式
JSP语法:<%=expression%>
例如:
<%=Math.round(Math.random*100)%>
XML语法:
<jsp:expression>
   expression
</jsp:expression>
例如:
<jsp:expression>
   Math.round(Math.random*100)
</jsp:expression>

4,代码片断
JSP语法:<% your java code %>
例如:
<%
   String username=request.getParameter("username").trim();
   String password=request.getParameter("password").trim();
%>
XMl语法:
<jsp:scriptlet>
   your java code
</jsp:scriptlet>
例如:
<jsp:scriptlet>
   String username=request.getParameter("username").trim();
   String password=request.getParameter("password").trim();
</jsp:scriptlet>
5,指令:include
JSP语法:<%@include file="relativeURL"%>
例如:<%@include file="static_head.html"%>
XML语法:<jsp:directive.include file="relativeURL"/>
例如:<jsp:directive.include file="static_head.html"/>
6,指令:page
JSP语法:<%@page attribtes%>
例如:<%@page import="java.util.HashMap"%>
XML语法:<jsp:directive.page attribute/>
例如:<jsp:directive.page import="java.util.HashMap"/>
7,指令:taglib
JSP语法:<%@taglib uri="URIForLibrary" prefix="tagPrefix"%>
XML语法:无
对于jsp操作而言,本来就是xml格式。
下面使用xml表达方式书写一个jsp页面

example.jsp

<jsp:directive.page contentType="text/html;charset=GBK" />
<jsp:directive.page import="java.util.*,java.text.*" />

<jsp:declartion>
    public String getCustomDate(Date,date,String pattern){
        SimpleDateFormat format=new SimpleDateFormat();
        format.applyPattern(pattern);
        return format.format(date);
    }
</jsp:declartion>
<jsp:scriptlet>
    Date date=(Date)request.getAttribute("date");
    String dateStr=getCustomDate(date,"yyyy-MM-dd,hh:mm:ss");
</jsp:scriptlet>
<div style="font-size:11pt"
  显示时间:<jsp:expression>dateStr</jsp:expression>
</div>
posted @ 2007-07-29 10:39 和田雨 阅读(234) | 评论 (0)编辑 收藏

为了给浏览者一个友好的错误提示页面,我们可以象IIS一样自定义错误页面;

步骤如下:

一、打开WEB-INF文件夹下web.xml文件;

二、在里面新增:

''404页面不存在错误

<error-page>

   <error-code>404</error-code>

   <location>/errorpage404.htm</location>

</error-page>

''505服务器内部错误

<error-page>

   <error-code>505</error-code>

   <location>/errorpage505.htm</location>

</error-page>

''java.lang.NumberFormatException异常错误,依据这个标记你可以定义好多,you can any fire:)!@

<error-page>

   <exception-type>java.lang.NumberFormatException</exception-type>

   <location>/exception.htm</location>

</error-page>

三、保存web.xml文件,reload服务即ok!

Good Luck!!

posted @ 2007-07-29 10:05 和田雨 阅读(2317) | 评论 (4)编辑 收藏

华为技术有限公司

华为技术(“华为”)是全球领先的下一代电信网络解决方案供应商,致力于向客户提供创新的满足其

需求的产品、服务和解决方案,为客户创造长期的价值和潜在的增长。

华为产品和解决方案涵盖移动(HSDPA/WCDMA/EDGE/GPRS/GSM, CDMA2000 1xEV-DO/CDMA2000 1X,

TD-SCDMA和WiMAX)、核心网(IMS, Mobile Softswitch, NGN)网络(FTTx, xDSL, 光网络, 路由器和

LAN Switch)、电信增值业务(IN, mobile data service, BOSS)和终端(UMTS/CDMA)等领域。

华为在印度、美国、瑞典、俄罗斯以及中国的北京、上海和南京等地设立了多个研究所,61000多

名员工中的48%从事研发工作。截至2006年底,华为已累计申请专利超过19000件,连续数年成为中国申

请专利最多的单位。

华为在全球建立了100多个分支机构,营销及服务网络遍及全球,能够为客户提供快速、优质的服

务。目前,华为的产品和解决方案已经应用于全球100多个国家,以及31个全球前50强的运营商,服务

全球超过10亿用户。






中兴通讯股份有限公司

中兴通讯是全球领先的综合性通信制造业上市公司,是近年全球增长最快的通信解决方案提供商之一。


中兴通讯展示大厅一隅

1985年,中兴通讯成立。1997年,中兴通讯A股在深圳证券交易所上市。2004年12月,中兴通讯作

为中国内地首家A股上市公司成功在香港上市。2005年,中兴通讯销售收入超过215亿元,其中,国际销

售收入达36%。2006年,凭借优异的全球业绩,中兴通讯跻身美国《商业周刊》 “中国十大重要海外上

市公司”和 “中国最佳品牌20强”,成为国内惟一上榜的通信设备企业。

作为在香港和深圳两地上市的大型通信制造业上市公司,中兴通讯以满足客户需求为目标,为全球

客户提供创新性、客户化的产品和服务,帮助客户实现持续赢利和成功,构建自由广阔的通信未来。凭

借在无线产品(CDMA、GSM、3G、WiMAX等)、网络产品(xDSL、NGN、光通信等)、手机终端(CDMA、

GSM、小灵通、3G等)和数据产品(路由器、以太网交换机等)四大产品领域的卓越实力,通过遍布全

球的100多个分支机构,中兴通讯产品和解决方案应用于100多个国家的500多家运营商,全球TOP 100运

营商中的30家与中兴通讯达成长期伙伴关系,并为全球近3亿人口提供优质的、高性价比的产品与服务



中兴通讯是中国重点高新技术企业、技术创新试点企业和国家863高技术成果转化基地,承担了近

30项国家“863”重大课题,是通信设备领域承担国家863课题最多的企业之一,公司每年投入的科研经

费占销售收入的10%左右,并在美国、印度、瑞典及国内设立了14个研究中心。

立足中国,放眼全球。早在1995年,中兴通讯就启动了国际化战略,是中国高科技领域最早并最为

成功实践 “走出去”战略的标杆企业。中兴通讯国际市场“十年磨一剑”,已经相继与包括和记电讯

、法国电信在内的等众多全球电信巨头建立了战略合作关系,并不断突破发达国家的高端市场。

未来,中兴通讯将以“人才国际化为根本,市场国际化为重点,资本国际化为依托”,积极迎接挑

战,全力以赴为客户创造价值和成功,打造享誉全球的中兴通讯品牌,力创世界级卓越企业。








海信集团有限公司


海信集团是特大型电子信息产业集团公司,成立于1969年,先后涉足家电、通讯、信息、房地产、服务

等领域。

海信坚持“高科技、高质量、高水平服务、创国际名牌”的发展战略,以优化产业结构为基础、技

术创新为动力、资本运营为杠杆,快速成长,迅猛发展,率先在国内构架起家电、通讯、信息为主导的

3C产业结构,主导产品为电视、空调、冰箱、冷柜、洗衣机、商用空调系统计算机、移动电话、软件开

发、网络设备等。已经形成了年产1610万台彩电、900万套空调、1000万台冰箱、70万台冷柜、330万部

手机的强大产能。2006年海信实现销售收入435亿元,在中国电子信息百强企业中名列前茅。

目前,通过收购科龙,海信已经拥海信电器(600060)和科龙电器(000921)两家在沪、深、港三

地的上市公司,同时成为国内唯一一家持有海信(HiSense)、科龙(Kelon)和容声(Ronshen)三个

中国驰名商标的企业集团。海信电器股份有限公司2001年荣获了首届“全国质量管理奖”,海信电视、

海信空调、海信电脑、海信手机、科龙空调、容声冰箱全部当选中国名牌,海信电视、海信空调、海信

电脑、海信冰箱全部被评为国家免检产品,海信电视首批获得国家出口免检资格。

海信拥有国家级企业技术中心,建有国家一流的博士后科研工作站,是全国高新技术企业、全国技

术创新基地。科学高效的技术创新体系使海信的技术始终走在国内同行的前列,2005年6月,我国第一

块自主知识产权的、产业化的数字视频媒体处理芯片在海信诞生,此举打破了国外垄断的历史。

目前,海信在南非、匈牙利、法国等地拥有生产基地,在美国、欧洲、澳洲、日本等地设有销售机

构,产品远销欧洲、美洲、非洲、东南亚等100多个国家和地区。






海尔集团公司


海尔集团是世界第四大白色家电制造商、中国最具价值品牌。旗下拥有240多家法人单位,在全球30多

个国家建立本土化的设计中心、制造基地和贸易公司,全球员工总数超过五万人,重点发展科技、工业

、贸易、金融四大支柱产业,已发展成全球营业额超过1000亿元规模的跨国企业集团。



海尔集团在首席执行官张瑞敏确立的名牌战略指导下,先后实施名牌战略、多元化战略和国际化战略,

2005年底,海尔进入第四个战略阶段——全球化品牌战略阶段,海尔品牌在世界范围的美誉度大幅提升

。1993年,海尔品牌成为首批中国驰名商标;2006年,海尔品牌价值高达749亿元,自2002年以来,海

尔品牌价值连续四年蝉联中国最有价值品牌榜首。海尔品牌旗下冰箱、空调、洗衣机、电视机、热水器

、电脑、手机、家居集成等18个产品被评为中国名牌,其中海尔冰箱、洗衣机还被国家质检总局评为首

批中国世界名牌,2005年8月30日,海尔被英国《金融时报》评为“中国十大世界级品牌”之首。2006

年,在《亚洲华尔街日报》组织评选的“亚洲企业200强”中,海尔集团连续第四年荣登“中国内地企

业综合领导力”排行榜榜首。海尔已跻身世界级品牌行列,其影响力正随着全球市场的扩张而快速上升



据中国最权威市场咨询机构中怡康统计:2006年,海尔在中国家电市场的整体份额已经达到25.5%

,依然保持份额第一。其中,海尔在白色家电市场上仍然遥遥领先,且优势更加突出;在小家电市场上

海尔表现稳健,以16%的市场份额蝉联小家电市场冠军。在智能家居集成、网络家电、数字化、大规模

集成电路、新材料等技术领域处于世界领先水平。 “创新驱动”型的海尔集团致力于向全球消费者提

供满足需求的解决方案,实现企业与用户之间的双赢。目前,海尔累计申请专利突破7000项(其中发明

专利1234项)。在自主知识产权基础上,海尔主持或参与了115项国家标准的编制修定,制定行业及其

它标准397项。海尔“防电墙”技术正式成为电热水器新国家标准,海尔空调牵头制定“家用和类似用

途空调安装规范”。在国际上,海尔热水器“防电墙”技术、海尔洗衣机双动力技术等六项技术还被纳

入IEC国际标准提案,这证明海尔的创新能力已达世界级水平。

在创新实践中,海尔探索实施的“OEC”管理模式、“市场链”管理及“人单合一”发展模式均引

起国际管理界高度关注,目前,已有美国哈佛大学、南加州大学、瑞士IMD国际管理学院、法国的欧洲

管理学院、日本神户大学等商学院专门对此进行案例研究,海尔“市场链”管理还被纳入欧盟案例库。

海尔“人单合一”发展模式为解决全球商业的库存和逾期应收提供创新思维,被国际管理界誉为“号准

全球商业脉搏”的管理模式。

面对新的全球化竞争条件,海尔确立全球化品牌战略、启动“创造资源、美誉全球”的企业精神和

“人单合一、速决速胜”的工作作风,挑战自我、挑战明天,为创出中国人自己的世界名牌而持续创新







神州数码(中国)有限公司


神州数码控股有限公司成立于2000年,是联想控股有限公司旗下的子公司之一,于2001年在香港联合交

易所主板上市。神州数码旨在以负责任和持续创新的精神,全方位提供第一流的电子商务基础建设产品

、解决方案和服务。神州数码不仅是国内第一的IT产品分销商,同时也是国内最大的专业系统集成商和

知名的全线网络产品供应商。
2004年,神州数码综合市场发展、用户需求及自身能力,在“IT服务中国”的旗帜下,进一步提出“IT

服务,随需而动”(IT Service On Demand),围绕客户需求调整业务布局,致力于供应链管理服务、

增值服务和IT服务三大竞争领域,成为能够满足客户多样化需求,具有产品、技术与服务综合能力的IT

服务供应商。


发展历程

• 2000年4月,原联想集团进行战略拆分,神州数码正式成立,由原联想科技、联想集成、联想网络整

合而成;
• 2001年6月,神州数码在香港联交所主板成功上市;
• 2002年,神州数码提出“IT服务中国”,进行以IT服务为核心的战略布局,年销售额突破130亿元人

民币;
• 2003年,神州数码全力打造集网络基础建设、应用软件服务以及供应链服务为一体的IT服务企业,先

后荣获“中国企业信息化500强”、“国内最具影响力的IT服务品牌企业”等称号。






熊猫电子集团有限公司


熊猫电子集团有限公司是一个具有65年历史的综合性大型电子骨干企业,是全国120家试点企业集团和

520家重点企业之一。公司注册资本9.8亿元,净资产13.4亿元,现有员工9000多人,主要产品有: 短

波通信系统、移动通信系统、卫星通信系统、彩电、VCD/DVD、音响、洗衣机、计算机、显示器、电源

、BP机、生产技术装备、系统网络集成业务等。产品商标熊猫牌,是全国电子行业第一个"中国驰名商

标",已有45年历史。 <BR>长期以来,“熊猫”为建立和发展民族电子工业体系,为国防和国民经济现

代化建设作出了卓越贡献。尤其是改革开放以来的20年,销售收入从5000多万元发展到100亿元,利税

从1000多万元增长到10亿元,产品门类从少数品种扩展到综合性多门类,生产方式从小批量发展到规模

化、集约化大生产,技术水平跨越三、四十年,中外合资、国际合作取得良好成绩。2000年熊猫集团销

售收入168亿元,实现利税12亿元,创历史最好水平。 ; “熊猫”拥有雄厚的技术开发实力,公司建有

5个国家级工程技术开发中心,1个博士后工作站,4个产品设计研究所,与12家进入世界500强的国际大

公司进行技术合作,与国内8所重点大学研究所进行联合开发,近几年通过技术创新,开发出具有国际

水平的新一代短波通信、移动通信、卫星通信、数字电视、DVD、机电仪一体化装备等高新技术产品,

在全国同行业中居于领先地位。; “熊猫”抓住改革开放的机遇,积极发展中外合资,先后建立了南京

爱立信熊猫通信有限公司(主要生产移动通信基站、程控交换机等)、南京爱立信熊猫移动终端有限公

司(主要生产手机等移动终端产品)、南京夏普电子有限公司(主要生产数字化彩电、音响、液晶电视

、激光头等)、南京LG熊猫电器设备有限公司(主要生产洗衣机等)等规模较大的中外合资企业,直接

引进外资6000多万美元。在中外双方的真诚合作与努力下,这些合资企业迅速发展,实现利税8亿多元

,创造了良好的经济效益与社会效益,推进了集团发展。 ; “熊猫”下一步发展规划是:突出重点,

强化优势,体现特色,把移动通信、视像产品、信息产业等做强做大,把短波通信、卫星通信和机电仪

一体化装备等做精做专,形成六大支柱产品,到2005年销售收入力争达到500亿元,为发展我国电子信

息产业作出更大贡献。





浪潮集团有限公司


浪潮集团是中国领先的行业IT应用解决方案提供商,同时,也是中国最大的服务器制造商和服务器解决

方案提供商。2002年,浪潮连续7年蝉联国产服务器第一品牌。浪潮集团拥有"浪潮信息"和"浪潮软件"

两家上市公司,业务涵盖以服务器、行业电脑为主的网络终端设备、大型行业应用软件、分行业ERP与

通信运营系统解决方案等领域,用户遍及中国金融、通信、政府、教育、制造业、烟草行业等重要领域

。2002年,浪潮集团的销售收入达到64亿元人民币。
浪潮是中国最早从事电子信息产业的企业之一,这段历史可以追溯到1968年,山东电子设备厂(浪潮的

前身)在那时开始生产计算机外围设备和低频大功率三极管。浪潮三十余年的风雨历程,就是中国IT产

业发展的缩影。作为领先的行业IT应用解决方案提供商,浪潮的想法很简单:把尖端技术产业化,使之

成为最广泛的用户价值。
浪潮对中国信息产业的贡献,不仅因为他是中国IT产业的启蒙者,更重要的是浪潮始终以超前的技术、

出色的管理和独树一帜的产品引导着中国信息产业的发展,满足行业用户对信息处理的全方位需求。
1983年,第一台浪潮微机在济南诞生。由此,浪潮将中国的PC产业带入了一个变被动为主动的新时期。

1985年,大名鼎鼎的浪潮0520A使浪潮在中国三大计算机厂商中位列第二。当时的三大厂商占据了中国

个人计算机市场大部分的市场份额。
1992年,浪潮开发出全球第一台中文寻呼机,并开发制定了全球第一个汉字寻呼标准,这一标准沿用至

今。
90年代初,国际互联网络蓬勃发展。时任浪潮集团副总工程师的孙丕恕先生大胆地预测:个人计算时代

将逐渐向网络计算时代转变,服务器作为网络的核心,将是21世纪左右网络信息技术的关键所在。
1993年,浪潮在新加坡的技术人员成功开发出了中国第一台基于10颗CPU的小型机服务器,孙丕恕先生

是这次开发的主持者。在接下来的10年中,浪潮在中国率先开始了服务器的生产与研发,打破了国外服

务器厂商在中国多年的垄断,进而开创了中国服务器产业。自1996年开始,浪潮服务器一直蝉联国产服

务器第一品牌,2000年,浪潮服务器超越了众多国际品牌,晋身中国市场前三甲。浪潮率先拥有中国最

先进、产能最大的年产10万台的服务器生产线,2000年3月成功开发出"网泰"网络安全服务器,2002年

全球率先推出了64位开放式架构服务器 - IA-64。2002年11月,旨在推动"大协同运算体系"的浪潮"天

梭工程"正式启动。2002年,浪潮连续第7年蝉联国产服务器第一品牌,并获得2002年中国服务器市场唯

一"年度最成功企业"称号。
浪潮电脑专注行业应用市场,并对行业用户的需求有深刻的理解和技术积淀。每个行业都将有相应的"

行业PC","行业PC"应用者将从浪潮电脑的产品和方案中得到最大的实惠和应用价值。浪潮电脑相信,

随着用户需求的进一步细分化,"行业PC"将是"商用PC"最终的发展趋势。
在信息产业迅速发展,激烈竞争的时代,软件与IT服务的重要性日益提高,方案提供与IT服务能力成为

IT企业的发展趋势。软硬件综合发展,注重方案的提供能力,逐步向IT服务转型是浪潮发展策略之一。

事实上,从上世纪80年代末开始,浪潮软件就伴随着浪潮电脑走向神州大地,为行业用户提供量身定做

服务。同时,浪潮的软件人员也为国产服务器的成功推广做出了不可磨灭的贡献。2000年,浪潮集团整

合了内部软件资源,并吸纳外部软件力量,实施软件产业化的发展战略,成立了浪潮齐鲁软件公司,并

于2001年在上海证券交易所挂牌上市,其后更名"浪潮软件"。"浪潮软件"定位于通信、政府、分行业

ERP等行业或领域大型应用软件开发和集成服务提供商,"浪潮软件"在通信、金融、电子政务、烟草等

领域享有声誉。在2002年"浪潮软件"被评为最具竞争力中国软件企业10强之一,并位列"中国电子政务

IT 100强"第4名。
浪潮通软是中国三大财务软件提供商之一,是最早从财务软件转型为ERP管理软件的提供商。2001年,

浪潮集团通过增持股份将浪潮通软纳入浪潮软件的一体化经营体系。2002年7月,浪潮与韩国LG-CNS公

司合资成立浪潮乐金信息系统有限责任公司,为行业用户提供行业综合解决方案。同时,浪潮软件致力

于为通信领域客户提供整体解决方案,全面提升服务,为客户赢得客户。通信领域已经成为浪潮三大产业

之一。
新世纪的浪潮提出了专注化的发展战略,浪潮集团将结合自身优势,紧紧围绕因特网,专注于两个产业

发展方向:一是以服务器为核心的嵌入式软件化硬件产品,包括服务器、PC和面向行业的解决方案;二

是以通信行业软件、分行业ERP软件为主综合应用软件,兼顾OA、金融软件。浪潮专注于以上两个目标

,致力成为中国最优秀的行业IT应用解决方案提供商。







东软集团有限公司


东软生存与发展的关键因素是不断地发展我们的员工和领导力,不断创造我们在技术、产品和服务方面

的核心竞争力,不断提高我们客户的满意度,并能够为投资者带来收益。东软的成功不仅在于是否我们

明白了这些道理,而是我们如何在执行的环节上保证这些关键因素的可靠实现。



公司概况

东软是一家以软件技术为核心,提供解决方案、数字化产品和服务的公司,在软件与行业应用的结合、

软件与数字化产品的结合、软件人才的培养和咨询服务方面形成了东软独特的经营模式。

东软认为,随着软件技术的发展和在应用领域的拓展,软件将会成为社会和人们生活的一部分。东软以

软件应用的不同业务表现形式并通过业务间的充分组合来为客户提供系统的服务,创造客户和社会的价

值,进而实现我们的价值。

东软在众多行业解决方案中表现了东软的技术领先及对各行业业务的理解,使东软不仅是技术的专家,

也是应用信息技术解决行业管理问题的专家。将软件与医疗领域、安全领域、通信领域的结合,使我们

开发出了大型医疗设备系统、网络安全产品、汽车电子和移动通讯设备软件等,使软件的价值得到了更

好的体现。通过我们的教育与培训体系,东软为客户构建了一个学习的平台,一个人力资源发展的平台

,一个理解与沟通的平台。





北京北大方正集团



持“技工贸”道路而获成功的企业。历经20年的沧桑坎坷,方正在中国高科技企业演进史上留下了深刻

而坚实的烙印。王选教授自主创新的激光照排技术,开创了中国新闻出版业“告别铅与火、迎来光与电

”的第一次革命。而今,方正持续创新的网络出版技术,正在更为广泛应用领域掀起又一次技术革命。

自主创新与持续创新是方正跳跃的灵魂、发展的源泉。

纵观改革开放近三十年的历史进程,从“科教兴国”,到“建设创新型国家”,中国对经济发展基

本驱动力的战略认识不断攀升到新的高度。方正的今天就站在这一新的高度上。建立“创新型企业”迈

向未来,这既是方正的战略远见,也是方正的现实抉择。

方方正正做人、实实在在做事,我们秉承到永远。





清华同方股份有限公司


1992年,承接中央电视台空调控制系统工程;
1993年,承接国家气象局楼宇自动化项目;
1994年起,承接毛主席纪念堂中央集中监测管理系统工程、中南海怀仁堂空调自动控制系统工程、人民

大会堂空调自控工程及后期的楼宇自控/保安监控及计算机网络工程等一系列国家重点项目;
承接伊朗德黑兰地下铁道工程机电监控系统、消防报警和气体灭火系统工程;
承接山东潍坊国际金融大厦弱电总包工程,是公司承接的第一个大型弱电总包工程;
1997年,承接北京望京地区社区智能化系统工程,获得“北京试点小区”、“小康示范小区”“99年十

个样板工程”等部级优秀项目奖;
1998年,承接昆明世界园艺博览会智能化系统重大工程;
1999年,获得建设智能化系统集成专项工程设计资质(甲级);
承接北京饭店改扩建工程智能化系统工程;承接大连星海人家社区智能化系统工程,成为智能社区的示

范工程;
2000年,获得北京市安全技术防范工程准许证书(壹级);
承接的青岛广播电视中心工程获得建设部“鲁班奖”;
承接北京国家会计学院智能化系统工程,成为智能化院校的典型工程;
2001年,受建设部委托主编《智能建筑工程质量验收规范》,是第一个关于智能建筑工程质量方面的国

家强制标准;
获得信息产业部颁发的计算机系统集成资质(壹级);
承接郑州铁路局河南境内医疗保险管理信息系统工程,承接北京市公安局数字业务宽带信息网系统工程

,显示了完成行业信息化项目实力;
2002年,获得建设部建筑业企业机电安装工程施工总承包资质(壹级);
获得国家保密局涉及国家秘密的计算机信息系统集成资质;
2003年,成为中国建筑业协会智能建筑专业委员会副主任单位,中国勘察设计协会工程智能设计分会副

会长单位;
承接南京奥林匹克体育中心智能化系统工程;
承接湖南华天大酒店贵宾楼工程、青岛海悦广场高层公寓楼工程智能化系统工程,获得建设部“鲁班奖

”;
2004年,推出ezIBS智能建筑信息集成系统软件,提出“行业整合应用”的产业思想;

2005年,ezIBS智能建筑信息集成系统通过建设领域应用系统测评和第三方认证;
市场细分,推出酒店行业智能化整体解决方案;
荣获全国绿色建筑创新奖三等奖——北京国家会计学院
荣获全国绿色建筑创新奖二等奖----北京饭店
成为中国旅游饭店业协会会员,主持《饭店智能化及集成应用标准研究》课题;
8月 清华同方与美国埃施朗公司签订了智能建筑领域战略合作协议;
9月 清华同方在德黑兰地铁FAS及FES集成项目正式启动;
10月 与建设部智能建筑技术开发推广中心,中国建筑业协会智能建筑专业委员会联合举办了“智能楼

宇自动控制系统”的深度培训;
11月 成为北京市安全防范行业协会副理事长单位;

2006年,3月同方担当中央电视台新台址建设工程A、B标段弱电工程;
RH2000分布式控制系统、RH-DⅡ型组合式冷/热量表评为“智能建筑优质产品”
6月同方海外签约伊朗地铁四号线BAS/FAS/FES系统建设、北延线BAS/FAS建设;
7月数字城市签约也门萨那国际机场智能化系统工程;
8月,数字城市科技公司成立;
9月推出同方自有品牌安防类CCTV产品系列;
10月同方安防产品评为“2006年中国安防十大品牌集成系统产品类”第八名





山东中创软件工程股份有限公司


中创软件工程股份有限公司,是全国领先的软件产品供应商、解决方案提供商和系统集成服务商,是全

国电子信息百强企业、国家规划布局内重点软件企业、国家火炬计划重点高新技术企业、国家“863计

划”软件产业国际化示范企业、中国软件欧美出口工程A级示范企业、国家“863计划”成果产业化基地

、山东中间件产业基地、中国软件二十年明星企业。2004年10月落成的中创软件昆山软件园区,已经成

为中创软件的开发、测试、培训和服务基地。
中创软件自1991年成立即专注于行业应用,为全国金融、交通、电子政务、电子商务等领域的6万

多家用户单位提供了优质的软件产品、解决方案和集成服务。2004年成功实施了交通银行、民生银行信

贷管理项目以及广东发展银行的信贷系统升级项目,成功实施了山东高速公路信息系统二期项目,在广

州成功完成了新机场高速、北环高速、东南西环高速、南部快线等联网收费系统的建设,成功完成了全

国海事信息化推广项目,承建的山东交通政务信息管理系统被国家交通部评为“省级公路资源整合示范

工程第一名”。

2005年中创软件又中标承建了中国建设银行信贷管理项目、东莞商业银行信贷管理项目,并成功实

施了山东省国税局的税控和数据分析管理系统。

以十几年丰富的应用开发经验,中创软件及商用中间件公司在国家重点支持下,通过产学研合作,

开发出了技术领先的Infor系列中间件,发起成立全国第一个中间件产业联盟,并在全国一系列大型项

目中实现了规模化应用。Infor系列中间件,2004年被评为“中国软件二十年最具应用价值的软件产品

”,并荣获“2004年度中间件综合应用奖”、“2004年度中间件最佳开发效率奖”。2005年应用服务器

InforWeb荣获“应用服务器最佳性能及开发效率奖”, 消息中间件InforBus/Q荣获“消息中间件最佳

应用奖”, 网页防篡改产品InforGuard荣获“2005年度中国信息安全值得信赖网页防篡改产品品牌”



中创软件与国际知名IT公司、咨询公司、学术机构密切交流合作,在管理、技术、工具、人才等方

面与国际接轨,促进国内外业务不断拓展,成为中国主要的欧美软件外包服务商和IBM、Intel等著名国

际公司的重要合作伙伴。2004年与IBM展开全面合作,建立了全国首家IBM授权的软件测试中心,构建了

跨区域软件开发平台,大大提升了软件开发和质量保证能力。两位UML创始人、国际软件工程大师James

Rumbaugh和Ivar Jacobson相继访问中创软件并讲学,推动了中创软件注入先进?/ca>
posted @ 2007-07-27 19:39 和田雨 阅读(809) | 评论 (0)编辑 收藏

华为技术有限公司是一家总部位于中国广东深圳市的生产销售电信设备的员工持股的民营科技公司,于1988年成立于中国深圳。华为的主要营业范围是交换,传输,无线和数据通信类电信产品,在电信领域为世界各地的客户提供网络设备、服务和解决方案。总裁任正非,董事长孙亚芳。

2004年销售额462亿元人民币,其中海外销售额22.8亿美元,并且是当年中国国内电子行业营利和纳税第一。

截至2006年5月,华为在国际市场上覆盖90多个国家和地区,全球排名前50名的运营商中,已有28家使用华为的产品和服务。

华为产品和解决方案涵盖移动(HSDPA/WCDMA/EDGE/ GPRS/GSM, CDMA2000 1X EVDO/CDMA2000 1X, TD-SCDMA和WiMAX)、核心网(IMS, 移动网软交换机, NGN) 通信网络(FTTX, xDSL, 光网络, 路由器和局域网交换机)、电信增值业务(智能网, 移动数据业务, BOSS)、终端(UMTS/CDMA)等领域。华为技术数据通信产品系列是针对企业用户的需求而设计,其中包含电信级水平的超高速骨干网络交换器、堆栈式L2/3/4网络交换器、企业级路由器、网络安全设备、VoIP网络电话设备与华为专有的QuidView相关网管软件,提供企业最佳网络整合解决方案。

华为在通信设备核心技术方面的第一次突破,是1994年推出的2000门网用大型交换机设备。华为技术有限公司在IT泡沫之前是一间籍籍无名的公司,但从IT泡沫之后该公司以中国为据点急速成长,快速吸引各界注目。华为在与思科系统公司的诉讼中获得胜利,出口大幅增加,市场不仅限于开发中国家,目前市场传言华为将与外商合作,并初次发行股票(IPO),威胁同领域的西欧企业。

华为在全球设立了包括印度、美国、瑞典、俄罗斯以及中国的北京、上海、南京等多个研究所,40000名员工中的48%从事研发工作,截止2005年年底已累计申请专利超过12500件,已连续数年成为中国申请专利最多的单位。

2006年5月8日,华为启用新的企业标示。

2006年9月,华为与3Com合资设立的网络通讯设备品牌华为3Com(Huawei-3Com)改名为H3C。

由于日益严重的外部威胁,目前该公司内部正在大规模的推行信息安全政策,然而实际上其系统仍然有着显著信息外泄漏洞。
posted @ 2007-07-27 19:29 和田雨 阅读(234) | 评论 (0)编辑 收藏

电信业务运营支持系统(BOSS),面对客户是统一的;面对电信运营商,它融合了业务支撑系统(BSS)与运营支撑系统(OSS),是一个综合的业务运营和管理平台,同时也是真正融合了传统IP数据业务与移动增值业务的综合管理平台。

OSS/BSS是电信运营商的一体化、信息资源共享的支持系统,它主要由网络管理、系统管理、计费、营业、账务和客户服务等部分组成,系统间通过统一的信息总线有机整合在一起。它不仅能在帮助运营商制订符合自身特点的运营支撑系统的同时帮助确定系统的发展方向,还能帮助用户制订系统的整合标准,改善和提高用户的服务水平。

作为一种高效的信息管理系统,OSS/BSS已在国外电信运营商中得到广泛的运用,并在实践中积累了大量的成功案例。OSS/BSS解决方案也在这一过程中趋于完善。但国内目前还没有成熟的OSS/BSS系统,电信运营商的网管系统、计费系统、营账系统、客服系统等都是各成体系,没有经过有机整合。目前全球领先的OSS/BSS供货商主要有Tibco、Portal、HP、Concord、Syndesis、SUN、Micromuse等。思科、亚信、同天等厂商还在国内开放了OSS/BSS 实验室。
posted @ 2007-07-27 19:27 和田雨 阅读(384) | 评论 (0)编辑 收藏

FSO是指文件系统对象,英文单词为File System Object。 FSO是ASP程序中的一个对文件操作的控件,通过编程,可以通过该控件对服务器进行读取、新建、修改、删除目录以及文件的操作。它是ASP编程中非常有用的一个控件,   但大家可以想一下,在一台服务器上有许多虚拟用户,如果一个用户使用FSO删除别人的文件,那不是乱了套,所以基于安全考虑,不少的虚拟主机服务商干脆关掉了这个控件,但关掉此控件,有的有户想使用ASP生成文件又变成了不可能的事,所以如果关闭了FSO会让客户很不方便。
 所以你在购买虚拟主机时,一定要看看你的服务器有没有关闭FSO权限,用了FSO,我们就可以操纵的计算机文件系统,在这里是指位于web服务器之上。所以,确认你对此拥有合适的权限。理想情况下,你可以在自己的机器上建立一个web服务器,这样就能方便地进行测试。如果运行于Windows平台,如果你还不是很了解FSO,请试一试微软公司的免费个人Web服务器PWS,或windows2000的IIS
 FSO 模型对象
Drive Object:驱动器对象 供存取磁盘或者网络驱动器
FileSystemObject Object:文件系统对象 供存取计算机的文件系统
Folder Object:文件夹对象 供存取文件夹的所有属性
TextStream Object:文本流对象 供存取文件内容 
 你可以使用上面的对象做计算机上的任何事情,也包括破坏活动 ;-( 所以,请小心使用FSO。在web环境中,存储信息是非常重要的,比如用户信息,日志文件,等等。FSO提供了一个强大且简单的方法高效率地保存数据。
开启/关闭系统FSO支持方法
windows98系统
在DOS命令行状态输入以下命令:
关闭命令:RegSvr32 /u C:\WINDOWS\SYSTEM\scrrun.dll
打开命令:RegSvr32 C:\WINDOWS\SYSTEM\scrrun.dll
win2000系统:
在CMD命令行状态输入以下命令:
关闭命令:RegSvr32 /u C:\WINNT\SYSTEM32\scrrun.dll
打开命令:RegSvr32 C:\WINNT\SYSTEM32\scrrun.dll 
posted @ 2007-07-23 16:17 和田雨 阅读(1064) | 评论 (1)编辑 收藏

     摘要:   阅读全文
posted @ 2007-07-21 13:50 和田雨 阅读(234) | 评论 (0)编辑 收藏

作者:杨晓(http://blog.sina.com.cn/u/1237288325)

一、Tomcat背景

  自从JSP发布之后,推出了各式各样的JSP引擎。Apache Group在完成GNUJSP1.0的开发以后,开始考虑在SUN的JSWDK基础上开发一个可以直接提供Web服务的JSP服务器,当然同时也支持Servlet, 这样Tomcat就诞生了
Tomcat是jakarta项目中的一个重要的子项目,其被JavaWorld杂志的编辑选为2001年度最具创新的java产品,同时它又是sun公司官方推荐的servlet和jsp容器,因此其越来越多的受到软件公司和开发人员的喜爱。servlet和jsp的最新规范都可以在tomcat的新版本中得到实现。其次,Tomcat是完全免费的软件,任何人都可以从互联网上自由地下载。Tomcat与Apache的组合相当完美。

 

二、Tomcat目录

tomcat
|---bin Tomcat:
存放启动和关闭tomcat脚本

|---conf Tomcat:存放不同的配置文件(server.xml和web.xml);
|---doc:存放Tomcat文档;
|---lib
/japser/common:存放Tomcat运行需要的库文件(JARS);
|---logs:存放Tomcat执行时的LOG文件;
|---src:存放Tomcat的源代码;
|---webapps:Tomcat的主要Web发布目录(包括
应用程序示例);
|---work:
存放jsp编译后产生的class文件



三、Tomcat类加载

    Bootstrap($JAVA_HOME/jre/lib/ext/*.jar)
System($CLASSPATH/*.class
和指定的jar)
Common($CATALINA_HOME/common
下的classes,lib,endores三个子目录)
Catalina ($CATALINA_HOME/server/
下的classeslib目录仅对Tomcat可见)
&Shared($CATALINA_HOME/shared/
下的classeslib目录以及$CATALINA_HOME/lib目录)仅对Web应用程序可见,Tomcat不可见WebApp($WEBAPP/Web-INF/*仅对该WEB应用可见classes/*.class lib/*.jar)



加载类和资源的顺序为:
1
/Web-INF/classes

2/Web-INF/lib/*.jar

3Bootstrap

4System

5$CATALINA_HOME/common/classes
6
$CATALINA_HOME/common/endores/*.jar

7$CATALINA_HOME/common/lib/*.jar

8$CATALINA_HOME/shared/classes
9
$CATALINA_HOME/shared/lib/*.jar

四、server.xml配置简介

下面讲述这个文件中的基本配置信息,更具体的配置信息请参考tomcat的文档:
    server:
          1
port 指定一个端口,这个端口负责监听关闭tomcat的请求
          2
shutdown 指定向端口发送的命令字符串
    service:
          1
name 指定service的名字
    Connector (
表示客户端和service之间的连接)
          1
port 指定服务器端要创建的端口号,并在这个断口监听来自客户端的请求
          2
minProcessors 服务器启动时创建的处理请求的线程数
          3
maxProcessors 最大可以创建的处理请求的线程数
          4
enableLookups 如果为true,则可以通过调用request.getRemoteHost()进行DNS

询来得到远程客户端的实际主机名,若为false则不进行DNS查询,而是返回其ip

地址
          5
redirectPort 指定服务器正在处理http请求时收到了一个SSL传输请求后重定向的

端口号
          6
acceptCount 指定当所有可以使用的处理请求的线程数都被使用时,可以放到处理

队列中的请求数,超过这个数的请求将不予处理
          7
connectionTimeout 指定超时的时间数(以毫秒为单位)
    Engine (
表示指定service中的请求处理机,接收和处理来自Connector的请求)
          1
defaultHost 指定缺省的处理请求的主机名,它至少与其中的一个host元素的name

属性值是一样的 

Context (表示一个web应用程序):
          1、docBase 应用程序的路径或者是WAR文件存放的路径
          2、path 表示此web应用程序的url的前缀,这样请求的url为
http://localhost:8080/path/****
          3、reloadable 这个属性非常重要,如果为true,则tomcat会自动检测应用程序的
/WEB-INF/lib 和/WEB-INF/classes目录的变化,自动装载新的应用程序,我们可
以在不重起tomcat的情况下改变应用程序
    host (表示一个虚拟主机):
          1、name 指定主机名
          2、appBase 应用程序基本目录,即存放应用程序的目录
          3、unpackWARs 如果为true,则tomcat会自动将WAR文件解压,否则不解压,直接
从WAR文件中运行应用程序
    Logger (表示日志,调试和错误信息):
          1、className 指定logger使用的类名,此类必须实现org.apache.catalina.Logger 接口
          2、prefix 指定log文件的前缀
          3、suffix 指定log文件的后缀
          4、timestamp 如果为true,则log文件名中要加入时间,如下
例:localhost_log.2001-10-04.txt
   Realm (表示存放用户名,密码及role的数据库):
          1、className 指定Realm使用的类名,此类必须实现org.apache.catalina.Realm接口
   Valve (功能与Logger差不多,其prefix和suffix属性解释和Logger 中的一样):
          1、className 指定Valve使用的类名,如用org.apache.catalina.valves.AccessLogValve
类可以记录应用程序的访问信息
    directory(指定log文件存放的位置):
    1、pattern 有两个值,common方式记录远程主机名或ip地址,用户名,日期,第一行请求的字符串,HTTP响应代码,发送的字节数。combined方式比common方式记录的值更多



五、web.xml配置简介:
1、默认(欢迎)文件的设置
在tomcat4\conf\web.xml中,<welcome-file-list>与IIS中的默认文件意思相同。
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>

2、报错文件的设置
<error-page>
<error-code>404</error-code>
<location>/notFileFound.jsp</location>
</error-page>
<error-page>
<exception-type>java.lang.NullPointerException</exception-type>
<location>/null.jsp</location>
</error-page>
如果某文件资源没有找到,服务器要报404错误,按上述配置则会调用\webapps\ROOT\notFileFound.jsp。
如果执行的某个JSP文件产生NullPointException ,则会调用\webapps\ROOT\null.jsp
 
3、会话超时的设置
设置session 的过期时间,单位是分钟;
<session-config>
<session-timeout>30</session-timeout>
</session-config>

4、过滤器的设置
<filter>
<filter-name>FilterSource</filter-name>
<filter-class>project4. FilterSource </filter-class>
</filter>
<filter-mapping>
<filter-name>FilterSource</filter-name>
<url-pattern>/WwwServlet</url-pattern>
(<url-pattern>/haha/*</url-pattern>)
</filter-mapping>
 
过滤:
1) 身份验证的过滤Authentication Filters
2) 日志和审核的过滤Logging and Auditing Filters
3) 图片转化的过滤Image conversion Filters
4) 数据压缩的过滤Data compression Filters
5) 加密过滤Encryption Filters
6) Tokenizing Filters
7) 资源访问事件触发的过滤Filters that trigger resource access events XSL/T 过滤XSL/T filters
9) 内容类型的过滤Mime-type chain Filter 注意监听器的顺序,如:先安全过滤,然后资源,然后内容类型等,这个顺序可以自己定。


六、管理
    1、用户配置
      在进行具体Tomcat管理之前,先给tomcat添加一个用户,使这个用户有权限来进行管理。
      打开conf目录下的tomcat-users.xml文件,在相应的位置添加下面一行:
    <user name="user" password="user" roles="standard,manager"/>
    然后重起tomcat,在浏览器中输入http://localhost:8080/manager/,会弹出对话框,输入上面的用户
名和密码即可。

    2、应用程序列表
      在浏览器中输入http://localhost:8080/manager/list,浏览器将会显示如下的信息:
    OK - Listed applications for virtual host localhost
    /ex:running:1
    /examples:running:1
    /webdav:running:0
    /tomcat-docs:running:0
    /manager:running:0
    /:running:0
     上面显示的信息分别为:应用程序的路径、当前状态、连接这个程序的session数
   3、重新装载应用程序
      在浏览器中输入 http://localhost:8080/manager/reload?path=/examples,浏览器显示如下:
    OK - Reloaded application at context path /examples   
这表示example应用程序装载成功,如果我们将server.xml的Context元素的reloadable属性设为true,则没必要利用这种方式重新装载应用程序,因为tomcat会自动装载。
4、显示session信息
    在浏览器中输入http://localhost:8080/manager/sessions?path=/examples,浏览器显示如下:
    OK - Session information for application at context path /examples Default maximum session inactive
interval 30 minutes
5、启动和关闭应用程序
   在浏览器中输入http://localhost:8080/manager/start?path=/examples
http://localhost:8080/manager/stop?path=/examples分别启动和关闭examples应用程序。
关于作者:
杨晓,计算机硕士,曾在NEC、Softbrain 担任java开发工作。
博客:http://blog.sina.com.cn/u/1237288325
posted @ 2007-07-21 13:40 和田雨 阅读(238) | 评论 (0)编辑 收藏

     摘要:   MySQL客户端显示汉字乱码的解决MySQL 服务端不加任何参数启动时,客户端可以默认正常显示汉字,如下面所示 代码: D:mysql5>.binmysqld-max-nt.exe --console 061106 20:35:21  InnoDB: Started; log sequence number 0 43655 061106 20:...  阅读全文
posted @ 2007-07-19 20:56 和田雨 阅读(4996) | 评论 (0)编辑 收藏

本文介绍如何利用Eclipse插件SQLExplorer在Eclipse中连接各种数据库进行操作使用。

  Eclipse是目前非常流行的开发平台,开放扩展的架构让很多程序员找到了自己个性化的工作环境。

安装

JDK:1.5.0 从http://java.sun.com上去下载安装
Eclipse:3.1.1 从http://www.eclipse.org 上去下载解压
SQLExplorer 从http://eclipsesql.sourceforge.net/

技巧

  Eclipse使用技巧之插件管理

  提示:新下载的插件PlugIn一定不要都放在原始的Eclipse目录下去,一大堆,累死你:(

  1. 前提是你已经安装好了Eclipse工具了,比如安装在E:\OpenSource\Eclipse\目录下,以下这个目录以%ECLIPSE_HOME%来进行表示;
  2. 此时默认的插件是在%ECLIPSE_HOME%\plugins目录中的;
  3. 在%ECLIPSE_HOME%下建立一个PlugInsNew的目录;

  比如:E:\OpenSource\Eclipse\PlugInsNew\

  1. 你下载了个新的插件,比如叫做:XYZ

  那么就在%ECLIPSE_HOME%\PlugInsNew\目录下建立XYZ目录,目录里面是eclipse目录,eclipse目录包含有features与plugins两个子目录;结构如下图所示:

  1. 把下载的新插件的文件放在以下相应目录中

    %ECLIPSE_HOME%\PlugInsNew\XYZ\eclipse\features
    %ECLIPSE_HOME%\PlugInsNew\ XYZ\eclipse\plugins

  2. 建立相关的.link的文件

    然后在%ECLIPSE_HOME%\links目录里建立一个XYZ.link的文件
    内容如是:path=E:/OpenSource/Eclipse/PlugInsNew/XYZ就一行这样的路径指示而已。
    这样,如果你下载了多个插件就可以如法炮制建立多个Link文件,想加载哪个插件就把哪个插件的Link文件放到%ECLIPSE_HOME%\links的目录中即可,使用与管理都很方便,建议千万不要放在默认的安装目录中;
    如果你的%ECLIPSE_HOME%与此不同,请修改XYZ.link文件里的路径

  3. 删除,关闭Eclipse

    删除%ECLIPSE_HOME%\links\XYZ.link文件即可
    删除%ECLIPSE_HOME%\PlugInsNew\XYZ整个目录及文件

  4. 重新启动Eclipse即可

使用

  SQLExplorer插件安装方法采用上一节的《Eclipse使用技巧之插件管理》
  重新启动Eclipse后,可以在菜单Window => Show View => Other => 可以看到多了SQLExplorer
展开SQLExplorer有七项内容,分别为:

  1. Aliases 别名,用来标识数据库连接串的
  2. Connection Info 连接信息,用来显示连接数据库时的相关信息,如,数据库产品名称、版本、JDBC驱动程序的名称、版本、用户名、连接串、是否自动提交等等。
  3. Connnections 显示活动的连接情况
  4. Database Structure View 显示数据库结构
  5. Drivers 配置驱动程序用
  6. SQL History 执行SQL的历史记录
  7. SQL Results 执行SQL的结果集

  下面会分别介绍这七项内容的具体使用:
如下图所示:

  菜单Window => Preferences => SQLExplorer
右边的项目中,可以设置预览表结果集时返回的行数、SQL集的返回行数、是否自动提交、还是关闭SQL编辑窗口后提交和写SQL时是否自动完成表和列名。

  菜单Window => Preferences => SQLExplorer => SQL Editor
右边的项目中,可以设置SQL编辑器里的字体属性、文本属性

  菜单Window => Show View => Other => SQLExplorer 把里面的七项内容全部显示出来,你也可以自己进行定制一下它

  开始进行配置驱动程序,打开Drivers

  默认加载成功插件后,只有JDBC ODBC Bridge是打勾可用的,其它都是打红X不可用的,想想就知道为什么了吧(^_^)

  没有想出来,接下来看看吧
右键JDBC ODBC Bridge,在弹出的菜单中点击Change the selected Driver菜单

  可以在弹出的修改驱动程序中看到如下信息,在Driver Class Name显示的是
sun.jdbc.odbc.JdbcOdbcDriver
因为从JDK1.2开始,在JDK里自动带有这个驱动程序了,所以显示为可用了:)

  接下来我们开始配置MySQL和Oracle的驱动程序:
右键MMMySQL Driver,在弹出的菜单中点击Change the selected Driver菜单

  在弹出的修改驱动程序中看到,在Driver Class Name显示的是org.gjt.mm.mysql.Driver
点击Extra Class Path => Add => 选择你的MySQL所在的路径,加入它

  加入驱动程序如下所示:

  单击List Drivers按钮,在Driver Class Name的右下框中可以看到三个驱动类名,选择你需要的一个,OK之即可。

  可以看到这下MMMySQL Driver也为打勾可以使用的状态了。

  以同样的方法配置Oracle Thin Driver驱动程序

  默认驱动名称,添加驱动程序:

  可以看到两个驱动程序的名称

  配置好驱动程序后,可以开始创建连接了,切换到Aliases别名视图
点击创建图标,如下:

  选择MMMySQL Driver

  填入别名的名称、JDBC连接串URL、用户名、密码

  确定后,在Aliases别名视图里出现刚建立的连接

  右键刚建立的数据库连接别名,在弹出的菜单选择Open…打开之。

  会弹出一个连接的确认框,你可以更改用户名与密码,也可以设置是否自动提交。

  确定后,会自动切换到Database Structure View视图上,MySQL数据库,则可以看到Database

  再打开它,可以看到数据库名,Table表及表的个数与名称了。

  选中其中的表userpwd,这个表是自己建立的,可以看到以下显示列、索引、主键、外键、结果集预览、行数共六个信息内容。

  以下显示表的列信息

  以下显示索引信息

  以下显示主键信息

    以下显示外键信息

  以下显示结果集预览的内容

  以下显示的是记录行数信息

  切换到Connection Info连接信息的视图,可以看到连接数据库时的相关信息,
如,数据库产品名称MySQL、版本4.1.0a-nt
JDBC驱动程序的名称MySQL-AB JDBC Driver、版本mysql-connector-java-3.0.16-ga
用户名test@localhost、连接串jdbc:mysql://localhost:3306/test、自动提交模式为是等等。

  显示默认的事务状态

  切换到Connnections视图,显示当前数据库活动的连接情况,有一个活动的连接。

  右上角,可以打开Open New Connection图标来打开一个新的连接,比如连接到相同的数据库,但是却是不同的用户

  右上角,单击New SQL Editor图标,创建一个新的SQL编辑器,来写你的SQL语句

  在打开的SQL编辑器中,你可以开始写SQL语句了,如下:


按Ctrl + F9 或者点击Exceute SQL图标,执行所输入的语句

这样可以在SQL Results视图中看到如下执行的结果信息

    切换到SQL History 执行SQL的历史记录的视图,可以看到你执行过的语句列表

  再写一个不同的语句,演示结果集与SQL历史记录


执行后,记录是显示在最后的执行结果是在后面,依次递增的,即1、2、3、最后一个是你最后执行的结果信息内容显示的地方,不要弄错了。

  这样在SQL History里就再增加上了一条执行语句的记录了

  同样增加一个Oracle的连接测试

  Oracle数据库,在Database Structure View视图里显示有Database、Monitor、Security、Instance四项内容


在SQL编辑器中,选择Oracle的链接,再输入查询语句测试一下

  可以在结果集里得到如果内容,在第4个标签栏里了


再更改一下SQL语句

  得到如下内容,在第4个标签栏里了

  SQL历史记录里可以看到执行过的四条信息了

  这个插件的使用应当不是很容易的,其它的应用技巧与方法继续中。

posted @ 2007-07-19 18:24 和田雨 阅读(2240) | 评论 (0)编辑 收藏

方法一
使用phpmyadmin,这是最简单的了,修改mysql库的user表,不过别忘了使用PASSWORD函数。

方法二
使用mysqladmin,这是前面声明的一个特例。
mysqladmin -u root -p password mypasswd
输入这个命令后,需要输入root的原密码,然后root的密码将改为mypasswd。
把命令里的root改为你的用户名,你就可以改你自己的密码了。
当然如果你的mysqladmin连接不上mysql server,或者你没有办法执行mysqladmin,那么这种方法就是无效的,而且mysqladmin无法把密码清空。

下面的方法都在mysql提示符下使用,且必须有mysql的root权限:
方法三
mysql> Insert INTO mysql.user (Host,User,Password)
VALUES('%','jeffrey',PASSWORD('biscuit'));
mysql> FLUSH PRIVILEGES
确切地说这是在增加一个用户,用户名为jeffrey,密码为biscuit。
在《mysql中文参考手册》里有这个例子,所以我也就写出来了。
注意要使用PASSWORD函数,然后还要使用FLUSH PRIVILEGES。

方法四
和方法三一样,只是使用了REPLACE语句
mysql> REPLACE INTO mysql.user (Host,User,Password)
VALUES('%','jeffrey',PASSWORD('biscuit'));
mysql> FLUSH PRIVILEGES

方法五
使用SET PASSWORD语句,
mysql> SET PASSWORD FOR jeffrey@"%" = PASSWORD('biscuit');
拟也必须使用PASSWORD()函数,但是不需要使用FLUSH PRIVILEGES。


方法六
使用GRANT ... IDENTIFIED BY语句
mysql> GRANT USAGE ON *.* TO jeffrey@"%" IDENTIFIED BY 'biscuit';
这里PASSWORD()函数是不必要的,也不需要使用FLUSH PRIVILEGES。


注意: PASSWORD() [不是]以在Unix口令加密的同样方法施行口令加密。
MySQL 忘记口令的解决办法
如果 MySQL 正在运行,首先杀之: killall -TERM mysqld。
启动 MySQL :bin/safe_mysqld --skip-grant-tables &
就可以不需要密码就进入 MySQL 了。
然后就是
>use mysql
>update user set password=password("new_pass") where user="root";
>flush privileges;
重新杀 MySQL ,用正常方法启动 MySQL 。


mysql密码清空
Windows:
1.用系统管理员登陆系统。
2.停止MySQL的服务。
3.进入命令窗口,然后进入MySQL的安装目录,比如我的安装目录是c:\mysql,进入C:\mysql\bin
4.跳过权限检查启动MySQL,
c:\mysql\bin>mysqld-nt --skip-grant-tables
5.重新打开一个窗口,进入c:\mysql\bin目录,设置root的新密码
c:\mysql\bin>mysqladmin -u root flush-privileges password "newpassword"
c:\mysql\bin>mysqladmin -u root -p shutdown
将newpassword替换为你要用的root的密码,第二个命令会提示你输入新密码,重复第一个命令输入的密码。
6.停止MySQL Server,用正常模式启动Mysql
7.你可以用新的密码链接到Mysql了。

Unix&Linux:
1.用root或者运行mysqld的用户登录系统;
2.利用kill命令结束掉mysqld的进程;
3.使用--skip-grant-tables参数启动MySQL Server
shell>mysqld_safe --skip-grant-tables &
4.为root@localhost设置新密码
shell>mysqladmin -u root flush-privileges password "newpassword"
5.重启MySQL Server


mysql修改密码
  mysql修改,可在mysql命令行执行如下:
  mysql -u root mysql
  mysql> Update user SET password=PASSWORD("new password") Where user='name';
  mysql> FLUSH PRIVILEGES;
  mysql> QUIT

 

教你如何将MySQL数据库的密码恢复

因为MySQL密码存储于数据库mysql中的user表中,所以只需要将我windows 2003下的MySQL中的user表拷贝过来覆盖掉就行了。

在c:\mysql\data\mysql\(linux 则一般在/var/lib/mysql/mysql/)目录下有三个user表相关文件user.frm、user.MYD、user.MYI

user.frm //user表样式文件

user.MYD //user表数据文件

user.MYI //user表索引文件

为保险起见,三个都拷贝过来,不过其实如果之前在要恢复的那个MySQL上没有更改过表结构的话,只要拷贝user.MYD就行了

然后


#. /etc/rc.d/init.d/mysql stop
#. /etc/rc.d/init.d/mysql start
#mysql -u root -p XXXXXX


好了,可以用windows 2003下mysql密码登陆了


mysql>use mysql
mysql>update user set Password=PASSWORD('xxxxxx') where User='root';


这时候会出错,提示user表只有读权限

我分析了一下原因,只这样的,因为user.*文件的权限分配是windows 2003下的,在windows 2003下我ls -l一看权限是666

在linux下我一看,拷过来后权限变成了600(其实正常情况下600就行了,只不过这里的文件属主不是mysql,拷过来后的属主变为了 root,所以会出现权限不够,这时候如果你改成权限666则可以了,当然这样不好,没有解决问题的实质),在 /var/lib/mysql/mysql/下ls -l看了一下


#chown -R mysql:mysql user.*
#chmod 600 user.*


//OK,DONE

重起一下MYSQL

重新连接


mysql>use mysql
mysql>update user set Password=PASSWORD('xxxxxx') where User='root';
mysql>FLUSH PRIVILEGES;


有一点值得注意:如果你windows 下mysql如果是默认配置的话,注意要还要执行


mysql>delete from user where User='';
mysql>delete from user where Host='%';
mysql>FLUSH PRIVILEGES;


好了,到这里恢复密码过程就完成了

这个方法么就是有点局限性,你必须也具备另外的user表文件

其他还有几种方法

其它方法一(这个是网上流传较广的方法,mysql中文参考手册上的)

1. 向mysqld server 发送kill命令关掉mysqld server(不是 kill -9),存放进程ID的文件通常在MYSQL的数据库所在的目录中。


killall -TERM mysqld


你必须是UNIX的root用户或者是你所运行的SERVER上的同等用户,才能执行这个操作。

2. 使用`--skip-grant-tables' 参数来启动 mysqld。 LINUX下:


/usr/bin/safe_mysqld --skip-grant-tables , windows下c:\mysql\bin\mysqld --skip-grant-tables


3. 然后无密码登录到mysqld server ,


>use mysql
>update user set password=password("new_pass") where user="root";
>flush privileges;


。你也可以这样做:


`
mysqladmin -h hostname -u user password 'new password''


4. 载入权限表:


`
mysqladmin -h hostname flush-privileges'


或者使用 SQL 命令


`FLUSH PRIVILEGES'


5.

killall -TERM mysqld


6.用新密码登陆

其它方法二

直接用十六进制编辑器编辑user.MYD文件

不过这个里面我要说明一点,我这里编辑的时候发现个问题,加密的密码串有些是连续存储的,有些的最后两位被切开了,后两位存储在后面其他地方.这一 点我还没想明白.还有注意一点就是编辑的是加密过的密码串,也就是说你还是需要另外有user表文件。这种方法和我最上面介绍的方法的区别在于,这种方法 直接编辑linux下的user表文件,就不需要重新改文件属主和权限了 

修正一下:我在Windows下的实际操作如下

1.关闭正在运行的MySQL。

2.打开DOS窗口,转到mysql\bin目录。

3.输入


mysqld-nt --skip-grant-tables


回车。如果没有出现提示信息,那就对了。

4.再开一个DOS窗口(因为刚才那个DOS窗口已经不能动了),转到mysql\bin目录。

5.输入mysql回车,如果成功,将出现MySQL提示符 >

6. 连接权限数据库


>use mysql;
(>是本来就有的提示符,别忘了最后的分号)


6.改密码:


> update user set password=password("123456") where user="root"; (别忘了最后的分号)


7.刷新权限(必须的步骤)


>flush privileges;


8.退出


> \q


9.注销系统,再进入,开MySQL,使用用户名root和刚才设置的新密码123456登陆。

据说可以用直接修改user表文件的方法:

关闭MySQL,Windows下打开Mysql\data\mysql,有三个文件user.frm,user.MYD,user.MYI找个知道密码的MySQL,替换相应的这三个文件,如果user表结构没改过,一般也没人去改,替换user.MYD就可以了。

也可以直接编辑user.MYD,找个十六进制编辑器,UltraEdit就有这个功能。关闭MySQL,打开user.MYD。将用户名root 后面的八个字符改为565491d704013245,新密码就是123456。或者将它们对应的十六进制数字,(左边那里,一个字符对应两个数字),改 为 00 02 02 02 02 02 02 02,这就是空密码,在编辑器右边看到的都是星号*,看起来很象小数点。重开MySQL,输入root和你的新密码。

posted @ 2007-07-19 15:43 和田雨 阅读(224) | 评论 (0)编辑 收藏

MySQL是一个真正的多用户、多线程SQL数据库服务器。MySQL是以一个客户机/服务器结构的实现,它由一个服务器守护程序mysqld和很多不同的客户程序和库组成。由于其源码的开放性及稳定性,且与网站流行编徎语言PHP的完美结合,现在很多站点都利用其当作后端数据库,使其获得了广泛应用。处于安全方面的考虑,需要为每一用户赋于对不同数据库的访问限制,以满足不同用户的要求。下面就分别讨论,供大家参考。

一、MySQL修改密码方法总结
首先要说明一点的是:一般情况下,修改MySQL密码是需要有mysql里的root权限的,这样一般用户是无法更改密码的,除非请求管理员帮助修改。

方法一

使用phpMyAdmin (图形化管理MySql数据库的工具),这是最简单的,直接用SQL语句修改mysql数据库库的user表,不过别忘了使用PASSWORD函数,插入用户用Insert命令,修改用户用Update命令,删除用Delete命令。在本节后面有数据表user字段的详细介绍。

方法二

使用mysqladmin。输入

mysqladmin -u root -p oldpassword newpasswd

执行这个命令后,需要输入root的原密码,这样root的密码将改为newpasswd。同样,把命令里的root改为你的用户名,你就可以改你自己的密码了。 当然如果你的mysqladmin连接不上mysql server,或者你没有办法执行mysqladmin,那么这种方法就是无效的,而且mysqladmin无法把密码清空。

下面的方法都在mysql提示符下使用,且必须有mysql的root权限:

方法三

mysql> INSERT INTO mysql.user (Host,User,Password) VALUES ('%','system', PASSWORD('manager'));
mysql> FLUSH PRIVILEGES

确切地说这是在增加一个用户,用户名为system,密码为manager。注意要使用PASSWORD函数,然后还要使用FLUSH PRIVILEGES来执行确认。

方法四

和方法三一样,只是使用了REPLACE语句

mysql> REPLACE INTO mysql.user (Host,User,Password)
VALUES('%','system',PASSWORD('manager'));
mysql> FLUSH PRIVILEGES

方法五

使用SET PASSWORD语句

mysql> SET PASSWORD FOR system@"%" = PASSWORD('manager');

你也必须使用PASSWORD()函数,但是不需要使用FLUSH PRIVILEGES来执行确认。

方法六

使用GRANT ... IDENTIFIED BY语句,来进行授权。

mysql> GRANT USAGE ON *.* TO system@"%" IDENTIFIED BY 'manager';

这里PASSWORD()函数是不必要的,也不需要使用FLUSH PRIVILEGES来执行确认。

注:PASSWORD()函数作用是为口令字加密,在程序中MySql自动解释。

二、MySql中访问限制的设置方法
我们采用两种方法来设置用户。

进入到Mysql执行目录下(通常是c:\mysql\bin)。输入mysqld-shareware.exe,输入mysql --user=root mysql ,不然不能添加新用户。进入到mysql>提示符下进行操作。

假设我们要建立一个超级用户,用户名为system,用户口令为manager。

方法一

用Grant 命令授权,输入的代码如下:

mysql>GRANT ALL PRIVILEGES ON *.* TO system@localhost IDENTIFIED BY 'manager' WITH GRANT OPTION;

应显示:Query OK, 0 rows affected (0.38 sec)

方法二

对用户的每一项权限进行设置:

mysql>INSERT INTO user VALUES('localhost','system',PASSWORD('manager'), 'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y');

对于3.22.34版本的MySQL,这里共14个"Y",其相应的权限如下(按字段顺序排列):
 

权限 表列名称 相应解释 使用范围 
select Select_priv 只有在真正从一个表中检索时才需要select权限 表 
insert Insert_priv 允许您把新行插入到一个存在的表中 表 
update Update_priv 允许你用新值更新现存表中行的列 表 
delete Delete_priv 允许你删除满足条件的行 表 
create Create_priv 允许你创建新的数据库和表 数据库、表或索引 
drop Drop_priv 抛弃(删除)现存的数据库和表 数据库或表 
reload Reload_priv 允许您告诉服务器再读入授权表 服务器管理 
shutdown Shutdown_priv 可能被滥用(通过终止服务器拒绝为其他用户服务) 服务器管理 
process Process_priv 允许您察看当前执行的查询的普通文本,包括设定或改变口令查询 服务器管理 
file File_priv 权限可以被滥用在服务器上读取任何可读的文件到数据库表 服务器上的文件存取 
grant Grant_priv 允许你把你自己拥有的那些权限授给其他的用户 数据库或表 
references References_priv 允许你打开和关闭记录文件 数据库或表 
index Index_priv 允许你创建或抛弃(删除)索引 表 
alter Alter_priv 允许您改变表格,可以用于通过重新命名表来推翻权限系统 表 

如果创建用户时只有select、insert、update和delete权限,则允许用户只能在一个数据库现有的表上实施操作.

下面就可以创建我们要用到的数据库了,我们直接输入. 例如:我们要创建数据库名为XinXiKu,可用如下代码:

mysql>create database XinXiKu;

应显示:Query OK, 1 row affected (0.00 sec)
posted @ 2007-07-17 17:35 和田雨 阅读(459) | 评论 (0)编辑 收藏

一、在linux中
如果 MySQL 正在运行,首先杀之: killall -TERM mysqld
启动 MySQL :/usr/bin/safe_mysqld --skip-grant-tables
就可以不需要密码就进入 MySQL 了。 
然后就是 
>use mysql 
>update user set password=password("new_pass") where user="root"; 
>flush privileges; 
重新杀 MySQL ,用正常方法启动 MySQL 。 
二、Windows: 
1.用系统管理员登陆系统。 
2.停止MySQL的服务。 
3.进入命令窗口,然后进入MySQL的安装目录,比如我的安装目录是c:\mysql,进入C:\mysql\bin 
4.跳过权限检查启动MySQL, 
c:\mysql\bin>;mysqld-nt --skip-grant-tables 
5.重新打开一个窗口,进入c:\mysql\bin目录,设置root的新密码 
c:\mysql\bin>;mysqladmin -u root flush-privileges password "newpassword" 
c:\mysql\bin>;mysqladmin -u root -p shutdown 
将newpassword替换为你要用的root的密码,第二个命令会提示你输入新密码,重复第一个命令输入的密码。 
6.停止MySQL Server,用正常模式启动Mysql 
7.你可以用新的密码链接到Mysql了。 
这种事情很少会碰到,不过如果碰到的话,不妨试试。
posted @ 2007-07-17 17:32 和田雨 阅读(1791) | 评论 (0)编辑 收藏

Introduction to XML Schema
[XML Schema
介绍]

翻译:linqingfeng
英语原文: http://www.w3schools.com/schema/default.asp


XML Schema is an XML based alternative to DTD.
[XML Schema
是一种XML文件类型定义的基本方法]

An XML schema describes the structure of an XML document.
[
每个XML Schema描述XML文档的结构]

The XML Schema language is also referred to as XML Schema Definition (XSD).
[XML Schema
也称为XML模式定义(XSD)]


What You Should Already Know
[
在学习之前你应该知道什么]

Before you study the XML Schema Language, you should have a basic understanding of XML and XML Namespaces. It will also help to have some basic understanding of DTD.
[
在你开始学习XML Schema语言之前,你应该对XMLXML的命名空间有基本的了解。那样会帮助你了解DTDDocument Type Definition文件类型定义)].


What is an XML Schema?
[XML Schema
是什么?]

The purpose of an XML Schema is to define the legal building blocks of an XML document, just like a DTD.
[XML Schema
目标是定义合法的XML文档,就像DTD那样]

An XML Schema:
[
任一个XML Schema]

  • defines elements that can appear in a document
    [
    定义在文档中的元素]
  • defines attributes that can appear in a document
    [
    定义在文档中的属性]
  • defines which elements are child elements
    [
    定义哪些元素为子元素]
  • defines the order of child elements
    [
    定义子元素的阶]
  • defines the number of child elements
    [
    定义子元素的数]
  • defines whether an element is empty or can include text
    [
    定义元素是否为空]
  • defines data types for elements and attributes
    [
    定义元素和属性的数据类型]
  • defines default and fixed values for elements and attributes
    [
    定义元素和属性的默认值和固定值]

XML Schemas are the Successors of DTDs
[XML Schemas
DTD的替代者]

We think that very soon XML Schemas will be used in most Web applications as a replacement for DTDs. Here are some reasons:
[
我们认为很快XML Schemas就会替代DTD而大量应用于Web应用。原因有如下几个:]

  • XML Schemas are extensible to future additions
    [XML Schemas
    易于未来的扩展]
  • XML Schemas are richer and more useful than DTDs
    [XML Schemas
    DTD更有用处]
  • XML Schemas are written in XML
    [XML Schemas
    本身就是XML]
  • XML Schemas support data types
    [XML Schemas
    支持数据类型]
  • XML Schemas support namespaces
    [XML Schemas
    支持命名空间]

XML Schema is a W3C Recommendation
[XML Schemas
W3C推荐使用的]

XML Schema was originally proposed by Microsoft, but became an official W3C recommendation in May 2001.
[XML Schemas
最初由微软提出,并在2001年五月成为W3C的官方指定标准]

The specification is now stable and has been reviewed by the W3C Membership.
[
其规格文档现已稳定并加入到W3C标准中]

XML Schemas - Why?
[
为什么选用XML Schemas]

 


There are a number of reasons why XML Schema is better than DTD.
[XML Schemas
有趣多方面优于DTD]


XML Schema has Support for Data Types
[XML Schemas
支持数据类型]

One of the greatest strengths of XML Schemas is the support for data types.
[XML Schemas
其中最好的方面之一就是支持数据类型]

With the support for data types:
[
对数据类型提供的支持有:]

  • It is easier to describe permissible document content
    [
    易于描述文档内容是否允许]
  • It is easier to validate the correctness of data
    [
    易于验证数据的正确性]
  • It is easier to work with data from a database
    [
    易于复合数据库操作数据]
  • It is easier to define data facets (restrictions on data)
    [
    易于定义数据约束]
  • It is easier to define data patterns (data formats)
    [
    易于格式化数据]
  • It is easier to convert data between different data types
    [
    易于数据在不同的数据类型中转换]

XML Schemas use XML Syntax
[XML Schemas
是用XML的语法]

Another great strength about XML Schemas is that they are written in XML.
[
另一个最大的优点是XML Schemas是用XML书写的]

Because XML Schemas are written in XML:
[XML Schemas
XML书写的好处有:]

  • You don't have to learn another language
    [
    不用学习另一种新的语言]
  • You can use your XML editor to edit your Schema files
    [
    能在XML的编辑器中编写XML Schemas文件]
  • You can use your XML parser to parse your Schema files
    [
    能用XML解释器去解释XML Schemas文件]
  • You can manipulate your Schema with the XML DOM
    [
    能用XML DOM(Document Object Model,文档物件模型)操作XML Schemas文件]
  • You can transform your Schema with XSLT
    [
    能用XSLT来转换XML Schemas文件]

XML Schemas Secure Data Communication
[XML Schemas
数据通信更安全]

When data is sent from a sender to a receiver it is essential that both parts have the same "expectations" about the content.
[
当数据从发送方传递给接受方时, XML Schemas会让显示的内容达到你的期望”]

With XML Schemas, the sender can describe the data in a way that the receiver will understand.
[XML Schemas
文件能让发送方的数据被接受方所解释]

A date like this: "03-11-2004" will, in some countries, be interpreted as 3. November and in other countries as 11. March, but an XML element with a data type like this:
[
例如一个日期的表述” 03-11-2004”,在某些国家会被解释为113,而在另一些国家却被解释成311],而相同的数据在XML上表述成:

<date type="date">2004-03-11</date>

ensures a mutual understanding of the content because the XML data type date requires the format YYYY-MM-DD.
[
由于XML数据类型定义了他的格式是YYYY-MM-DD,从而使能正确的表述其内容的含义]


XML Schemas are Extensible
[XML Schemas
是可扩展的]

XML Schemas are extensible, just like XML, because they are written in XML.
[XML Schemas
是可扩展的,就像普通的XML一样,因为他本身就是一个XML]

With an extensible Schema definition you can:
[
可扩展性的定义带来的好处有:]

  • Reuse your Schema in other Schemas
    [
    可从用你的规则与其他规则]
  • Create your own data types derived from standard types
    [
    从其他的标准的数据类型中创建自定义的数据类型]
  • Reference multiple schemas from the same document
    [
    同一个文档可以引用多个规则]

Well-Formed is not Enough
[
良好格式还并不足够]

A well-formed XML document is a document that conforms to the XML syntax rules:
[
一个具有良好格式的XML文档是完全符合XML的语法规则的:]

  • must begin with the XML declaration
    [
    必须由XML声明开始]
  • must have one unique root element
    [
    必须有且仅有一个根节点]
  • all start tags must match end-tags
    [
    所有标签都必须有相对的结束标签]
  • XML tags are case sensitive
    [XML
    的标签是区分大小写的]
  • all elements must be closed
    [
    所有的元素都必须是闭合的]
  • all elements must be properly nested
    [
    所有元素都必须合理的嵌套(元素不可以交叉)]
  • all attribute values must be quoted
    [
    所有的属性都必须被引用]
  • XML entities must be used for special characters
    [
    所有的XML实体都必须用特殊的字符来做]

Even if documents are Well-Formed they can still contain errors, and those errors can have serious consequences. Think of this situation: you order 5 gross of laser printers, instead of 5 laser printers. With XML Schemas, most of these errors can be caught by your validating software.
[
即使文档完全符合格式也会包含错误,而且有些错误会有严重的逻辑问题.想一想这样的情况:你订购五台激光打印机是为了来替代五台激光打印机.配合XML Schemas,大部分的错误都可以由你的软件校验出来的.]

XSD How To
[XSD
如何]


XML documents can have a reference to a DTD or an XML Schema.
[XML
文档能和一个DTD或者一个XML Schema相关]


A Simple XML Document
[
一个简单的XML文档]

Look at this simple XML document called "note.xml":
[
看看这个名为"note.xml"XML文档]

<?xml version="1.0"?>

<note>

<to>Tove</to>

<from>Jani</from>

<heading>Reminder</heading>

<body>Don't forget me this weekend!</body>

</note>

 


A Simple DTD
[
一个简单的DTD]

This is a simple DTD file called "note.dtd" that defines the elements of the XML document above ("note.xml"):
[
这个简单的DTD"note.dtd"定义了"note.xml"中的元素:]

<!ELEMENT note (to, from, heading, body)>

<!ELEMENT to (#PCDATA)>

<!ELEMENT from (#PCDATA)>

<!ELEMENT heading (#PCDATA)>

<!ELEMENT body (#PCDATA)>

Line 1 defines the note element to have four elements: "to, from, heading, body". Line 2-5 defines the to element to be of the type "#PCDATA", the from element to be of the type "#PCDATA", and so on...
[
第一行定义了note元素有四个子元素: "to, from, heading, body".而第二行到第五行分别定义了tofrom等元素为"#PCDATA"]


A Simple XML Schema
[
一个简单的XML Schema]

This is a simple XML Schema file called "note.xsd" that defines the elements of the XML document above ("note.xml"):
[
这个简单的XML Schema文件"note.xsd"同样定义了"note.xml"中的元素:]

<?xml version="1.0"?>

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"

targetNamespace="http://www.w3schools.com"

xmlns="http://www.w3schools.com"

elementFormDefault="qualified">

<xs:element name="note">

    <xs:complexType>

      <xs:sequence>

        <xs:element name="to" type="xs:string"/>

        <xs:element name="from" type="xs:string"/>

        <xs:element name="heading" type="xs:string"/>

        <xs:element name="body" type="xs:string"/>

      </xs:sequence>

    </xs:complexType>

</xs:element>

</xs:schema>

The note element is said to be of a complex type because it contains other elements. The other elements (to, from, heading, body) are said to be simple types because they do not contain other elements. You will learn more about simple and complex types in the following chapters.
[
那个note元素由于包含有其他的子元素而被定义为complex type(复合类型). 其他包含在它里面的元素(to, from, heading, body)都被定义为simple types(简单类型). 你将会在以后的章节里面学到更多关于复合类型和简单类型的知识.]


A Reference to a DTD
[DTD
的引用]

This XML document has a reference to a DTD:
[
这个XML文档引用自一个DTD:]

<?xml version="1.0"?>

<!DOCTYPE note SYSTEM

"http://www.w3schools.com/dtd/note.dtd">

<note>

<to>Tove</to>

<from>Jani</from>

<heading>Reminder</heading>

<body>Don't forget me this weekend!</body>

</note>

 


A Reference to an XML Schema
[XML Schema
的引用]

This XML document has a reference to an XML Schema:
[
这个XML文档引用自一个XML Schema文档:]

<?xml version="1.0"?>

<note

xmlns="http://www.w3schools.com"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://www.w3schools.com note.xsd">

 

<to>Tove</to>

<from>Jani</from>

<heading>Reminder</heading>

<body>Don't forget me this weekend!</body>

</note>

 

XSD - The <schema> Element
[XSD
中的<schema>元素]


The <schema> element is the root element of every XML Schema!
[<schema>
元素是每一个XML Schema文件的根元素!]


The <schema> Element
[<schema>
元素]

The <schema> element is the root element of every XML Schema:
[[<schema>
元素是每一个XML Schema文件的根元素:]

<?xml version="1.0"?>

<xs:schema>

...

...

</xs:schema>

The <schema> element may contain some attributes. A schema declaration often looks something like this:
[[<schema>
元素包含一些属性.一般声明如下:]

<?xml version="1.0"?>

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"

targetNamespace="http://www.w3schools.com"

xmlns="http://www.w3schools.com"

elementFormDefault="qualified">

...

...

</xs:schema>

The following fragment:
[
以下片段:]

xmlns:xs="http://www.w3.org/2001/XMLSchema"

indicates that the elements and data types used in the schema (schema, element, complexType, sequence, string, boolean, etc.) come from the "http://www.w3.org/2001/XMLSchema" namespace. It also specifies that the elements and data types that come from the "http://www.w3.org/2001/XMLSchema" namespace should be prefixed with xs:
[
说明元素和数据类型的使用模式(schema, element, complexType, sequence, string, Boolean等等)来自于"http://www.w3.org/2001/XMLSchema"命名空间.同时也可用xs:作为前缀]

This fragment:
[
如下片段:]

targetNamespace="http://www.w3schools.com"

indicates that the elements defined by this schema (note, to, from, heading, body.) come from the "http://www.w3schools.com" namespace.
[
说明元素(note, to, from, heading, body.)的使用模式来自于命名空间"http://www.w3schools.com"]

This fragment:
[
如下片段:]

xmlns="http://www.w3schools.com"

indicates that the default namespace is "http://www.w3schools.com".
[
说明默认的命名空间是"http://www.w3schools.com".]

This fragment:
[
如下片段:]

elementFormDefault="qualified"

indicates that any elements used by the XML instance document which were declared in this schema must be namespace qualified.
[
说明所有全局元素的子元素将被以缺省方式放到目标命名空间,连同全局元素或者类型一起]


Referencing a Schema in an XML Document
[
XML文件中引用Schema]

This XML document has a reference to an XML Schema:
[
如下XML文档有一个XML Schema的引用:]

<?xml version="1.0"?>

<note xmlns="http://www.w3schools.com"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://www.w3schools.com note.xsd">

<to>Tove</to>

<from>Jani</from>

<heading>Reminder</heading>

<body>Don't forget me this weekend!</body>

</note>

The following fragment:
[
下面片段:]

xmlns="http://www.w3schools.com"

specifies the default namespace declaration. This declaration tells the schema-validator that all the elements used in this XML document are declared in the "http://www.w3schools.com" namespace.
[
声明默认的命名空间.此声明告知模式校验器让所有XML元素都在命名空间"http://www.w3schools.com"]

Once you have the XML Schema Instance namespace available:
[
有时你可以用到XML模式实例命名空间:]

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

you can use the schemaLocation attribute. This attribute has two values. The first value is the namespace to use. The second value is the location of the XML schema to use for that namespace:
[
你能用上schemaLocation这个属性.这个属性有两个含义.第一个含义是这个命名空间被使用.第二个含义是定位XML schema用到的命名空间:]

xsi:schemaLocation="http://www.w3schools.com note.xsd"



Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=705007

posted @ 2007-07-14 00:38 和田雨 阅读(381) | 评论 (0)编辑 收藏

RSS

内容目录

RSS Introduction [RSS介绍]
An introduction to what RSS is and how it can be used.
介绍什么是RSS,它的应用。

RSS History [RSS历史]
How RSS started and how it has been developed and changed
RSS是怎么诞生的,它是怎样发展和变化的.

RSS Syntax [RSS语法]
A brief introduction how to make RSS.
制作RSS的简单介绍

RSS Channel [RSS频道]
How to make and what can be included in the <channel> element.
怎么完成<channel>元素里的内容

RSS Item [RSS内容]- How to make and what can be included in the <item> element.
怎样的<item>元素才算合理的

RSS Publishing [RSS 发布]- How to publish your RSS.
怎样发布的你的RSS

RSS Readers [RSS阅读器]- How to read other site's RSS.
怎样阅读其他网站的RSS


RSS介绍
翻译:Linyupark / 2006-04-24

RSS was designed to share data like headlines, links and short descriptions of these.
RSS 将数据分成像标题,连接和简单描述的形式。(浓缩过的信息)

RSS allows fast browsing for news and updates.
RSS能快速浏览新闻和更新内容。


What You Should Already Know
哪些是你应该已经知道的

Before you continue you should have a basic understanding of the following:
在继续学习前你应该有下面这些知识点的基础:

  • HTML / XHTML
  • XML / XML 命名空间

What is RSS?
什么是RSS?

  • RSS stands for Really Simple Syndication
    RSS就是 Really Simple Syndication (真正的简单聚合)
  • RSS allows you to syndicate your site content
    RSS可以聚合你网站上的内容
  • RSS is a selected list of defined items on a site
    RSS是一站点上被选中的内容清单
  • RSS defines an easy way to share and view headlines and content
    RSS是一种更便捷的方法去查看标题和内容
  • RSS files can be automatically updated
    RSS文件可以自动的更新
  • RSS allows personalized views for different sites
    RSS允许更具人性化(个性化)的查看不同的站点
  • RSS is written in XML
    RSS是用XML来书写的

Why Use RSS?
为什么使用RSS?

RSS was designed to show selected data.
RSS 能展示被选择的数据(针对性)

Without RSS, users will have to check your site daily to check for new updates. This may be too time-consuming for many users. With an RSS feed (RSS is often called a News Feed or RSS Feed) they can check your site faster using an RSS aggregator (a site or program that gathers and sorts out several RSS feeds).
没有RSS的话,用户将必须每天到你的站上看看有没更新内容。这对于一些用户来说是很浪费时间的。通过一个RSS feed他们可以使用RSS阅读器更快的查看你的站是否有更新。

Since RSS data is small and fast-loading, it can easily be used with services like cell phones or PDA's.
因为RSS数据很小而且加载速度很快,它可以容易的在手机或PDA服务上使用。

Web-rings with similar information can easily share data on their sites to make them better and more useful.
Wb-rings通过相似的信息可以方便的共享他们站点的信息。


Who Should Use RSS?
哪些人应该使用RSS?

Webmasters who seldom update their sites do not need RSS.
站长如不是经常更新站带内信息的话可以不使用RSS

RSS can be useful for Web sites that are updated frequently, like:
RSS对于那些经常更新的站点来说是和有帮助的,像:

  • News sites - Lists news with title, date and descriptions
    新闻站
  • Site changes - Lists changed pages or new pages
    站点改动信息版块
  • Companies - Lists news and new products
    公司站 - 新闻 和 新产品
  • Calendars - Lists upcoming events and important days
    日历

The Future of RSS
展望RSS

RSS is going to be everywhere.
RSS将遍及每个角落

Thousands of sites use RSS and more people understand its usefulness every day.
数千站使用着RSS并且每天有越来越多的人明白了它的有用之处。

By using RSS, information on the Web becomes easier to find and web developers can spread their information more easily to special interest groups.
有了RSS,在WEB上的信息变的容易找到并且WEB开发者能够容易的将信息传播给兴趣小组。

Hopefully, future RSS versions will include additional fields that will make it even easier to categorize and share.
未来的RSS版本可能包含额外的领域来使分类和分享信息来的更容易。


RSS的历史
翻译:Linyupark / 2006-04-24

RSS has been released in many different versions.
RSS发布过一些不同的版本


The History of RSS
RSS的历史

Here is the history of RSS according to Dave Winer (key developer of most of the RSS formats):
依据Dave Winer(RSS开发的关键人物)的描述,RSS有这样的历史:

  • Dec. 1997 - Dave Winer developed scriptingNews
    1997年12月 Dave Winer 开发了新闻脚本
     
  • Mar. 1999 - RSS 0.90 was developed by Netscape, which supported the scriptingNews format. This was simply XML with a RDF Header
     1999年三月 - RSS 0.90 由网景公司开发,支持格式化新闻脚本.
  • Jun. 1999 - scriptingNews 2.0b1 was developed by Dave Winer at UserLand. This included Netscape's RSS 0.90 features
    新闻脚本2.0b1于 1999年6月由Dave Winer开发,包含了网景RSS 0.90的特点
     
  • Jul. 1999 - RSS 0.91 was an attempt by Netscape to move towards a more standard format and included most features from scriptingNews 2.0b1 but they removed the RDF header
    1999年7月 - RSS0.91 网景试图移入更多的标准格式并包含更多来自scriptingNews2.0b1的特性但是他们却删除了RDF头  
  • Jul. 1999 - UserLand uses RSS 0.91 and gets rid of scriptingNews
    1999年7月 - UserLand利用了没有scriptNews的RSS0.91
     
  • Netscape discontinues their RSS development
     网景中断了他们对RSS的开发
  • Jun. 2000 - Official RSS 0.91 specification release from UserLand
     UserLand公开了规范文档
  • Aug. 2000 - RSS 1.0 developed by a group lead by Rael Dornfest at O'Reilly. This format uses RDF and namespaces. Because of its name it is often confused as being a new version of 0.91, but this is a completely new format with no ties to RSS 0.91
     
  • Dec. 2000 - RSS 0.92 developed by Dave Winer at UserLand and includes optional elements
     
  • Sep. 2002 - RSS 2.0 is designed by Dave Winer after leaving Userland
     
  • Jul. 2003 - RSS 2.0 specification released through Harvard under a Creative Commons license

What Are The differences?
有什么区别?

Unlike the other RSS formats, RSS 1.0 was developed using the W3C RDF (Resource Description Framework) standard.
不像其他RSS的规格,RSS1.0使用W3C的DRF标准开发.


What RSS Version Should I Use?
我该用哪个版本的RSS?

RSS 0.91 and RSS 2.0 are easiest to understand. RSS 1.0 is more complex to learn and takes more time and bandwidth to process.
RSS0.91和RSS2.0是最容易理解的版本。1.0学起来比较复杂而且需要花更多的带宽来运作。

Our tutorial is based on RSS 2.0.
我们的教程是基于RSS2.0的


Is There an RSS Web Standard?
有RSS WEB标准吗?

There is no official standard for RSS. But about 50 % of all RSS feeds use the RSS 0.91 format. About 25 % use the RSS 1.0 format and the last 25 % is split between the other RSS 0.9x versions and RSS 2.0.
没有正式的RSS标准。但在所有的RSS feeds中大约有50% 使用RSS 0.91规格. 25%使用RSS1.0规格并且至少有25%使用 RSS 0.9x 和 RSS 2.0之间的版本。


RSS语法
翻译:Linyupark / 2006-04-24

The syntax rules of RSS 2.0 are very simple and very strict.
RSS2.0的语法规则非常简单并十分的严格。

This tutorial teaches how to create your own RSS feed and maintain it.
这个教程会教你如何建立你自己的RSS feed并维护它。


An Example RSS document
一个RSS文档的例子

RSS documents use a self-describing and simple syntax.
RSS文档使用了简单的自描述语法。

<?xml version="1.0" encoding="ISO-8859-1" ?>

<rss version="2.0">
<channel>

<title>W3Schools</title>
<link>http://www.w3schools.com</link>
<description>W3Schools Web Tutorials </description>
<item>
<title>RSS Tutorial</title>

<link>http://www.w3schools.com/rss</link>
<description>Check out the RSS tutorial
on W3Schools.com</description>
</item>
</channel>
</rss>

The first line in the document - the XML declaration - defines the XML version and the character encoding used in the document. In this case the document conforms to the 1.0 specification of XML and uses the ISO-8859-1 (Latin-1/West European) character set.
文档内的第一行为XML声明-定义了XML的版本和文档使用的字符编码。这个例子里文档使用的是XML1.0版本,编码为 ISO-8859-1.

The next line describes the RSS element of the document (like it was saying: "this is an RSS document - version 2.0"):
下面的一行描述RSS文档元素(这个就像在说:"这是一份RSS2.0版本的文档")

<rss version="2.0">

The next line describes the <channel> element of the document:
再下面的一行描述了文档的<channel>元素:

<channel>

The next three lines describe three child elements of the <channel> element (<title>, <link> and <description>):
接下来的三行描述了<channel>的三个子元素(<title>,<link>,<description>)

<title>W3Schools</title>
<link>http://www.w3schools.com</link>

<description>W3Schools Web Tutorials</description>

Then there is an <item> element. The <item> element contains the information you would like your RSS feed to show (<title>, <link> and <description>). You can add multiple <item> elements:
然后就是<item>元素,<item>元素包含了RSS展示的一些信息(<title>, <link> 和 <description>)你可以添加数个<item>元素:

<item>
<title>RSS Tutorial</title>
<link>http://www.w3schools.com/rss</link>
<description>Check out the RSS tutorial
on W3Schools.com</description>
</item>

Finally, the two last lines close the <channel> and <rss> elements:
最后的两行关闭<channel> 和 <rss> 元素:

</channel>
</rss>

Did you understand that this was an RSS feed from W3Schools? Don't you agree that RSS is pretty self-descriptive?
你明白这是个来自W3S的RSSfeed了不?难道你不认为这是个很好的RSS自我描述?


RSS is an XML Dialect
RSS 是一种XML的方言

Because RSS is XML, there are a couple of things you must remember.
因为RSS是XML,有一些事你必须了解

  • All XML elements must have a closing tag
    所有XML元素必须有关闭标签
  • XML tags are case sensitive
    XML标签区分大小写
  • All XML elements must be properly nested
    所有XML元素必须合理嵌套
  • Attribute values must always be quoted
    属性值必须在引号内

Comments in RSS
RSS注释

The syntax for writing comments in RSS is similar to that of HTML:
书写RSS注释的语法和HTML十分相似:

<!-- This is a comment -->


RSS channel元素
翻译:Linyupark / 2006-04-24

The <channel> element is where you describe your RSS feed.
<channel>元素内是描述RSS feed的地方

With RSS 2.0 there are a lot of different options for the channel element.
对于channel元素来说RSS2.0有很多不同的选择(指内部可选择的元素有很多种)


The <channel> Element
<channel>元素

The RSS <channel> element is where items are displayed. It is like an RSS headline. Channel elements normally do not change very often.
RSS的<channel>元素是项目内容显示的地方。它就像RSS的标题。一般来讲它不会频繁的改动。

There are three required elements inside the <channel> element: <title>, <link>, and <description>.
有三个内部元素是必须有的:<title>, <link>, 和 <description>.

The <title> element should contain a short description of your site and your RSS feed:
<title>元素里应该包含你的站和你的RSS feed简短的说明:

<title>W3Schools News Update</title>

The <link> element should define the link to your site's main page:
<link>元素应该定义你网站主页的链界:

<link>http://www.w3schools.com</link>

The final required element is <description>. This element should describe your RSS feed.
最后必须有的元素就是 <description>,这个元素应该描述你的RSS feed.

<description>W3Schools Web Tutorials</description>


Optional Elements in <channel>
<channel>内的可选元素

Element 元素 Description 描述
<category> Defines one or more categories the channel belongs to
定义一个或多个频道分类
<cloud> Allows notification of updates.
允许更新通告
<copyright> Notifies about copyrighted material
提醒有关版权
<docs> An URL to documentation on the RSS version the channel is using
频道所使用的RSS版本文档URL
<generator> If the channel is created using an automatic generator, this is defined here
如果频道是自动生成器产生的,就在这里定义
<image> Inserts a picture to the channel.
给频道加图片
<language> Describes what language the channel uses. By using this tag it is possible for RSS aggregators to group sites based on language.
描述了频道所使用的语言。
<lastBuildDate> Defines the last date the channel was modified
定义频道最新一次改动的时间
<managingEditor> Defines an e-mail address for the editor of the site
定义编辑站点人员的E-mail地址
<pubDate> Defines the last publication date for the channel
定义频带最新的发布时间
<rating> Parental control rating of the page
页面评估
<skipDays> Defines days where it is unnecessary for RSS aggregators to update the feed
<skipHours> Defines hours where it is unnecessary for RSS aggregators to update the feed
<textInput> Creates a text input for the channel
<ttl> (ttl = time to live) Defines how many minutes the channel can stay cached before refreshing
存活的有效时间
<webMaster> Defines an e-mail address for the webmaster of the site
定义站张的邮件地址

RSS item 元素
翻译:Linyupark / 2006-04-24

The <item> element is where you link to and describe the update on your site.
<item>元素内是你网站连接和描述更新内容的地方。

With RSS 2.0 there are a lot of different options for the item element.
在RSS 2.0 item元素里有很多不同的可选内容


The <item> Element
<item>元素

The RSS <item> is where updates are displayed. It is kind of like a headline for an article. <item> elements are created every time there is an update on your site that you would like displayed in your RSS feed.
<item>是显示RSS更新内容的地方。它像是文章的标题。当你的站点有更新时RSSfeed中的<item>元素就会被建立起来。

There are several optional <item> elements, but either the <title> or the <description> are required.
<item>元素里有几个可选的元素,但<title> 或是<description>是必须有的。

A RSS <item> should include the <title>, <link> and <description> elements.
一个RSS的<item>应该包括 <title>, <link> 和 <description>元素

The first element is your news item's title. This should be a very short description of your site and your RSS feed:
第一个元素是项目的题目。应该用十分简短的描述:

<title>W3Schools New RSS Tutorial</title>

The next element is the link to the part of your site the item is referring to:
接下来的元素项目所关联的连接:

<link>http://www.w3schools.com/rss</link>

The next line is the RSS feed description. This should describe your RSS feed item.
再下面的一行就是RSS feed的描述部分,这应该是描述你的RSS feed项目的。

<description>W3Schools RSS Tutorial</description>


Optional Elements in <item>
可选的<item>元素

Tag Description
<author> Defines the author of the item.
定义作者
<category> Places the item in one or more of the channel categories.
类别
<comments> An URL to a comment's page for the item.
针对项目的评论页URL
<enclosure> Describes a media object related to the item
描述一个与项目有关的媒体对象
<guid> GUID = Globally Unique Identifier. Defines a unique identifier to the item.针对项目定义独特的标志
<pubDate> The publication date for the item.
项目发布时间
<source> Is used to define a third party source.
转载地址(源地址)

RSS发布
翻译:Linyupark / 2006-04-24

Having a RSS feed is no good unless other people can see it.
光有RSS feed还是不够的,应该让别人能看到它


Publish Your RSS Feed
发布你的RSS feed

Publishing and getting people to notice your RSS feed is as important as making one.
发布并让人们注意到的你RSS就和你制作它一样重要

First, put your rss.xml file on the internet. You can place it on the same server as your site.
首先,将你的RSS.xml文件放到你的站点服务器上。

Next, let people know you have a RSS feed. Register your feed with an aggregator.
然后,让人们知道你有一个RSSfeed.到相关的目录站上注册你的RSS(下面是一些国外知名的RSS发布站)

  • Syndic8: The largest RSS directory. Syndicate has over 300,000 feeds listed. Register your feed here.
  • Daypop: A large news oriented RSS aggregator. Over 50,000 news oriented feeds. Register your feed here.
  • Newsisfree: A news oriented RSS aggregator. Over 18,000 feeds. Register your feed here.

Then, place this RSS Logo and this XML Logo with URL's to a page that explains briefly how other people can view your RSS feed.
接着, 将这两个含有连接到你RSS地址的图片放到你站点的页面上,人们就可以看到你的RSS feed了


Can I Manage my RSS Feed Myself?
我可以自行管理RSS feed吗?

The best way to be sure your RSS feed includes the things you want, and works the way you want, is to manage it yourself. But this can be very time consuming, especially for pages with a lot of updates.
如你想让RSS里包括一些你想要的东西或是想按你的想法来做,最好的办法就是你自己来管理它,但是这将是非常烦琐的,因为很多页有不同的东西要更新。

Your other alternative is to use a third party automated RSS.
还有种选择就是使用第三方的RSS自动生成器


Automated RSS
RSS自动生成

If you don't want to update your RSS feed yourself, there are tools and services you can use to automate it.
如果你不想自己来更新RSS,这有些工具可以为你服务。
===== 以下是几个工具的官方地址=====

One such service is MyRSSCreator (featured in "RSS for dummies"), who can offer an automated, reliable RSS service in just 10 minutes.

There are also free services such as FeedFire, who offers free creation and distribution of RSS feeds.

For users who just need an easy RSS feed for their personal website, some of the most popular blog (Web Log) managers (like Blogger and Radio) offers built in automated RSS services.


Validate
校验

You can validate your RSS feed here[校验地址]. This validator supports all RSS versions.


 

RSS阅读器
翻译:Linyupark / 2006-04-24

A RSS reader gathers your news for you.
一个RSS阅读器可以为你收集新闻

RSS readers are available for many different devices and OS.
RSS阅读器可以在很多不同的设备和操作系统上运作


RSS Readers
[下面是国外的几款阅读器]

There are a lot of different RSS readers. Some work as web services, and some are limited to windows (or Mac, PDA or UNIX). Here are a few I have tried and liked:

  • NewsGator Online - An free online based RSS aggregator. NewsGator Online also includes synchronization with Outlook Edition, viewing content on TV with Media Center Edition, as well as the publication of blogs and headlines.
     
  • RssReader - A free Windows based RSS aggregator. RssReader supports RSS versions 0.9x, 1.0 and 2.0 as well as Atom 0.1, 0.2 and 0.3.
     
  • FeedDemon - A great Windows based RSS aggregator. This is very easy to use and has a very orderly interface. But this is not freeware.
     
  • blogbot - A RSS aggregator plugin for your Outlook or Internet Explorer. The lite version for Internet Explorer is free.

There are a lot of other RSS readers out there. http://www.ourpla.net/cgi-bin/pikie.cgi?RssReaders has a big list of RSS readers, you can even add your own readers to this page or comment on the existing ones.



Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=704849

posted @ 2007-07-14 00:37 和田雨 阅读(533) | 评论 (0)编辑 收藏

使用远程桌面链接登录到终端服务器时经常会遇到“终端服务器超出最大允许链接数”诸如此类错误导致无法正常登录终端服务器,引起该问题的原因在于终端服务的缺省链接数为2个链接,并且当登录远程桌面后如果不是采用注销方式退出,而是直接关闭远程桌面窗口,那么实际上会话并没有释放掉,而是继续保留在服务器端,这样就会占用总的链接数,当这个数量达到最大允许值时就会出现上面的提示。
  解决方式:
  一、用注销来退出远程桌面而不是直接关闭窗口
  二、限制已断开链接的会话存在时间
  三、增加最多链接数,即设置可连接的数量多些

第三可采用如下几种方式来修改:

1.从终端服务配置中修改:
打开管理工具里的终端服务配置,再单击连接,双击右边的RDP-Tcp,弹出RDP-Tcp属性,选择网卡,可设置最多连接数,或者设置为无限制的连接数。当然这个值不也能太大,否则会占用较多的系统资源。不过这里修改的值好像不起作用,设置成无限制时照样还是会出现本文所说的情况。

修改会话存在时间:运行-Tscc.msc-连接-双击RDP-Tcp或右击-属性-会话-选中第一个的替代用户设置(O)-结束已断开的会话[将默认值“从不”改为一个适当的时间,比如30分钟]
  
2.打开“控制面板”,双击“添加删除程序”,单击“添加删除Windows组件”*“组件”
,在Windows组件向导对话框中选中“终端服务” * “下一步” * “应用服务器” * “下
一步”,然后按照提示即可改变终端服务的模式。 
不过听说用此法,改了应用需要许可证,90天后过期:(

3.win2003的话可以从组策略修改:
  组策略级别要高于终端服务配置,当启用组策略后终端服务配置中的相应选项会变成灰色不可修改
  运行-gpedit.msc-计算机配置-管理模板-Windows组件-终端服务
  双击右边的”限制连接数量“-选择”已启用“-填入允许的最大连接数

posted @ 2007-07-12 15:16 和田雨 阅读(314) | 评论 (0)编辑 收藏

J2EE可以说指Java在数据库信息系统上实现,数据库信息系统从早期的dBase、到Delphi/VBC/S结构,发展到B/SBrowser浏览器/Server服务器)结构,而J2EE主要是指B/S结构的实现。

J2EE又是一种框架和标准,框架类似API、库的概念,但是要超出它们。

J2EE是一个虚的大的概念,J2EE标准主要有三种子技术标准:WEB技术、EJB技术和JMS,谈到J2EE应该说最终要落实到这三个子概念上。

这三种技术的每个技术在应用时都涉及两个部分:容器部分和应用部分,Web容器也是指Jsp/Servlet容器,你如果要开发一个Web应用,无论是编译或运行,都必须要有Jsp/Servlet库或API支持(除了JDK/J2SE以外)。

Web技术中除了Jsp/Servlet技术外,还需要JavaBeansJava Class实现一些功能或者包装携带数据,所以Web技术最初简称为Jsp/Servlet+JavaBeans系统。

谈到JavaBeans技术,就涉及到组件构件技术(component),这是Java的核心基础部分,很多软件设计概念(设计模式)都是通过JavaBeans实现的。

JavaBeans不属于J2EE概念范畴中,如果一个JavaBeans对象被Web技术(也就是Jsp/Servlet)调用,那么JavaBeans就运行在J2EEWeb容器中;如果它被EJB调用,它就运行在EJB容器中。

EJB(企业JavaBeans)是普通JavaBeans的一种提升和规范,因为企业信息系统开发中需要一个可伸缩的性能和事务、安全机制,这样能保证企业系统平滑发展,而不是发展到一种规模重新更换一套软件系统。

J2EE集群原理: http://www.jdon.com/jive/article.jsp?forum=121&thread=22282

至此,JavaBeans组件发展到EJB后,并不是说以前的那种JavaBeans形式就消失了,这就自然形成了两种JavaBeans技术:EJBPOJOPOJO完全不同于EJB概念,指的是普通JavaBeans,而且这个JavaBeans不依附某种框架,或者干脆可以说:这个JavaBeans是你为这个应用程序单独开发创建的。

J2EE应用系统开发工具有很多:如JBuilderEclipse等,这些IDE首先是Java开发工具,也就是说,它们首要基本功能是可以开发出JavaBeansJava class,但是如果要开发出J2EE系统,就要落实到要么是Web技术或EJB技术,那么就有可能要一些专门模块功能,最重要的是,因为J2EE系统区分为容器和应用两个部分,所以,在任何开发工具中开发J2EE都需要指定J2EE容器。

J2EE容器分为WEB容器和EJB容器,Tomcat/ResinWeb容器;JBossEJB容器+Web容器等,其中Web容器直接使用Tomcat实现的。所以你开发的Web应用程序可以在上面两种容器运行,而你开发的Web+EJB应用则只可以在JBoss服务器上运行,商业产品Websphere/Weblogic等和JBoss属于同一种性质。

J2EE容器也称为J2EE服务器,大部分时它们概念是一致的。

如果你的J2EE应用系统的数据库连接是通过JNDI获得,也就是说是从容器中获得,那么你的J2EE应用系统基本与数据库无关,如果你在你的J2EE应用系统耦合了数据库JDBC驱动的配置,那么你的J2EE应用系统就有数据库概念色彩,作为一个成熟需要推广的J2EE应用系统,不推荐和具体数据库耦合,当然这其中如何保证J2EE应用系统运行性能又是体现你的设计水平了。

高质量的Java企业系统

衡量J2EE应用系统设计开发水平高低的标准就是:解耦性;你的应用系统各个功能是否能够彻底脱离?是否不相互依赖,也只有这样,才能体现可维护性、可拓展性的软件设计目标。

为了达到这个目的,诞生各种框架概念,J2EE框架标准将一个系统划分为WEBEJB主要部分,当然我们有时不是以这个具体技术区分,而是从设计上抽象为表现层、服务层和持久层,这三个层次从一个高度将J2EE分离开来,实现解耦目的。

因此,我们实际编程中,也要将自己的功能向这三个层次上靠,做到大方向清楚,泾渭分明,但是没有技术上约束限制要做到这点是很不容易的,因此我们还是必须借助J2EE具体技术来实现,这时,你可以使用EJB规范实现服务层和持久层,Web技术实现表现层;

EJB为什么能将服务层从Jsp/Servlet手中分离出来,因为它对JavaBeans编码有强制的约束,现在有一种对JavaBeans弱约束,使用Ioc模式实现的(当然EJB 3.0也采取这种方式),在Ioc模式诞生前,一般都是通过工厂模式来对JavaBeans约束,形成一个服务层,这也是是Jive这样开源论坛设计原理之一。

由此,将服务层从表现层中分离出来目前有两种可选架构选择:管理普通JavaBeansPOJO)框架(SpringJdonFramework)以及管理EJBEJB框架,因为EJB不只是框架,还是标准,而标准可以扩展发展,所以,这两种区别将来是可能模糊,被纳入同一个标准了。

但是,通常标准制定是为某个目的服务的,总要牺牲一些换取另外一些,所以,这两种架构会长时间并存。

前面谈了服务层框架,使用服务层框架可以将JavaBeansJsp/Servlet中分离出来,而使用表现层框架则可以将Jsp中剩余的JavaBeans完全分离,这部分JavaBeans主要负责显示相关,一般是通过标签库(taglib)实现,不同框架有不同自己的标签库,Struts是应用比较广泛的一种表现层框架。

这样,表现层和服务层的分离是通过两种框架达到目的,剩余的就是持久层框架了,通过持久层的框架将数据库存储从服务层中分离出来是其目的,持久层框架有两种方向:直接自己编写JDBCSQL语句(如iBatis);使用O/R Mapping技术实现的HibernateJDO技术;当然还有EJB中的实体Bean技术。

持久层框架目前呈现百花齐放,各有优缺点的现状,所以正如表现层框架一样,目前没有一个框架被指定为标准框架,当然,表现层框架现在又出来了一个JSF,它代表的页面组件概念是一个新的发展方向,但是复杂的实现让人有些忘而却步。

最后,你的J2EE应用系统如果采取上面提到的表现层、服务层和持久层的框架实现,基本可以在无需深刻掌握设计模式的情况下开发出一个高质量的应用系统了。

还要注意的是: 开发出一个高质量的J2EE系统还需要正确的业务需求理解,那么域建模提供了一种比较切实可行的正确理解业务需求的方法,相关详细知识可从UML角度结合理解。

当然,如果你想设计自己的行业框架,那么第一步从设计模式开始吧,因为设计模式提供你一个实现JavaBeans或类之间解耦参考实现方法,当你学会了系统基本单元JavaBeans或类之间解耦时,那么系统模块之间的解耦你就可能掌握,进而你就可以实现行业框架的提炼了,这又是另外一个发展方向了。

以上理念可以总结为一句话:

J2EE开发三件宝: Domain Model(域建模)、patterns(模式)和framework(框架)。

posted @ 2007-07-12 13:28 和田雨 阅读(381) | 评论 (2)编辑 收藏

By Benny.luo@Sun.com, 6/19/07  
SUN中国软件技术中心 罗浩/Benny Luo
 简介:
JDK 5.0, 代号老虎,在以往的Java传统上加入了许多新的设计,给Java语言带来了一些较大的变化,比如泛型,元数据,可变个数参数,静态导入类,新线程架构,自动装箱/拆箱等等新的以往没有的新特性。同时,在调试程序和解决性能各种问题方面,JDK5.0同样加入了多个分析工具来让开发者更加方便地调试他们自己的程序,它们包括了命令行调试工具,图形界面调试工具等等.
 
JDK5.0包括的调试工具:
我们在这里对JDK5.0的调试工具做大致的概念性的介绍,然后希望通过介绍我自己在实际工作中使用这些工具解决问题的实例来让大家对这些工具有更深入的了解。
 
JDK5.0里面加入了jstack, jconsole, jinfo, jmap, jdb, jstat, jps, 下面对这些工具做简单介绍:
  • jstack -- 如果java程序崩溃生成core文件,jstack工具可以用来获得core文件的java stack和native stack的信息,从而可以轻松地知道java程序是如何崩溃和在程序何处发生问题。另外,jstack工具还可以附属到正在运行的java程序中,看到当时运行的java程序的java stack和native stack的信息, 如果现在运行的java程序呈现hung的状态,jstack是非常有用的。目前只有在Solaris和Linux的JDK版本里面才有。
  • jconsole – jconsole是基于Java Management Extensions (JMX)的实时图形化监测工具,这个工具利用了内建到JVM里面的JMX指令来提供实时的性能和资源的监控,包括了Java程序的内存使用,Heap size, 线程的状态,类的分配状态和空间使用等等。
  • jinfo – jinfo可以从core文件里面知道崩溃的Java应用程序的配置信息,目前只有在Solaris和Linux的JDK版本里面才有。
  • jmap – jmap 可以从core文件或进程中获得内存的具体匹配情况,包括Heap size, Perm size等等,目前只有在Solaris和Linux的JDK版本里面才有。< /li>
  • jdb – jdb 用来对core文件和正在运行的Java进程进行实时地调试,里面包含了丰富的命令帮助您进行调试,它的功能和Sun studio里面所带的dbx非常相似,但 jdb是专门用来针对Java应用程序的。
  • jstat – jstat利用了JVM内建的指令对Java应用程序的资源和性能进行实时的命令行的监控,包括了对Heap size和垃圾回收状况的监控等等。
  • jps – jps是用来查看JVM里面所有进程的具体状态, 包括进程ID,进程启动的路径等等。

另外,还有些其他附带的工具在这里没有列出,比如Heap Analysis Tool, kill -3 方法等等,这些在JDK5.0之前就有,同样也是非常有用的性能调优工具,大家可以参照相应的文档资料来学习,在文章后面也会推荐一些相应的文档给大家作为参考。

 好,说了这么多,让我们来看看JDK5.0自带的这些工具在现实工作能给我们带来什么帮助,下面是我和ISV一起共同工作的实际例子,在这里把它们简单阐述出来,希望对大家有所帮助。

jconsole和jstack使用实例:

在做过的项目中,曾经有几个是使用jstack和jconsole来解决问题的。在下面的例子中,由于部分代码涉及到公司名字,我使用了xxx来代替。

1. 其中的一个是Web2.0的客户,由于目前Sun Microsystem公司推出的Niagara服务器系列非常适合网络方面的多线程应用,并且已经在业界非常出名,所以他们决定使用T2000服务器来测试一下如果应用到他们自己的应用是否能够获得出众的性能。
整个应用的架构如下:
Apache 2.0.59 + Resin EE 2.1.17 + Jdk 1.5.0.07 + Oracle 9
运行的操作系统:
Solaris 10 Update 3 (11/06), EIS patches包.
测试工具:
Apache benchmark tool.
在客户的测试环境中,我们分别做了Apache, Resin, Solaris的相应调整,其中包括了Apache使用Prefork模式,并且调整了httpd.conf文件里面相应的ServerLimit, ListenBacklog,Maxclient等等值,Resin服务器调整Jvm heap size, 并行回收new generation和old generation, 最大线程数,oracle连接数等等参数,Solaris操作系统做了网络和系统的相应调整,最终把整套系统搬进了生产环境,一切顺利进行,但当进入其中的一个论坛系统时却发现系统响应时间非常缓慢,用Apache Benchmark Tool加少量压力得到结果如下,由于是在生产环境下所以不敢使用大的压力:

This is ApacheBench, Version 2.0.41-dev <$Revision: 1.121.2.12 $> apache-2.0
Copyright (c) 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Copyright (c) 2006 The Apache Software Foundation, http://www.apache.org/
Benchmarking free.xxx.com (be patient).....done
Server Software: Resin/2.1.17
Server Hostname: free.xxx.com
Server Port: 8080
Document Path: /forum/bbsMessageList.act?bbsThreadId=1580107
Document Length: 27012 bytes
Concurrency Level: 10
Time taken for tests: 92.148883 seconds
Complete requests: 100
Failed requests: 0
Write errors: 0
Keep-Alive requests: 0
Total transferred: 2722500 bytes
HTML transferred: 2701200 bytes
Requests per second: 1.09 [#/sec] (mean)
Time per request: 9214.888 [ms] (mean)
Time per request: 921.489 [ms] (mean, across all concurrent requests)
Transfer rate: 28.84 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.0 0 0
Processing: 9089 9187 139.4 9140 9789
Waiting: 3067 3163 138.3 3117 3766
Total: 9089 9187 139.4 9140 9789
Percentage of the requests served within a certain time (ms)
50% 9140
66% 9178
75% 9189
80% 9201
90% 9281
95% 9560
98% 9739
99% 9789
100% 9789 (longest request)

每一个请求的响应时间大概去到8-9秒时间,这个是客户所不能接受的。
 
这时我们决定采用JDK5.0自带的jstack来进行trouble-shoot,首先重新做加压测试,并行请求为10个,总共100个请求,这时对Resin服务器所起的Java进程间隔10秒用jstack做一次采集工作。为什么要间隔10秒?主要是想看看在这三十秒内Java进程是否都阻塞在同一个地方。结果如下:
 
大部分的线程都阻塞在同一个java stack上面:

Thread t@38: (state = BLOCKED)
- java.lang.Object.wait(long) @bci=0 (Interpreted frame)
- java.lang.Object.wait(long) @bci=0 (Interpreted frame)
- com._xxx.vportal.common.rpc.session.RemoteServiceGroupFactory.getMaxBalanceFactoryEntry() @bci=165,
line=180 (Interpreted frame)
- com._xxx.vportal.common.rpc.session.RemoteServiceGroupFactory.getService() @bci=80, line=195 (Interpreted
frame)
- com._xxx.vportal.common.rpc.session.RemoteServiceFactory.getSynSender() @bci=1, line=331 (Interpreted
frame)
- com._xxx.vportal.common.rpc.session.RemoteServiceSupport.synRequestHardTask(java.lang.String,
java.lang.Object) @bci=6, line=35 (Interpreted frame)
- com._xxx.vportal.amus.user.client.UserClientRpcImpl.getIconSigner(int, int) @bci=36, line=90 (Interpreted frame)
- net._xxx.forum.model.user.UserInfo.getLogoPath() @bci=109, line=546 (Interpreted frame)
- sun.reflect.GeneratedMethodAccessor13.invoke(java.lang.Object, java.lang.Object[]) @bci=36 (Interpreted frame)
- sun.reflect.DelegatingMethodAccessorImpl.invoke(java.lang.Object, java.lang.Object[]) @bci=6, line=25
(Compiled frame)
- org.apache.velocity.runtime.parser.node.ASTReference.execute(java.lang.Object,
org.apache.velocity.context.InternalContextAdapter) @bci=40, line=207 (Compiled frame)
- org.apache.velocity.runtime.parser.node.ASTBlock.render(org.apache.velocity.context.InternalContextAdapter,
java.io.Writer) @bci=18, line=94 (Compiled frame)
- org.apache.velocity.runtime.parser.node.SimpleNode.render(org.apache.velocity.context.InternalContextAdapter,
java.io.Writer) @bci=18, line=271 (Interpreted frame)
-
org.apache.velocity.runtime.parser.node.ASTIfStatement.render(org.apache.velocity.context.InternalContextAdapter,
java.io.Writer) @bci=63, line=128 (Interpreted frame)
- org.apache.velocity.runtime.parser.node.ASTBlock.render(org.apache.velocity.context.InternalContextAdapter,
java.io.Writer) @bci=18, line=94 (Compiled frame)
- org.apache.velocity.runtime.directive.Foreach.render(org.apache.velocity.context.InternalContextAdapter,
java.io.Writer, org.apache.velocity.runtime.parser.node.Node) @bci=95, line=344 (Interpreted frame)
- org.apache.velocity.runtime.parser.node.ASTDirective.render(org.apache.velocity.context.InternalContextAdapter,
java.io.Writer) @bci=14, line=153 (Interpreted frame)
- org.apache.velocity.runtime.parser.node.SimpleNode.render(org.apache.velocity.context.InternalContextAdapter,
java.io.Writer) @bci=18, line=271 (Interpreted frame)
- org.apache.velocity.app.Velocity.evaluate(org.apache.velocity.context.Context, java.io.Writer, java.lang.String,
java.io.Reader) @bci=102, line=359 (Interpreted frame)
- org.apache.velocity.app.Velocity.evaluate(org.apache.velocity.context.Context, java.io.Writer,
java.lang.String, java.lang.String) @bci=18, line=253 (Interpreted frame)
- net._xxx.forum.util.velocity.VelocityUtil.getVelocityEvaluate(java.util.Map, java.io.Writer,
java.lang.String) @bci=14, line=35 (Interpreted frame)
- net._xxx.forum.action.forum.BbsMessageListAction.go() @bci=1284, line=268 (Interpreted
frame)

net._xxx.forum.action.AbstractAction.execute() @bci=1, line=39 (

..............

 和应用的开发人员交流后,发现这些有问题的程序,都是和论坛系统中Socket调用有关,当用户打开一个页面是,页面中的用户信息需要同过Socket的方式调用相册那边的数据,这个操作存在bug,经过用户的重新同步更新程序,问题解决。
 
解决后的实测的数据如下, 效果非常理想:
This is ApacheBench, Version 2.0.41-dev <$Revision: 1.121.2.12 $> apache-2.0
Copyright (c) 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Copyright (c) 2006 The Apache Software Foundation, http://www.apache.org/
Benchmarking free.xxx.com (be patient)
Completed 5000 requests
Completed 10000 requests
Completed 15000 requests
Completed 20000 requests
Completed 25000 requests
Completed 30000 requests
Completed 35000 requests
Completed 40000 requests
Completed 45000 requests
Finished 50000 requests
Server Software: Apache/2.0.59
Server Hostname: free.xxx.com
Server Port: 80
Document Path: /forum/bbsMessageList.act?bbsThreadId=1581280
Document Length: 27508 bytes
Concurrency Level: 30
Time taken for tests: 252.583749 seconds
Complete requests: 50000
Failed requests: 0
Write errors: 0
Total transferred: 1384158363 bytes
HTML transferred: 1375408188 bytes
Requests per second: 197.95 [#/sec] (mean)
Time per request: 151.550 [ms] (mean)
Time per request: 5.052 [ms] (mean, across all concurrent requests)
Transfer rate: 5351.56 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.4 0 11
Processing: 45 150 154.1 117 4349
Waiting: 41 145 153.7 112 4346
Total: 45 150 154.1 117 4349
Percentage of the requests served within a certain time (ms)
50% 117
66% 142
75% 163
80% 180
90% 241
95% 321
98% 478
99% 764
100% 4349 (longest re
2. 另外的一个是最近做的,我们有个教育行业方面的ISV上来实验室做T2000的Benchmark实验,我们花了一天的时间部署整个架构,包括安装Solaris操作系统,应用服务器,数据库。& amp; amp; lt; /div>
整个应用的架构如下:
Tomcat + Jdk 1.5 + Oracle 10g
运行的操作系统:
Solaris 10 Update 3 (11/06), EIS patches包.
测试工具:
LoadRunner 8.1
在实验的初段,Tomcat, Oracle 10g服务器都是架设在T2000上,我们在对T2000服务器的OS,网络,应用服务器做了必要的调整后,发现其表现还是不尽如人意。& #160;
 
我们使用Loadrunner做测试,用户上到了100个同时并发10个迭代时已经出现问题,有许多的请求都被阻塞住,不能正常地进行。
 
这时我们决定使用jconsole和jstack来看看系统出现了什么问题。
A. 首先我们需要在Tomcat的启动脚本catalina.sh里面加入JVM选项:
     Dcom.sun.management.jmxremote
     把tomcat服务器java进程置于JDK5.0的性能监控范围之内。
 
B. 然后我们用jconsole连接到tomcat服务器的java进程,发现基本上Heap size, 垃圾回收都比较正常,但发现tomcat服务器的大部分线程有问题,都处于被Block的状态。
     观察每条线程的stack trace, 发现它们基本上都被堵塞在uk.org.primrose.pool.core.Pool.put和uk.org.primrose.pool.core.Pool.get()的SyncHack同步机制上,我们尝试了改大数据连接池的大小,发现结果是一样的。
jdk5_1
C.这个结论在jstack的结果中同样得到了验证,使用jstack连接到tomcat服务器java进程,并观察结果。
jdk5_2

D. 最后我们决定用tomcat服务器的连接池配置来代替Primrose数据库连接池,更改以后,发现结果比较理想。

E. 后来,我们把Oracle数据库建立在另外的一台服务器X4200上,而Tomcat应用服务器依然放在T2000上,使用千兆网络交换机,同样地,使用Tomcat服务器自己的连接池配置表现较为理想。
以上两个是我对JDK5.0工具的一些实际操作的例子,在这里和大家分享一下,希望对大家有所帮助。而Sun Microsystem公司也在不断地完善JDK,在新的JDK版本里面加入越来越多的实用的方便开发者开发和调试的新特性,比如在最新的JDK6.0里面就内嵌了Dtrace里面许多关于Java程序中内存,方法,线程等等新的探针,通过这些探针和Dtrace,我们可以更加方便地调试Java程序。
文档资料:
posted @ 2007-07-10 00:04 和田雨 阅读(439) | 评论 (0)编辑 收藏