2009年10月14日 #
1、SQL Server名稱或IP地址拼寫有誤;
2、服務器端網絡配置有誤;
3、客戶端網絡配置有誤。
要解決這個問題,我們一般要遵循以下的步驟來一步步找出導致錯誤的原因。
首先,檢查網絡物理連接:
ping <服務器IP地址>
或者
ping <服務器名稱>
如果 ping <服務器IP地址> 失敗,說明物理連接有問題,這時候要檢查硬件設備,如網卡、HUB、路由器等。還有一種可能是由于客戶端和服務器之間安裝有防火墻軟件造成的,比如 ISA Server。防火墻軟件可能會屏蔽對 ping、telnet 等的響應,因此在檢查連接問題的時候,我們要先把防火墻軟件暫時關閉,或者打開所有被封閉的端口。
如果ping <服務器IP地址> 成功而 ping <服務器名稱> 失敗,則說明名字解析有問題,這時候要檢查 DNS 服務是否正常。有時候客戶端和服務器不在同一個局域網里面,這時候很可能無法直接使用服務器名稱來標識該服務器,這時候我們可以使用HOSTS文件來進行名字解析,具體的方法是:
1、使用記事本打開HOSTS文件(一般情況下位于C:\WINNT\system32\drivers\etc).
2、添加一條IP地址與服務器名稱的對應記錄,如:
172.168.10.24 myserver
也可以在 SQL Server 的客戶端網絡實用工具里面進行配置,后面會有詳細說明。
其次,使用 telnet 命令檢查SQL Server服務器工作狀態:
telnet <服務器IP地址> 1433
如果命令執行成功,可以看到屏幕一閃之后光標在左上角不停閃動,這說明 SQL Server 服務器工作正常,并且正在監聽1433端口的 TCP/IP 連接;如果命令返回"無法打開連接"的錯誤信息,則說明服務器端沒有啟動 SQL Server 服務,也可能服務器端沒啟用 TCP/IP 協議,或者服務器端沒有在 SQL Server 默認的端口1433上監聽。
接著,我們要到服務器上檢查服務器端的網絡配置,檢查是否啟用了命名管道,是否啟用了 TCP/IP 協議等等。我們可以利用 SQL Server 自帶的服務器網絡使用工具來進行檢查。
點擊:程序 -> Microsoft SQL Server -> 服務器網絡使用工具,打開該工具后看到的畫面如下圖所示:
從這里我們可以看到服務器啟用了哪些協議。一般而言,我們啟用命名管道以及 TCP/IP 協議。
點中 TCP/IP 協議,選擇"屬性",我們可以來檢查 SQK Server 服務默認端口的設置,如下圖所示:
一般而言,我們使用 SQL Server 默認的1433端口。如果選中"隱藏服務器",則意味著客戶端無法通過枚舉服務器來看到這臺服務器,起到了保護的作用,但不影響連接。
檢查完了服務器端的網絡配置,接下來我們要到客戶端檢查客戶端的網絡配置。我們同樣可以利用 SQL Server 自帶的客戶端網絡使用工具來進行檢查,所不同的是這次是在客戶端來運行這個工具。
點擊:程序 -> Microsoft SQL Server -> 客戶端網絡使用工具, 打開該工具后看到的畫面如下圖所示:
從這里我們可以看到客戶端啟用了哪些協議。一般而言,我們同樣需要啟用命名管道以及 TCP/IP 協議。
點擊 TCP/IP 協議,選擇"屬性",可以檢查客戶端默認連接端口的設置,如下圖所示。
該端口必須與服務器一致。
單擊"別名"選項卡,還可以為服務器配置別名。服務器的別名是用來連接的名稱,連接參數中的服務器是真正的服務器名稱,兩者可以相同或不同。如下圖中,我們可以使用myserver來代替真正的服務器名稱sql2kcn-02,并且使用網絡庫 Named Pipes。別名的設置與使用HOSTS文件有相似之處。
通過以上幾個方面的檢查,錯誤 1 發生的原因基本上可以被排除。下面我們再詳細描述如何來解決錯誤 2。
當用戶嘗試在查詢分析器里面使用sa來連接SQL Server,或者在企業管理器里面使用sa來新建一個SQL Server注冊時,經常會遇到如圖 2 所示的錯誤信息。該錯誤產生的原因是由于SQL Server使用了"僅 Windows"的身份驗證方式,因此用戶無法使用SQL Server的登錄帳戶(如 sa )進行連接。解決方法如下所示:
1、 在服務器端使用企業管理器,并且選擇"使用 Windows 身份驗證"連接上 SQL Server;
2、 展開"SQL Server組",鼠標右鍵點擊SQL Server服務器的名稱,選擇"屬性",再選擇"安全性"選項卡;
3、 在"身份驗證"下,選擇"SQL Server和 Windows "。
4、 重新啟動SQL Server服務。
在以上解決方法中,如果在第 1 步中使用"使用 Windows 身份驗證"連接 SQL Server 失敗,那么我們將遇到一個兩難的境地:首先,服務器只允許了 Windows 的身份驗證;其次,即使使用了 Windows 身份驗證仍然無法連接上服務器。這種情形被形象地稱之為"自己把自己鎖在了門外",因為無論用何種方式,用戶均無法使用進行連接。實際上,我們可以通過修改一個注冊表鍵值來將身份驗證方式改為 SQL Server 和 Windows 混合驗證,步驟如下所示:
1、點擊"開始"-"運行",輸入regedit,回車進入注冊表編輯器;
2、依次展開注冊表項,瀏覽到以下注冊表鍵:
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\MSSQLServer]
3、在屏幕右方找到名稱"LoginMode",雙擊編輯雙字節值;
4、將原值從1改為2,點擊"確定";
5、關閉注冊表編輯器;
6、重新啟動SQL Server服務。
此時,用戶可以成功地使用sa在企業管理器中新建SQL Server注冊,但是仍然無法使用Windows身份驗證模式來連接SQL Server。這是因為在 SQL Server 中有兩個缺省的登錄帳戶:BUILTIN\Administrators 以及 <機器名>\Administrator 被刪除。要恢復這兩個帳戶,可以使用以下的方法:
1、打開企業管理器,展開服務器組,然后展開服務器;
2、展開"安全性",右擊"登錄",然后單擊"新建登錄";
3、在"名稱"框中,輸入 BUILTIN\Administrators;
4、在"服務器角色"選項卡中,選擇"System Administrators" ;
5、點擊"確定"退出;
6、使用同樣方法添加 <機器名>\Administrator 登錄。
以下注冊表鍵
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\MSSQLServer\LoginMode
的值決定了SQL Server將采取何種身份驗證模式。該值為1,表示使用Windows 身份驗證模式;該值為2,表示使用混合模式(Windows 身份驗證和 SQL Server 身份驗證)。
看完如何解決前兩個錯誤的方法之后,讓我們來看一下如圖 3 所示的第三個錯誤。
如果遇到第三個錯誤,一般而言表示客戶端已經找到了這臺服務器,并且可以進行連接,不過是由于連接的時間大于允許的時間而導致出錯。這種情況一般會發生在當用戶在Internet上運行企業管理器來注冊另外一臺同樣在Internet上的服務器,并且是慢速連接時,有可能會導致以上的超時錯誤。有些情況下,由于局域網的網絡問題,也會導致這樣的錯誤。
要解決這樣的錯誤,可以修改客戶端的連接超時設置。默認情況下,通過企業管理器注冊另外一臺SQL Server的超時設置是 4 秒,而查詢分析器是 15 秒(這也是為什么在企業管理器里發生錯誤的可能性比較大的原因)。具體步驟為:
1、在企業管理器中,選擇菜單上的"工具",再選擇"選項";
2、在彈出的"SQL Server企業管理器屬性"窗口中,點擊"高級"選項卡;
3、在"連接設置"下的"登錄超時(秒)"右邊的框中輸入一個比較大的數字,如 20。
查詢分析器中也可以在同樣位置進行設置。
在windows控制面版-->管理工具-->服務-->MSSQLSERVER-->屬性-->改為你的新的操作系統密碼!
或
在windows控制面版-->管理工具-->服務-->MSSQLSERVER-->屬性-->改為本地登陸!
URL為要開啟的網頁名字。
dialogArgments為設定好傳遞給新視窗網頁的參數,可以為任意數據類型。
feature 與open()的類似,都是格式方面的設定。調用格式為featureName1:featureValue1:(分號)featureName2:featureValue2:
關于feature具體的參數我就不詳細寫了,看名字就應該知道什么用處了吧。
certer , dialogHeight, dialogLeft,dialogTop,dialogWidth,help(是否顯示help按鈕,下同),status,resizeable
值=1為yes,0為no.
我認為最重要的是dialogArgments,可以傳遞值到新的窗口。
第二重要就是 它的返回值 window.returnValue.可以在showModalDialog開啟的窗口關閉后前,回傳一個任意類型的值。
dialogArgments 可以傳入一個變量,但是 我認為最好是傳入一個window 這樣的話,不光你可以調用你前面定義的變量names 和a 等等,還可以取到前一個頁面上任何元素的值.如下面的代碼所示:








在WebFromB.aspx頁面 我們可以取到 names 和a 的值還可以取到WebFromA的值.,還可以給它賦值.
整體的代碼如下:
WebFromA.aspx




































WebFormB.aspx 如下:






























在WebFormB.aspx中 window.returnValue是用于 返回給WebFromA.aspx的值.
在WebFromA.aspx中,可以用一個變量來接收這個值 temp= window.showModalDialog("WebFormB.aspx",window);
create sequence seq_a minvalue 1000 maxvalue 99999999 start with 1000 increment by 1 nocache;
查詢序列
select seq_a.nextval from dual;
為每張表生成對應的序列
--創建存儲過程
create or replace procedure p_createseq(tablename in varchar2)
is
strsql varchar2(500);
begin
strsql:='create sequence seq_'||tablename||' minvalue 1000 maxvalue 99999999 start with 1000 increment by 1 nocache';
execute immediate strsql;
end p_createseq;
/
--創建序列
exec p_createseq('t_power');
exec p_createseq('t_roler');
exec p_createseq('t_roler_power');
exec p_createseq('t_department');
exec p_createseq('t_quarters');
exec p_createseq('t_quarters_roler');
exec p_createseq('t_emp');
exec p_createseq('t_require_plan');
exec p_createseq('t_require_minutia');
exec p_createseq('t_require_audit');
exec p_createseq('t_engage');
exec p_createseq('t_home');
exec p_createseq('t_education');
exec p_createseq('t_works');
exec p_createseq('t_skill');
exec p_createseq('t_account');
exec p_createseq('t_licence');
exec p_createseq('t_title');
exec p_createseq('t_remove');
exec p_createseq('t_train');
exec p_createseq('t_pact');
exec p_createseq('t_assess');
exec p_createseq('t_attendance');
exec p_createseq('t_reward_punish');
exec p_createseq('t_dimission');
exec p_createseq('t_emp_roler');
exec p_createseq('t_code');
獲取顯示的漢字
document.getElementById("bigclass").options[window.document.getElementById("bigclass").selectedIndex].text
獲取數據庫中的id
window.document.getElementById("bigclass").value
獲取select組分配的索引id
window.document.getElementById("bigclass").selectedIndex
例子:
<select name="bigclass" id="bigclass" onChange="javascript:updatePage2();">
<option value="" selected="selected">ajax實驗</option>
<option value="4">我適宜市哈</option>
</select>
使用
document.getElementById("bigclass").options[window.document.getElementById("bigclass").selectedIndex].text
的結果是:我適宜市哈
使用
window.document.getElementById("bigclass").value
的結果是:4
使用
window.document.getElementById("bigclass").selectedIndex
的結果是:1
三元預算表達式: Condition ? doSomething : doOtherThing ;
1. 同所有語言的三元運算一樣,Javascript的三元運算同樣支持Condition為Boolean類型的情況。當Condition為True的時候,執行doSomething,為False的時候執行doOtherThing。
2. 支持Condition為字符串。當Condition=“”的時候,等同于False,執行doOtherThing;當Condition!=“”的時候,等同于True,執行doSomething。
3. 支持Condition為對象。當Condition=undefined或者null的時候,等同于False,執行doOtherThing;當Condition!=undefined和null的時候,等同于True,執行doSomething。
目前我的總結就是發現了這3中使用方式,是否還有其他的使用方式還不知道。呵呵,不過就算是這樣也讓我減少了不少看Javascript代碼時的疑惑!
自從用了IE8 整個世界都變了形.
呵呵,問題沒那么嚴重,如果你的網站還來不及修改以適合IE8訪問的時候,咱們可以通過非常簡單的方法,加幾行代碼就可以讓訪問的IE8自動調用IE7的渲染模式,這樣可以保證最大的兼容性,方法如下:
只需要在頁面中加入如下HTTP meta-tag:
<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" />
只要IE8一讀到這個標簽,它就會自動啟動IE7兼容模式,保證頁面完整展示.
還有一種方法是針對整個網站的,在IIS中加入如下描述符就可以有相同的效果,當然這么做范圍更廣.
<?xml version="1.0" encoding="utf-8"?> <configuration> <system.webServer> <httpProtocol> <customHeaders> <add name="X-UA-Compatible" value="IE=EmulateIE7"> </customHeaders> </httpProtocol> </system.webServer> </configuration>
或者你還可以使用IIS admin tool來定義,更為簡單.
var tempArr = tempStr.split(",");
var a = tempArr[0];
var b = tempArr[1];
var c = tempArr[2];
var d = tempArr[3];
var o = tempArr[4];
摘要:
通過下拉框里各個語言(中文,日本語,English)的選擇,切換jsp頁面文字。
tyrone1979 發表于 2005-08-26 13:27:19
作者:tyrone1979 來源:blog.csdn.net/tyrone1979
1 準備資源文件。
資源文件命名格式:filename_language_country.properties.
中文文件名為index_zh_CN.properties。
日文文件名為 index_ja_JP.properties。
英文文件名為 index_en.properties。
英文文件內容:
index.jsp.welcome=Colimas Library Management System
index.jsp.name=Name
index.jsp.userid=User ID
index.jsp.pass=Password
中文文件內容:
index.jsp.welcome=\u4f60\u597d
index.jsp.name=\u59d3\u540d
index.jsp.userid=\u7528\u6237\u540d
index.jsp.pass=\u5bc6\u7801
日文文件內容:
index.jsp.welcome=\u3044\u3089\u3063\u3057\u3083\u3044\u307e\u305b
index.jsp.name=\u59d3\u540d
index.jsp.userid=\u30e6\u30fc\u30b6\u30fcID
index.jsp.pass=\u30d1\u30b9\u30ef\u30fc\u30c9
\uxxxx是中文被轉換后的ASCII碼??梢允褂胣ative2ascii.exe工具轉換。
2 struts-config.xml里配置資源文件
<message-resources parameter="resources.config.index" />
resources.config.index是classes目錄下的resources/config子目錄的index__xx_xx.properties文件.
struts根據你的瀏覽器的語言設置調用不同語言的資源文件。
例如:如果你的IE默認語言為中文則。Struts將使用index_zh_CN.properties。而在struts-config.xml里只需寫出“index”即可
ActionMapping
<form-beans>
<!--1 Multi-Lanuage support formbean-->
<form-bean
name="SelectLanguageForm"
type="com.nova.colimas.web.form.SelectLanguageForm"/>
</form-beans>
<!-- =========================================== Global Forward Definitions -->
<global-forwards>
<!-- Default forward to "Welcome" action -->
<!-- Demonstrates using index.jsp to forward -->
<forward
name="index"
path="/pages/index.jsp"/>
</global-forwards>
<!-- =========================================== Action Mapping Definitions -->
<action-mappings>
<!-- 1 select language action -->
<action path="/SelectLanguageAction"
type="com.nova.colimas.web.action.SelectLanguageAction"
name="SelectLanguageForm"
scope="request">
</action>
…
</action-mappings>
3 jsp
<%@ page contentType="text/html; charset=UTF-8"%>
<%@ taglib uri="/tags/struts-bean" divfix="bean"%>
<%@ taglib uri="/tags/struts-html" divfix="html"%>
<%@ taglib uri="/tags/struts-logic" divfix="logic"%>
<html:html>
<Title><bean:message key="index.jsp.welcome"/></Title>
<body>
<logic:divsent name="user">
<H3>Welcome <bean:write name="LoginForm" property="userID" />!</H3>
</logic:divsent>
<logic:notPresent scope="session" name="user">
<H3>Welcome Colimas!</H3>
</logic:notPresent>
<html:errors />
<html:form action="/SelectLanguageAction.do">
<html:select property="language">
<html:option value="0">中文</html:option>
<html:option value="1">日本語</html:option>
<html:option value="2">English</html:option>
</html:select>
<html:submit>Select</html:submit>
</html:form>
<html:form action="/LoginAction.do">
<p><bean:message key="index.jsp.userid"/><input type="text" name="userID" value="tyrone1979" /><br>
<bean:message key="index.jsp.pass"/><input type="password" name="password" value="197913"/><br>
<html:submit><bean:message key="index.jsp.login"/></html:submit>
</p>
</html:form>
</body>
</html:html>
<bean:message key="index.jsp.welcome"/>引用資源文件的index.jsp.welcome屬性
SelectLanguageAction.do調用Action實現語言轉換。
4 Action
package com.nova.colimas.web.action;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionMessages;
//import org.apache.struts.upload.FormFile;
import com.nova.colimas.web.form.SelectLanguageForm;
import org.apache.struts.Globals;
import java.util.Locale;
public class SelectLanguageAction extends Action {
public ActionForward execute(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws Exception{
SelectLanguageForm myform=(SelectLanguageForm)form;
String lan=myform.getLanguage();
switch((new Integer(lan)).intValue()){
case 0 :
request.getSession().setAttribute(Globals.LOCALE_KEY,Locale.CHINA);
break;
case 1:
request.getSession().setAttribute(Globals.LOCALE_KEY, Locale.JAPAN);
break;
case 2:
request.getSession().setAttribute(Globals.LOCALE_KEY, Locale.ENGLISH);
break;
default:
request.getSession().setAttribute(Globals.LOCALE_KEY, Locale.ENGLISH);
break;
}
return mapping.findForward("index");
}
}
Form
/*
* Created on 2005/06/18
*
* TODO To change the template for this generated file go to
* Window - Preferences - Java - Code Style - Code Templates
*/
package com.nova.colimas.web.form;
import org.apache.struts.action.ActionForm;
/**
* @author tyrone
**/
public class SelectLanguageForm extends ActionForm {
private String language;
public void Reset() {
this.language="";
return;
}
/**
* @return Returns the Language.
*/
public String getLanguage() {
return language;
}
/**
* @param language The Language to set.
*/
public void setLanguage(String property1) {
this.language = property1;
}
}
結果
1 IE默認語言為中文:
1、 下載
到Apache的官方網站,我們可以很容易找到Tomcat的下載地址,如:
http://tomcat.apache.org/download-60.cgi
在這里我們可以下載到Tomcat的6.0.16的zip、tar.gz和Windows Service Installer三種安裝包,
其中:
Zip 是Windows下的免安裝版本,只需要解壓后做一定的手動配置就可以正常的使用;
tar.gz 是Linux下的安裝包;
Windows Service Installer 很明顯就是Windows下的Install程序,雙擊后就可以自動安裝了。
在這里主要講一下如何使用Zip包來進行解壓配置,那么我們就需要下載下來這個文件:apache-tomcat-6.0.20.zip
2、解壓與配置
在安裝Tomcat之前,我們首先要安裝的是JDK,Tomcat是在Java運行環境的支持下運行的,所以必須首先安裝并配置好JDK。JDK的安裝程序可以到sun公司的官方網站,在這里我們就詳細描述JDK的安裝了。
JDK安裝好后需要配置以下環境變量:
JAVA_HOME =JDK安裝目錄
Path =%JAVA_HOME%\bin;//原有內容,且最好把此路徑放到最前。
ClassPath=.,%JAVA_HOME%\lib\rt.jar //這個可以沒有
將apache-tomcat-6.0.20.zip解壓 到C:\tomcat6文件夾中,這里就是我們的Tomcat了。
解壓后Tomcat以后我們同樣需要設置幾個環境變量:
CATALINA_HOME =Tomcat解壓目錄,我們這里就是CATALINA_HOME=C:\tomcat6
ClassPath =%CATALINA_HOME%\lib;原有內容
環境變量配置的時候如果沒有這個關鍵字,就新加一項,如果已經有了,如Path ,就是在原有內容值的基礎上添加新的內容,新的內容與原有的值以分號相隔。
配置好上面的這些內容以后就可以重啟系統了。
3、運行
重啟系統以后,我們可以進入Tomcat解壓目錄下的bin目錄,找到startup.bat 文件,這個文件就是Tomcat的啟動文件,雙擊這個文件,我們可以看到打開了一個命令行窗口,一些Tomcat啟動的加載信息就顯示出來,最后一行應該是:
信息:Server startup in xxx ms
這就是說你的服務器已經啟動成功了,這是你可以打開瀏覽器,在地址欄中輸入:
http://localhost:8080
看看是不是可以看到Tomcat的頁面了。
為了啟動方便,我們可以將這個startup.bat文件創建一個快捷方式到桌面上,以后就可以直接使用這個快捷方式了。
需要特別注意的是,這種方式啟動的Tomcat會有一個命令行窗口停留在你的面前,這就是啟動著的服務器,千萬不要將它關閉,如果把這個窗口關閉了,你的Tomcat服務器也就關閉了,切記,切記 。
在這里,我們配置的時候并沒有修改默認的Tomcat服務器端口 ,所以就是8080。如果想修改這個端口,可以到tomcat安裝目錄的conf目錄下,找到server.xml這個配置文件,一定有這么一段:
< protocol="HTTP/1.1" port="8080 "
connectionTimeout="20000"
redirectPort="8443" />
這里面的port=”8080”就是服務器啟動時的端口,你可以將這里修改成你想設置的端口,但注意不要與其它的軟件所使用的端口沖突,一旦發生了端口沖突,Tomcat就無法啟動了。
我們還可以在這個配置文件中配置自己的虛擬目錄 ,找到下面這組代碼:
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false">
<Context path="/test" docBase="D:\test" reloadable="true" />
</Host>
虛擬目錄的配置信息就是寫在server.xml配置文件的這對標簽之間,配置代碼中的path是用來在瀏覽器中訪問時使用的虛擬目錄的路徑名 ,如上面我們配置的信息path值是”/test”,這個值中的反斜杠”/”是必不可少的 ,配置了這個值以后,我們在瀏覽器中訪問這個虛擬目錄的地址路徑如下:
http://localhost:8080/test
另一個參數docBase是虛擬目錄實際的存放地址 ,上面的配置示例就是把D:\test目錄配置成了名稱為test的虛擬目錄。
4、安裝服務
如此配置的Tomcat每次都需要手動啟動 ,如果你想讓這個Tomcat服務器在系統已啟動的時候就自動啟動,我們可以將其注冊成系統的服務,注冊方式如下:
在運行中執行cmd 打開命令行窗口 ,轉入Tomcat解壓目錄的Bin目錄 下,在這里我們轉到的就是c:\tomcat6\bin,然后執行以下命令:service.bat install ,這樣就會將tomcat6.exe 文件注冊成系統的服務。
我們在運行services.msc ,打開系統的服務查看,是不是多出來了一個”Apache Tomcat ”服務?
但這個服務的啟動類型是手動 的,我們可以將其修改為自動 ,那樣Tomcat服務器就會隨著系統的啟動而自動啟動了。
如果想禁止 這個服務了,可以在命令行窗口中c:\tomcat6\bin下執行:
c:\tomcat6\bin\service.bat remove
就可以移除此服務。
5、總結
按照以上步驟我們就可以輕松的實現Tomcat服務器的手動配置了,相比其自動安裝的安裝包,這種手動方式也沒有顯得有多復雜,而且通過這種手動方式也能更加了解Tomcat的配置情況,更可以隨自己的需要靈活的配置它,所以在開發使用中,手動的配置方式還是應該掌握的。
· 配置Eclipse
- 下載JDK:
從sun的官網http://java.sun.com/javase/downloads/?intcmp=1281下載JDK,當前最新版本是jdk-6u10-windows-i586-p.exe,這個是正式版的。
- 下載WTK:
同時在sun的網站http://java.sun.com/products/sjwtoolkit/zh_download-2_5_2.html下載WTK,當前最新版本是sun_java_wireless_toolkit-2_5_2-ml-windows.exe。
- 安裝JDK和WTK:
先安裝JDK再安裝WTK,我的安裝路徑是:D:"Java"jdk1.6.0_10和D:"Java"WTK2.5.2
- 下載eclipse:
從eclipse的官網 http://www.eclipse.org/downloads/下載eclipse,我用的是:eclipse-java-ganymede-SR1-win32.zip,解壓到:XX:"eclipse
- 下載eclipseme:
從eclipseme的官網 http://sourceforge.net/project/showfiles.php?group_id=86829下載eclipseme.當前最新版本是eclipseeclipseme.feature_1.7.9_site.zip
- 配置eclipse:
到 “首選項”找到,Java—>調試,將“發生未不捕獲到的異常時暫掛執行”與“在發生編譯錯誤時暫掛執行”這兩個選項調為“未選中”狀態,再把下面的調試器超時(毫秒)的右側數值設置為15000
- 配置eclipseME:
運行eclipse,配置自己學習的工作路徑,選擇 幫助—>軟件更新—>查找并安裝—>搜索要安裝的新功能部件,選擇 新建已歸檔的站點,選擇eclipseme.feature_1.7.9_site.zip文件,安裝,重啟eclipse
- 配置WTK:
選擇 首選項—>J2ME—>Device Management—>Import 在Specify search directory下,選擇你所裝的WTK模擬器的目錄;選擇 Refresh ,后按完成,使用DefaultColorPhone為默認模式,這時已為eclipse配置上了模擬器
- 下載ProGuard:
需要使用插件ProGuard,從ProGuard的官網下載ProGuard,當前的最新版本是:proguard4.3beta2.tar.gz,解壓到:XX:"proguard4.3
- 配置ProGuard:
到 Eclipse的“首選項”找到,J2ME—>Packaging—>obfuscation,在Proguard Root Directory右邊的框中,選擇剛才解壓的proguard4.3的文件夾(XX:"proguard4.3),點擊應用,這時為eclipse配置上了混淆器
- 配置完畢
· 使用eclipse進行J2ME開發
- 新建 J2ME下的J2ME Midlet Suite,填寫項目名,下一步,完成
- 新建 J2ME下的J2ME Midlet,填寫名稱,完成
- 點擊運行,新建一個Wireless Toolkit Emulator的運行配置,運行,出現手機樣式,運行成功
import java.net.URL;
import java.util.Vector;
import org.apache.soap.Constants;
import org.apache.soap.Fault;
import org.apache.soap.SOAPException;
import org.apache.soap.encoding.SOAPMappingRegistry;
import org.apache.soap.encoding.soapenc.BeanSerializer;
import org.apache.soap.rpc.Call;
import org.apache.soap.rpc.Parameter;
import org.apache.soap.rpc.Response;
import org.apache.soap.transport.http.SOAPHTTPConnection;
import org.apache.soap.util.xml.QName;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import oss.util.debug.LogHome;
public class GisWebService{
public static String getStringGisWebService(String ajfBm, String zjfBm, String aodfBm,String zodfBm) throws Exception {
String strUrl = "
String strTargetURL = "http://java.sun.com/xml/ns/jax-rpc/ri/config";//
String soapAction = "
URL url = new URL(strUrl);
SOAPMappingRegistry smr = new SOAPMappingRegistry();
BeanSerializer beanSer = new BeanSerializer();
smr.mapTypes(Constants.NS_URI_SOAP_ENC,new QName("","Result"),null,null,beanSer);
Call call = new Call();
SOAPHTTPConnection st = new SOAPHTTPConnection();
call.setSOAPTransport(st);
call.setSOAPMappingRegistry(smr);
call.setTargetObjectURI(strTargetURL);
call.setEncodingStyleURI(Constants.NS_URI_SOAP_ENC);
call.setParams(createCondition(ajfBm,zjfBm,aodfBm,zodfBm));
call.setMethodName("WSEncrypt"); //調用WEBSERVICE方法名
Response resp;
try
{
call.setTimeout(3000);
resp = call.invoke(url,soapAction);
}
catch(SOAPException e)
{
throw new Exception("調用接口出錯!URL="+strUrl+"\n"+e.getMessage());
}
LogHome.getLog().info("調用成功,開始接收返回信息!");
return returnValue(resp);
}
public static String returnValue(Response resp) throws Exception {
if(resp.generatedFault()) {
Fault fault = resp.getFault();
String code = fault.getFaultCode();
String desc = fault.getFaultString();
LogHome.getLog().info("Fault code:"+code+":"+desc);
Vector v = fault.getDetailEntries();
int cnt = v.size();
for(int i = 0;i<cnt;i++)
{
Element n = (Element)v.elementAt(i);
Node nd = n.getFirstChild();
LogHome.getLog().info("Each element:"+n.getNodeName()+":"+nd.getNodeValue());
}
throw new Exception("調用接口時出錯,Fault code:"+code+":"+desc);
}
else
{
Parameter ret = resp.getReturnValue();
String returnXML = (String)ret.getValue();
LogHome.getLog().info(returnXML);
return returnXML;
}
}
public static Vector<Parameter> createCondition(String ajfBm,String zjfBm,String aodfBm,String zodfBm) {
Vector<Parameter> params = new Vector<Parameter>();
params.addElement(new Parameter("AjfBm",String.class,ajfBm,null));
params.addElement(new Parameter("ZjfBm",String.class,zjfBm,null));
params.addElement(new Parameter("AodfBm",String.class,aodfBm,null));
params.addElement(new Parameter("ZodfBm",String.class,zodfBm,null));
return params;
}
}
public static Date getNowDate() {
Date currentTime = new Date();
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String dateString = formatter.format(currentTime);
ParsePosition pos = new ParsePosition(8);
Date currentTime_2 = formatter.parse(dateString, pos);
return currentTime_2;
}
/**
* 獲取現在時間
*
* @return返回短時間格式 yyyy-MM-dd
*/
public static Date getNowDateShort() {
Date currentTime = new Date();
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
String dateString = formatter.format(currentTime);
ParsePosition pos = new ParsePosition(8);
Date currentTime_2 = formatter.parse(dateString, pos);
return currentTime_2;
}
/**
* 獲取現在時間
*
* @return返回字符串格式 yyyy-MM-dd HH:mm:ss
*/
public static String getStringDate() {
Date currentTime = new Date();
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String dateString = formatter.format(currentTime);
return dateString;
}
/**
* 獲取現在時間
*
* @return 返回短時間字符串格式yyyy-MM-dd
*/
public static String getStringDateShort() {
Date currentTime = new Date();
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
String dateString = formatter.format(currentTime);
return dateString;
}
/**
* 獲取時間 小時:分;秒 HH:mm:ss
*
* @return
*/
public static String getTimeShort() {
SimpleDateFormat formatter = new SimpleDateFormat("HH:mm:ss");
Date currentTime = new Date();
String dateString = formatter.format(currentTime);
return dateString;
}
/**
* 將長時間格式字符串轉換為時間 yyyy-MM-dd HH:mm:ss
*
* @param strDate
* @return
*/
public static Date strToDateLong(String strDate) {
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
ParsePosition pos = new ParsePosition(0);
Date strtodate = formatter.parse(strDate, pos);
return strtodate;
}
/**
* 將長時間格式時間轉換為字符串 yyyy-MM-dd HH:mm:ss
*
* @param dateDate
* @return
*/
public static String dateToStrLong(java.util.Date dateDate) {
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String dateString = formatter.format(dateDate);
return dateString;
}
/**
* 將短時間格式時間轉換為字符串 yyyy-MM-dd
*
* @param dateDate
* @param k
* @return
*/
public static String dateToStr(java.util.Date dateDate) {
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
String dateString = formatter.format(dateDate);
return dateString;
}
/**
* 將短時間格式字符串轉換為時間 yyyy-MM-dd
*
* @param strDate
* @return
*/
public static Date strToDate(String strDate) {
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
ParsePosition pos = new ParsePosition(0);
Date strtodate = formatter.parse(strDate, pos);
return strtodate;
}
/**
* 得到現在時間
*
* @return
*/
public static Date getNow() {
Date currentTime = new Date();
return currentTime;
}
/**
* 提取一個月中的最后一天
*
* @param day
* @return
*/
public static Date getLastDate(long day) {
Date date = new Date();
long date_3_hm = date.getTime() - 3600000 * 34 * day;
Date date_3_hm_date = new Date(date_3_hm);
return date_3_hm_date;
}
/**
* 得到現在時間
*
* @return 字符串 yyyyMMdd HHmmss
*/
public static String getStringToday() {
Date currentTime = new Date();
SimpleDateFormat formatter = new SimpleDateFormat("yyyyMMdd HHmmss");
String dateString = formatter.format(currentTime);
return dateString;
}
/**
* 得到現在小時
*/
public static String getHour() {
Date currentTime = new Date();
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String dateString = formatter.format(currentTime);
String hour;
hour = dateString.substring(11, 13);
return hour;
}
/**
* 得到現在分鐘
*
* @return
*/
public static String getTime() {
Date currentTime = new Date();
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String dateString = formatter.format(currentTime);
String min;
min = dateString.substring(14, 16);
return min;
}
/**
* 根據用戶傳入的時間表示格式,返回當前時間的格式 如果是yyyyMMdd,注意字母y不能大寫。
*
* @param sformat
* yyyyMMddhhmmss
* @return
*/
public static String getUserDate(String sformat) {
Date currentTime = new Date();
SimpleDateFormat formatter = new SimpleDateFormat(sformat);
String dateString = formatter.format(currentTime);
return dateString;
}
/**
* 二個小時時間間的差值,必須保證二個時間都是"HH:MM"的格式,返回字符型的分鐘
*/
public static String getTwoHour(String st1, String st2) {
String[] kk = null;
String[] jj = null;
kk = st1.split(":");
jj = st2.split(":");
if (Integer.parseInt(kk[0]) < Integer.parseInt(jj[0]))
return "0";
else {
double y = Double.parseDouble(kk[0]) + Double.parseDouble(kk[1]) / 60;
double u = Double.parseDouble(jj[0]) + Double.parseDouble(jj[1]) / 60;
if ((y - u) > 0)
return y - u + "";
else
return "0";
}
}
/**
* 得到二個日期間的間隔天數
*/
public static String getTwoDay(String sj1, String sj2) {
SimpleDateFormat myFormatter = new SimpleDateFormat("yyyy-MM-dd");
long day = 0;
try {
java.util.Date date = myFormatter.parse(sj1);
java.util.Date mydate = myFormatter.parse(sj2);
day = (date.getTime() - mydate.getTime()) / (24 * 60 * 60 * 1000);
} catch (Exception e) {
return "";
}
return day + "";
}
/**
* 時間前推或后推分鐘,其中JJ表示分鐘.
*/
public static String getPreTime(String sj1, String jj) {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String mydate1 = "";
try {
Date date1 = format.parse(sj1);
long Time = (date1.getTime() / 1000) + Integer.parseInt(jj) * 60;
date1.setTime(Time * 1000);
mydate1 = format.format(date1);
} catch (Exception e) {
}
return mydate1;
}
/**
* 得到一個時間延后或前移幾天的時間,nowdate為時間,delay為前移或后延的天數
*/
public static String getNextDay(String nowdate, String delay) {
try{
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
String mdate = "";
Date d = strToDate(nowdate);
long myTime = (d.getTime() / 1000) + Integer.parseInt(delay) * 24 * 60 * 60;
d.setTime(myTime * 1000);
mdate = format.format(d);
return mdate;
}catch(Exception e){
return "";
}
}
/**
* 判斷是否潤年
*
* @param ddate
* @return
*/
public static boolean isLeapYear(String ddate) {
/**
* 詳細設計: 1.被400整除是閏年,否則: 2.不能被4整除則不是閏年 3.能被4整除同時不能被100整除則是閏年
* 3.能被4整除同時能被100整除則不是閏年
*/
Date d = strToDate(ddate);
GregorianCalendar gc = (GregorianCalendar) Calendar.getInstance();
gc.setTime(d);
int year = gc.get(Calendar.YEAR);
if ((year % 400) == 0)
return true;
else if ((year % 4) == 0) {
if ((year % 100) == 0)
return false;
else
return true;
} else
return false;
}
/**
* 返回美國時間格式 26 Apr 2006
*
* @param str
* @return
*/
public static String getEDate(String str) {
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
ParsePosition pos = new ParsePosition(0);
Date strtodate = formatter.parse(str, pos);
String j = strtodate.toString();
String[] k = j.split(" ");
return k[2] + k[1].toUpperCase() + k[5].substring(2, 4);
}
/**
* 獲取一個月的最后一天
*
* @param dat
* @return
*/
public static String getEndDateOfMonth(String dat) {// yyyy-MM-dd
String str = dat.substring(0, 8);
String month = dat.substring(5, 7);
int mon = Integer.parseInt(month);
if (mon == 1 || mon == 3 || mon == 5 || mon == 7 || mon == 8 || mon == 10 || mon == 12) {
str += "31";
} else if (mon == 4 || mon == 6 || mon == 9 || mon == 11) {
str += "30";
} else {
if (isLeapYear(dat)) {
str += "29";
} else {
str += "28";
}
}
return str;
}
/**
* 判斷二個時間是否在同一個周
*
* @param date1
* @param date2
* @return
*/
public static boolean isSameWeekDates(Date date1, Date date2) {
Calendar cal1 = Calendar.getInstance();
Calendar cal2 = Calendar.getInstance();
cal1.setTime(date1);
cal2.setTime(date2);
int subYear = cal1.get(Calendar.YEAR) - cal2.get(Calendar.YEAR);
if (0 == subYear) {
if (cal1.get(Calendar.WEEK_OF_YEAR) == cal2.get(Calendar.WEEK_OF_YEAR))
return true;
} else if (1 == subYear && 11 == cal2.get(Calendar.MONTH)) {
// 如果12月的最后一周橫跨來年第一周的話則最后一周即算做來年的第一周
if (cal1.get(Calendar.WEEK_OF_YEAR) == cal2.get(Calendar.WEEK_OF_YEAR))
return true;
} else if (-1 == subYear && 11 == cal1.get(Calendar.MONTH)) {
if (cal1.get(Calendar.WEEK_OF_YEAR) == cal2.get(Calendar.WEEK_OF_YEAR))
return true;
}
return false;
}
/**
* 產生周序列,即得到當前時間所在的年度是第幾周
*
* @return
*/
public static String getSeqWeek() {
Calendar c = Calendar.getInstance(Locale.CHINA);
String week = Integer.toString(c.get(Calendar.WEEK_OF_YEAR));
if (week.length() == 1)
week = "0" + week;
String year = Integer.toString(c.get(Calendar.YEAR));
return year + week;
}
/**
* 獲得一個日期所在的周的星期幾的日期,如要找出2002年2月3日所在周的星期一是幾號
*
* @param sdate
* @param num
* @return
*/
public static String getWeek(String sdate, String num) {
// 再轉換為時間
Date dd = VeDate.strToDate(sdate);
Calendar c = Calendar.getInstance();
c.setTime(dd);
if (num.equals("1")) // 返回星期一所在的日期
c.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
else if (num.equals("2")) // 返回星期二所在的日期
c.set(Calendar.DAY_OF_WEEK, Calendar.TUESDAY);
else if (num.equals("3")) // 返回星期三所在的日期
c.set(Calendar.DAY_OF_WEEK, Calendar.WEDNESDAY);
else if (num.equals("4")) // 返回星期四所在的日期
c.set(Calendar.DAY_OF_WEEK, Calendar.THURSDAY);
else if (num.equals("5")) // 返回星期五所在的日期
c.set(Calendar.DAY_OF_WEEK, Calendar.FRIDAY);
else if (num.equals("6")) // 返回星期六所在的日期
c.set(Calendar.DAY_OF_WEEK, Calendar.SATURDAY);
else if (num.equals("0")) // 返回星期日所在的日期
c.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);
return new SimpleDateFormat("yyyy-MM-dd").format(c.getTime());
}
/**
* 根據一個日期,返回是星期幾的字符串
*
* @param sdate
* @return
*/
public static String getWeek(String sdate) {
// 再轉換為時間
Date date = VeDate.strToDate(sdate);
Calendar c = Calendar.getInstance();
c.setTime(date);
// int hour=c.get(Calendar.DAY_OF_WEEK);
// hour中存的就是星期幾了,其范圍 1~7
// 1=星期日 7=星期六,其他類推
return new SimpleDateFormat("EEEE").format(c.getTime());
}
public static String getWeekStr(String sdate){
String str = "";
str = VeDate.getWeek(sdate);
if("1".equals(str)){
str = "星期日";
}else if("2".equals(str)){
str = "星期一";
}else if("3".equals(str)){
str = "星期二";
}else if("4".equals(str)){
str = "星期三";
}else if("5".equals(str)){
str = "星期四";
}else if("6".equals(str)){
str = "星期五";
}else if("7".equals(str)){
str = "星期六";
}
return str;
}
/**
* 兩個時間之間的天數
*
* @param date1
* @param date2
* @return
*/
public static long getDays(String date1, String date2) {
if (date1 == null || date1.equals(""))
return 0;
if (date2 == null || date2.equals(""))
return 0;
// 轉換為標準時間
SimpleDateFormat myFormatter = new SimpleDateFormat("yyyy-MM-dd");
java.util.Date date = null;
java.util.Date mydate = null;
try {
date = myFormatter.parse(date1);
mydate = myFormatter.parse(date2);
} catch (Exception e) {
}
long day = (date.getTime() - mydate.getTime()) / (24 * 60 * 60 * 1000);
return day;
}
/**
* 形成如下的日歷 , 根據傳入的一個時間返回一個結構 星期日 星期一 星期二 星期三 星期四 星期五 星期六 下面是當月的各個時間
* 此函數返回該日歷第一行星期日所在的日期
*
* @param sdate
* @return
*/
public static String getNowMonth(String sdate) {
// 取該時間所在月的一號
sdate = sdate.substring(0, 8) + "01";
// 得到這個月的1號是星期幾
Date date = VeDate.strToDate(sdate);
Calendar c = Calendar.getInstance();
c.setTime(date);
int u = c.get(Calendar.DAY_OF_WEEK);
String newday = VeDate.getNextDay(sdate, (1 - u) + "");
return newday;
}
/**
* 取得數據庫主鍵 生成格式為yyyymmddhhmmss+k位隨機數
*
* @param k
* 表示是取幾位隨機數,可以自己定
*/
public static String getNo(int k) {
return getUserDate("yyyyMMddhhmmss") + getRandom(k);
}
/**
* 返回一個隨機數
*
* @param i
* @return
*/
public static String getRandom(int i) {
Random jjj = new Random();
// int suiJiShu = jjj.nextInt(9);
if (i == 0)
return "";
String jj = "";
for (int k = 0; k < i; k++) {
jj = jj + jjj.nextInt(9);
}
return jj;
}
/**
*
* @param args
*/
public static boolean RightDate(String date) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
;
if (date == null)
return false;
if (date.length() > 10) {
sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
} else {
sdf = new SimpleDateFormat("yyyy-MM-dd");
}
try {
sdf.parse(date);
} catch (ParseException pe) {
return false;
}
return true;
}
/***************************************************************************
* //nd=1表示返回的值中包含年度 //yf=1表示返回的值中包含月份 //rq=1表示返回的值中包含日期 //format表示返回的格式 1
* 以年月日中文返回 2 以橫線-返回 // 3 以斜線/返回 4 以縮寫不帶其它符號形式返回 // 5 以點號.返回
**************************************************************************/
public static String getStringDateMonth(String sdate, String nd, String yf, String rq, String format) {
Date currentTime = new Date();
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
String dateString = formatter.format(currentTime);
String s_nd = dateString.substring(0, 4); // 年份
String s_yf = dateString.substring(5, 7); // 月份
String s_rq = dateString.substring(8, 10); // 日期
String sreturn = "";
roc.util.MyChar mc = new roc.util.MyChar();
if (sdate == null || sdate.equals("") || !mc.Isdate(sdate)) { // 處理空值情況
if (nd.equals("1")) {
sreturn = s_nd;
// 處理間隔符
if (format.equals("1"))
sreturn = sreturn + "年";
else if (format.equals("2"))
sreturn = sreturn + "-";
else if (format.equals("3"))
sreturn = sreturn + "/";
else if (format.equals("5"))
sreturn = sreturn + ".";
}
// 處理月份
if (yf.equals("1")) {
sreturn = sreturn + s_yf;
if (format.equals("1"))
sreturn = sreturn + "月";
else if (format.equals("2"))
sreturn = sreturn + "-";
else if (format.equals("3"))
sreturn = sreturn + "/";
else if (format.equals("5"))
sreturn = sreturn + ".";
}
// 處理日期
if (rq.equals("1")) {
sreturn = sreturn + s_rq;
if (format.equals("1"))
sreturn = sreturn + "日";
}
} else {
// 不是空值,也是一個合法的日期值,則先將其轉換為標準的時間格式
sdate = roc.util.RocDate.getOKDate(sdate);
s_nd = sdate.substring(0, 4); // 年份
s_yf = sdate.substring(5, 7); // 月份
s_rq = sdate.substring(8, 10); // 日期
if (nd.equals("1")) {
sreturn = s_nd;
// 處理間隔符
if (format.equals("1"))
sreturn = sreturn + "年";
else if (format.equals("2"))
sreturn = sreturn + "-";
else if (format.equals("3"))
sreturn = sreturn + "/";
else if (format.equals("5"))
sreturn = sreturn + ".";
}
// 處理月份
if (yf.equals("1")) {
sreturn = sreturn + s_yf;
if (format.equals("1"))
sreturn = sreturn + "月";
else if (format.equals("2"))
sreturn = sreturn + "-";
else if (format.equals("3"))
sreturn = sreturn + "/";
else if (format.equals("5"))
sreturn = sreturn + ".";
}
// 處理日期
if (rq.equals("1")) {
sreturn = sreturn + s_rq;
if (format.equals("1"))
sreturn = sreturn + "日";
}
}
return sreturn;
}
public static String getNextMonthDay(String sdate, int m) {
sdate = getOKDate(sdate);
int year = Integer.parseInt(sdate.substring(0, 4));
int month = Integer.parseInt(sdate.substring(5, 7));
month = month + m;
if (month < 0) {
month = month + 12;
year = year - 1;
} else if (month > 12) {
month = month - 12;
year = year + 1;
}
String smonth = "";
if (month < 10)
smonth = "0" + month;
else
smonth = "" + month;
return year + "-" + smonth + "-10";
}
public static String getOKDate(String sdate) {
if (sdate == null || sdate.equals(""))
return getStringDateShort();
if (!VeStr.Isdate(sdate)) {
sdate = getStringDateShort();
}
// 將“/”轉換為“-”
sdate = VeStr.Replace(sdate, "/", "-");
// 如果只有8位長度,則要進行轉換
if (sdate.length() == 8)
sdate = sdate.substring(0, 4) + "-" + sdate.substring(4, 6) + "-" + sdate.substring(6, 8);
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
ParsePosition pos = new ParsePosition(0);
Date strtodate = formatter.parse(sdate, pos);
String dateString = formatter.format(strtodate);
return dateString;
}
public static void main(String[] args) throws Exception {
try {
//System.out.print(Integer.valueOf(getTwoDay("2006-11-03 12:22:10", "2006-11-02 11:22:09")));
} catch (Exception e) {
throw new Exception();
}
//System.out.println("sss");
}
}
******************使用到的軟件******************
IIS 6.0
PHP 5.26
MySQL V5.0.15 正式版
phpMyAdmin-2.11.7-all-languages
本機操作系統 Window Server 2003 EnterPrise Edition SP2
******************使用到的軟件******************
一直都是用的APPServ 突然覺得經常用也沒有什么意思!于是就想自己配的玩下!這里使用的是IIS下配置。
安裝IIS服務器
打開控制面板->添加刪除程序->添加刪除組件->應用程序服務器 要使用ASP.NET的就把詳細信息里面的ASP.NET勾上!然后下一步。
這里如果有光盤的可以直接用光盤安裝,如果沒有就下一個,我用的是IIS6 然后安裝的時候會提示你插入光盤,你瀏覽到下載解壓后的IIS6的文件里,然后會找到所需文件,就這樣一直瀏覽就可以安裝成功!
安裝PHP
安裝好IIS之后就需要打開準備好的PHP文件,將里面的DLL文件全部復制到System 32 目錄下, 其實并不需要全部復制!只需要復制 php5ts.dll libmysql.dll libmcrypt.dll 這三個就行了!但如果你覺得不好記,全部復制進去不會影響什么!然后將PHP目錄下的php.ini-recommended拷到C:\Windows下 然后把php.ini-recommended文件改名成php.ini
從IIS里面添加對PHP的映射
打開 Internet 信息服務(IIS)管理器(管理工具里面)
點擊Web 服務擴展 如果你同時要使用ASP ASP.NET(安裝了才有) 的話 就點擊左邊的允許! 同時所有未知的ISAPI也要允許!
接著在默認網站上--->右鍵--->屬性--->ISAPI 添加 篩選器,名稱 可以寫PHP 可執行文件 找到 你的PHP目錄下的php5isapi.dll
然后在點擊主目錄--->配置--->添加--->可執行文件也選擇剛才這個文件 擴展名填寫.php 確定
同時在文檔里面可以添加index.php 這個是默認打開的頁面!不會影響程序。如果你設置了它就自動尋找這個文件,如果有就直接打開。不過還是建議添加一下!
接下來 應用 確定 重啟IIS服務
重啟方法:
在運行里面依次輸入
net stop w3svc
net stop iisadmin
net start w3svc
接著在你的目錄下的PHP文件就可以瀏覽了!
比如輸入
echo phpinfo();
?>
短標記默認是關閉的,請寫成這種形式的,建議不使用短標記。
保存為index.php,然后在Internet 信息服務(IIS)管理器下的默認網站的右邊 點擊你想看的頁面 右鍵 瀏覽!OK 顯示出來了。
配置PHP
上面僅僅完成了PHP的安裝,但是PHP的配置都是默認的,這樣子會帶來很多的問題。為了使PHP能更好的運行,需要修改PHP配置!PHP主要與php.ini有關,打開C:\Windows下的php.ini。
找到 extension_dir = "./" 改成extension_dir = "C:\php\ext\" 地址是PHP目錄下的ext文件夾,
from order_main_info a,INT_AD_INFO c
WHERE a.order_type='32' and
a.state='0' and c.order_id=a.order_id and
a.order_id=(select order_id from(select rownum rn,order_id
from ORDER_DEAL_INFO where order_id=(select order_id from order_main_info where order_type='32' and state='0'))
where rn=(select count(*) from ORDER_DEAL_INFO where order_id=(select order_id from order_main_info where order_type='32' and state='0')))
<form name=hrong>
<input type=checkbox name=All onclick="checkAll('mm')">全選<br/>
<input type=checkbox name=mm onclick="checkItem('All')"><br/>
<input type=checkbox name=mm onclick="checkItem('All')"><br/>
<input type=checkbox name=mm onclick="checkItem('All')"><br/>
<input type=checkbox name=mm onclick="checkItem('All')"><br/>
<input type=checkbox name=mm onclick="checkItem('All')"><br/><br/>
<input type=checkbox name=All2 onclick="checkAll('mm2')">全選<br/>
<input type=checkbox name=mm2 onclick="checkItem('All2')"><br/>
<input type=checkbox name=mm2 onclick="checkItem('All2')"><br/>
<input type=checkbox name=mm2 onclick="checkItem('All2')"><br/>
<input type=checkbox name=mm2 onclick="checkItem('All2')"><br/>
<input type=checkbox name=mm2 onclick="checkItem('All2')"><br/>
</form>
<SCRIPT LANGUAGE="JavaScript">
function checkAll(str)
{
var a = document.getElementsByName(str);
var n = a.length;
for (var i=0; i<n; i++)
a[i].checked = window.event.srcElement.checked;
}
function checkItem(str)
{
var e = window.event.srcElement;
var all = eval("document.hrong."+ str);
if (e.checked)
{
var a = document.getElementsByName(e.name);
all.checked = true;
for (var i=0; i<a.length; i++)
{
if (!a[i].checked){ all.checked = false; break;}
}
}
else all.checked = false;
}
</SCRIPT>
3.8 文件上傳過程中判斷文件類型
<input type=file onchange="alert(this.value.match(/^(.*)(\.)(.{1,8})$/)[3])">
畫圖:
<OBJECT
id=S
style="LEFT: 0px; WIDTH: 392px; TOP: 0px; HEIGHT: 240px"
height=240
width=392
classid="clsid:369303C2-D7AC-11D0-89D5-00A0C90833E6">
</OBJECT>
<SCRIPT>
S.DrawingSurface.ArcDegrees(0,0,0,30,50,60);
S.DrawingSurface.ArcRadians(30,0,0,30,50,60);
S.DrawingSurface.Line(10,10,100,100);
</SCRIPT>
寫注冊表:
<SCRIPT>
var WshShell = WScript.CreateObject("WScript.Shell");
WshShell.RegWrite ("HKCU\\Software\\ACME\\FortuneTeller\\", 1, "REG_BINARY");
WshShell.RegWrite ("HKCU\\Software\\ACME\\FortuneTeller\\MindReader", "Goocher!", "REG_SZ");
var bKey = WshShell.RegRead ("HKCU\\Software\\ACME\\FortuneTeller\\");
WScript.Echo (WshShell.RegRead ("HKCU\\Software\\ACME\\FortuneTeller\\MindReader"));
WshShell.RegDelete ("HKCU\\Software\\ACME\\FortuneTeller\\MindReader");
WshShell.RegDelete ("HKCU\\Software\\ACME\\FortuneTeller\\");
WshShell.RegDelete ("HKCU\\Software\\ACME\\");
</SCRIPT>
TABLAE相關(客戶端動態增加行列)
<HTML>
<SCRIPT LANGUAGE="JScript">
function numberCells() {
var count=0;
for (i=0; i < document.all.mytable.rows.length; i++) {
for (j=0; j < document.all.mytable.rows(i).cells.length; j++) {
document.all.mytable.rows(i).cells(j).innerText = count;
count++;
}
}
}
</SCRIPT>
<BODY onload="numberCells()">
<TABLE id=mytable border=1>
<TR><TH> </TH><TH> </TH><TH> </TH><TH> </TH></TR>
<TR><TD> </TD><TD> </TD><TD> </TD><TD> </TD></TR>
<TR><TD> </TD><TD> </TD><TD> </TD><TD> </TD></TR>
</TABLE>
</BODY>
</HTML>
1.身份證嚴格驗證:
<script>
var aCity={11:"北京",12:"天津",13:"河北",14:"山西",15:"內蒙古",21:"遼寧",22:"吉林",23:"黑龍江",31:"上海",32:"江蘇",33:"浙江",34:"安徽",35:"福建",36:"江西",37:"山東",41:"河南",42:"湖北",43:"湖南",44:"廣東",45:"廣西",46:"海南",50:"重慶",51:"四川",52:"貴州",53:"云南",54:"西藏",61:"陜西",62:"甘肅",63:"青海",64:"寧夏",65:"新疆",71:"臺灣",81:"香港",82:"澳門",91:"國外"}
function cidInfo(sId){
var iSum=0
var info=""
if(!/^\d{17}(\d|x)$/i.test(sId))return false;
sId=sId.replace(/x$/i,"a");
if(aCity[parseInt(sId.substr(0,2))]==null)return "Error:非法地區";
sBirthday=sId.substr(6,4)+"-"+Number(sId.substr(10,2))+"-"+Number(sId.substr(12,2));
var d=new Date(sBirthday.replace(/-/g,"/"))
if(sBirthday!=(d.getFullYear()+"-"+ (d.getMonth()+1) + "-" + d.getDate()))return "Error:非法生日";
for(var i = 17;i>=0;i --) iSum += (Math.pow(2,i) % 11) * parseInt(sId.charAt(17 - i),11)
if(iSum%11!=1)return "Error:非法證號";
return aCity[parseInt(sId.substr(0,2))]+","+sBirthday+","+(sId.substr(16,1)%2?"男":"女")
}
document.write(cidInfo("380524198002300016"),"<br/>");
document.write(cidInfo("340524198002300019"),"<br/>")
document.write(cidInfo("340524197711111111"),"<br/>")
document.write(cidInfo("34052419800101001x"),"<br/>");
</script>
2.驗證IP地址
<SCRIPT LANGUAGE="JavaScript">
function isip(s){
var check=function(v){try{return (v<=255 && v>=0)}catch(x){return false}};
var re=s.split(".")
return (re.length==4)?(check(re[0]) && check(re[1]) && check(re[2]) && check(re[3])):false
}
var s="202.197.78.129";
alert(isip(s))
</SCRIPT>
3.加sp1后還能用的無邊框窗口??!
<HTML XMLNS:IE>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<IE:Download ID="include" STYLE="behavior:url(#default#download)" />
<title>Chromeless Window</title>
<SCRIPT LANGUAGE="JScript">
/*--- Special Thanks For andot ---*/
/*
This following code are designed and writen by Windy_sk <seasonx@163.net>
You can use it freely, but u must held all the copyright items!
*/
/*--- Thanks For andot Again ---*/
var CW_width = 400;
var CW_height = 300;
var CW_top = 100;
var CW_left = 100;
var CW_url = "/";
var New_CW = window.createPopup();
var CW_Body = New_CW.document.body;
var content = "";
var CSStext = "margin:1px;color:black; border:2px outset;border-style:expression(onmouseout=onmouseup=function(){this.style.borderStyle='outset'}, onmousedown=function(){if(event.button!=2)this.style.borderStyle='inset'});background-color:buttonface;width:16px;height:14px;font-size:12px;line-height:11px;cursor:Default;";
//Build Window
include.startDownload(CW_url, function(source){content=source});
function insert_content(){
var temp = "";
CW_Body.style.overflow = "hidden";
CW_Body.style.backgroundColor = "white";
CW_Body.style.border = "solid black 1px";
content = content.replace(/<a ([^>]*)>/g,"<a onclick='parent.open(this.href);return false' $1>");
temp += "<table width=100% height=100% cellpadding=0 cellspacing=0 border=0>";
temp += "<tr style=';font-size:12px;background:#0099CC;height:20;cursor:default' ondblclick=\"Max.innerText=Max.innerText=='1'?'2':'1';parent.if_max=!parent.if_max;parent.show_CW();\" onmouseup='parent.drag_up(event)' onmousemove='parent.drag_move(event)' onmousedown='parent.drag_down(event)' onselectstart='return false' oncontextmenu='return false'>";
temp += "<td style='color:#ffffff;padding-left:5px'>Chromeless Window For IE6 SP1</td>";
temp += "<td style='color:#ffffff;padding-right:5px;' align=right>";
temp += "<span id=Help onclick=\"alert('Chromeless Window For IE6 SP1 - Ver 1.0\\n\\nCode By Windy_sk\\n\\nSpecial Thanks For andot')\" style=\""+CSStext+"font-family:System;padding-right:2px;\">?</span>";
temp += "<span id=Min onclick='parent.New_CW.hide();parent.blur()' style=\""+CSStext+"font-family:Webdings;\" title='Minimum'>0</span>";
temp += "<span id=Max onclick=\"this.innerText=this.innerText=='1'?'2':'1';parent.if_max=!parent.if_max;parent.show_CW();\" style=\""+CSStext+"font-family:Webdings;\" title='Maximum'>1</span>";
temp += "<span id=Close onclick='parent.opener=null;parent.close()' style=\""+CSStext+"font-family:System;padding-right:2px;\" title='Close'>x</span>";
temp += "</td></tr><tr><td colspan=2>";
temp += "<div id=include style='overflow:scroll;overflow-x:hidden;overflow-y:auto; HEIGHT: 100%; width:"+CW_width+"'>";
temp += content;
temp += "</div>";
temp += "</td></tr></table>";
CW_Body.innerHTML = temp;
}
setTimeout("insert_content()",1000);
var if_max = true;
function show_CW(){
window.moveTo(10000, 10000);
if(if_max){
New_CW.show(CW_top, CW_left, CW_width, CW_height);
if(typeof(New_CW.document.all.include)!="undefined"){
New_CW.document.all.include.style.width = CW_width;
New_CW.document.all.Max.innerText = "1";
}
}else{
New_CW.show(0, 0, screen.width, screen.height);
New_CW.document.all.include.style.width = screen.width;
}
}
window.onfocus = show_CW;
window.onresize = show_CW;
// Move Window
var drag_x,drag_y,draging=false
function drag_move(e){
if (draging){
New_CW.show(e.screenX-drag_x, e.screenY-drag_y, CW_width, CW_height);
return false;
}
}
function drag_down(e){
if(e.button==2)return;
if(New_CW.document.body.offsetWidth==screen.width && New_CW.document.body.offsetHeight==screen.height)return;
drag_x=e.clientX;
drag_y=e.clientY;
draging=true;
e.srcElement.setCapture();
}
function drag_up(e){
draging=false;
e.srcElement.releaseCapture();
if(New_CW.document.body.offsetWidth==screen.width && New_CW.document.body.offsetHeight==screen.height) return;
CW_top = e.screenX-drag_x;
CW_left = e.screenY-drag_y;
}
</SCRIPT>
</HTML>
電話號碼的驗證
要求:
(1)電話號碼由數字、"("、")"和"-"構成
(2)電話號碼為3到8位
(3)如果電話號碼中包含有區號,那么區號為三位或四位
(4)區號用"("、")"或"-"和其他部分隔開
(5)移動電話號碼為11或12位,如果為12位,那么第一位為0
(6)11位移動電話號碼的第一位和第二位為"13"
(7)12位移動電話號碼的第二位和第三位為"13"
根據這幾條規則,可以與出以下正則表達式:
(^[0-9]{3,4}\-[0-9]{3,8}$)|(^[0-9]{3,8}$)|(^\([0-9]{3,4}\)[0-9]{3,8}$)|(^0{0,1}13[0-9]{9}$)
<script language="javascript">
function PhoneCheck(s) {
var str=s;
var reg=/(^[0-9]{3,4}\-[0-9]{3,8}$)|(^[0-9]{3,8}$)|(^\([0-9]{3,4}\)[0-9]{3,8}$)|(^0{0,1}13[0-9]{9}$)/
alert(reg.test(str));
}
</script>
<input type=text name="iphone">
<input type=button onclick="PhoneCheck(document.all.iphone.value)" value="Check">
具有在輸入非數字字符不回顯的效果,即對非數字字符的輸入不作反應。
function numbersonly(field,event){
var key,keychar;
if(window.event){
key = window.event.keyCode;
}
else if (event){
key = event.which;
}
else{
return true
}
keychar = String.fromCharCode(key);
if((key == null)||(key == 0)||(key == 8)||(key == 9)||(key == 13)||(key == 27)){
return true;
}
else if(("0123456789.").indexOf(keychar)>-1){
window.status = "";
return true;
}
else {
window.status = "Field excepts numbers only";
return false;
}
}
驗證ip
str=document.RegExpDemo.txtIP.value;
if(/^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/.test(str)==false)
{
window.alert('錯誤的IP地址格式');
document.RegExpDemo.txtIP.select();
document.RegExpDemo.txtIP.focus();
return;
}
if(RegExp.$1<1 || RegExp.$1>254||RegExp.$2<0||RegExp.$2>254||RegExp.$3<0||RegExp.$3>254||RegExp.$4<1||RegExp.$4>254)
{
window.alert('錯誤的IP地址');
document.RegExpDemo.txtIP.select();
document.RegExpDemo.txtIP.focus();
return;
}
//剔除 如 010.020.020.03 前面 的0
var str=str.replace(/0(\d)/g,"$1");
str=str.replace(/0(\d)/g,"$1");
window.alert(str);
//一下是取數據的類
//Obj參數指定數據的來源(限定Table),默認第一行為字段名稱行
//GetTableData類提供MoveNext方法,參數是表的行向上或向下移動的位數,正數向下移動,負數向上.
//GetFieldData方法獲得指定的列名的數據
//Sort_desc方法對指定的列按降序排列
//Sort_asc方法對指定的列按升序排列
//GetData方法返回字段值為特定值的數據數組,提供數據,可以在外部進行其他處理
//Delete方法刪除當前記錄,數組減少一行
//初始化,Obj:table的名字,Leftlen:左面多余數據長度,Rightlen:右面多余數據長度,
function GetTableData(Obj,LeftLen,RightLen){
var MyObj=document.all(Obj);
var iRow=MyObj.rows.length;
var iLen=MyObj.rows[0].cells.length;
var i,j;
TableData=new Array();
for (i=0;i< iRow;i++){
TableData[i]=new Array();
for (j=0;j<iLen;j++){
TableStr=MyObj.rows(i).cells(j).innerText;
TableStr=TableStr.substring(LeftLen, TableStr.length-RightLen).Trim();
TableStr=TableStr.replace(/ /gi,"").replace(/\r\n/ig,"");
TableData[i][j]=TableStr;
}
}
this.TableData=TableData;
this.cols=this.TableData[0].length;
this.rows=this.TableData.length;
this.rowindex=0;
}
function movenext(Step){
if (this.rowindex>=this.rows){
return
}
if (Step=="" || typeof(Step)=="undefined") {
if (this.rowindex<this.rows-1)
this.rowindex++;
return;
}
else{
if (this.rowindex + Step<=this.rows-1 && this.rowindex + Step>=0 ){
this.rowindex=this.rowindex + Step;
}
else
{
if (this.rowindex + Step<0){
this.rowindex= 0;
return;
}
if (this.rowindex + Step>this.rows-1){
this.rowindex= this.rows-1;
return;
}
}
}
}
function getfielddata(Field){
var colindex=-1;
var i=0;
if (typeof(Field) == "number"){
colindex=Field;
}
else
{
for (i=0;i<this.cols && this.rowindex<this.rows ;i++){
if (this.TableData[0][i]==Field){
colindex=i;
break;
}
}
}
if (colindex!=-1) {
return this.TableData[this.rowindex][colindex];
}
}
function sort_desc(){//降序
var colindex=-1;
var highindex=-1;
desc_array=new Array();
var i,j;
for (n=0; n<arguments.length; n++){
Field=arguments[arguments.length-1-n];
for (i=0;i<this.cols;i++){
if (this.TableData[0][i]==Field){
colindex=i;
break;
}
}
if ( colindex==-1 )
return;
else
{
desc_array[0]=this.TableData[0];
for(i=1;i<this.rows;i++){
desc_array[i]=this.TableData[1];
highindex=1;
for(j=1;j<this.TableData.length;j++){
if (desc_array[i][colindex]<this.TableData[j][colindex]){
desc_array[i]=this.TableData[j];
highindex=j;
}
}
if (highindex!=-1)
this.TableData=this.TableData.slice(0,highindex).concat(this.TableData.slice(highindex+1,this.TableData.length));
}
}
this.TableData=desc_array;
}
return;
}
function sort_asc(){//升序
var colindex=-1;
var highindex=-1;
var i,j;
for (n=0; n<arguments.length; n++){
asc_array=new Array();
Field=arguments[arguments.length-1-n];
for (i=0;i<this.cols;i++){
if (this.TableData[0][i]==Field){
colindex=i;
break;
}
}
if ( colindex==-1 )
return;
else
{
asc_array[0]=this.TableData[0];
for(i=1;i<this.rows;i++){
asc_array[i]=this.TableData[1];
highindex=1;
for(j=1;j<this.TableData.length;j++){//找出最小的列值
if (asc_array[i][colindex]>this.TableData[j][colindex]){
asc_array[i]=this.TableData[j];
highindex=j;
}
}
if (highindex!=-1)
this.TableData=this.TableData.slice(0,highindex).concat(this.TableData.slice(highindex+1,this.TableData.length));
}
}
this.TableData=asc_array;
}
return;
}
function getData(Field,FieldValue){
var colindex=-1;
var i,j;
GetData=new Array();
if (typeof(Field)=="undefined" || typeof(FieldValue)=="undefined" ){
return this.TableData;
}
for(j=0;j<this.cols;j++){
if (this.TableData[0][j]==Field){
colindex=j;
}
}
if (colindex!=-1){
for(i=1;i<this.rows;i++){
if (this.TableData[i][colindex]==FieldValue){
GetData[i]=new Array();
GetData[i]=this.TableData[i];
}
}
}
return GetData;
}
function Delete(){
this.TableData=this.TableData.slice(0,this.rowindex).concat(this.TableData.slice(this.rowindex+1,this.TableData.length));
this.rows=this.TableData.length;
return;
}
function updateField(Field,FieldValue){
var colindex=-1;
var i=0;
if (typeof(Field) == "number"){
colindex=Field;
}
else
{
for (i=0;i<this.cols && this.rowindex<this.rows ;i++){
if (this.TableData[0][i]==Field){
colindex=i;
break;
}
}
}
if (colindex!=-1) {
this.TableData[this.rowindex][colindex]=FieldValue;
}
}
function movefirst(){
this.rowindex=0;
}
function movelast(){
this.rowindex=this.rows-1;
}
function String.prototype.Trim() {return this.replace(/(^\s*)|(\s*$)/g,"");}
GetTableData.prototype.MoveNext = movenext;
GetTableData.prototype.GetFieldData = getfielddata;
GetTableData.prototype.Sort_asc = sort_asc;
GetTableData.prototype.Sort_desc = sort_desc;
GetTableData.prototype.GetData = getData;
GetTableData.prototype.Delete = Delete;
GetTableData.prototype.UpdateField = updateField;
GetTableData.prototype.MoveFirst = movefirst;
具體的例子:http://202.119.73.208/NetEAn/com/test/jsprint.htm
在每個文本框的onblur事件中調用校驗代碼,并且每個文本框中onKeyDown事件中寫一個enter轉tab函數
//回車鍵換為tab
function enterToTab()
{
if(event.srcElement.type != 'button' && event.srcElement.type != 'textarea'
&& event.keyCode == 13)
{
event.keyCode = 9;
}
}
有時候還需要自由編輯表格---
給大家一個自由編輯表格的小例子,寫的有點亂,呵呵:)
//===============================start================================
<HTML>
<HEAD>
<META http-equiv="Content-Type" content="text/html; charset=gb2312">
<TITLE>測試修改表格</TITLE>
<STYLE>
/*提示層的樣式*/
div
{
BORDER-RIGHT: #80c144 1px solid;
BORDER-TOP: #80c144 1px solid;
VISIBILITY: hidden;
BORDER-LEFT: #80c144 1px solid;
CURSOR: default;
LINE-HEIGHT: 20px;
BORDER-BOTTOM: #80c144 1px solid;
FONT-FAMILY: 宋體;
font-size:12px;
POSITION: absolute;
BACKGROUND-COLOR: #f6f6f6;
TOP:30px;
LEFT:30px;
}
/*tr的樣式*/
tr
{
font-family: "宋體";
color: #000000;
background-color: #C1DBF5;
font-size: 12px
}
/*table腳注樣式*/
.TrFoot
{
FONT-SIZE: 12px;
font-family:"宋體", "Verdana", "Arial";
BACKGROUND-COLOR: #6699CC;
COLOR:#FFFFFF;
height: 25;
}
/*trhead屬性*/
.TrHead
{
FONT-SIZE: 13px;
font-family:"宋體", "Verdana", "Arial";
BACKGROUND-COLOR: #77AADD;
COLOR:#FFFFFF;
height: 25;
}
/*文本框樣式*/
INPUT
{
BORDER-COLOR: #AACEF7 #AACEF7 #AACEF7 #AACEF7;
BORDER-RIGHT: 1px solid;
BORDER-TOP: 1px solid;
BORDER-LEFT: 1px solid;
BORDER-BOTTOM: 1px solid;
FONT-SIZE: 12px;
FONT-FAMILY: "宋體","Verdana";
color: #000000;
BACKGROUND-COLOR: #E9EFF5;
}
/*button樣式*/
button
{
BORDER-COLOR: #AACEF7 #AACEF7 #AACEF7 #AACEF7;
BACKGROUND-COLOR: #D5E4F3;
CURSOR: hand;
FONT-SIZE:12px;
BORDER-RIGHT: 1px solid;
BORDER-TOP: 1px solid;
BORDER-LEFT: 1px solid;
BORDER-BOTTOM: 1px solid;
COLOR: #000000;
}
</STYLE>
</HEAD>
<BODY>
<SCRIPT language = "JavaScript">
<!--全局變量
//標志位,值為false代表未打開一個編輯框,值為true為已經打開一個編輯框開始編輯
var editer_table_cell_tag = false;
//開啟編輯功能標志,值為true時為允許編輯
var run_edit_flag = false;
//-->
</SCRIPT>
<SCRIPT language = "JavaScript">
<!--
/**
* 編輯表格函數
* 單擊某個單元格可以對里面的內容進行自由編輯
* @para tableID 為要編輯的table的id
* @para noEdiID 為不要編輯的td的ID,比如說table的標題
* 可以寫為<TD id="no_editer">自由編輯表格</TD>
* 此時該td不可編輯
*/
function editerTableCell(tableId,noEdiId)
{
var tdObject = event.srcElement;
var tObject = ((tdObject.parentNode).parentNode).parentNode;
if(tObject.id == tableId &&tdObject.id != noEdiId&&editer_table_cell_tag == false && run_edit_flag == true)
{
tdObject.innerHTML = "<input type=text id=edit_table_txt name=edit_table_txt value="+tdObject.innerText+" size='15' onKeyDown='enterToTab()'> <input type=button value=' 確定 ' onclick='certainEdit()'>";
edit_table_txt.focus();
edit_table_txt.select();
editer_table_cell_tag = true;
//修改按鈕提示信息
editTip.innerText = "請先點確定按鈕確認修改!";
}
else
{
return false;
}
}
/**
* 確定修改
*/
function certainEdit()
{
var bObject = event.srcElement;
var tdObject = bObject.parentNode;
var txtObject = tdObject.firstChild;
tdObject.innerHTML = txtObject.value;
//代表編輯框已經關閉
editer_table_cell_tag = false;
//修改按鈕提示信息
editTip.innerText = "請單擊某個單元格進行編輯!";
}
function enterToTab()
{
if(event.srcElement.type != 'button' && event.srcElement.type != 'textarea'
&& event.keyCode == 13)
{
event.keyCode = 9;
}
}
/**
* 控制是否編輯
*/
function editStart()
{
if(event.srcElement.value == "開始編輯")
{
event.srcElement.value = "編輯完成";
run_edit_flag = true;
}
else
{
//如果當前沒有編輯框,則編輯成功,否則,無法提交
//必須按確定按鈕后才能正常提交
if(editer_table_cell_tag == false)
{
alert("編輯成功結束!");
event.srcElement.value = "開始編輯";
run_edit_flag = false;
}
}
}
/**
* 根據不同的按鈕提供不同的提示信息
*/
function showTip()
{
if(event.srcElement.value == "編輯完成")
{
editTip.style.top = event.y + 15;
editTip.style.left = event.x + 12;
editTip.style.visibility = "visible";
}
else
{
editTip.style.visibility = "hidden";
}
}
-->
</SCRIPT>
<TABLE id="editer_table" width="100%" align="center"
onclick="editerTableCell('editer_table','no_editer')">
<TR class="TrHead">
<TD colspan="3" align="center" id="no_editer">自由編輯表格</TD>
</TR>
<TR>
<TD width="33%">單擊開始編輯按鈕,然后點擊各單元格編輯</TD>
<TD width="33%">2</TD>
<TD width="33%">3</TD>
</TR>
<TR>
<TD width="33%">4</TD>
<TD width="33%">5</TD>
<TD width="33%">6</TD>
</TR>
<TR>
<TD width="33%">one</TD>
<TD width="33%">two</TD>
<TD width="33%">three</TD>
</TR>
<TR>
<TD width="33%">four</TD>
<TD width="33%">five</TD>
<TD width="33%">six</TD>
</TR>
<TR class="TrFoot">
<TD colspan="3" align="center" id="no_editer">
<INPUT type="button" class="bt" value="開始編輯" onClick="editStart()" onMouseOver="showTip()" onMouseMove="showTip()" onMouseOut="editTip.style.visibility = 'hidden';">
</TD>
</TR>
</TABLE>
</BODY>
<DIV id="editTip">請單擊某個單元格進行編輯!</DIV>
</HTML>
/*
* 功能:表單內容格式檢測
* 參數 obj 為表單名稱(ID)
* chktype 為類型,參照函數內釋
*/
function chk(obj, chktype){
switch(chktype){
case 1://判斷是否為空
if(obj.value == ""){
alert("請輸入必要的字符。");
obj.focus();
obj.onselect();
}
break;
case 2://判斷是否為數字
var reg = /^\d+(\.\d+)?$/;
if(!reg.test(obj.value)){
alert("請輸入數字。");
obj.focus();
obj.select();
}
break;
case 3://判斷是否為用戶名格式
var reg = /^[^\d\-_][\w\-]*[^\-_]$/;
if(!reg.test(obj.value)){
alert("請輸入正確的格式。");
obj.focus();
obj.select();
}
break;
case 4://判斷是否為漢字
var reg = /^[\u4E00-\u9FA5]*$/;
if(!reg.test(obj.value)){
alert("你輸入的不全是漢字。");
obj.focus();
obj.select();
}
break;
case 5://判斷是否為郵箱格式
var reg = /^[^\d\-_][\w\-]*[^\-_]@[^\-][a-zA-Z\d\-]*[^\-](\.[^\-][a-zA-Z\d\-]*[^\-])*\.[a-zA-Z]{3}(\.[a-zA-Z]{2})?$/;
if(!reg.test(obj.value)){
alert("你輸入正確的郵箱格式。");
obj.focus();
obj.select();
}
break;
case 6://判斷是否為合法日期格式
var reg = /^(19|20)\d\d\-(0|1)\d\-(0|1|2|3)\d$/;
if(!reg.test(obj.value)){
alert("你輸入正確的日期格式。");
obj.focus();
obj.select();
}
break;
}
}
Abs(number)
返回絕對值。
Array(arglist)
創建一個數組。
Asc(string)
返回字符串第一個字符的ANSI碼。
Atn(number)
返回反正弦值。
CBool (expression)
轉換成Boolean數據類型變量。
CByte (expression)
轉換成Byte數據類型變量。
CCur (expression)
轉換成Currency數據類型變量。
CDate (expression)
轉換成Date數據類型變量。
CDbl (expression)
轉換成Double數據類型變量。
Chr(charcode)
把ANSI 碼轉換成相應的鍵盤字符。
CInt (expression)
轉換成Integer數據類型變量。
CLng (expression)
轉換成Long數據類型變量。
CreateObject(servername.typename)
創建一個自動對象。
CSng (expression)
轉換成Single數據類型變量。
CStr (expression)
轉換成String數據類型變量。
Date
根據所用的系統返回時間。
DateAdd(interval,number,date)
向date對象添加指定的時間間隔。其中參數interval 接受下表所示的值。