Calendar lCal = Calendar.getInstance(); 
String year = tod.substring(6);  //tod 是DD/MM/YYYY的格式的日期。
String month = tod.substring(3,5);
 lCal.set(FormatFunctions.s2i(year), FormatFunctions.s2i(month), 1); 调用一个共用方法将字符串转换成整型。
     lCal.add(Calendar.MONTH, 0);
     lCal.add(Calendar.DATE, -1);
      SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy");
      tod = formatter.format(lCal.getTime();
posted @ 2005-10-14 14:56 rodney 阅读(2275) | 评论 (0)编辑 收藏
 
中文机的日期如果是1月2005 SELECT TO_CHAR(SYSDATE,'MONYYYY') FROM DUAL
英文机的日期如果是1月2005会显示成JAN2005.
从上面可以看出oracle在格式转换中用MON的格式是取某个月的单词的前三个字符。但是在中文机上有从SQL中取出来是1?空格2005一共是占七个字符。而英文机上也是占七个字符。只是在显示时的效果不一样。中:1?空格2005,英文机上:JAN2005.
posted @ 2005-10-14 14:43 rodney 阅读(369) | 评论 (0)编辑 收藏
 

如果有一个程序是这样:(PB的源代码)
IF NOT IsNull(ld_from_date) AND NOT IsNull(ld_date) THEN
 ls_sql_where = ls_sql_where + &
 " Trunc(~"CITYNET_INTERFACE~".~"REQUESTED_PICKUP_DTM~") between TO_DATE('" + &
 String(ld_from_date, 'dd/mm/yyyy') + &
 "', 'dd/mm/yyyy') and TO_DATE('" + &
 String(ld_date, 'dd/mm/yyyy') + "', 'dd/mm/yyyy')" + " AND "
 ls_query_criteria = ls_query_criteria + " Trip Date between " + String(ld_from_date,'DD/MM/YYYY') + &
  " AND " + String(ld_date,'DD/MM/YYYY')
END IF

IF NOT IsNull(ld_from_date) AND IsNull(ld_date) THEN
 ls_sql_where = ls_sql_where + &
 " Trunc(~"CITYNET_INTERFACE~".~"REQUESTED_PICKUP_DTM~") >= TO_DATE('" + &
 String(ld_from_date, 'dd/mm/yyyy') + "', 'dd/mm/yyyy')" + " AND "
 ls_query_criteria = ls_query_criteria + " Trip Date >= " + String(ld_from_date,'DD/MM/YYYY')
END IF

IF IsNull(ld_from_date) AND NOT IsNull(ld_date) THEN
 ls_sql_where = ls_sql_where + &
 " Trunc(~"CITYNET_INTERFACE~".~"REQUESTED_PICKUP_DTM~") <= TO_DATE('" + &
 String(ld_date, 'dd/mm/yyyy') + "', 'dd/mm/yyyy')" + " AND "
 ls_query_criteria = ls_query_criteria + " Trip Date <= " + String(ld_date,'DD/MM/YYYY')
END IF
把上面的代码用SQL的查询语句来实行。
这时我用到了一个between运算符,这个运算符会包括它后的两个入参:
如:select table.A from table where table.A between 5 and 10.也就是说这时的条件A>=5 and A<= 10的记录。

posted @ 2005-10-11 13:52 rodney 阅读(789) | 评论 (0)编辑 收藏
 
我的report server是IBM产品,我通过URL传递参数时http://work-5:80/reports/rwservlet?mykeys2&desType=cache&desFormat=PDF&report=/data1/ifms/xmlreports/IF3050R.xml&printid=SANCP2&pgmID=IF3050R
但在&变量名之后加了空格,结果report不能打印。然后我把URL中的每个空格都去除。可以了。当我不知道URL为什么不能有空格,HTTP协议是怎么处理空格的。希望有哪位高手能给一个指点。
posted @ 2005-10-11 10:45 rodney 阅读(3422) | 评论 (3)编辑 收藏
 
1. 配置系统管理(Admin Web Application)
大多数商业化的J2EE服务器都提供一个功能强大的管理界面,且大都采用易于理解的Web应用界面。Tomcat按照自己的方式,同样提供一个成熟的管理工具,并且丝毫不逊于那些商业化的竞争对手。Tomcat的Admin Web Application最初在4.1版本时出现,当时的功能包括管理context、data source、user和group等。当然也可以管理像初始化参数,user、group、role的多种数据库管理等。在后续的版本中,这些功能将得到很大的扩展,但现有的功能已经非常实用了。

Admin Web Application被定义在自动部署文件:CATALINA_BASE/webapps/admin.xml 。
(译者注:CATALINA_BASE即tomcat安装目录下的server目录)

你必须编辑这个文件,以确定Context中的docBase参数是绝对路径。也就是说,CATALINA_BASE/webapps/admin.xml 的路径是绝对路径。作为另外一种选择,你也可以删除这个自动部署文件,而在server.xml文件中建立一个Admin Web Application的context,效果是一样的。你不能管理Admin Web Application这个应用,换而言之,除了删除CATALINA_BASE/webapps/admin.xml ,你可能什么都做不了。

如果你使用UserDatabaseRealm(默认),你将需要添加一个user以及一个role到CATALINA_BASE/conf/tomcat-users.xml 文件中。你编辑这个文件,添加一个名叫“admin”的role 到该文件中,如下:

<role name="admin"/>

你同样需要有一个用户,并且这个用户的角色是“admin”。象存在的用户那样,添加一个用户(改变密码使其更加安全):

<user name="admin" password="deep_dark_secret" roles="admin"/>

当你完成这些步骤后,请重新启动Tomcat,访问http://localhost:8080/admin,你将看到一个登录界面。Admin Web Application采用基于容器管理的安全机制,并采用了Jakarta Struts框架。一旦你作为“admin”角色的用户登录管理界面,你将能够使用这个管理界面配置Tomcat。

2.配置应用管理(Manager Web Application)
Manager Web Application让你通过一个比Admin Web Application更为简单的用户界面,执行一些简单的Web应用任务。

Manager Web Application被被定义在一个自动部署文件中:

CATALINA_BASE/webapps/manager.xml 。

你必须编辑这个文件,以确保context的docBase参数是绝对路径,也就是说CATALINA_HOME/server/webapps/manager的绝对路径。
(译者注:CATALINA_HOME即tomcat安装目录)

如果你使用的是UserDatabaseRealm,那么你需要添加一个角色和一个用户到CATALINA_BASE/conf/tomcat-users.xml文件中。接下来,编辑这个文件,添加一个名为“manager”的角色到该文件中:

<role name=”manager”>

你同样需要有一个角色为“manager”的用户。像已经存在的用户那样,添加一个新用户(改变密码使其更加安全):

<user name="manager" password="deep_dark_secret" roles="manager"/>

然后重新启动Tomcat,访问http://localhost/manager/list,将看到一个很朴素的文本型管理界面,或者访问http://localhost/manager/html/list,将看到一个HMTL的管理界面。不管是哪种方式都说明你的Manager Web Application现在已经启动了。

Manager application让你可以在没有系统管理特权的基础上,安装新的Web应用,以用于测试。如果我们有一个新的web应用位于/home/user/hello下在,并且想把它安装到 /hello下,为了测试这个应用,我们可以这么做,在第一个文件框中输入“/hello”(作为访问时的path),在第二个文本框中输入“file:/home/user/hello”(作为Config URL)。

Manager application还允许你停止、重新启动、移除以及重新部署一个web应用。停止一个应用使其无法被访问,当有用户尝试访问这个被停止的应用时,将看到一个503的错误——“503 - This application is not currently available”。

移除一个web应用,只是指从Tomcat的运行拷贝中删除了该应用,如果你重新启动Tomcat,被删除的应用将再次出现(也就是说,移除并不是指从硬盘上删除)。

3.部署一个web应用
有两个办法可以在系统中部署web服务。
1> 拷贝你的WAR文件或者你的web应用文件夹(包括该web的所有内容)到$CATALINA_BASE/webapps目录下。
2> 为你的web服务建立一个只包括context内容的XML片断文件,并把该文件放到$CATALINA_BASE/webapps目录下。这个web应用本身可以存储在硬盘上的任何地方。

如果你有一个WAR文件,你若想部署它,则只需要把该文件简单的拷贝到CATALINA_BASE/webapps目录下即可,文件必须以“.war”作为扩展名。一旦Tomcat监听到这个文件,它将(缺省的)解开该文件包作为一个子目录,并以WAR文件的文件名作为子目录的名字。接下来,Tomcat将在内存中建立一个context,就好象你在server.xml文件里建立一样。当然,其他必需的内容,将从server.xml中的DefaultContext获得。

部署web应用的另一种方式是写一个Context XML片断文件,然后把该文件拷贝到CATALINA_BASE/webapps目录下。一个Context片断并非一个完整的XML文件,而只是一个context元素,以及对该应用的相应描述。这种片断文件就像是从server.xml中切取出来的context元素一样,所以这种片断被命名为“context片断”。

举个例子,如果我们想部署一个名叫MyWebApp.war的应用,该应用使用realm作为访问控制方式,我们可以使用下面这个片断:

<!--  
 Context fragment for deploying MyWebApp.war  
-->
<Context path="/demo" docBase="webapps/MyWebApp.war"
        debug="0" privileged="true">
 <Realm className="org.apache.catalina.realm.UserDatabaseRealm"                
        resourceName="UserDatabase"/>
</Context>

把该片断命名为“MyWebApp.xml”,然后拷贝到CATALINA_BASE/webapps目录下。

这种context片断提供了一种便利的方法来部署web应用,你不需要编辑server.xml,除非你想改变缺省的部署特性,安装一个新的web应用时不需要重启动Tomcat。


4.配置虚拟主机(Virtual Hosts)
关于server.xml中“Host”这个元素,只有在你设置虚拟主机的才需要修改。虚拟主机是一种在一个web服务器上服务多个域名的机制,对每个域名而言,都好象独享了整个主机。实际上,大多数的小型商务网站都是采用虚拟主机实现的,这主要是因为虚拟主机能直接连接到Internet并提供相应的带宽,以保障合理的访问响应速度,另外虚拟主机还能提供一个稳定的固定IP。

基于名字的虚拟主机可以被建立在任何web服务器上,建立的方法就是通过在域名服务器(DNS)上建立IP地址的别名,并且告诉web服务器把去往不同域名的请求分发到相应的网页目录。因为这篇文章主要是讲Tomcat,我们不准备介绍在各种操作系统上设置DNS的方法,如果你在这方面需要帮助,请参考《DNS and Bind》一书,作者是Paul Albitz and Cricket Liu (O'Reilly)。为了示范方便,我将使用一个静态的主机文件,因为这是测试别名最简单的方法。
在Tomcat中使用虚拟主机,你需要设置DNS或主机数据。为了测试,为本地IP设置一个IP别名就足够了,接下来,你需要在server.xml中添加几行内容,如下:

<Server port="8005" shutdown="SHUTDOWN" debug="0">
 <Service name="Tomcat-Standalone">
   <Connector className="org.apache.coyote.tomcat4.CoyoteConnector"
port="8080" minProcessors="5" maxProcessors="75"
enableLookups="true" redirectPort="8443"/>
   <Connector className="org.apache.coyote.tomcat4.CoyoteConnector"
port="8443" minProcessors="5" maxProcessors="75"
acceptCount="10" debug="0" scheme="https" secure="true"/>
     <Factory className="org.apache.coyote.tomcat4.CoyoteServerSocketFactory"
clientAuth="false" protocol="TLS" />
   </Connector>
   <Engine name="Standalone" defaultHost="localhost" debug="0">
     <!-- This Host is the default Host -->
     <Host name="localhost" debug="0" appBase="webapps"
     unpackWARs="true" autoDeploy="true">
       <Context path="" docBase="ROOT" debug="0"/>
       <Context path="/orders" docBase="/home/ian/orders" debug="0"
                      reloadable="true" crossContext="true">
       </Context>
     </Host>

     <!-- This Host is the first "Virtual Host": www.example.com -->
     <Host name="www.example.com" appBase="/home/example/webapp">
       <Context path="" docBase="."/>
     </Host>

   </Engine>
 </Service>
</Server>

Tomcat的server.xml文件,在初始状态下,只包括一个虚拟主机,但是它容易被扩充到支持多个虚拟主机。在前面的例子中展示的是一个简单的server.xml版本,其中粗体部分就是用于添加一个虚拟主机。每一个Host元素必须包括一个或多个context元素,所包含的context元素中必须有一个是默认的context,这个默认的context的显示路径应该为空(例如,path=””)。

5.配置基础验证(Basic Authentication)
容器管理验证方法控制着当用户访问受保护的web应用资源时,如何进行用户的身份鉴别。当一个web应用使用了Basic Authentication(BASIC参数在web.xml文件中auto-method元素中设置),而有用户访问受保护的web应用时,Tomcat将通过HTTP Basic Authentication方式,弹出一个对话框,要求用户输入用户名和密码。在这种验证方法中,所有密码将被以64位的编码方式在网络上传输。

注意:使用Basic Authentication通过被认为是不安全的,因为它没有强健的加密方法,除非在客户端和服务器端都使用HTTPS或者其他密码加密码方式(比如,在一个虚拟私人网络中)。若没有额外的加密方法,网络管理员将能够截获(或滥用)用户的密码。但是,如果你是刚开始使用Tomcat,或者你想在你的web应用中测试一下基于容器的安全管理,Basic Authentication还是非常易于设置和使用的。只需要添加<security-constraint>和<login-config>两个元素到你的web应用的web.xml文件中,并且在CATALINA_BASE/conf/tomcat-users.xml 文件中添加适当的<role>和<user>即可,然后重新启动Tomcat。

下面例子中的web.xml摘自一个俱乐部会员网站系统,该系统中只有member目录被保护起来,并使用Basic Authentication进行身份验证。请注意,这种方式将有效的代替Apache web服务器中的.htaccess文件。

<!--
 Define the Members-only area, by defining
 a "Security Constraint" on this Application, and
 mapping it to the subdirectory (URL) that we want
 to restrict.
-->
<security-constraint>
 <web-resource-collection>
   <web-resource-name>
     Entire Application
   </web-resource-name>
   <url-pattern>/members/*</url-pattern>
 </web-resource-collection>
 <auth-constraint>
     <role-name>member</role-name>
 </auth-constraint>
</security-constraint>
<!-- Define the Login Configuration for this Application -->
<login-config>
 <auth-method>BASIC</auth-method>
 <realm-name>My Club Members-only Area</realm-name>
</login-config>

6.配置单点登录(Single Sign-On)
一旦你设置了realm和验证的方法,你就需要进行实际的用户登录处理。一般说来,对用户而言登录系统是一件很麻烦的事情,你必须尽量减少用户登录验证的次数。作为缺省的情况,当用户第一次请求受保护的资源时,每一个web应用都会要求用户登录。如果你运行了多个web应用,并且每个应用都需要进行单独的用户验证,那这看起来就有点像你在与你的用户搏斗。用户们不知道怎样才能把多个分离的应用整合成一个单独的系统,所有他们也就不知道他们需要访问多少个不同的应用,只是很迷惑,为什么总要不停的登录。

Tomcat 4的“single sign-on”特性允许用户在访问同一虚拟主机下所有web应用时,只需登录一次。为了使用这个功能,你只需要在Host上添加一个SingleSignOn Valve元素即可,如下所示:

<Valve className="org.apache.catalina.authenticator.SingleSignOn"
      debug="0"/>

在Tomcat初始安装后,server.xml的注释里面包括SingleSignOn Valve配置的例子,你只需要去掉注释,即可使用。那么,任何用户只要登录过一个应用,则对于同一虚拟主机下的所有应用同样有效。

使用single sign-on valve有一些重要的限制:
1> value必须被配置和嵌套在相同的Host元素里,并且所有需要进行单点验证的web应用(必须通过context元素定义)都位于该Host下。
2> 包括共享用户信息的realm必须被设置在同一级Host中或者嵌套之外。
3> 不能被context中的realm覆盖。
4> 使用单点登录的web应用最好使用一个Tomcat的内置的验证方式(被定义在web.xml中的<auth-method>中),这比自定义的验证方式强,Tomcat内置的的验证方式包括basic、digest、form和client-cert。
5> 如果你使用单点登录,还希望集成一个第三方的web应用到你的网站中来,并且这个新的web应用使用它自己的验证方式,而不使用容器管理安全,那你基本上就没招了。你的用户每次登录原来所有应用时需要登录一次,并且在请求新的第三方应用时还得再登录一次。当然,如果你拥有这个第三方web应用的源码,而你又是一个程序员,你可以修改它,但那恐怕也不容易做。
6> 单点登录需要使用cookies。

7.配置用户定制目录(Customized User Directores)
一些站点允许个别用户在服务器上发布网页。例如,一所大学的学院可能想给每一位学生一个公共区域,或者是一个ISP希望给一些web空间给他的客户,但这又不是虚拟主机。在这种情况下,一个典型的方法就是在用户名前面加一个特殊字符(~),作为每位用户的网站,比如:

http://www.cs.myuniversity.edu/~username
http://members.mybigisp.com/~username

Tomcat提供两种方法在主机上映射这些个人网站,主要使用一对特殊的Listener元素。Listener的className属性应该是org.apache.catalina.startup.UserConfig,userClass属性应该是几个映射类之一。如果你的系统是Unix,它将有一个标准的/etc/passwd文件,该文件中的帐号能够被运行中的Tomcat很容易的读取,该文件指定了用户的主目录,使用PasswdUserDatabase 映射类。

<Listener className="org.apache.catalina.startup.UserConfig"
directoryName="public_html"
userClass="org.apache.catalina.startup.PasswdUserDatabase"/>

web文件需要放置在像/home/users/ian/public_html 或者 /users/jbrittain/public_html一样的目录下面。当然你也可以改变public_html 到其他任何子目录下。

实际上,这个用户目录根本不一定需要位于用户主目录下里面。如果你没有一个密码文件,但你又想把一个用户名映射到公共的像/home一样目录的子目录里面,则可以使用HomesUserDatabase类。

<Listener className="org.apache.catalina.startup.UserConfig"
directoryName="public_html" homeBase="/home"
userClass="org.apache.catalina.startup.HomesUserDatabase"/>

这样一来,web文件就可以位于像/home/ian/public_html 或者 /home/jasonb/public_html一样的目录下。这种形式对Windows而言更加有利,你可以使用一个像c:\home这样的目录。

这些Listener元素,如果出现,则必须在Host元素里面,而不能在context元素里面,因为它们都用应用于Host本身。


8.在Tomcat中使用CGI脚本
Tomcat主要是作为Servlet/JSP容器,但它也有许多传统web服务器的性能。支持通用网关接口(Common Gateway Interface,即CGI)就是其中之一,CGI提供一组方法在响应浏览器请求时运行一些扩展程序。CGI之所以被称为通用,是因为它能在大多数程序或脚本中被调用,包括:Perl,Python,awk,Unix shell scripting等,甚至包括Java。当然,你大概不会把一个Java应用程序当作CGI来运行,毕竟这样太过原始。一般而言,开发Servlet总要比CGI具有更好的效率,因为当用户点击一个链接或一个按钮时,你不需要从操作系统层开始进行处理。

Tomcat包括一个可选的CGI Servlet,允许你运行遗留下来的CGI脚本。

为了使Tomcat能够运行CGI,你必须做如下几件事:
1. 把servlets-cgi.renametojar (在CATALINA_HOME/server/lib/目录下)改名为servlets-cgi.jar。处理CGI的servlet应该位于Tomcat的CLASSPATH下。
2. 在Tomcat的CATALINA_BASE/conf/web.xml 文件中,把关于<servlet-name> CGI的那段的注释去掉(默认情况下,该段位于第241行)。
3. 同样,在Tomcat的CATALINA_BASE/conf/web.xml文件中,把关于对CGI进行映射的那段的注释去掉(默认情况下,该段位于第299行)。注意,这段内容指定了HTML链接到CGI脚本的访问方式。
4. 你可以把CGI脚本放置在WEB-INF/cgi 目录下(注意,WEB-INF是一个安全的地方,你可以把一些不想被用户看见或基于安全考虑不想暴露的文件放在此处),或者你也可以把CGI脚本放置在context下的其他目录下,并为CGI Servlet调整cgiPathPrefix初始化参数。这就指定的CGI Servlet的实际位置,且不能与上一步指定的URL重名。
5. 重新启动Tomcat,你的CGI就可以运行了。

在Tomcat中,CGI程序缺省放置在WEB-INF/cgi目录下,正如前面所提示的那样,WEB-INF目录受保护的,通过客户端的浏览器无法窥探到其中内容,所以对于放置含有密码或其他敏感信息的CGI脚本而言,这是一个非常好的地方。为了兼容其他服务器,尽管你也可以把CGI脚本保存在传统的/cgi-bin目录,但要知道,在这些目录中的文件有可能被网上好奇的冲浪者看到。另外,在Unix中,请确定运行Tomcat的用户有执行CGI脚本的权限。

9.改变Tomcat中的JSP编译器(JSP Compiler)
在Tomcat 4.1(或更高版本,大概),JSP的编译由包含在Tomcat里面的Ant程序控制器直接执行。这听起来有一点点奇怪,但这正是Ant有意为之的一部分,有一个API文档指导开发者在没有启动一个新的JVM的情况下,使用Ant。这是使用Ant进行Java开发的一大优势。另外,这也意味着你现在能够在Ant中使用任何javac支持的编译方式,这里有一个关于Apache Ant使用手册的javac page列表。使用起来是容易的,因为你只需要在<init-param> 元素中定义一个名字叫“compiler”,并且在value中有一个支持编译的编译器名字,示例如下:

<servlet>
   <servlet-name>jsp</servlet-name>
   <servlet-class>
     org.apache.jasper.servlet.JspServlet
   </servlet-class>
   <init-param>
     <param-name>logVerbosityLevel</param-name>
     <param-value>WARNING</param-value>
   </init-param>
   <init-param>
     <param-name>compiler</param-name>
     <param-value>jikes</param-value>
   </init-param>
   <load-on-startup>3</load-on-startup>
</servlet>

当然,给出的编译器必须已经安装在你的系统中,并且CLASSPATH可能需要设置,那处决于你选择的是何种编译器。

10.限制特定主机访问(Restricting Access to Specific Hosts)
有时,你可能想限制对Tomcat web应用的访问,比如,你希望只有你指定的主机或IP地址可以访问你的应用。这样一来,就只有那些指定的的客户端可以访问服务的内容了。为了实现这种效果,Tomcat提供了两个参数供你配置:RemoteHostValve 和RemoteAddrValve。

通过配置这两个参数,可以让你过滤来自请求的主机或IP地址,并允许或拒绝哪些主机/IP。与之类似的,在Apache的httpd文件里有对每个目录的允许/拒绝指定。
例如你可以把Admin Web application设置成只允许本地访问,设置如下:

<Context path="/path/to/secret_files" ...>
 <Valve className="org.apache.catalina.valves.RemoteAddrValve"
        allow="127.0.0.1" deny=""/>
</Context>

如果没有给出允许主机的指定,那么与拒绝主机匹配的主机就会被拒绝,除此之外的都是允许的。与之类似,如果没有给出拒绝主机的指定,那么与允许主机匹配的主机就会被允许,除此之外的都是拒绝的。
posted @ 2005-10-10 12:19 rodney 阅读(253) | 评论 (0)编辑 收藏
 

今天上网不管输入任何一个网址都没有办法显示内容,提示找不该网页。
用ping www.google.com提示Unknow host www.google.com
用nslookup www.google.com 提示有:服务器名,IP地址都有显示出来。
用tracert IP地址也可以。
后来我在服务中把DNS Client的服务重启一下就OK了。

posted @ 2005-09-23 10:17 rodney 阅读(392) | 评论 (0)编辑 收藏
 
insertBefore()--在参考子节点之前插入一个新的子节点.如果参考的子节点为null,则新的子节点将作为调用节点的最后一个子节点插入。

replaceChild()--在childNodes集合种使用指定的newChild来代替oldChild;如果代替成功,则返回oldChild;如果newChild是null,则只需删除oldChild即可。

removeChild()--从节点的ChildNodes集合中删除removeChild指定的节点,如果删除成功,则返回删除的子节点。

appendChild()--添加一个新节点到childNodes集合的末尾,如果成功,则返回新节点。

cloneNode()--创建一个新的、复制的节点,并且如果传入的参数是true时,还将复制子节点,如果节点是一个元素,那么还将复制相应属性,返回新的节点。

为了在一棵文档树中访问或者建立一个新的节点,可以用下面这些方法:
getElementById()
getElementsByTagName()
createElement()
createAttribute()
createTextNode()
注意:在一个页面中只有一个文档对象,除了getElementsByTagName()外,其它方法均只能通过document.methodName()调用。
再看一下下面这个例子:
<html>
<head>
<title></title>
</head>
<body>
<p>This is a sample paragraph.</p>
<SCRIPT LANGUAGE="JavaScript">
<!--
alert(document.documentElement.lastChild.firstChild.tagName);
//-->
</SCRIPT>
</body>
</html>
结果将会显示"P",下面是一些解释
document.documentElement - gives the page's HTML tag.
lastChild - gives the BODY tag.
firstChild - gives the first element in the BODY.
tagName - gives that element's tag name, "P" in this case.
另一个:
<html>
<head>
<title></title>
</head>
<body>

<p>This is a sample paragraph.</p>
<SCRIPT LANGUAGE="JavaScript">
<!--
alert(document.documentElement.lastChild.firstChild.tagName);
//-->
</SCRIPT>
</body>
</html>
这个例子和上面并没有什么大的区别,仅仅是多了一个空行,但是在NS中,会自动为空行加上一个节点所以返回值是"undefined",而在IE中将跳过空行仍然指向P标签。

更常用的方法:
<p id="myParagraph">This is a sample paragraph.</p>
...
alert(document.getElementById("myParagraph").tagName);
这种方法你不用关心节点在文档树的哪一个地方,而只要保证在页面中它的ID号是唯一的就可以了。

接下来一种访问元素节点的方法是document.getElementsByTagName(),它的返回值是一个数组,例如你可以通过下面的例子改变整个页面的连接:
var nodeList = document.getElementsByTagName("A");
for (var i = 0; i < nodeList.length; i++)
nodeList[i].style.color = "#ff0000";

attribute和attributes
attribute对象和元素相关,但是却没有被认为是文档树的一部分,因此属性不能作为子节点集合的一部分来使用。
有三种方法可以为元素建立新的属性
1.
var attr = document.createAttribute("myAttribute");
attr.value = "myValue";
var el = document.getElementById("myParagraph");
el.setAttributeNode(attr);
2.
var el = document.getElementById("myParagraph");
el.setAttribute("myAttribute", "myValue");
3.
var el = document.getElementById("myParagraph");
el.myAttribute = "myValue";
你可以在html标签种定义自己的属性:
<p id="myParagraph" myAttribute="myValue">This is a sample paragraph.</p>
...
alert(document.getElementById("myParagraph").getAttribute("myAttribute"));
返回值将是"myValue".但是请注意这里必须使用getAttribute,而不是AttributeName,因为有一些浏览器并不支持自定义属性。

attributes也可以被轻易的从一个元素中删除,你可以使用removeAttribute()或者将element.attributeName指向一个null值。
通过attributes我们就可以产生一些动态效果:
<p id="sample1" align="left">Text in a paragraph element.</p>
... code for the links ...
document.getElementById('sample1').setAttribute('align', 'left');
document.getElementById('sample1').setAttribute('align', 'right');
另一种:
<p id="sample2" style="text-align:left;">Text in a paragraph
element.</p>
... code for the links ...
document.getElementById('sample2').style.textAlign = 'left';
document.getElementById('sample2').style.textAlign = 'right';
跟上面的例子一样,展示了可用通过元素修改style中的属性,甚至是class中的.唯一要提到的是textAlign是从style中的text-align中演变而来的,有一条基本规律,就是style中的属性如果出现-则在dom中将会被去掉并且随后的一个字母将改为大写,还有一点就是如果即使元素中没有style属性,上述例子同样可以使用。

text nodes:
先看一下例子:
<p id="sample1">This is the initial text.</p>
... code for the links ...
document.getElementById('sample1').firstChild.nodeValue =
'Once upon a time...';
document.getElementById('sample1').firstChild.nodeValue =
'...in a galaxy far, far away';
首先text nodes并没有像elements那样具有id属性,所有它并不能直接通过document.getElementById()或者document.getElementsByTagName()访问
看一下下面的结构也许会更明白一些:
click for full size
可以看出通过document.getElementById('sample1').firstChild.nodeValue就可以读取或者设置text nodes的值了。

另一个更加复杂一点的例子:
<p id="sample2">This is the <b>initial</b> text.</p>
它的文档结构
click for full size
在这里通过document.getElementById('sample1').firstChild.nodeValue讲仅仅改变"This is the"
initial text.将不会改变.在这里大家应该看到了它和innerHTML的不同了.当然你也可以这样用:
document.getElementById('sample3').firstChild.nodeValue =
'<b>Once</b> upon a time...';
document.getElementById('sample3').firstChild.nodeValue =
'...in a galaxy <i>far, far</i> away';
其中的html代码将不会被解释,浏览器将把他们当成普通的文本来显示。

创建和删除text nodes:
var myTextNode = document.createTextNode("my text");
通过上面的代码你可以创建一个新的text node,但是它并不是文档树的一部分,要让它显示在页面上就必须让它成为文档树中某一个节点的child,因为
text nodes不能有儿子,所以你不能将它加入到一个text nodes中,attribute也不属于文档树的一部分,这条路也不行,现在只剩下elements nodes
了,以下的例子展示了如何添加和删除一个text node:
<p id="sample1">Initial text within a paragraph element.</p>
... code to add a text node ...
var text = document.createTextNode(" new text " + (++counter1));
var el = document.getElementById("sample1");
el.appendChild(text);
... code to remove the last child node ...
var el = document.getElementById("sample1");
if (el.hasChildNodes())
el.removeChild(el.lastChild);
增加文本是很容易的,上面的代码建立了一个新的text node并且通过appendChild()方法将其加入到childNodes数组的末尾,并设置了一个counter1的全局变量,利于观察
hasChildNodes()的返回值是true or false;用来判断当前节点是否还有child,以阻止当其没有child的时候调用removeChild()产生的错误。

创建element nodes
有了上面的基础,应该更容易理解了,先看一下下面的代码
<div id="sample1">This text is in a DIV element.</div>
... code for the link ...
var paraEl, boldEl;
paraEl = document.createElement("p");
boldEl = document.createElement("b");
paraEl.appendChild(document.createTextNode("This is a new paragraph with "));
boldEl.appendChild(document.createTextNode("bold"));
paraEl.appendChild(boldEl);
paraEl.appendChild(document.createTextNode(" text added to the DIV"));
document.getElementById("sample1").appendChild(paraEl);
你还可以直接为新加的element nodes设置attribute,以下两种都可以:
boldEl.style.color = "#ffff00";
paraEl.appendChild(boldEl);
或者:
paraEl.appendChild(boldEl);
boldEl.style.color = "#ffff00";

注:此文主要来自于一些英文资料和身边的一些参考书,如果有错误大家请指出,一起讨论,DOM我一点也不熟。
posted @ 2005-09-19 13:28 rodney 阅读(603) | 评论 (0)编辑 收藏
 
有JDBC编程的人都会知道这是一个什么样的异常。做为刚出道的菜鸟我可因为这个异常把我整一下。
我希望这小段随笔能给阅读都带来帮助,也希望大家多多指教。
我在EJB中写了一个方法:public Vector searchCase(String dataSource,BlacksmokeEnqDataobject inputObj,String sql,int maxAllowSize){
  Connection con = null;
  Vector VqueryData = null;
  PreparedStatement ps = null;
  ResultSet rs = null;
  FormatFunctions ff = new FormatFunctions();
  BlacksmokeEnqReportDataobject blsObj = null;
  SqlFunctions sf = new SqlFunctions();
  try{
   con = getConnection(dataSource);
   String drv_ic_n = inputObj.getDrv_ic_n();
   String caseType = inputObj.getCaseType();
   String vehicleNo = inputObj.getVehNo();
   String fleetType = inputObj.getFleetType();
   String make = inputObj.getMake();
   String model = inputObj.getModel();
   String payFrom = inputObj.getPayDateFrom();
   String payTo = inputObj.getPayDateTo();
   String offFrom = inputObj.getOffeDateFrom();
   String offTo = inputObj.getOffeDateTo();
   String entryFrom = inputObj.getEntryDateFrom();
   String entryTo = inputObj.getEntryDateTo();
   int smokeFrom = inputObj.getSmokeFrom();
   int smokeTo = inputObj.getSmokeTo();
   if (drv_ic_n.equals("")){
    drv_ic_n = null;
   }
   if (caseType.equals("")){
    caseType = null;
   }
   if (vehicleNo.equals("")){
    vehicleNo = null;
   }
   if (fleetType.equals("")){
    fleetType = null;
   }
   if (make.equals("")){
    make = null;
   }
   if (model.equals("")){
    model = null;
   }
   if (payFrom.length()>0 && payFrom.equalsIgnoreCase("00/00/0000")){
    payFrom = null;
   }
   if (payTo.length()>0 && payTo.equalsIgnoreCase("00/00/0000")){
    payTo = null;
   }
   if (offFrom.length()>0 && offFrom.equalsIgnoreCase("00/00/0000")){
    offFrom = null;
   }
   if (offTo.length()>0 && offTo.equalsIgnoreCase("00/00/0000")){
    offTo = null;
   }
   if (entryFrom.length()>0 && entryFrom.equalsIgnoreCase("00/00/0000")){
    entryFrom = null;
   }
   if (entryTo.length()>0 && entryTo.equalsIgnoreCase("00/00/0000")){
    entryTo = null;
   }   
   String tmpSql = sf.retuSqlS(sql);
   tmpSql = sf.linkSql(tmpSql,":LS_CO_FINE_PAID_D_FROM",payFrom);
   tmpSql = sf.linkSql(tmpSql,":LS_CO_FINE_PAID_D_TO",payTo);
   tmpSql = sf.linkSql(tmpSql,":LS_BLS_OFFENCE_D_FROM",offFrom);
   tmpSql = sf.linkSql(tmpSql,":LS_BLS_OFFENCE_D_TO",offTo);
   tmpSql = sf.linkSql(tmpSql,":LS_ENTRY_D_FROM",entryFrom);
   tmpSql =  sf.linkSql(tmpSql,":LS_ENTRY_D_TO",entryTo);
   ps = con.prepareStatement(tmpSql);
//   System.out.println(tmpSql);
   int idx = 0;
   ps.setString(++idx,drv_ic_n);
   ps.setString(++idx,drv_ic_n);
   ps.setString(++idx,caseType);
   ps.setString(++idx,caseType);
   ps.setString(++idx,vehicleNo);
   ps.setString(++idx,vehicleNo);
   ps.setString(++idx,fleetType);
   ps.setString(++idx,fleetType);
   ps.setString(++idx,make);
   ps.setString(++idx,make);
   ps.setString(++idx,model);
   ps.setString(++idx,model);
   ps.setInt(++idx,smokeFrom);
   ps.setInt(++idx,smokeFrom);
   ps.setInt(++idx,smokeTo);
//   ps.setInt(++idx,smokeTo);  
   ps.executeQuery();
   rs = ps.getResultSet();
   VqueryData = new Vector();
   idx = 0;
   while(rs.next() && idx <= maxAllowSize){
    blsObj = new BlacksmokeEnqReportDataobject();
    blsObj.setDRV_IC_N(rs.getString("DRV_IC_N"));
    blsObj.setDRV_NM(rs.getString("DRV_NM"));
    blsObj.setBLS_CASE_N(rs.getString("BLS_CASE_N"));
    blsObj.setBLS_CASE_T(rs.getString("BLS_CASE_T"));
    blsObj.setVEH_REGN_N(rs.getString("VEH_REGN_N"));
    blsObj.setBLS_FLT_T(rs.getString("BLS_FLT_T"));
    blsObj.setBLS_MAKE_C(rs.getString("BLS_MAKE_C"));
    blsObj.setBLS_MODEL_C(rs.getString("BLS_MODEL_C"));
    blsObj.setBLS_OFFENCE_D(ff.dateFormat(rs.getDate("BLS_OFFENCE_D")));
    blsObj.setENTRY_D(ff.dateFormat(rs.getDate("ENTRY_D")));
    blsObj.setSMOKE_LEV_READ(rs.getInt("SMOKE_LEV_READ"));
    blsObj.setCO_FINE_PAID_D(ff.dateFormat(rs.getDate("CO_FINE_PAID_D")));
    VqueryData.addElement(blsObj);
    idx++;
   }
   }catch(Exception e){
    blsObj.setErrStatus(sf.ckException(e));
    VqueryData.addElement(blsObj);
    e.printStackTrace();
   }finally{
    SqlFunctions.cleanup(ps, rs);
    SqlFunctions.cleanup(con);
   }
  return VqueryData;
 }这是一个通过XML文件来传SQL语。把查询语句写在XML文件中,在Servlet中调用XML文件。
上面那个错误是因为没有对XML中的查询变量进行绑定,或者是多写,或少写变量,或者变量名写错了。后来我重新认真的做了一遍,发生我没有写错。我把JDeveloper关了,重新打开,可以了。我的没有想这是怎么一回,如果有同样问题的好友知道这是怎么一回事,请联系我rodney_luo@163.com. QQ:86322591
posted @ 2005-09-15 16:19 rodney 阅读(15720) | 评论 (1)编辑 收藏
 

在JPS中用request.Session().setAttribute("别名",对象),如果对对象是一个Value类型,在JSP中取这个对象时一定要用Value类型来接收。不然的的话会出现java.io.ClasscateExection的异常。

posted @ 2005-09-15 14:46 rodney 阅读(1132) | 评论 (1)编辑 收藏
 
Ping
Ping是个使用频率极高的实用程序,用于确定本地主机是否能与另一台主机交换(发送与接收)数据报。根据返回的信息,你就可以推断TCP/IP参数是否设置得正确以及运行是否正常。需要注意的是:成功地与另一台主机进行一次或两次数据报交换并不表示TCP/IP配置就是正确的,你必须执行大量的本地主机与远程主机的数据报交换,才能确信TCP/IP的正确性。
简单的说,Ping就是一个测试程序,如果Ping运行正确,你大体上就可以排除网络访问层、网卡、MODEM的输入输出线路、电缆和路由器等存在的故障,从而减小了问题的范围。但由于可以自定义所发数据报的大小及无休止的高速发送,Ping也被某些别有用心的人作为DDOS(拒绝服务攻击)的工具,前段时间Yahoo就是被人利用数百台可以高速接入互联网的电脑连续发送大量Ping数据包而瘫痪的。
按照缺省设置,Windows上运行的Ping命令发送4个ICMP(网间控制报文协议)回送请求,每个32字节数据,如果一切正常,你应能得到4个回送应答。
Ping能够以毫秒为单位显示发送回送请求到返回回送应答之间的时间量。如果应答时间短,表示数据报不必通过太多的路由器或网络连接速度比较快。Ping还能显示TTL(Time To Live存在时间)值,你可以通过TTL值推算一下数据包已经通过了多少个路由器:源地点TTL起始值(就是比返回TTL略大的一个2的乘方数)-返回时TTL值。例如,返回TTL值为119,那么可以推算数据报离开源地址的TTL起始值为128,而源地点到目标地点要通过9个路由器网段(128-119);如果返回TTL值为246,TTL起始值就是256,源地点到目标地点要通过9个路由器网段。
通过Ping检测网络故障的典型次序
正常情况下,当你使用Ping命令来查找问题所在或检验网络运行情况时,你需要使用许多Ping命令,如果所有都运行正确,你就可以相信基本的连通性和配置参数没有问题;如果某些Ping命令出现运行故障,它也可以指明到何处去查找问题。下面就给出一个典型的检测次序及对应的可能故障:
ping 127.0.0.1——这个Ping命令被送到本地计算机的IP软件,该命令永不退出该计算机。如果没有做到这一点,就表示TCP/IP的安装或运行存在某些最基本的问题。
ping 本机IP——这个命令被送到你计算机所配置的IP地址,你的计算机始终都应该对该Ping命令作出应答,如果没有,则表示本地配置或安装存在问题。出现此问题时,局域网用户请断开网络电缆,然后重新发送该命令。如果网线断开后本命令正确,则表示另一台计算机可能配置了相同的IP地址。
ping 局域网内其他IP——这个命令应该离开你的计算机,经过网卡及网络电缆到达其他计算机,再返回。收到回送应答表明本地网络中的网卡和载体运行正确。但如果收到0个回送应答,那么表示子网掩码(进行子网分割时,将IP地址的网络部分与主机部分分开的代码)不正确或网卡配置错误或电缆系统有问题。
ping 网关IP——这个命令如果应答正确,表示局域网中的网关路由器正在运行并能够作出应答。
ping 远程IP——如果收到4个应答,表示成功的使用了缺省网关。对于拨号上网用户则表示能够成功的访问Internet(但不排除ISP的DNS会有问题)。
ping localhost——localhost是个作系统的网络保留名,它是127.0.0.1的别名,每太计算机都应该能够将该名字转换成该地址。如果没有做到这一带内,则表示主机文件(/Windows/host)中存在问题。
ping www.yahoo.com——对这个域名执行Ping命令,你的计算机必须先将域名转换成IP地址,通常是通过DNS服务器 如果这里出现故障,则表示DNS服务器的IP地址配置不正确或DNS服务器有故障(对于拨号上网用户,某些ISP已经不需要设置DNS服务器了)。顺便说一句:你也可以利用该命令实现域名对IP地址的转换功能。
如果上面所列出的所有Ping命令都能正常运行,那么你对你的计算机进行本地和远程通信的功能基本上就可以放心了。但是,这些命令的成功并不表示你所有的网络配置都没有问题,例如,某些子网掩码错误就可能无法用这些方法检测到。
Ping命令的常用参数选项
ping IP -t——连续对IP地址执行Ping命令,直到被用户以Ctrl+C中断。
ping IP -l 2000——指定Ping命令中的数据长度为2000字节,而不是缺省的32字节。
ping IP -n——执行特定次数的Ping命令。
Netstat
Netstat用于显示与IP、TCP、UDP和ICMP协议相关的统计数据,一般用于检验本机各端口的网络连接情况。
如果你的计算机有时候接受到的数据报会导致出错数据删除或故障,你不必感到奇怪,TCP/IP可以容许这些类型的错误,并能够自动重发数据报。但如果累计的出错情况数目占到所接收的IP数据报相当大的百分比,或者它的数目正迅速增加,那么你就应该使用Netstat查一查为什么会出现这些情况了。
Netstat的一些常用选项:
netstat -s——本选项能够按照各个协议分别显示其统计数据。如果你的应用程序(如Web浏览器)运行速度比较慢,或者不能显示Web页之类的数据,那么你就可以用本选项来查看一下所显示的信息。你需要仔细查看统计数据的各行,找到出错的关键字,进而确定问题所在。
netstat -e——本选项用于显示关于以太网的统计数据。它列出的项目包括传送的数据报的总字节数、错误数、删除数、数据报的数量和广播的数量。这些统计数据既有发送的数据报数量,也有接收的数据报数量。这个选项可以用来统计一些基本的网络流量)。
netstat -r——本选项可以显示关于路由表的信息,类似于后面所讲使用route print命令时看到的 信息。除了显示有效路由外,还显示当前有效的连接。
netstat -a——本选项显示一个所有的有效连接信息列表,包括已建立的连接(ESTABLISHED),也包括监听连接请求(LISTENING)的那些连接。
netstat -n——显示所有已建立的有效连接。
Netstat的妙用
经常上网的人一般都使用ICQ的,不知道你有没有被一些讨厌的人骚扰得不敢上线,想投诉却又不知从和下手?其实,你只要知道对方的IP,就可以向他所属的ISP投诉了。但怎样才能通过ICQ知道对方的IP呢?如果对方在设置ICQ时选择了不显示IP地址,那你是无法在信息栏中看到的。其实,你只需要通过Netstat就可以很方便的做到这一点:当他通过ICQ或其他的工具与你相连时(例如你给他发一条ICQ信息或他给你发一条信息),你立刻在DOS Prompt下输入netstat -n或netstat -a就可以看到对方上网时所用的IP或ISP域名了。甚至连所用Port都完全暴露了,如果你想给他一些教训,这些信息已经足够……
IPConfig
IPConfig实用程序和它的等价图形用户界面——Windows 95/98中的WinIPCfg可用于显示当前的TCP/IP配置的设置值。这些信息一般用来检验人工配置的TCP/IP设置是否正确。但是,如果你的计算机和所在的局域网使用了动态主机配置协议(Dynamic Host Configuration Protocol,DHCP——Windows NT下的一种把较少的IP地址分配给较多主机使用的协议,类似于拨号上网的动态IP分配),这个程序所显示的信息也许更加实用。这时,IPConfig可以让你了解你的计算机是否成功的租用到一个IP地址,如果租用到则可以了解它目前分配到的是什么地址。了解计算机当前的IP地址、子网掩码和缺省网关实际上是进行测试和故障分析的必要项目。
最常用的选项:
ipconfig——当使用IPConfig时不带任何参数选项,那么它为每个已经配置了的接口显示IP地址、子网掩码和缺省网关值
ipconfig /all——当使用all选项时,IPConfig能为DNS和WINS服务器显示它已配置且所要使用的附加信息(如IP地址等),并且显示内置于本地网卡中的物理地址(MAC)。如果IP地址是从DHCP服务器租用的,IPConfig将显示DHCP服务器的IP地址和租用地址预计失效的日期(有关DHCP服务器的相关内容请详见其他有关NT服务器的书籍或询问你的网管),其输出信息见图6的下半部分。
ipconfig /release和ipconfig /renew——这是两个附加选项,只能在向DHCP服务器租用其IP地址的计算机上起作用。如果你输入ipconfig /release,那么所有接口的租用IP地址便重新交付给DHCP服务器(归还IP地址)。如果你输入ipconfig /renew,那么本地计算机便设法与DHCP服务器取得联系,并租用一个IP地址。请注意,大多数情况下网卡将被重新赋予和以前所赋予的相同的IP地址。
如果你使用的是Windows 95/98,那么你应该更习惯使用winipcfg而不是ipconfig,因为它是一个图形用户界面,而且所显示的信息与ipconfig相同,并且也提供发布和更新动态IP地址的选项 如果你购买了Windows NT Resource Kit(NT资源包),那么Windows NT也包含了一个图形替代界面,该实用程序的名字是wntipcfg,和Windows 95/98的winipcfg类似。
ARP(地址转换协议)
ARP是一个重要的TCP/IP协议,并且用于确定对应IP地址的网卡物理地址。实用arp命令,你能够查看本地计算机或另一台计算机的ARP高速缓存中的当前内容。此外,使用arp命令,也可以用人工方式输入静态的网卡物理/IP地址对,你可能会使用这种方式为缺省网关和本地服务器等常用主机进行这项作,有助于减少网络上的信息量。
按照缺省设置,ARP高速缓存中的项目是动态的,每当发送一个指定地点的数据报且高速缓存中不存在当前项目时,ARP便会自动添加该项目。一旦高速缓存的项目被输入,它们就已经开始走向失效状态。例如,在Windows NT网络中,如果输入项目后不进一步使用,物理/IP地址对就会在2至10分钟内失效。因此,如果ARP高速缓存中项目很少或根本没有时,请不要奇怪,通过另一台计算机或路由器的ping命令即可添加。所以,需要通过arp命令查看高速缓存中的内容时,请最好先ping 此台计算机(不能是本机发送ping命令)。
常用命令选项:
arp -a或arp -g——用于查看高速缓存中的所有项目。-a和-g参数的结果是一样的,多年来-g一直是UNIX平台上用来显示ARP高速缓存中所有项目的选项,而Windows用的是arp -a(-a可被视为all,即全部的意思),但它也可以接受比较传统的-g选项。
arp -a IP——如果你有多个网卡,那么使用arp -a加上接口的IP地址,就可以只显示与该接口相关的ARP缓存项目。
arp -s IP 物理地址——你可以向ARP高速缓存中人工输入一个静态项目。该项目在计算机引导过程中将保持有效状态,或者在出现错误时,人工配置的物理地址将自动更新该项目。
arp -d IP——使用本命令能够人工删除一个静态项目。

看到这里,你也许已经有些累了……其实对于一般用户来说也已经足够——你可以用ipconfig和ping命令来查看自己的网络配置并判断是否正确、可以用netstat查看别人与你所建立的连接并找出ICQ使用者所隐藏的IP信息、可以用arp查看网卡的MAC地址——这些已足已让你丢掉菜鸟的头衔。如果你并不满足,那就“硬着头皮”(下面的内容可能有些枯燥)继续Follow me……
Tracert
当数据报从你的计算机经过多个网关传送到目的地时,Tracert命令可以用来跟踪数据报使用的路由(路径)。该实用程序跟踪的路径是源计算机到目的地的一条路径,不能保证或认为数据报总遵循这个路径。如果你的配置使用DNS,那么你常常会从所产生的应答中得到城市、地址和常见通信公司的名字。Tracert是一个运行得比较慢的命令(如果你指定的目标地址比较远),每个路由器你大约需要给它15秒钟
Tracert的使用很简单,只需要在tracert后面跟一个IP地址或URL,Tracert会进行相应的域名转换的。Tracert一般用来检测故障的位置,你可以用tracert IP在哪个环节上出了问题,虽然还是没有确定是什么问题,但它已经告诉了我们问题所在的地方,你也就可以很有把握的告诉别人——某某出了问题。
Route
大多数主机一般都是驻留在只连接一台路由器的网段上。由于只有一台路由器,因此不存在使用哪一台路由器将数据报发表到远程计算机上去的问题,该路由器的IP地址可作为该网段上所有计算机的缺省网关来输入。
但是,当网络上拥有两个或多个路由器时,你就不一定想只依赖缺省网关了。实际上你可能想让你的某些远程IP地址通过某个特定的路由器来传递,而其他的远程IP则通过另一个路由器来传递。
在这种情况下,你需要相应的路由信息,这些信息储存在路由表中,每个主机和每个路由器都配有自己独一无二的路由表。大多数路由器使用专门的路由协议来交换和动态更新路由器之间的路由表。但在有些情况下,必须人工将项目添加到路由器和主机上的路由表中。Route就是用来显示、人工添加和修改路由表项目的。
一般使用选项:
route print——本命令用于显示路由表中的当前项目,在单路由器网段上的输出结果如图12,由于用IP地址配置了网卡,因此所有的这些项目都是自动添加的。
route add——使用本命令,可以将信路由项目添加给路由表。例如,如果要设定一个到目的网络209.98.32.33的路由,其间要经过5个路由器网段,首先要经过本地网络上的一个路由器,器IP为202.96.123.5,子网掩码为255.255.255.224,那么你应该输入以下命令:
route add 209.98.32.33 mask 255.255.255.224 202.96.123.5 metric 5
route change——你可以使用本命令来修改数据的传输路由,不过,你不能使用本命令来改变数据的目的地。下面这个例子可以将数据的路由改到另一个路由器,它采用一条包含3个网段的更直的路径:
route add 209.98.32.33 mask 255.255.255.224 202.96.123.250 metric 3
route delete——使用本命令可以从路由表中删除路由。例如:route delete 209.98.32.33
NBTStat
NBTStat(TCP/IP上的NetBIOS统计数据)实用程序用于提供关于关于NetBIOS的统计数据。运用NetBIOS,你可以查看本地计算机或远程计算机上的NetBIOS名字表格。
常用选项:
nbtstat -n——显示寄存在本地的名字和服务程序
nbtstat -c——本命令用于显示NetBIOS名字高速缓存的内容。NetBIOS名字高速缓存用于寸放与本计算机最近进行通信的其他计算机的NetBIOS名字和IP地址对。
nbtstat -r——本命令用于清除和重新加载NetBIOS名字高速缓存。
nbtstat -a IP——通过IP显示另一台计算机的物理地址和名字列表,你所显示的内容就像对方计算机自己运行nbtstat -n一样
nbtstat -s IP——显示实用其IP地址的另一台计算机的NetBIOS连接表。
Net
Net命令有很多函数用于实用和核查计算机之间的NetBIOS连接。这里我只介绍最常用的两个:net view和net use。
net view UNC——运用此命令,你可以查看目标服务器上的共享点名字。任何局域网里的人都可以发出此命令,而且不需要提供用户ID或口令。UNC名字总是以\\开头,后面跟随目标计算机的名字。例如,net view \\lx就是查看主机名为lx的计算机的共享点(见图15)。
net use 本地盘符 目标计算机共享点——本命令用于建立或取消到达特定共享点的映像驱动器的连接(如果需要,你必须提供用户ID或口令)。例如,你输入net use f: \\lx\mp3就是将映像驱动器F:连接到\\lx\mp3共享点上,今后你直接访问F:就可以访问\\lx\mp3共享点,这和你右击“我的电脑”选择映射网络驱动器类似。
Ping
Ping是个使用频率极高的实用程序,用于确定本地主机是否能与另一台主机交换(发送与接收)数据报。根据返回的信息,你就可以推断TCP/IP参数是否设置得正确以及运行是否正常。需要注意的是:成功地与另一台主机进行一次或两次数据报交换并不表示TCP/IP配置就是正确的,你必须执行大量的本地主机与远程主机的数据报交换,才能确信TCP/IP的正确性。
简单的说,Ping就是一个测试程序,如果Ping运行正确,你大体上就可以排除网络访问层、网卡、MODEM的输入输出线路、电缆和路由器等存在的故障,从而减小了问题的范围。但由于可以自定义所发数据报的大小及无休止的高速发送,Ping也被某些别有用心的人作为DDOS(拒绝服务攻击)的工具,前段时间Yahoo就是被人利用数百台可以高速接入互联网的电脑连续发送大量Ping数据包而瘫痪的。
按照缺省设置,Windows上运行的Ping命令发送4个ICMP(网间控制报文协议)回送请求,每个32字节数据,如果一切正常,你应能得到4个回送应答。
Ping能够以毫秒为单位显示发送回送请求到返回回送应答之间的时间量。如果应答时间短,表示数据报不必通过太多的路由器或网络连接速度比较快。Ping还能显示TTL(Time To Live存在时间)值,你可以通过TTL值推算一下数据包已经通过了多少个路由器:源地点TTL起始值(就是比返回TTL略大的一个2的乘方数)-返回时TTL值。例如,返回TTL值为119,那么可以推算数据报离开源地址的TTL起始值为128,而源地点到目标地点要通过9个路由器网段(128-119);如果返回TTL值为246,TTL起始值就是256,源地点到目标地点要通过9个路由器网段。
通过Ping检测网络故障的典型次序
正常情况下,当你使用Ping命令来查找问题所在或检验网络运行情况时,你需要使用许多Ping命令,如果所有都运行正确,你就可以相信基本的连通性和配置参数没有问题;如果某些Ping命令出现运行故障,它也可以指明到何处去查找问题。下面就给出一个典型的检测次序及对应的可能故障:
ping 127.0.0.1——这个Ping命令被送到本地计算机的IP软件,该命令永不退出该计算机。如果没有做到这一点,就表示TCP/IP的安装或运行存在某些最基本的问题。
ping 本机IP——这个命令被送到你计算机所配置的IP地址,你的计算机始终都应该对该Ping命令作出应答,如果没有,则表示本地配置或安装存在问题。出现此问题时,局域网用户请断开网络电缆,然后重新发送该命令。如果网线断开后本命令正确,则表示另一台计算机可能配置了相同的IP地址。
ping 局域网内其他IP——这个命令应该离开你的计算机,经过网卡及网络电缆到达其他计算机,再返回。收到回送应答表明本地网络中的网卡和载体运行正确。但如果收到0个回送应答,那么表示子网掩码(进行子网分割时,将IP地址的网络部分与主机部分分开的代码)不正确或网卡配置错误或电缆系统有问题。
ping 网关IP——这个命令如果应答正确,表示局域网中的网关路由器正在运行并能够作出应答。
ping 远程IP——如果收到4个应答,表示成功的使用了缺省网关。对于拨号上网用户则表示能够成功的访问Internet(但不排除ISP的DNS会有问题)。
ping localhost——localhost是个作系统的网络保留名,它是127.0.0.1的别名,每太计算机都应该能够将该名字转换成该地址。如果没有做到这一带内,则表示主机文件(/Windows/host)中存在问题。
ping www.yahoo.com——对这个域名执行Ping命令,你的计算机必须先将域名转换成IP地址,通常是通过DNS服务器 如果这里出现故障,则表示DNS服务器的IP地址配置不正确或DNS服务器有故障(对于拨号上网用户,某些ISP已经不需要设置DNS服务器了)。顺便说一句:你也可以利用该命令实现域名对IP地址的转换功能。
如果上面所列出的所有Ping命令都能正常运行,那么你对你的计算机进行本地和远程通信的功能基本上就可以放心了。但是,这些命令的成功并不表示你所有的网络配置都没有问题,例如,某些子网掩码错误就可能无法用这些方法检测到。
Ping命令的常用参数选项
ping IP -t——连续对IP地址执行Ping命令,直到被用户以Ctrl+C中断。
ping IP -l 2000——指定Ping命令中的数据长度为2000字节,而不是缺省的32字节。
ping IP -n——执行特定次数的Ping命令。
Netstat
Netstat用于显示与IP、TCP、UDP和ICMP协议相关的统计数据,一般用于检验本机各端口的网络连接情况。
如果你的计算机有时候接受到的数据报会导致出错数据删除或故障,你不必感到奇怪,TCP/IP可以容许这些类型的错误,并能够自动重发数据报。但如果累计的出错情况数目占到所接收的IP数据报相当大的百分比,或者它的数目正迅速增加,那么你就应该使用Netstat查一查为什么会出现这些情况了。
Netstat的一些常用选项:
netstat -s——本选项能够按照各个协议分别显示其统计数据。如果你的应用程序(如Web浏览器)运行速度比较慢,或者不能显示Web页之类的数据,那么你就可以用本选项来查看一下所显示的信息。你需要仔细查看统计数据的各行,找到出错的关键字,进而确定问题所在。
netstat -e——本选项用于显示关于以太网的统计数据。它列出的项目包括传送的数据报的总字节数、错误数、删除数、数据报的数量和广播的数量。这些统计数据既有发送的数据报数量,也有接收的数据报数量。这个选项可以用来统计一些基本的网络流量)。
netstat -r——本选项可以显示关于路由表的信息,类似于后面所讲使用route print命令时看到的 信息。除了显示有效路由外,还显示当前有效的连接。
netstat -a——本选项显示一个所有的有效连接信息列表,包括已建立的连接(ESTABLISHED),也包括监听连接请求(LISTENING)的那些连接。
netstat -n——显示所有已建立的有效连接。
Netstat的妙用
经常上网的人一般都使用ICQ的,不知道你有没有被一些讨厌的人骚扰得不敢上线,想投诉却又不知从和下手?其实,你只要知道对方的IP,就可以向他所属的ISP投诉了。但怎样才能通过ICQ知道对方的IP呢?如果对方在设置ICQ时选择了不显示IP地址,那你是无法在信息栏中看到的。其实,你只需要通过Netstat就可以很方便的做到这一点:当他通过ICQ或其他的工具与你相连时(例如你给他发一条ICQ信息或他给你发一条信息),你立刻在DOS Prompt下输入netstat -n或netstat -a就可以看到对方上网时所用的IP或ISP域名了。甚至连所用Port都完全暴露了,如果你想给他一些教训,这些信息已经足够……
IPConfig
IPConfig实用程序和它的等价图形用户界面——Windows 95/98中的WinIPCfg可用于显示当前的TCP/IP配置的设置值。这些信息一般用来检验人工配置的TCP/IP设置是否正确。但是,如果你的计算机和所在的局域网使用了动态主机配置协议(Dynamic Host Configuration Protocol,DHCP——Windows NT下的一种把较少的IP地址分配给较多主机使用的协议,类似于拨号上网的动态IP分配),这个程序所显示的信息也许更加实用。这时,IPConfig可以让你了解你的计算机是否成功的租用到一个IP地址,如果租用到则可以了解它目前分配到的是什么地址。了解计算机当前的IP地址、子网掩码和缺省网关实际上是进行测试和故障分析的必要项目。
最常用的选项:
ipconfig——当使用IPConfig时不带任何参数选项,那么它为每个已经配置了的接口显示IP地址、子网掩码和缺省网关值
ipconfig /all——当使用all选项时,IPConfig能为DNS和WINS服务器显示它已配置且所要使用的附加信息(如IP地址等),并且显示内置于本地网卡中的物理地址(MAC)。如果IP地址是从DHCP服务器租用的,IPConfig将显示DHCP服务器的IP地址和租用地址预计失效的日期(有关DHCP服务器的相关内容请详见其他有关NT服务器的书籍或询问你的网管),其输出信息见图6的下半部分。
ipconfig /release和ipconfig /renew——这是两个附加选项,只能在向DHCP服务器租用其IP地址的计算机上起作用。如果你输入ipconfig /release,那么所有接口的租用IP地址便重新交付给DHCP服务器(归还IP地址)。如果你输入ipconfig /renew,那么本地计算机便设法与DHCP服务器取得联系,并租用一个IP地址。请注意,大多数情况下网卡将被重新赋予和以前所赋予的相同的IP地址。
如果你使用的是Windows 95/98,那么你应该更习惯使用winipcfg而不是ipconfig,因为它是一个图形用户界面,而且所显示的信息与ipconfig相同,并且也提供发布和更新动态IP地址的选项 如果你购买了Windows NT Resource Kit(NT资源包),那么Windows NT也包含了一个图形替代界面,该实用程序的名字是wntipcfg,和Windows 95/98的winipcfg类似。
ARP(地址转换协议)
ARP是一个重要的TCP/IP协议,并且用于确定对应IP地址的网卡物理地址。实用arp命令,你能够查看本地计算机或另一台计算机的ARP高速缓存中的当前内容。此外,使用arp命令,也可以用人工方式输入静态的网卡物理/IP地址对,你可能会使用这种方式为缺省网关和本地服务器等常用主机进行这项作,有助于减少网络上的信息量。
按照缺省设置,ARP高速缓存中的项目是动态的,每当发送一个指定地点的数据报且高速缓存中不存在当前项目时,ARP便会自动添加该项目。一旦高速缓存的项目被输入,它们就已经开始走向失效状态。例如,在Windows NT网络中,如果输入项目后不进一步使用,物理/IP地址对就会在2至10分钟内失效。因此,如果ARP高速缓存中项目很少或根本没有时,请不要奇怪,通过另一台计算机或路由器的ping命令即可添加。所以,需要通过arp命令查看高速缓存中的内容时,请最好先ping 此台计算机(不能是本机发送ping命令)。
常用命令选项:
arp -a或arp -g——用于查看高速缓存中的所有项目。-a和-g参数的结果是一样的,多年来-g一直是UNIX平台上用来显示ARP高速缓存中所有项目的选项,而Windows用的是arp -a(-a可被视为all,即全部的意思),但它也可以接受比较传统的-g选项。
arp -a IP——如果你有多个网卡,那么使用arp -a加上接口的IP地址,就可以只显示与该接口相关的ARP缓存项目。
arp -s IP 物理地址——你可以向ARP高速缓存中人工输入一个静态项目。该项目在计算机引导过程中将保持有效状态,或者在出现错误时,人工配置的物理地址将自动更新该项目。
arp -d IP——使用本命令能够人工删除一个静态项目。

看到这里,你也许已经有些累了……其实对于一般用户来说也已经足够——你可以用ipconfig和ping命令来查看自己的网络配置并判断是否正确、可以用netstat查看别人与你所建立的连接并找出ICQ使用者所隐藏的IP信息、可以用arp查看网卡的MAC地址——这些已足已让你丢掉菜鸟的头衔。如果你并不满足,那就“硬着头皮”(下面的内容可能有些枯燥)继续Follow me……
Tracert
当数据报从你的计算机经过多个网关传送到目的地时,Tracert命令可以用来跟踪数据报使用的路由(路径)。该实用程序跟踪的路径是源计算机到目的地的一条路径,不能保证或认为数据报总遵循这个路径。如果你的配置使用DNS,那么你常常会从所产生的应答中得到城市、地址和常见通信公司的名字。Tracert是一个运行得比较慢的命令(如果你指定的目标地址比较远),每个路由器你大约需要给它15秒钟
Tracert的使用很简单,只需要在tracert后面跟一个IP地址或URL,Tracert会进行相应的域名转换的。Tracert一般用来检测故障的位置,你可以用tracert IP在哪个环节上出了问题,虽然还是没有确定是什么问题,但它已经告诉了我们问题所在的地方,你也就可以很有把握的告诉别人——某某出了问题。
Route
大多数主机一般都是驻留在只连接一台路由器的网段上。由于只有一台路由器,因此不存在使用哪一台路由器将数据报发表到远程计算机上去的问题,该路由器的IP地址可作为该网段上所有计算机的缺省网关来输入。
但是,当网络上拥有两个或多个路由器时,你就不一定想只依赖缺省网关了。实际上你可能想让你的某些远程IP地址通过某个特定的路由器来传递,而其他的远程IP则通过另一个路由器来传递。
在这种情况下,你需要相应的路由信息,这些信息储存在路由表中,每个主机和每个路由器都配有自己独一无二的路由表。大多数路由器使用专门的路由协议来交换和动态更新路由器之间的路由表。但在有些情况下,必须人工将项目添加到路由器和主机上的路由表中。Route就是用来显示、人工添加和修改路由表项目的。
一般使用选项:
route print——本命令用于显示路由表中的当前项目,在单路由器网段上的输出结果如图12,由于用IP地址配置了网卡,因此所有的这些项目都是自动添加的。
route add——使用本命令,可以将信路由项目添加给路由表。例如,如果要设定一个到目的网络209.98.32.33的路由,其间要经过5个路由器网段,首先要经过本地网络上的一个路由器,器IP为202.96.123.5,子网掩码为255.255.255.224,那么你应该输入以下命令:
route add 209.98.32.33 mask 255.255.255.224 202.96.123.5 metric 5
route change——你可以使用本命令来修改数据的传输路由,不过,你不能使用本命令来改变数据的目的地。下面这个例子可以将数据的路由改到另一个路由器,它采用一条包含3个网段的更直的路径:
route add 209.98.32.33 mask 255.255.255.224 202.96.123.250 metric 3
route delete——使用本命令可以从路由表中删除路由。例如:route delete 209.98.32.33
NBTStat
NBTStat(TCP/IP上的NetBIOS统计数据)实用程序用于提供关于关于NetBIOS的统计数据。运用NetBIOS,你可以查看本地计算机或远程计算机上的NetBIOS名字表格。
常用选项:
nbtstat -n——显示寄存在本地的名字和服务程序
nbtstat -c——本命令用于显示NetBIOS名字高速缓存的内容。NetBIOS名字高速缓存用于寸放与本计算机最近进行通信的其他计算机的NetBIOS名字和IP地址对。
nbtstat -r——本命令用于清除和重新加载NetBIOS名字高速缓存。
nbtstat -a IP——通过IP显示另一台计算机的物理地址和名字列表,你所显示的内容就像对方计算机自己运行nbtstat -n一样
nbtstat -s IP——显示实用其IP地址的另一台计算机的NetBIOS连接表。
Net
Net命令有很多函数用于实用和核查计算机之间的NetBIOS连接。这里我只介绍最常用的两个:net view和net use。
net view UNC——运用此命令,你可以查看目标服务器上的共享点名字。任何局域网里的人都可以发出此命令,而且不需要提供用户ID或口令。UNC名字总是以\\开头,后面跟随目标计算机的名字。例如,net view \\lx就是查看主机名为lx的计算机的共享点(见图15)。
net use 本地盘符 目标计算机共享点——本命令用于建立或取消到达特定共享点的映像驱动器的连接(如果需要,你必须提供用户ID或口令)。例如,你输入net use f: \\lx\mp3就是将映像驱动器F:连接到\\lx\mp3共享点上,今后你直接访问F:就可以访问\\lx\mp3共享点,这和你右击“我的电脑”选择映射网络驱动器类似。
ping命令的详解:
-a
    将目标的机器标识转换为ip地址。
-t
    若使用者不人为中断会不断的ping下去。
-c
    count要求ping命令连续发送数据包,直到发出并接收到count个请求。
-d
    为使用的套接字打开调试状态。
-f
    是一种快速方式ping。使得ping输出数据包的速度和数据包从远程主机返回一样快,或者更快,达到每秒100次。在这种方式下,每个请求用一个句点表示。对于每一个响应打印一个空格键。
-i
    seconds 在两次数据包发送之间间隔一定的秒数。不能同-f一起使用。
-n
    只使用数字方式。在一般情况下ping会试图把IP地址转换成主机名。这个选项要求ping打印IP地址而不去查找用符号表示的名字。如果由于某种原因无法使用本地DNS服务器这个选项就很重要了。
-p
    pattern 拥护可以通过这个选项标识16 pad字节,把这些字节加入数据包中。当在网络中诊断与数据有关的错误时这个选项就非常有用。
-q
    使ping只在开始和结束时打印一些概要信息。
-R
    把ICMP RECORD-ROUTE选项加入到ECHO_REQUEST数据包中,要求在数据包中记录路由,这样当数据返回时ping就可以把路由信息打印出来。每个数据包只能记录9个路由节点。许多主机忽略或者放弃这个选项。
-r
    使ping命令旁路掉用于发送数据包的正常路由表。
-s
    packetsize使用户能够标识出要发送数据的字节数。缺省是56个字符,再加上8个字节的ICMP数据头,共64个ICMP数据字节。
-v
    使ping处于verbose方式。它要ping命令除了打印ECHO-RESPONSE数据包之外,还打印其它所有返回的ICMP数据包。

net命令详解:
 这篇文章综合了WINDOWS 98,WINDOWS WORKSTATION和WINDOWS SERVER 三个操作系统关于NET命令的解释,希望可以全面一些。
    说明:
    NET命令是一个命令行命令。用途:管理网络环境、服务、用户、登陆。。。。等本地信息。WIN 98、WIN WORKSTATION和WIN NT都内置了NET命令。但WIN 98的NET命令和WORKSTATION、NT的NET命令不同。WORKSTATION和SERVER中的NET命令基本相同。
    获得HELP:
    在NT下可以用图形的方式,开始-》帮助-》索引-》输入NET;
    在COMMAND下可以用字符方式,NET /?或NET或NET HELP得到一些方法,相应的方法的帮助NET COMMAND /HELP或NET HELP COMMAND或NET COMMAND /? 另对于错误NET HELPMSG MESSAGE#是4位数。
    注意事项:
    所有net命令接受选项/yes和/no(可缩写为/y和/n)。[简单的说就是预先给系统的提问一个答案]。
    有一些命令是马上产生作用并永久保存的,使用的时候要慎重。
    对于NET命令的功能都可以找到相应的图形工具的解决方案。
    命令的组成:命令 参数 选项 | 参数 选项 | 参数 选项 |......
   NET命令的不同参数的基本用法:
(1)NET VIEW
作 用:显示域列表、计算机列表或指定计算机的共享资源列表。
命令格式:net view [computername | /domain[:domainname]]
参数介绍:(1)键入不带参数的net view显示当前域的计算机列表。
(2)computername 指定要查看其共享资源的计算机。
(3)/domain[:domainname]指定要查看其可用计算机的域。
简单事例:(1)net view YFANG查看YFANG的共享资源列表。
(2)net view /domain:LOVE查看LOVE域中的机器列表。


(2)NET USER
作用:添加或更改用户帐号或显示用户帐号信息。该命令也可以写为 net users。
命令格式:net user [username [password | *] [options]] [/domain]
参数介绍:(1)键入不带参数的net user查看计算机上的用户帐号列表。
(2)username添加、删除、更改或查看用户帐号名。
(3)password为用户帐号分配或更改密码。
(4)*提示输入密码。
(5)/domain在计算机主域的主域控制器中执行操作。
简单事例:(1)net user yfang查看用户YFANG的信息

(3)NET USE
作用:连接计算机或断开计算机与共享资源的连接,或显示计算机的连接信息。
命令格式:net use [devicename | *] [computernamesharename[volume]] [password | *]] [/user:[domainname]username] [[/delete] | [/persistent:{yes | no}]]
参数介绍:
键入不带参数的net use列出网络连接。
devicename指定要连接到的资源名称或要断开的设备名称。
computernamesharename服务器及共享资源的名称。
password访问共享资源的密码。
*提示键入密码。
/user指定进行连接的另外一个用户。
domainname指定另一个域。
username指定登录的用户名。
/home将用户连接到其宿主目录。
/delete取消指定网络连接。
/persistent控制永久网络连接的使用。
简单事例:

(1)net use e: YFANGTEMP将YFANGTEMP目录建立为E盘
(2)net use e: YFANGTEMP /delete断开连接

(4)NET TIME
作 用:使计算机的时钟与另一台计算机或域的时间同步。
命令格式:net time [computername | /domain[:name]] [/set]
参数介绍:

(1)computername要检查或同步的服务器名。
(2)/domain[:name]指定要与其时间同步的域。
(3)/set使本计算机时钟与指定计算机或域的时钟同步。
下面的这4个参数是相关的,所以一起介绍

(5)Net Start
作 用:启动服务,或显示已启动服务的列表。
命令格式:net start service

(6)Net Pause
作 用:暂停正在运行的服务。
命令格式:net pause service

(7)Net Continue
作 用:重新激活挂起的服务。
命令格式:net continue service

(8)NET STOP
作 用:停止 Windows NT 网络服务。
命令格式:net stop service

参数介绍:我们来看看这些服务都是什么
(1)alerter(警报)
(2)client service for netware(Netware 客户端服务)
(3)clipbook server(剪贴簿服务器)
(4)computer browser(计算机浏览器)
(5)directory replicator(目录复制器)
(6)ftp publishing service (ftp )(ftp 发行服务)
(7)lpdsvc
(8)net logon(网络登录)
(9)network dde(网络 dde)
(10)network dde dsdm(网络 dde dsdm)
(11)network monitor agent(网络监控代理)
(12)nt lm security support provider(NT LM 安全性支持提供)
(13)ole(对象链接与嵌入)
(14)remote access connection manager(远程访问连接管理器)
(15)remote access isnsap service(远程访问 isnsap 服务)
(16)remote access server(远程访问服务器)
(17)remote procedure call (rpc) locator(远程过程调用定位器)
(18)remote procedure call (rpc) service(远程过程调用服务)
(19)schedule(调度)
(20)server(服务器)
(21)simple tcp/ip services(简单 TCP/IP 服务)
(22)snmp
(23)spooler(后台打印程序)
(24)tcp/ip netbios helper(TCP/IP NETBIOS 辅助工具)
(25)ups
(26)workstation(工作站)
(27)messenger(信使)
(28)dhcp client
(29)eventlog

以下这些SERVICE只能在NT SERVER上使用
(1)file server for macintosh
(2)gateway service for netware
(3)microsoft dhcp server
(4)print server for macintosh
(5)remoteboot
(6)windows internet name service

(9)Net Statistics
作 用:显示本地工作站或服务器服务的统计记录。
命令格式:net statistics [workstation | server]
参数介绍:(1)键入不带参数的net
statistics列出其统计信息可用的运行服务。
(2)workstation显示本地工作站服务的统计信息。
(3)server显示本地服务器服务的统计信息。
简单事例:(1)net statistics server | more显示服务器服务的统计信息

(10)Net Share
作 用:创建、删除或显示共享资源。
命令格式:net share sharename=drive:path [/users:number | /unlimited] [/remark:"text"]
参数介绍:(1)键入不带参数的net
share显示本地计算机上所有共享资源的信息。
(2)sharename是共享资源的网络名称。
(3)drive:path指定共享目录的绝对路径。
(4)/users:number设置可同时访问共享资源的最大用户数。
(5)/unlimited不限制同时访问共享资源的用户数。
(6)/remark:"text "添加关于资源的注释,注释文字用引号引住。
简单事例:(1)net share mylove=c:temp /remark:"my first
share"以mylove为共享名共享C:temp
(2)net share mylove /delete停止共享mylove目录
(11)Net Session
作 用:列出或断开本地计算机和与之连接的客户端的会话,也可以写为net sessions或net sess。
命令格式:net session [computername] [/delete]
参数介绍:(1)键入不带参数的net
session显示所有与本地计算机的会话的信息。
(2)computername标识要列出或断开会话的计算机。

(3)/delete结束与computername计算机会话并关闭本次会话期间计算机的所有进程。
简单事例:(1)net session YFANG要显示计算机名为YFANG的客户端会话信息列表。
(12)Net Send
作 用:向网络的其他用户、计算机或通信名发送消息。
命令格式:net send {name | * | /domain[:name] | /users} message
参数介绍:(1)name要接收发送消息的用户名、计算机名或通信名。
(2)*将消息发送到组中所有名称。
(3)/domain[:name]将消息发送到计算机域中的所有名称。
(4)/users将消息发送到与服务器连接的所有用户。
(5)message作为消息发送的文本。
简单事例:(1)net send /users server will shutdown in 5 minutes.给所有连接到服务器的用户发送消息
(13)Net Print
作 用:显示或控制打印作业及打印队列。
命令格式:net print [computername ] job# [/hold | /release | /delete]
参数介绍:(1)computername共享打印机队列的计算机名。
(2)sharename打印队列名称。
(3)job#在打印机队列中分配给打印作业的标识号。
(4)/hold使用 job# 时,在打印机队列中使打印作业等待。
(5)/release释放保留的打印作业。
(6)/delete从打印机队列中删除打印作业。
简单事例:(1)net print YFANGSEEME列出YFANG计算机上SEEME打印机队列的目录
(14)Net Name
作 用:添加或删除消息名(有时也称别名),或显示计算机接收消息的名称列表。
命令格式:net name [name [/add | /delete]]
参数介绍:(1)键入不带参数的net name列出当前使用的名称。
(2)name指定接收消息的名称。
(3)/add将名称添加到计算机中。
(4)/delete从计算机中删除名称。
(15)Net Localgroup
作 用:添加、显示或更改本地组。
命令格式:net localgroup groupname {/add [/comment:"text "] | /delete} [/domain]
参数介绍:(1)键入不带参数的net
localgroup显示服务器名称和计算机的本地组名称。
(2)groupname要添加、扩充或删除的本地组名称。
(3)/comment: "text "为新建或现有组添加注释。
(4)/domain在当前域的主域控制器中执行操作,否则仅在本地计算机上执行操作?
(5)name [ ...]列出要添加到本地组或从本地组中删除的一个或多个用户名或组名。
(6)/add将全局组名或用户名添加到本地组中。
(7)/delete从本地组中删除组名或用户名。
简单事例:(1)net localgroup love /add将名为love的本地组添加到本地用户帐号数据库
(2)net localgroup love显示love本地组中的用户

(16)Net Group
作 用:在 Windows NT Server 域中添加、显示或更改全局组。
命令格式:net group groupname {/add [/comment:"text "] | /delete} [/domain]
参数介绍:(1)键入不带参数的net group显示服务器名称及服务器的组名称。
(2)groupname要添加、扩展或删除的组。
(3)/comment:"text "为新建组或现有组添加注释。

(4)/domain在当前域的主域控制器中执行该操作,否则在本地计算机上执行操作? ?
(5)username[ ...]列表显示要添加到组或从组中删除的一个或多个用户。
(6)/add添加组或在组中添加用户名。
(7)/delete删除组或从组中删除用户名。
简单事例:(1)net group love yfang1 yfang2 /add将现有用户帐号yfang1和yfang2添加到本地计算机的love组

(17)Net File
作 用:显示某服务器上所有打开的共享文件名及锁定文件数。
命令格式:net file [id [/close]]
参数介绍:(1)键入不带参数的net file获得服务器上打开文件的列表。
(2)id文件标识号。
(3)/close关闭打开的文件并释放锁定记录。

(18)Net Config
作 用:显示当前运行的可配置服务,或显示并更改某项服务的设置。
命令格式:net config [service [options]]
参数介绍:(1)键入不带参数的net config显示可配置服务的列表。
(2)service通过net config命令进行配置的服务(server或workstation)
(3)options服务的特定选项。

(19)Net Computer
作 用:从域数据库中添加或删除计算机。
命令格式:net computer computername {/add | /del}
参数介绍:(1)computername指定要添加到域或从域中删除的计算机。
(2)/add将指定计算机添加到域。
(3)/del将指定计算机从域中删除。

简单事例:(1)net computer cc /add将计算机 cc 添加到登录域

(20)Net Accounts
作 用:更新用户帐号数据库、更改密码及所有帐号的登录要求。
命令格式:net accounts [/forcelogoff:{minutes | no}] [/minpwlen:length] [/maxpwage:{days | unlimited}] [/minpwage:days] [/uniquepw:number] [/domain]
参数介绍:(1)键入不带参数的net
accounts显示当前密码设置、登录时限及域信息。
(2)/forcelogoff:{minutes | no}设置当用户帐号或有效登录时间过期时
(3)/minpwlen:length设置用户帐号密码的最少字符数。
(4)/maxpwage:{days | unlimited}设置用户帐号密码有效的最大天数。
(5)/minpwage:days设置用户必须保持原密码的最小天数。
(6)/uniquepw:number要求用户更改密码时,必须在经过number次后才能重复使用 与之相同的密码。
(7)/domain在当前域的主域控制器上执行该操作。
(8)/sync当用于主域控制器时,该命令使域中所有备份域控制器同步
简单事例:(1)net accounts /minpwlen:7将用户帐号密码的最少字符数设置为7

----------------------上面介绍的是NET命令在WINNT下的基本用法
----------------------下面我们看看NET命令在WIN98下的基本用法

在WIN98中NET命令也有一些参数

其中有一些参数的名字和功能及简单的使用方法和WINNT下的相应的参数的用法相? ?
其中有(1)NET TIME命令
(1)NET PRINT命令
(1)NET USE命令
(1)NET VIEW命令

在WIN98中NET命令有一些参数
其中有一些参数的名字和WINNT下的相应的参数的名字相同但其用法却有些不同
其中有

(1)NET START
作 用:启动相应的服务。(不能在DOS-WIN中用)
命令格式:NET START [BASIC | NWREDIR | WORKSTATION | NETBIND | NETBEUI | NWLINK] [/LIST] [/YES] [/VERBOSE]


(2)NET STOP
作 用:停止相应的服务.(不能在DOS-WIN中用)
命令格式:NET STOP [BASIC | NWREDIR | WORKSTATION | NETBEUI | NWLINK] [/YES]

在WIN98中NET命令还有一些参数是在98下才有的
其中有

(1)NET DIAG
作 用:运行MS的DIAGNOSTICS程序显示网络的DIAGNOSTIC信息
命令格式:NET DIAGNOSTICS [/NAMES | /STATUS]


(2)NET INIT
作 用:不通过绑定来加载协议或网卡驱动(不能在DOS-WIN中用)
命令格式:NET INITIALIZE [/DYNAMIC]

(3)NET LOGOFF
作 用:断开连接的共享资源(不能在DOS-WIN中用)

(4)NET LOGON
作 用:在WORKGROUP中登陆(不能在DOS-WIN中用)
命令格式:NET LOGON [user [password | ?]] [/DOMAIN:name] [/YES] [/SAVEPW:NO]

(5)NET PASSWORD
作 用:更改你的网络登陆口令(不能在DOS-WIN中用)
命令格式:NET PASSWORD computer | /DOMAIN:name [user [oldpassword [newpassword]]]

posted @ 2005-09-13 10:47 rodney 阅读(312) | 评论 (0)编辑 收藏
仅列出标题
共5页: 上一页 1 2 3 4 5 下一页