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();
中文機的日期如果是1月2005 SELECT TO_CHAR(SYSDATE,'MONYYYY') FROM DUAL
英文機的日期如果是1月2005會顯示成JAN2005.
從上面可以看出oracle在格式轉換中用MON的格式是取某個月的單詞的前三個字符。但是在中文機上有從SQL中取出來是1?空格2005一共是占七個字符。而英文機上也是占七個字符。只是在顯示時的效果不一樣。中:1?空格2005,英文機上:JAN2005.
如果有一個程序是這樣:(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的記錄。
我的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協議是怎么處理空格的。希望有哪位高手能給一個指點。
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>
如果沒有給出允許主機的指定,那么與拒絕主機匹配的主機就會被拒絕,除此之外的都是允許的。與之類似,如果沒有給出拒絕主機的指定,那么與允許主機匹配的主機就會被允許,除此之外的都是拒絕的。
今天上網不管輸入任何一個網址都沒有辦法顯示內容,提示找不該網頁。
用ping www.google.com提示Unknow host www.google.com
用nslookup www.google.com 提示有:服務器名,IP地址都有顯示出來。
用tracert IP地址也可以。
后來我在服務中把DNS Client的服務重啟一下就OK了。
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()訪問
看一下下面的結構也許會更明白一些:

可以看出通過document.getElementById('sample1').firstChild.nodeValue就可以讀取或者設置text nodes的值了。
另一個更加復雜一點的例子:
<p id="sample2">This is the <b>initial</b> text.</p>
它的文檔結構

在這里通過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我一點也不熟。
有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
在JPS中用request.Session().setAttribute("別名",對象),如果對對象是一個Value類型,在JSP中取這個對象時一定要用Value類型來接收。不然的的話會出現java.io.ClasscateExection的異常。
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]]]