涛's profileChina_zhipBlogLists Tools Help

zhip China

Occupation
July 24

Weblogic 8.1与Hibernate的结合的解决方案

基于Hibernate在O/R Mapping方面的优势,目前项目中采用Hibernate实体替代EJB EntityBean, 本人在WebLogic 8.1的环境下做了一个测试,用EJB SessionBean调用Hibernate的数据实体。因为Weblogic和Hibernate都提供了数据库连接池,JNDI,事务等功能。主导思想还是想利用Weblogic Server的在这些服务上的高性能管理。

设计思想:
    使用WebLogic的数据库连接池,而不是Hibernate自带的连接池。
    将Hibernate的SessionFactory配置到Weblogic JNDI目录树下。
    在SessionBean中直接调用Hibernate的实体访问数据库

准备条件:
1、安装以下软件(都可以免费下载使用)
1.1 Mysql 4.0.21 c:\mysql
    创建数据库study,创建数据表cat
1.2 mysql-connector-java-3.0.15-ga.zip mysql驱动程序
1.3 Weblogic platform 8.1    c:\bea
    Weblogic配置完成,域mydomain和服务器myserver,数据池studyjndi,数据源名称mysqldatasource
1.4 Hibernate 2.1.2
    参考其它文档编写一个hibernate的实例cat,编写Cat.hbm.xml和hibernate.cfg.xml文件,了解hibernate的基本配置。
    注意数据库的差异。

2.创建目录结构
C:\Test\lib 将hibernate解压后lib目录下的全部文件拷贝到此
C:\Test\src\com\chenm 源代码存放地(*.java)
C:\Test\classes 将hibernate的配置文件(hibernate.properties,log4j.properties,cache.ccf)
C:\Test\classes\com\chenm 编译好的代码(*.class) + Cat.hbm.xml + hibernate.cfg.xml

步骤1:配置hibernate的环境目录到Weblogic的CLASSPATH中。
    修改Weblogic启动脚本C:\bea\user_projects\domains\mydomain\startweblogic.cmd,在@REM Call WebLogic Server前加入
    @rem set hibernate classpath
    set HIBERNATE_LIB=C:\Test\lib
    set HIBERNATE_CLASSES=C:\Test\classes
    SET CLASSPATH=%HIBERNATE_LIB%\cglib-2.0-rc2.jar;%HIBERNATE_LIB%\commons-collections-2.1.jar;%HIBERNATE_LIB%\commons-lang-1.0.1.jar;%HIBERNATE_LIB%\commons-logging-1.0.3.jar;%HIBERNATE_LIB%\dom4j-1.4.jar;%HIBERNATE_LIB%\hibernate2.jar;%HIBERNATE_LIB%\jcs-1.0-dev.jar;%HIBERNATE_LIB%\log4j-1.2.8.jar;%HIBERNATE_LIB%\odmg-3.0.jar;%HIBERNATE_CLASSES%;%CLASSPATH%

步骤2:修改hibernat.properties文件
2.1 修改以下内容
    注释掉mysql缺省数据库连接
    ## HypersonicSQL

    #hibernate.dialect net.sf.hibernate.dialect.HSQLDialect
    #hibernate.connection.driver_class org.hsqldb.jdbcDriver
    #hibernate.connection.username sa
    #hibernate.connection.password
    #hibernate.connection.url jdbc:hsqldb:hsql://localhost
    #hibernate.connection.url jdbc:hsqldb:test
    #hibernate.connection.url jdbc:hsqldb:.
   
    使用mysql数据库
    ## MySQL

    hibernate.dialect net.sf.hibernate.dialect.MySQLDialect
    #hibernate.connection.driver_class org.gjt.mm.mysql.Driver
    hibernate.connection.driver_class com.mysql.jdbc.Driver
    hibernate.connection.url jdbc:mysql://localhost:3306/study
    hibernate.connection.username test
    hibernate.connection.password weblogic
   
    调整数据库查询和插入的性能参数
    修改hibernate.jdbc.fetch_size 50
    修改hibernate.jdbc.batch_size 25
    
    调整Transaction API
    #hibernate.transaction.factory_class net.sf.hibernate.transaction.JTATransactionFactory
    #hibernate.transaction.factory_class net.sf.hibernate.transaction.JDBCTransactionFactory
    为
    hibernate.transaction.factory_class net.sf.hibernate.transaction.JTATransactionFactory
    hibernate.transaction.factory_class net.sf.hibernate.transaction.JDBCTransactionFactory

    使用JCS缓存
    hibernate.transaction.manager_lookup_class net.sf.hibernate.transaction.WeblogicTransactionManagerLookup

2.2 在文件尾增加以下内容
    hibernate.dialect net.sf.hibernate.dialect.MySQLDialect
    hibernate.connection.datasource studyjndi // 此处为weblogic的数据连接池JNDI名称
    hibernate.connection.provider_class net.sf.hibernate.connection.DatasourceConnectionProvider
    hibernate.session_factory_name hibernate.session_factory // 绑定到weblogic JNDI目录树中的名称

步骤3. 实现SessionFactory的预创建,使用Weblogic的T3StartUpDef接口创建一个StartUp类,配置成Weblogic
启动时自动运行。
3.1 创建文件HibernateStartUp.java,并编译成C:\Test\classes\com\chenm\HibernateStartUp.class文件,
package com.chenm;

import java.util.Hashtable;
import weblogic.common.T3StartupDef;
import weblogic.common.T3ServicesDef;
import net.sf.hibernate.cfg.Configuration;
import net.sf.hibernate.SessionFactory;

public class HibernateStartUp implements T3StartupDef {
        public void setServices(T3ServicesDef services) {}

        public String startup(String name,Hashtable args) throws Exception {
                Configuration conf = new Configuration().addClass(Cat.class);
                SessionFactory sf = conf.buildSessionFactory();
                return "Hibernate Startup completed successfully";
        }
}

3.2 配置StartUp类
    启动Weblogic控制台,打开左边mydomain\部署\启动和关闭节点,选择右边"配置新的 Startup Class..."
    填写名称HibernateStartup, 类名com.chenm.HibernateStartUp,然后点击"创建", 如果没有出错信息就算成功。
   
    确认成功:关闭Weblogic并重启,观察DOS窗口的信息,可以看到在Weblogic启动后显示很多行INFO,如果没有
    错误,证明配置成功。再打开weblogic控制台,选择mydomain\服务器\myserver,点右键,选择察看JNDI树,如果
    看到Hibernate的JNDI对象,在右边可以看见以下信息:

    绑定名称: session_factory
    对象类: net.sf.hibernate.impl.SessionFactoryImpl
    对象散列代码: 45706641
    对象转换成字符串: net.sf.hibernate.impl.SessionFactoryImpl@2b96d91

    Config OK!

4. 编写SessionBean操作Hibernate实体
   在SessionBean中定义Remote方法
     public void InsertCat(String cat_id,String name, char sex, float weight) {
    /**@todo Complete this method*/
    try {

Context ctx = getInitialContext();
SessionFactory sf = (SessionFactory)ctx.lookup("hibernate/session_factory");
Session s = sf.openSession() ;
Transaction t = s.beginTransaction() ;

Cat myCat = new Cat();
myCat.setId(cat_id);
myCat.setName(name);
myCat.setSex(sex);
myCat.setWeight(weight);s.save(myCat);
s.save(myCat);
t.commit() ;
s.close();
  }
  catch( Exception ex ) {
  }

  }
  private Context getInitialContext() throws Exception {
    String url = "t3://chenming:7001"; // chenming服务器名称
    String user = null;
    String password = null;
    Properties properties = null;
    try {
      properties = new Properties();
      properties.put(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory");
      properties.put(Context.PROVIDER_URL, url);
      if (user != null) {
        properties.put(Context.SECURITY_PRINCIPAL, user);
        properties.put(Context.SECURITY_CREDENTIALS, password == null ? "" : password);
      }
      return new InitialContext(properties);
    }
    catch(Exception e) {
      throw e;
    }
  }
  编写测试并运行,在cat表中插入一条纪录
  Context context = getInitialContext();

  //look up jndi name
  Object ref = context.lookup("CatSession");
  //look up jndi name and cast to Home interface
  catSessionHome = (CatSessionHome) PortableRemoteObject.narrow(ref, CatSessionHome.class);
  catSession = catSessionHome.create();
  catSession.InsertCat("007","Chenm.cat",'1',100);

联系方式:QQ:77322113
作者: chenm 来源: CSDN 日期: 2006-3-2 0:34:26
April 28

hibernate 多个表查询显示的问题

java中:  
Query  query  =  session.createQuery("select  A.atest,B.btest,C.ctest  from  AA  A,BB  B,CC  C  where  .....");  
return  query.list();  
 
jsp中:  
     <%for  (int  i=0;i<list.size();i++){%>  
   <%=((AA)list.get(i)).getAtest()%>    --这里出  错:java.lang.ClassCastException,                        如果换成    <%=list.get(i)%>                          则显示"[Ljava.lang.Object;@120d68d  "  
     <%}%>  
 
 
---------------------------------------------------------------  
 
java.lang.ClassCastException是强制类型转换错误,  
你用<%=list.get(i).getClass().getName()%>试试看到底是什么类型  
---------------------------------------------------------------  
 
这说明是一个数组
---------------------------------------------------------------  
 
数组。最好用iterator接口。这里假设从数据库取的三个字段都是String  
iterator  its  =  list.iterator();  
while(its.hasNext())  
{  
   Object[]  row  =  (Object[])its.next();  
   String  atest  =  (String)  row[0];  
   String  btest  =  (String)  row[1];  
   String  ctest  =  (String)  row[2];  
 
   do  something.......  
}  
---------------------------------------------------------------  
 
对  
 
就想楼上说的用iterator来做;  
 
然后:  
 
iterator  it  =  list.iterator();  
while(it.hasNext())  
{  
   Object[]  row  =  (Object[])it.next();  
   String  st1=  (String)  row[0];  
   String  st2=  (String)  row[1];  
   String  st3=  (String)  row[2];  
.  
.  
.  
.  
.  
String  stn=(String)  row[n];  
 
}  
 
就这样循环就可以搞定;  

Asp/js函数收藏/代码/JScript(摘录)

*******************************************************************
'检测是否是手机浏览
'*******************************************************************
<%
if instr(request.ServerVariables("HTTP_USER_AGENT"),"Mozilla")=0 then
response.redirect "/wap" '如果客户端为手机访问,则进入/wap目录
else
response.redirect "http://wap.hxblog.net" '如果客户端不是手机访问,则进入指定地址
end if
%>

 程序代码
'*******************************************************************
'取得IP地址
'*******************************************************************
Function Userip()
Dim GetClientIP
'如果客户端用了代理服务器,则应该用ServerVariables("HTTP_X_FORWARDED_FOR")方法
GetClientIP = Request.ServerVariables("HTTP_X_FORWARDED_FOR")
If GetClientIP = "" or isnull(GetClientIP) or isempty(GetClientIP) Then
'如果客户端没用代理,应该用Request.ServerVariables("REMOTE_ADDR")方法
GetClientIP = Request.ServerVariables("REMOTE_ADDR")
end if
Userip = GetClientIP
End function


 程序代码
'*******************************************************************
' 弹出对话框
'*******************************************************************
Sub alert(message)
message = replace(message,"'","\'")
Response.Write ("<script>alert('" & message & "')</script>")
End Sub
 

 程序代码
'*******************************************************************
' 返回上一页,一般用在判断信息提交是否完全之后
'*******************************************************************
Sub GoBack()
Response.write ("<script>history.go(-1)</script>")
End Sub
 

 程序代码
'*******************************************************************
' 重定向另外的连接
'*******************************************************************
Sub Go(url)
Response.write ("<script>location.href('" & url & "')</script>")
End Sub

 
 程序代码
'*******************************************************************
' 指定秒数重定向另外的连接
'*******************************************************************
sub GoPage(url,s)
s=s*1000
Response.Write "<SCRIPT LANGUAGE=JavaScript>"
Response.Write "window.setTimeout("&chr(34)&"window.navigate('"&url&"')"&chr(34)&","&s&")"
Response.Write "</script>"
end sub


 程序代码
'*******************************************************************
' 判断数字是否整形
'*******************************************************************
function isInteger(para)
on error resume next
dim str
dim l,i
if isNUll(para) then
isInteger=false
exit function
end if
str=cstr(para)
if trim(str)="" then
isInteger=false
exit function
end if
l=len(str)
for i=1 to l
if mid(str,i,1)>"9" or mid(str,i,1)<"0" then
isInteger=false
exit function
end if
next
isInteger=true
if err.number<>0 then err.clear
end function

 
 程序代码
'*******************************************************************
' 获得文件扩展名
'*******************************************************************
function GetExtend(filename)
dim tmp
if filename<>"" then
tmp=mid(filename,instrrev(filename,".")+1,len(filename)-instrrev(filename,"."))
tmp=LCase(tmp)
if instr(1,tmp,"asp")>0 or instr(1,tmp,"php")>0 or instr(1,tmp,"php3")>0 or instr(1,tmp,"aspx")>0 then
getextend="txt"
else
getextend=tmp
end if
else
getextend=""
end if
end function

 
 程序代码
' *----------------------------------------------------------------------------
' * 函数:CheckIn
' * 描述:检测参数是否有SQL危险字符
' * 参数:str要检测的数据
' * 返回:FALSE:安全 TRUE:不安全
' * 作者:
' * 日期:
' *----------------------------------------------------------------------------
function CheckIn(str)
if instr(1,str,chr(39))>0 or instr(1,str,chr(34))>0 or instr(1,str,chr(59))>0 then
CheckIn=true
else
CheckIn=false
end if
end function


 程序代码
' *----------------------------------------------------------------------------
' * 函数:HTMLEncode
' * 描述:过滤HTML代码
' * 参数:--
' * 返回:--
' * 作者:
' * 日期:
' *----------------------------------------------------------------------------
function HTMLEncode(fString)
if not isnull(fString) then
fString = replace(fString, ">", ">")
fString = replace(fString, "<", "<")

fString = Replace(fString, CHR(32), " ")
fString = Replace(fString, CHR(9), " ")
fString = Replace(fString, CHR(34), """)
fString = Replace(fString, CHR(39), "'")
fString = Replace(fString, CHR(13), "")
fString = Replace(fString, CHR(10) & CHR(10), "</P><P> ")
fString = Replace(fString, CHR(10), "<BR> ")

HTMLEncode = fString
end if
end function


 程序代码
'*----------------------------------------------------------------------------
' * 函数:HTMLcode
' * 描述:过滤表单字符
' * 参数:--
' * 返回:--
' * 作者:
' * 日期:
' *----------------------------------------------------------------------------
function HTMLcode(fString)
if not isnull(fString) then
fString = Replace(fString, CHR(13), "")
fString = Replace(fString, CHR(10) & CHR(10), "</P><P>")
fString = Replace(fString, CHR(34), "")
fString = Replace(fString, CHR(10), "<BR>")
HTMLcode = fString
end if
end function



so cool 菜单(Jave)
 程序代码
<style>
body{
background-color:#B8B8A0;
}
#fbtn{
display:none;
overflow:hidden;
border-style:solid;
border-width:1px;
border-color:#e1e1c9 #e1e1c9 #6e6e56 #6e6e56;
padding:1 1 1 1;
width:115px;
height:30px;
}
#fbtn_txt{
position:relative;
}
#fbtn_txt div{
height:30px;
padding-top:11px;
font-size:9px;
font-family:small fonts;
color:#800080;
text-align:center;
cursor:hand;
}
#fbtn_mask{
background-color:#ffffff;
position:relative;
width:100%;
height:100%;
}
</style>

<div id=fbtn>
<div id=fbtn_mask></div>
<div id=fbtn_txt>
<div>G1</div>
<div>good morning</div>
</div>
</div>
<div id=fbtn>
<div id=fbtn_mask></div>
<div id=fbtn_txt>
<div>G2</div>
<div>good evening</div>
</div>
</div>
<div id=fbtn>
<div id=fbtn_mask></div>
<div id=fbtn_txt>
<div>M1</div>
<div>my name is mozart0</div>
</div>
</div>
<div id=fbtn>
<div id=fbtn_mask></div>
<div id=fbtn_txt>
<div>M2</div>
<div>mm mm i love u</div>
</div>
</div>
<div id=fbtn>
<div id=fbtn_mask></div>
<div id=fbtn_txt>
<div>G1</div>
<div>good morning</div>
</div>
</div>
<div id=fbtn>
<div id=fbtn_mask></div>
<div id=fbtn_txt>
<div>G2</div>
<div>good evening</div>
</div>
</div>
<div id=fbtn>
<div id=fbtn_mask></div>
<div id=fbtn_txt>
<div>M1</div>
<div>my name is mozart0</div>
</div>
</div>
<div id=fbtn>
<div id=fbtn_mask></div>
<div id=fbtn_txt>
<div>M2</div>
<div>mm mm i love u</div>
</div>
</div>

<script>
var current=null;
for(var i=0;i<fbtn.length;i++){
fbtn_txt[i].style.posTop=-30;
fbtn_mask[i].style.posTop=-30;
fbtn[i].index=i;
fbtn[i].style.display="block";
fbtn[i].onmouseover=function(){
if(!current){
current=this;
domove(this.index);
}
else if(current!=this){
domove(current.index);
domove(this.index);
current=this;
}
}
fbtn[i].onmouseout=function(){
if(event.toElement==this.parentElement&¤t==this){
domove(this.index);
current=null;
}
}
}
function domove(num){
var o=fbtn_txt[num];
var m=fbtn_mask[num];
if(o.style.posTop<-60){
o.style.display="none";
var t=o.children[1].innerHTML;
o.children[1].innerHTML=o.children[0].innerHTML;
o.children[0].innerHTML=t;
o.style.posTop=-30;
o.style.display="block";
if(m.style.posTop>30)
m.style.posTop=-30;
else
m.style.posTop=0;
}
else{
m.style.posTop+=3;
o.style.posTop-=3;
setTimeout('domove('+num+')',15);
}
}
</script>

                       《几个常用的ASP代码&FSO
1.获得系统时间:
<%=now()%>

2.取得来访用的IP:
<%=request.serverVariables("remote_host")%>

3.获得系统,浏览器版本:
<script>
window.document.write("版本:"+navigator.appName+navigator.appVersion+" browser.")
</script>

4.去除IE混动条:
<body scroll="no">
<body style="overflow-y:hidden">

5.进入网站,跳出广告:
<script language="javascript">
<!--
<!-- 注意更改文件所在路径-->
window.open('http://www.XXXXXX.com','','height=200,width=300,top=0,left=30');
// -->
</script>

6.随机数:
<%randomize%>
<%=(int(rnd()*n)+1)%>
N为可改变数

7.向上混动代码:
<marquee direction="up" scrolldelay="200" style="font-size: 9pt; color: #FF0000; line-height: 150%; font-style:italic; font-weight:bold" scrollamount="2" width="206" height="207" bgcolor="#FFFF00">hhhhhhhhhhhhhhhhhhh</marquee>

8.自动关闭网页:
<script LANGUAGE="javascript">
<!--
setTimeout('window.close();', 10000); //60秒后关闭
// -->
</script>
<p align="center">本页10秒后自动关闭,请注意刷新页面</p>

9.随机背景音乐:
<%randomize%>
<bgsound src="mids/<%=(int(rnd()*60)+1)%>.mid" loop="-1">
可以修改数字,限制调用个数,我这里是60个.

10.自动刷新本页面:
<script>
<!--

var limit="0:10"

if (document.images){
var parselimit=limit.split(":")
parselimit=parselimit[0]*60+parselimit[1]*1
}
function beginrefresh(){
if (!document.images)
return
if (parselimit==1)
window.location.reload()
else{
parselimit-=1
curmin=Math.floor(parselimit/60)
cursec=parselimit%60
if (curmin!=0)
curtime=curmin+"分"+cursec+"秒后重刷本页!"
else
curtime=cursec+"秒后重刷本页!"
window.status=curtime
setTimeout("beginrefresh()",1000)
}
}

window.onload=beginrefresh
file://-->
</script>

11.ACCESS数据库连接:
<%
option explicit
dim startime,endtime,conn,connstr,db
startime=timer()
'更改数据库名字
db="data/dvBBS5.mdb"
Set conn = Server.CreateObject("ADODB.Connection")
connstr="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath(db)
'如果你的服务器采用较老版本Access驱动,请用下面连接方法
'connstr="driver={Microsoft Access Driver (*.mdb)};dbq=" & Server.MapPath(db)
conn.Open connstr
function CloseDatabase
Conn.close
Set conn = Nothing
End Function
%>

12.SQL数据库连接:
<%
option explicit
dim startime,endtime,conn,connstr,db
startime=timer()
connstr="driver={SQL Server};server=HUDENQ-N11T33NB;uid=sa;pwd=xsfeihu;database=dvbbs"
Set conn = Server.CreateObject("ADODB.Connection")
conn.Open connstr
function CloseDatabase
Conn.close
Set conn = Nothing
End Function
%>

13.用键盘打开网页代码:
<script language="javascript">
function ctlent(eventobject)
{
if((event.ctrlKey && window.event.keyCode==13)||(event.altKey && window.event.keyCode==83))
{
window.open('网址','','')
}
}
</script>

这里是Ctrl+Enter和Alt+S的代码 自己查下键盘的ASCII码再换就行

14.让层不被控件复盖代码:
<div z-Index:2><object xxx></object></div> # 前面
<div z-Index:1><object xxx></object></div> # 后面
<div id="Layer2" style="position:absolute; top:40;width:400px; height:95px;z-index:2"><table height=100% width=100% bgcolor="#ff0000"><tr><td height=100% width=100%></td></tr></table><iframe width=0 height=0></iframe></div>
<div id="Layer1" style="position:absolute; top:50;width:200px; height:115px;z-index:1"><iframe height=100% width=100%></iframe></div>

15.动网FLASH广告代码:
<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=5,0,0,0" width="468" height="60"><param name=movie value="images/yj16d.swf"><param name=quality value=high><embed src="images/dvbanner.swf" quality=high pluginspage="http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash";;;;;;;;;;;; type="application/x-shockwave-flash" width="468" height="60"></embed></object>

16.VBS弹出窗口小代码:
<script language=vbscript>
msgbox"你还没有注册或登陆论坛","0","精品论坛"
location.href = "login.asp"
</script>

16.使用FSO修改文件特定内容的函数
function FSOchange(filename,Target,String)
Dim objFSO,objCountFile,FiletempData
Set objFSO = Server.CreateObject("Scripting.FileSystemObject")
Set objCountFile = objFSO.OpenTextFile(Server.MapPath(filename),1,True)
FiletempData = objCountFile.ReadAll
objCountFile.Close
FiletempData=Replace(FiletempData,Target,String)
Set objCountFile=objFSO.CreateTextFile(Server.MapPath(filename),True)
objCountFile.Write FiletempData
objCountFile.Close
Set objCountFile=Nothing
Set objFSO = Nothing
End Function

17.使用FSO读取文件内容的函数
function FSOFileRead(filename)
Dim objFSO,objCountFile,FiletempData
Set objFSO = Server.CreateObject("Scripting.FileSystemObject")
Set objCountFile = objFSO.OpenTextFile(Server.MapPath(filename),1,True)
FSOFileRead = objCountFile.ReadAll
objCountFile.Close
Set objCountFile=Nothing
Set objFSO = Nothing
End Function

18.使用FSO读取文件某一行的函数
function FSOlinedit(filename,lineNum)
if linenum < 1 then exit function
dim fso,f,temparray,tempcnt
set fso = server.CreateObject("scripting.filesystemobject")
if not fso.fileExists(server.mappath(filename)) then exit function
set f = fso.opentextfile(server.mappath(filename),1)
if not f.AtEndofStream then
tempcnt = f.readall
f.close
set f = nothing
temparray = split(tempcnt,chr(13)&chr(10))
if lineNum>ubound(temparray)+1 then
exit function
else
FSOlinedit = temparray(lineNum-1)
end if
end if
end function

19.使用FSO写文件某一行的函数
function FSOlinewrite(filename,lineNum,Linecontent)
if linenum < 1 then exit function
dim fso,f,temparray,tempCnt
set fso = server.CreateObject("scripting.filesystemobject")
if not fso.fileExists(server.mappath(filename)) then exit function
set f = fso.opentextfile(server.mappath(filename),1)
if not f.AtEndofStream then
tempcnt = f.readall
f.close
temparray = split(tempcnt,chr(13)&chr(10))
if lineNum>ubound(temparray)+1 then
exit function
else
temparray(lineNum-1) = lineContent
end if
tempcnt = join(temparray,chr(13)&chr(10))
set f = fso.createtextfile(server.mappath(filename),true)
f.write tempcnt
end if
f.close
set f = nothing
end function

20.使用FSO添加文件新行的函数
function FSOappline(filename,Linecontent)
dim fso,f
set fso = server.CreateObject("scripting.filesystemobject")
if not fso.fileExists(server.mappath(filename)) then exit function
set f = fso.opentextfile(server.mappath(filename),8,1)
f.write chr(13)&chr(10)&Linecontent
f.close
set f = nothing
end function

21.读文件最后一行的函数
function FSOlastline(filename)
dim fso,f,temparray,tempcnt
set fso = server.CreateObject("scripting.filesystemobject")
if not fso.fileExists(server.mappath(filename)) then exit function
set f = fso.opentextfile(server.mappath(filename),1)
if not f.AtEndofStream then
tempcnt = f.readall
f.close
set f = nothing
temparray = split(tempcnt,chr(13)&chr(10))
FSOlastline = temparray(ubound(temparray))
end if
end function
>>>---------我想分页!--这么长的文章,在这里来个分页多好啊!哈哈----------<<<
1. oncontextmenu="window.event.returnValue=false" 将彻底屏蔽鼠标右键
<table border oncontextmenu=return(false)><td>no</table> 可用于Table

2. <body onselectstart="return false"> 取消选取、防止复制

3. onpaste="return false" 不准粘贴

4. oncopy="return false;" oncut="return false;" 防止复制

5. <link rel="Shortcut Icon" href="favicon.ico"> IE地址栏前换成自己的图标

6. <link rel="Bookmark" href="favicon.ico"> 可以在收藏夹中显示出你的图标

7. <input style="ime-mode:disabled"> 关闭输入法

8. 永远都会带着框架
<script language="JavaScript"><!--
if (window == top)top.location.href = "frames.htm"; //frames.htm为框架网页
// --></script>

9. 防止被人frame
<SCRIPT LANGUAGE=JAVASCRIPT><!--
if (top.location != self.location)top.location=self.location;
// --></SCRIPT>

10. 网页将不能被另存为
<noscript><iframe src=*.html></iframe></noscript>

11. <input type=button value=查看网页源代码
onclick="window.location = "view-source:"+ "http://www.pconline.com.cn"">

12.删除时确认
<a href="javascript :if(confirm("确实要删除吗?"))location="boos.asp?&areyou=删除&page=1"">删除</a>

13. 取得控件的绝对位置
//Javascript
<script language="Javascript">
function getIE(e){
var t=e.offsetTop;
var l=e.offsetLeft;
while(e=e.offsetParent){
t+=e.offsetTop;
l+=e.offsetLeft;
}
alert("top="+t+"/nleft="+l);
}
</script>

//VBScript
<script language="VBScript"><!--
function getIE()
dim t,l,a,b
set a=document.all.img1
t=document.all.img1.offsetTop
l=document.all.img1.offsetLeft
while a.tagName<>"BODY"
set a = a.offsetParent
t=t+a.offsetTop
l=l+a.offsetLeft
wend
msgbox "top="&t&chr(13)&"left="&l,64,"得到控件的位置"
end function
--></script>

14. 光标是停在文本框文字的最后
<script language="javascript">
function cc()
{
var e = event.srcElement;
var r =e.createTextRange();
r.moveStart("character",e.value.length);
r.collapse(true);
r.select();
}
</script>
<input type=text name=text1 value="123" onfocus="cc()">

15. 判断上一页的来源
javascript :
document.referrer

16. 最小化、最大化、关闭窗口
<object id=hh1 classid="clsid:ADB880A6-D8FF-11CF-9377-00AA003B7A11">
<param name="Command" value="Minimize"></object>
<object id=hh2 classid="clsid:ADB880A6-D8FF-11CF-9377-00AA003B7A11">
<param name="Command" value="Maximize"></object>
<OBJECT id=hh3 classid="clsid:adb880a6-d8ff-11cf-9377-00aa003b7a11">
<PARAM NAME="Command" VALUE="Close"></OBJECT>
<input type=button value=最小化 onclick=hh1.Click()>
<input type=button value=最大化 onclick=hh2.Click()>
<input type=button value=关闭 onclick=hh3.Click()>
本例适用于IE

17.屏蔽功能键Shift,Alt,Ctrl
<script>
function look(){
if(event.shiftKey)
alert("禁止按Shift键!"); //可以换成ALT CTRL
}
document.onkeydown=look;
</script>

18. 网页不会被缓存
<META HTTP-EQUIV="pragma" CONTENT="no-cache">
<META HTTP-EQUIV="Cache-Control" CONTENT="no-cache, must-revalidate">
<META HTTP-EQUIV="expires" CONTENT="Wed, 26 Feb 1997 08:21:57 GMT">
或者<META HTTP-EQUIV="expires" CONTENT="0">

19.怎样让表单没有凹凸感?
<input type=text style="border:1 solid #000000">

<input type=text style="border-left:none; border-right:none; border-top:none; border-bottom:

1 solid #000000"></textarea>

20.<div><span>&<layer>的区别?
<div>(division)用来定义大段的页面元素,会产生转行
<span>用来定义同一行内的元素,跟<div>的唯一区别是不产生转行
<layer>是ns的标记,ie不支持,相当于<div>

21.让弹出窗口总是在最上面:
<body onblur="this.focus();">

22.不要滚动条?
让竖条没有:
<body style="overflow:scroll;overflow-y:hidden">
</body>
让横条没有:
<body style="overflow:scroll;overflow-x:hidden">
</body>
两个都去掉?更简单了
<body scroll="no">
</body>

23.怎样去掉图片链接点击后,图片周围的虚线?
<a href="#" onFocus="this.blur()"><img src="logo.jpg" border=0></a>

24.电子邮件处理提交表单
<form name="form1" method="post" action="mailto:****@***.com" enctype="text/plain">
<input type=submit>
</form>

25.在打开的子窗口刷新父窗口的代码里如何写?
window.opener.location.reload()

26.如何设定打开页面的大小
<body onload="top.resizeTo(300,200);">
打开页面的位置<body onload="top.moveBy(300,200);">

27.在页面中如何加入不是满铺的背景图片,拉动页面时背景图不动
<STYLE>
body
{background-image:url(logo.gif); background-repeat:no-repeat;
background-position:center;background-attachment: fixed}
</STYLE>

28. 检查一段字符串是否全由数字组成
<script language="Javascript"><!--
function checkNum(str){return str.match(//D/)==null}
alert(checkNum("1232142141"))
alert(checkNum("123214214a1"))
// --></script>

29. 获得一个窗口的大小
document.body.clientWidth; document.body.clientHeight

30. 怎么判断是否是字符
if (/[^/x00-/xff]/g.test(s)) alert("含有汉字");
else alert("全是字符");

31.TEXTAREA自适应文字行数的多少
<textarea rows=1 name=s1 cols=27 onpropertychange="this.style.posHeight=this.scrollHeight">
</textarea>

32. 日期减去天数等于第二个日期
<script language=Javascript>
function cc(dd,dadd)
{
//可以加上错误处理
var a = new Date(dd)
a = a.valueOf()
a = a - dadd * 24 * 60 * 60 * 1000
a = new Date(a)
alert(a.getFullYear() + "年" + (a.getMonth() + 1) + "月" + a.getDate() + "日")
}
cc("12/23/2002",2)
</script>

33. 选择了哪一个Radio
<HTML><script language="vbscript">
function checkme()
for each ob in radio1
if ob.checked then window.alert ob.value
next
end function
</script><BODY>
<INPUT name="radio1" type="radio" value="style" checked>Style
<INPUT name="radio1" type="radio" value="barcode">Barcode
<INPUT type="button" value="check" onclick="checkme()">
</BODY></HTML>

34.脚本永不出错
<SCRIPT LANGUAGE="JavaScript">
<!-- Hide
function killErrors() {
return true;
}
window.onerror = killErrors;
// -->
</SCRIPT>

35.ENTER键可以让光标移到下一个输入框
<input onkeydown="if(event.keyCode==13)event.keyCode=9">

36. 检测某个网站的链接速度:
把如下代码加入<body>区域中:
<script language=Javascript>
tim=1
setInterval("tim++",100)
b=1
var autourl=new Array()
autourl[1]="www.njcatv.net"
autourl[2]="javacool.3322.net"
autourl[3]="www.sina.com.cn"
autourl[4]="www.nuaa.edu.cn"
autourl[5]="www.cctv.com"
function butt(){
document.write("<form name=autof>")
for(var i=1;i<autourl.length;i++)
document.write("<input type=text name=txt"+i+" size=10 value=测试中……> =》<input type=text
name=url"+i+" size=40> =》<input type=button value=GO

onclick=window.open(this.form.url"+i+".value)><br>")
document.write("<input type=submit value=刷新></form>")
}
butt()
function auto(url){
document.forms[0]["url"+b].value=url
if(tim>200)
{document.forms[0]["txt"+b].value="链接超时"}
else
{document.forms[0]["txt"+b].value="时间"+tim/10+"秒"}
b++
}
function run(){for(var i=1;i<autourl.length;i++)document.write("<img src=http://"+autourl+"/"+Math.random()+"

width=1 height=1

onerror=auto("http://"+autourl+"")>")}
run()</script>

37. 各种样式的光标
auto :标准光标
default :标准箭头
hand :手形光标
wait :等待光标
text :I形光标
vertical-text :水平I形光标
no-drop :不可拖动光标
not-allowed :无效光标
help :?帮助光标
all-scroll :三角方向标
move :移动标
crosshair :十字标
e-resize
n-resize
nw-resize
w-resize
s-resize
se-resize
sw-resize

38.页面进入和退出的特效
进入页面<meta http-equiv="Page-Enter" content="revealTrans(duration=x, transition=y)">
推出页面<meta http-equiv="Page-Exit" content="revealTrans(duration=x, transition=y)">
这个是页面被载入和调出时的一些特效。duration表示特效的持续时间,以秒为单位。transition表示使用哪种特效,取值为

1-23:
  0 矩形缩小
  1 矩形扩大
  2 圆形缩小
  3 圆形扩大
  4 下到上刷新
  5 上到下刷新
  6 左到右刷新
  7 右到左刷新
  8 竖百叶窗
  9 横百叶窗
  10 错位横百叶窗
  11 错位竖百叶窗
  12 点扩散
  13 左右到中间刷新
  14 中间到左右刷新
  15 中间到上下
  16 上下到中间
  17 右下到左上
  18 右上到左下
  19 左上到右下
  20 左下到右上
  21 横条
  22 竖条
  23 以上22种随机选择一种

39.在规定时间内跳转
<META http-equiv=V="REFRESH" content="5;URL=http://www.51js.com">

40.网页是否被检索
<meta name="ROBOTS" content="属性值">
  其中属性值有以下一些:
  属性值为"all": 文件将被检索,且页上链接可被查询;
  属性值为"none": 文件不被检索,而且不查询页上的链接;
  属性值为"index": 文件将被检索;
  属性值为"follow": 查询页上的链接;
  属性值为"noindex": 文件不检索,但可被查询链接;
  属性值为"nofollow": 文件不被检索,但可查询页上的链接。
>>>---------我想分页!--这么长的文章,在这里来个分页多好啊!哈哈----------<<<
js宝典学习笔记ZT

每一项都是js中的小技巧,但十分的实用!
1.document.write(""); 输出语句
2.JS中的注释为//
3.传统的HTML文档顺序是:document->html->(head,body)
4.一个浏览器窗口中的DOM顺序是:window->(navigator,screen,history,location,document)
5.得到表单中元素的名称和值:document.getElementById("表单中元素的ID号").name(或value)
6.一个小写转大写的JS: document.getElementById("output").value = document.getElementById("input").value.toUpperCase();
7.JS中的值类型:String,Number,Boolean,Null,Object,Function
8.JS中的字符型转换成数值型:parseInt(),parseFloat()
9.JS中的数字转换成字符型:(""+变量)
10.JS中的取字符串长度是:(length)
11.JS中的字符与字符相连接使用+号.
12.JS中的比较操作符有:==等于,!=不等于,>,>=,<.<=
13.JS中声明变量使用:var来进行声明
14.JS中的判断语句结构:if(condition){}else{}
15.JS中的循环结构:for([initial expression];[condition];[upadte expression]) {inside loop}
16.循环中止的命令是:break
17.JS中的函数定义:function functionName([parameter],...){statement[s]}
18.当文件中出现多个form表单时.可以用document.forms[0],document.forms[1]来代替.
19.窗口:打开窗口window.open(), 关闭一个窗口:window.close(), 窗口本身:self
20.状态栏的设置:window.status="字符";
21.弹出提示信息:window.alert("字符");
22.弹出确认框:window.confirm();
23.弹出输入提示框:window.prompt();
24.指定当前显示链接的位置:window.location.href="URL"
25.取出窗体中的所有表单的数量:document.forms.length
26.关闭文档的输出流:document.close();
27.字符串追加连接符:+=
28.创建一个文档元素:document.createElement(),document.createTextNode()
29.得到元素的方法:document.getElementById()
30.设置表单中所有文本型的成员的值为空:
var form = window.document.forms[0]
for (var i = 0; i<form.elements.length;i++){
if (form.elements[i].type == "text"){
form.elements[i].value = "";
}
}
31.复选按钮在JS中判断是否选中:document.forms[0].checkThis.checked (checked属性代表为是否选中返回TRUE或FALSE)
32.单选按钮组(单选按钮的名称必须相同):取单选按钮组的长度document.forms[0].groupName.length
33.单选按钮组判断是否被选中也是用checked.
34.下拉列表框的值:document.forms[0].selectName.options[n].value (n有时用下拉列表框名称加上.selectedIndex来确定被选中的值)
35.字符串的定义:var myString = new String("This is lightsword");
36.字符串转成大写:string.toUpperCase(); 字符串转成小写:string.toLowerCase();
37.返回字符串2在字符串1中出现的位置:String1.indexOf("String2")!=-1则说明没找到.
38.取字符串中指定位置的一个字符:StringA.charAt(9);
39.取出字符串中指定起点和终点的子字符串:stringA.substring(2,6);
40.数学函数:Math.PI(返回圆周率),Math.SQRT2(返回开方),Math.max(value1,value2)返回两个数中的最在值,Math.pow(value1,10)返回value1的十次方,Math.round(value1)四舍五入函数,Math.floor(Math.random()*(n+1))返回随机数
41.定义日期型变量:var today = new Date();
42.日期函数列表:dateObj.getTime()得到时间,dateObj.getYear()得到年份,dateObj.getFullYear()得到四位的年份,dateObj.getMonth()得到月份,dateObj.getDate()得到日,dateObj.getDay()得到日期几,dateObj.getHours()得到小时,dateObj.getMinutes()得到分,dateObj.getSeconds()得到秒,dateObj.setTime(value)设置时间,dateObj.setYear(val)设置年,dateObj.setMonth(val)设置月,dateObj.setDate(val)设置日,dateObj.setDay(val)设置星期几,dateObj.setHours设置小时,dateObj.setMinutes(val)设置分,dateObj.setSeconds(val)设置秒 [注意:此日期时间从0开始计]
43.FRAME的表示方式: [window.]frames[n].ObjFuncVarName,frames["frameName"].ObjFuncVarName,frameName.ObjFuncVarName
44.parent代表父亲对象,top代表最顶端对象
45.打开子窗口的父窗口为:opener
46.表示当前所属的位置:this
47.当在超链接中调用JS函数时用:(javascript :)来开头后面加函数名
48.在老的浏览器中不执行此JS:<!-- //-->
49.引用一个文件式的JS:<script type="text/javascript" src="aaa.js"></script>
50.指定在不支持脚本的浏览器显示的HTML:<noscript></noscript>
51.当超链和ONCLICK事件都有时,则老版本的浏览器转向a.html,否则转向b.html.例:<a href="a.html" onclick="location.href='b.html';return false">dfsadf</a>
52.JS的内建对象有:Array,Boolean,Date,Error,EvalError,Function,Math,Number,Object,RangeError,ReferenceError,RegExp,String,SyntaxError,TypeError,URIError
53.JS中的换行:\n
54.窗口全屏大小:<script>function fullScreen(){ this.moveTo(0,0);this.outerWidth=screen.availWidth;this.outerHeight=screen.availHeight;}window.maximize=fullScreen;</script>
55.JS中的all代表其下层的全部元素
56.JS中的焦点顺序:document.getElementByid("表单元素").tabIndex = 1
57.innerHTML的值是表单元素的值:如<p id="para">"how are <em>you</em>"</p>,则innerHTML的值就是:how are <em>you</em>
58.innerTEXT的值和上面的一样,只不过不会把<em>这种标记显示出来.
59.contentEditable可设置元素是否可被修改,isContentEditable返回是否可修改的状态.
60.isDisabled判断是否为禁止状态.disabled设置禁止状态
61.length取得长度,返回整型数值
62.addBehavior()是一种JS调用的外部函数文件其扩展名为.htc
63.window.focus()使当前的窗口在所有窗口之前.
64.blur()指失去焦点.与FOCUS()相反.
65.select()指元素为选中状态.
66.防止用户对文本框中输入文本:onfocus="this.blur()"
67.取出该元素在页面中出现的数量:document.all.tags("div(或其它HTML标记符)").length
68.JS中分为两种窗体输出:模态和非模态.window.showModaldialog(),window.showModeless()
69.状态栏文字的设置:window.status='文字',默认的状态栏文字设置:window.defaultStatus = '文字.';
70.添加到收藏夹:external.AddFavorite("http://www.dannyg.com","jaskdlf");
71.JS中遇到脚本错误时不做任何操作:window.onerror = doNothing; 指定错误句柄的语法为:window.onerror = handleError;
72.JS中指定当前打开窗口的父窗口:window.opener,支持opener.opener...的多重继续.
73.JS中的self指的是当前的窗口
74.JS中状态栏显示内容:window.status="内容"
75.JS中的top指的是框架集中最顶层的框架
76.JS中关闭当前的窗口:window.close();
77.JS中提出是否确认的框:if(confirm("Are you sure?")){alert("ok");}else{alert("Not Ok");}
78.JS中的窗口重定向:window.navigate("http://www.sina.com.cn");
79.JS中的打印:window.print()
80.JS中的提示输入框:window.prompt("message","defaultReply");
81.JS中的窗口滚动条:window.scroll(x,y)
82.JS中的窗口滚动到位置:window.scrollby
83.JS中设置时间间隔:setInterval("expr",msecDelay)或setInterval(funcRef,msecDelay)或setTimeout
84.JS中的模态显示在IE4+行,在NN中不行:showModalDialog("URL"[,arguments][,features]);
85.JS中的退出之前使用的句柄:function verifyClose(){event.returnValue="we really like you and hope you will stay longer.";}} window.onbeforeunload=verifyClose;
86.当窗体第一次调用时使用的文件句柄:onload()
87.当窗体关闭时调用的文件句柄:onunload()
88.window.location的属性: protocol(http:),hostname(www.example.com),port(80),host(www.example.com:80),pathname("/a/a.html"),hash("#giantGizmo",指跳转到相应的锚记),href(全部的信息)
89.window.location.reload()刷新当前页面.
90.window.history.back()返回上一页,window.history.forward()返回下一页,window.history.go(返回第几页,也可以使用访问过的URL)
91.document.write()不换行的输出,document.writeln()换行输出
92.document.body.noWrap=true;防止链接文字折行.
93.变量名.charAt(第几位),取该变量的第几位的字符.
94."abc".charCodeAt(第几个),返回第几个字符的ASCii码值.
95.字符串连接:string.concat(string2),或用+=进行连接
96.变量.indexOf("字符",起始位置),返回第一个出现的位置(从0开始计算)
97.string.lastIndexOf(searchString[,startIndex])最后一次出现的位置.
98.string.match(regExpression),判断字符是否匹配.
99.string.replace(regExpression,replaceString)替换现有字符串.
100.string.split(分隔符)返回一个数组存储值.
101.string.substr(start[,length])取从第几位到指定长度的字符串.
102.string.toLowerCase()使字符串全部变为小写.
103.string.toUpperCase()使全部字符变为大写.
104.parseInt(string[,radix(代表进制)])强制转换成整型.
105.parseFloat(string[,radix])强制转换成浮点型.
106.isNaN(变量):测试是否为数值型.
107.定义常量的关键字:const,定义变量的关键字:var

 程序代码
//去左空格;
function ltrim(s){
return s.replace( /^\s*/, "");
}

 程序代码
//去右空格;
function rtrim(s){
return s.replace( /\s*$/, "");
}

 程序代码
//左右空格;
function trim(s){
return rtrim(ltrim(s));
}

 程序代码
//替换
function replace(s, t, u) {
i = s.indexOf(t);
r = "";
if (i == -1) return s;
r += s.substring(0,i) + u;
if ( i + t.length < s.length)
r += replace(s.substring(i + t.length, s.length), t, u);
return r;
}

 程序代码
//检查非法字符
//str 要检查的字符
//badwords 非法字符 &|<>=
function checkbadwords(str, badwords) {
if (typeof (str) != "string" || typeof (badwords) != "string") {
return (false);
}
for (i=0; i<badwords.length; i++) {
bad = badwords.charAt(i);
for (j=0; j<str.length; j++) {
if (bad == str.charAt(j)) {
return false;
break;
}
}
}
return true;
}

 程序代码
//检查合法字符,限制只能输入的字符
//str 要检查的字符
//goodwords 合法字符 1234567890abcdefghijklmnopqrstuvwxyz
function checkgoodwords(str, goodwords) {
if (typeof (str) != "string" || typeof (goodwords) != "string") {
return (false);
}
for (i=0; i<str.length; i++) {
this_str = str.charAt(i);
for (j=0; j<goodwords.length; j++) {
if (this_str == goodwords.charAt(j)) {
break;
}
if(j==goodwords.length-1){
return false;
}
}
}
return true;
}

 程序代码
//函 数 名:chkinteger
//功能介绍:检查是否为数字
//参数说明:要检查的字符串
//返 回 值:false:不是 true:是
function chkinteger(checkStr) {
var checkOK = "0123456789+-";
var allValid = true;
for (i=0; i<checkStr.length; i++) {
ch = checkStr.charAt(i);
if (checkOK.indexOf(ch) == -1) {
allValid = false;
break;
}
if ((ch == '+' || ch == '-') && i>0) {
allValid = false;
break;
}
}
return (allValid);
}

 程序代码
//函 数 名:chklength
//功能介绍:检查字符串的长度
//参数说明:要检查的字符串
//返 回 值:字节长度值
function chklength(checkStr) {
var n = 0;
for (i=0; i<checkStr.length; i++) {
chcode = checkStr.charCodeAt(i);
if (chcode>=0 && chcode<=255) {
n++;
} else {
n += 2;
}
}
return (n);
}

 程序代码
//复选框全选和不全选
//使用方法:
//<input name="chkAll" type="checkbox" id="chkAll" onclick=CheckAll(this.form) value="checkbox">
function unselectall()
{
if(document.myform.chkAll.checked){
document.myform.chkAll.checked = document.myform.chkAll.checked&0;
}
}
function CheckAll(form)
{
for (var i=0;i<form.elements.length;i++)
{
var e = form.elements[i];
if (e.Name != "chkAll"&&e.disabled==false)
e.checked = form.chkAll.checked;
}
}

 程序代码
//check date
//return: 1,days 2,false
//2005-12-19 2005-12-29
function checkdate(start_date,end_date){
//alert("start_date:["+start_date+"] end_date:["+end_date+"]");
//isnull
if(start_date=="" || end_date==""){
//alert("false");
return false;
}
var strSeparator = "-"; //split symbol
//is-
if(start_date.charAt(4)!=strSeparator && start_date.charAt(7)!=strSeparator && end_date.charAt(4)!=strSeparator && end_date.charAt(7)!=strSeparator){
//alert(start_date.charAt(7));
return false;
}
var strDateArrayStart;
var strDateArrayEnd;
strDateArrayStart = start_date.split(strSeparator);
strDateArrayEnd = end_date.split(strSeparator);
var strDateS = new Date(strDateArrayStart[0] + "/" + strDateArrayStart[1] + "/" + strDateArrayStart[2]);
var strDateE = new Date(strDateArrayEnd[0] + "/" + strDateArrayEnd[1] + "/" + strDateArrayEnd[2]);
//check date
var intDay;
intDay = (strDateE-strDateS)/(1000*3600*24);
//alert(intDay);
return intDay;
}

 程序代码
//checkdate_month
//return: 1,true 2,false
//2005-12-19 2005-12-29
//month: number
function checkdate_month(start_date,end_date,month){
//alert("start_date:["+start_date+"] end_date:["+end_date+"]");
//isnull
if(start_date=="" || end_date=="" || month==""){
//alert("false");
return false;
}
var strSeparator = "-"; //split symbol
//is-
if(start_date.charAt(4)!=strSeparator && start_date.charAt(7)!=strSeparator && end_date.charAt(4)!=strSeparator && end_date.charAt(7)!=strSeparator){
//alert(start_date.charAt(7));
return false;
}
var strDateArrayStart;
var strDateArrayEnd;
strDateArrayStart = start_date.split(strSeparator);
strDateArrayEnd = end_date.split(strSeparator);
var strDateS = new Date(strDateArrayStart[0] + "/" + strDateArrayStart[1] + "/" + strDateArrayStart[2]);
var strDateE = new Date(strDateArrayEnd[0] + "/" + strDateArrayEnd[1] + "/" + strDateArrayEnd[2]);
//check date
var intDay;
intDay = (strDateE-strDateS)/(1000*3600*24);
//alert(intDay);
var intMonth = intDay/30;
if(intMonth>month){
return false;
}
return true;
}
April 22

JavaScript

<script language="JavaScript">
  function log_out() {
   top.location.href = "logout.jsp";
  }
<!--
var openedid;
var openedid_ft;
var flag=0,sflag=0;
var folderCodes = new Array('Personal','Product','Order','Lottery','Bonus','Friend','Plan','Complain','Survey');
function clickHandler() {
 var targetid,srcelement,targetelement;
 var strbuf;
 srcelement=window.event.srcElement;  
 if(srcelement.className=="outline") { //在Menu.asp文件如果 class="outline" 则执行
  //将它对应的id值加d得到一个新的id值 "1out6d"
  targetid=srcelement.id+"d";
  //alert(targetid);
//退出系统
  if (targetid == "Logoutd") {
   if (confirm("请确实是否退出会员系统?"))
     log_out() ;
   return;
  }
   
  targetelement=document.all(targetid);
  
  // 关闭其他
  for (i=0; i<folderCodes.length; i++)
   document.all(folderCodes[i]+"d").style.display='none';
  targetelement.style.display='';
  /*
  if (targetelement.style.display=="none") {  //如果 style="display:none" 则执行
   targetelement.style.display=''; //将 display 赋以空值表示菜单以打开
   strbuf=srcelement.src;
   if(strbuf.indexOf("images/plus.gif")>-1) {  //进行图标变换   
    srcelement.src="images/tree_plus.gif";
   }
   else {
    srcelement.src="images/tree_plus.gif";
   }
  }
  else {
   targetelement.style.display="none";
   strbuf=srcelement.src;
   if(strbuf.indexOf("images/tree_plus.gif")>-1)  {
    srcelement.src="images/tree_plus.gif";
   }
   else {
    srcelement.src="images/tree_plus.gif";
   }
  }
  */
 }
 if(srcelement.className=="dirclick") {
  targetid=srcelement.id+"img";
  targetelement=document.all(targetid);
  if(flag==1) {
   if(openedid) {
    openedid.src="images/tree_dir.gif";
   }
   openedid_ft.style.background="#ffffff";
   openedid_ft.style.color="#0000ff";
  }
  if(sflag==1) {
   openedid_ft.style.background="#ffffff";
   openedid_ft.style.color="#0000ff";
  }
  targetelement.src="images/a.gif";
  srcelement.style.background="#000080";
  srcelement.style.color="#ffffff";
  openedid=targetelement;
  openedid_ft=srcelement;
  flag=1;
  sflag=0;
 }
 if(srcelement.className=="serviceclick") {
  targetid=srcelement.id+"img";
  targetelement=document.all(targetid);
  if(flag==1) {
   if(openedid) {
    openedid.src="images/a.gif";
   }
   openedid_ft.style.background="#ffffff";
   openedid_ft.style.color="#0000ff";
   //targetelement.src="images/tree_dir.gif";
  }
  if(sflag==1) {
   openedid_ft.style.background="#ffffff";
   openedid_ft.style.color="#0000ff";
  }
  srcelement.style.background="#000080";
  srcelement.style.color="#ffffff";
  openedid=targetelement;
  openedid_ft=srcelement;
  sflag=1;
  flag=0;
 }
}
document.onclick = clickHandler;
//-->
</script>
 //===============================checkbox============//
//全选。form.selectall.checked为全选按钮的状态。
<SCRIPT language=JavaScript>
<!--
function CheckAll(form)
  {
  for (var i=0;i<form.elements.length;i++)
    {
    var e = form.elements[i];
    if (e.name != 'selectall')
       e.checked = form.selectall.checked;
    }
  }
//-->
</SCRIPT>
//取checkbox的值
  String[] name = request.getParameterValues("myCheckBox");   
   //注:这个"myCheckBox"值就是上一个页面里面对应的checkbox的name对应的值。 
 for(int k=0;k<name.length;k++){ 
   String id = name[k];
 }
 //==================================================//
April 21

URL乱码问题

1 表单提交的数据,用request.getParameter(“xxx”)返回的字符串为乱码或者??
2 直接通过url如http://localhost/a.jsp?name=中国,这样的get请求在服务端用request. getParameter(“name”)时返回的是乱码;按tomcat4的做法设置Filter也没有用或者用request.setCharacterEncoding("GBK");也不管用
原因:
1 tomcat的j2ee实现对表单提交即post方式提示时处理参数采用缺省的iso-8859-1来处理
2 tomcat对get方式提交的请求对query-string 处理时采用了和post方法不一样的处理方式。(与tomcat4不一样,所以设置setCharacterEncoding(“gbk”))不起作用。

解决办法:
首先所有的jsp文件都加上:

1 实现一个Filter.设置处理字符集为GBK。(在tomcat的webapps/servlet-examples目录有一个完整的例子。请参考web.xml和SetCharacterEncodingFilter的配置。)
1)只要把%TOMCAT安装目录%/ webapps\servlets-examples\WEB-INF\classes\filters\SetCharacterEncodingFilter.class文件拷到你的webapp目录/filters下,如果没有filters目录,就创建一个。
2)在你的web.xml里加入如下几行:
 
 <filter> <filter-name>Set Character Encoding</filter-name> <filter-class>filters.SetCharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>GBK</param-value> </init-param> </filter>  <filter-mapping> <filter-name>Set Character Encoding</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
3)完成.
2 get方式的解决办法
1) 打开tomcat的server.xml文件,找到区块,加入如下一行:
URIEncoding=”GBK”
完整的应如下:
<Connector port="80" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" redirectPort="8443" acceptCount="100" debug="0" connectionTimeout="20000"  disableUploadTimeout="true"  URIEncoding="GBK"/>

2)重启tomcat,一切OK。
执行如下jsp页页测试是否成功

<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.util.*"%>
<% String q=request.getParameter("q");  q = q == null? "没有值" : q; %>
<HTML><HEAD><TITLE>新闻列表显示</TITLE>
<META http-equiv=Content-Type content="text/html; charset=gb2312">
<META http-equiv=pragma content=no-cache><body>你提交了:<%=q%>
<form action="tcnchar.jsp" method="post"> 输入中文: <input type="text" name="q"><input type="submit" value="确定"> <br> <a href="tcnchar.jsp?q=中国">通过get方式提交</a> </form></BODY></HTML>
测试结果如果你输入文本框或者点超链都会显示:你提交了”中国”,说明成功!!!!!
March 09

各种连接池的比较

hibernate开发组推荐c3p0,spring开发组推荐dbcp,但是dbcp连接池有weblogic连接池同样的问题,就是强行关闭连接或数据库重启后,无法 reconnect ,告诉连接被重置,这个设置可以解决。hibernate in action推荐c3p0和proxool。

强烈推荐proxool,因为他不但可以监控后台。还可以有效的释放连接。在connection close时,也就是归还connection,
关闭所有的statement,并且判断是否autocommit,如果不行,就rollback,并且设置true,
可以参考proxool的org.logicalcobwebs.proxool.ConnectionResetter类
connection pool把connection reset置回initial state。
dbcp的配置
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="${db.driverClassName}"/>
<property name="url" value="${db.url}"/>
<property name="username" value="${db.username}"/>
<property name="password" value="${db.password}"/>

 <property name="validationQuery">
<value>SELECT 1</value>
</property>
<property name="testOnBorrow">
<value>true</value>
</property>
</bean>

c3p0的配置, 注意是''driverClass' , 'jdbcUrl', 'user' , 'password'

<bean id="dataSource"
  class="com.mchange.v2.c3p0.ComboPooledDataSource"
  destroy-method="close">
  <property name="driverClass">
   <value>oracle.jdbc.driver.OracleDriver</value>
  </property>
  <property name="jdbcUrl">
   <value>jdbc:oracle:thin:@218.202.151.179:58580:ORA9I</value>
  </property>
  <property name="user">
   <value>oa</value>
  </property>
  <property name="password">
   <value>XXXX</value>
  </property>
  <property name="minPoolSize">
   <value>15</value>
  </property>
  <property name="acquireIncrement">
   <value>5</value>
  </property>
  <property name="maxPoolSize">
   <value>25</value>
  </property>

<bean id="c3p0DataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
        destroy-method="close">
        <property name="driverClass">
            <value>${db.driverClass}</value>
        </property>
        <property name="jdbcUrl">
            <value>${db.url}</value>
        </property>
         <!--
        <property name="user">
            <value>${db.user}</value>
        </property>
        <property name="password">
            <value>${db.pass}</value>
        </property>
        -->
        <property name="properties">
            <props>
                <prop key="c3p0.acquire_increment">5</prop>
                <prop key="c3p0.idle_test_period">100</prop>
                <prop key="c3p0.max_size">100</prop>
                <prop key="c3p0.max_statements">0</prop>
                <prop key="c3p0.min_size">10</prop>
                <prop key="user">${db.user}</prop>
                <prop key="password">${db.pass}</prop>
            </props>
        </property>
    </bean>
xapool的配置
 <bean id="dataSource" class="org.enhydra.jdbc.pool.StandardPoolDataSource" destroy-method="stopPool">
    <constructor-arg index="0">
      <bean class="org.enhydra.jdbc.standard.StandardConnectionPoolDataSource">
        <property name="driverName"><value>com.mysql.jdbc.Driver</value></property>
        <property name="url"><value>jdbc:mysql://localhost/dbname</value></property>
      </bean>
    </constructor-arg>
    <property name="user"><value>root</value></property>
    <property name="password"><value>mypass</value></property>
    <property name="minSize"><value>1</value></property>
    <property name="maxSize"><value>5</value></property>
    <property name="jdbcTestStmt"><value>select 1</value></property>
  </bean>
c-jdbc的配置
<bean id="dataSource" class="org.objectweb.cjdbc.driver.DataSource">
    <property name="url"><value>jdbc:cjdbc://127.0.0.1:25322/vdb?user=vuser</value></property>
  </bean>

weblogic的连接池解决办法:Test Reserved Connections: 如果选择了这个选项,服务器会在把连接提供给客户端之前
对其进行测试。 Test Created Connections: 如果选择了这个选项,就会在创建一个JDBC
连接之后和在把它添加到JDBC连接池中的可用连接列表之前,对该JDBC连接进行测试。

tomcat的jndi关于dbcp的配置:

<parameter>
         <name>factory</name>
         <value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
       </parameter>
       <parameter>
         <name>driverClassName</name>
         <value>com.sybase.jdbc2.jdbc.SybDriver</value>
       </parameter>
       <parameter>
         <name>url</name>
         <value>xyz</value>
       </parameter>
       <parameter>
         <name>username</name>
         <value>xyz</value>
       </parameter>
       <parameter>
         <name>password</name>
         <value>xyz</value>
       </parameter>
       <parameter>
         <name>maxActive</name>
         <value>5</value>
       </parameter>
       <parameter>
         <name>maxIdle</name>
         <value>5</value>
       </parameter>
       <parameter>
         <name>maxWait</name>
         <value>-1</value>
       </parameter>
       <parameter>
         <name>removeAbandoned</name>
         <value>true</value>
       </parameter>
       <parameter>
         <name>validationQuery</name>
         <value>select count(*) from sometable where 1 = 0</value>
       </parameter>
       <parameter>
         <name>testOnBorrow</name>
         <value>true</value>
       </parameter>

c3p0 连接池

    Hibernate 配置文件主要用于配置数据库连接和Hibernate运行时所需要的各种属性(如,连接池,SQL方言,是否现实SQL日志等)。
    Hibernate 同时支持 xml 格式的配置文件各传统的 properties 文件配置形式,这里采用 xml 。
    配置文件名默认为 hibernate.cfg.xml(或 hibernage.properties),Hibernate在初始化期间自动在 classPath中寻找这个文件,并读取其中的配置信息,并加载。
    以下是 hibernate.cfg.xml 文件(在项目 HibernateProject 的src 下放以下内容):
<?xml version="1.0" encoding="GB2312"?>
<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<hibernate-configuration>
 <session-factory>
  
  <!-- 是否将运行期生成的SQL输出到日志以供调试 -->
  <property name="hibernate.show_sql">
   true
  </property>
  
  <!-- SQL 方言-->
  <property name="hibernate.dialect">
   org.hibernate.dialect.SQLServerDialect
  </property>
  
  <!-- 数据库用户 -->
  <property name="hibernate.connection.username">
   sa
  </property>
  
  <!-- 数据库密码 -->
  <property name="hibernate.connection.password">
   123456
  </property>
  
  <!-- 数据库 JDBC 驱动-->
   <property name="hibernate.connection.driver_class">
   com.microsoft.jdbc.sqlserver.SQLServerDriver
  </property>
  
  <!-- 数据库 URL -->
  <property name="hibernate.connection.url">
   jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName=hbdb
  </property>
  
  <!-- 事务管理类型 -->
  <!-- Hibernate 3 对包名做了修改 ( net.sf.hibernate  => org.hibernate )-->
  <property name="hibernate.transaction.factory_class">
   org.hibernate.transaction.JDBCTransactionFactory
  </property>
  
  <!-- c3p0 连接池 -->
  <property name="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property>
  <property name="hibernate.c3p0.max_size">2</property>
  <property name="hibernate.c3p0.min_size">2</property>
  <property name="hibernate.c3p0.timeout">50000</property>
  <property name="hibernate.c3p0.max_statements">100</property>
  <property name="hibernate.c3p0.idle_test_period">3000</property>
  <property name="hibernate.c3p0.acquire_increment">2</property>
  <property name="hibernate.c3p0.validate">false</property>
 
  
  <!-- 映射的配置文件,对应数据库表 KELA_STUDENT 的映射文件,在后面将看到这个文件的配置 -->
  <mapping resource="com/kela/hb/pojo/KelaStudent.hbm.xml"/>
 </session-factory>
</hibernate-configuration>