<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.sql.*"%>
<%Class.forName("org.gjt.mm.mysql.Driver").newInstance();
String url ="jdbc:mysql://localhost/softforum?user=soft&password=soft1234&useUnicode=true&characterEncoding=8859_1";
//testDB为你的数据库名
Connection conn= DriverManager.getConnection(url);
Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
String sql="select * from test";
ResultSet rs=stmt.executeQuery(sql);
while(rs.next()) {%>
您的第一个字段内容为:<%=rs.getString(1)%>
您的第二个字段内容为:<%=rs.getString(2)%>
<%}%>
<%out.print("数据库操作成功,恭喜你");%>
<%rs.close();
stmt.close();
conn.close();
%>
一、jsp连接Oracle8/8i/9i数据库(用thin模式)
testoracle.jsp如下:
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.sql.*"%>
<%Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
String url="jdbc:oracle:thin:@localhost:1521:orcl";
//orcl为你的数据库的SID
String user="scott";
String password="tiger";
Connection conn= DriverManager.getConnection(url,user,password);
Statement stmt=conn.createStatement
(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
String sql="select * from test";
ResultSet rs=stmt.executeQuery(sql);
while(rs.next()) {%>
您的第一个字段内容为:<%=rs.getString(1)%>
您的第二个字段内容为:<%=rs.getString(2)%>
<%}%>
<%out.print("数据库操作成功,恭喜你");%>
<%rs.close();
stmt.close();
conn.close();
%>
二、jsp连接Sql Server7.0/2000数据库
testsqlserver.jsp如下:
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.sql.*"%>
<%Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();
String url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=pubs";
//pubs为你的数据库的
String user="sa";
String password="";
Connection conn= DriverManager.getConnection(url,user,password);
Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
String sql="select * from test";
ResultSet rs=stmt.executeQuery(sql);
while(rs.next()) {%>
您的第一个字段内容为:<%=rs.getString(1)%>
您的第二个字段内容为:<%=rs.getString(2)%>
<%}%>
<%out.print("数据库操作成功,恭喜你");%>
<%rs.close();
stmt.close();
conn.close();
%>
三、jsp连接DB2数据库
testdb2.jsp如下:
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.sql.*"%>
<%Class.forName("com.ibm.db2.jdbc.app.DB2Driver ").newInstance();
String url="jdbc:db2://localhost:5000/sample";
//sample为你的数据库名
String user="admin";
String password="";
Connection conn= DriverManager.getConnection(url,user,password);
Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
String sql="select * from test";
ResultSet rs=stmt.executeQuery(sql);
while(rs.next()) {%>
您的第一个字段内容为:<%=rs.getString(1)%>
您的第二个字段内容为:<%=rs.getString(2)%>
<%}%>
<%out.print("数据库操作成功,恭喜你");%>
<%rs.close();
stmt.close();
conn.close();
%>
四、jsp连接Informix数据库
testinformix.jsp如下:
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.sql.*"%>
<%Class.forName("com.informix.jdbc.IfxDriver").newInstance();
String url = "jdbc:informix-sqli://123.45.67.89:1533/testDB:INFORMIXSERVER=myserver;
user=testuser;password=testpassword";
//testDB为你的数据库名
Connection conn= DriverManager.getConnection(url);
Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
String sql="select * from test";
ResultSet rs=stmt.executeQuery(sql);
while(rs.next()) {%>
您的第一个字段内容为:<%=rs.getString(1)%>
您的第二个字段内容为:<%=rs.getString(2)%>
<%}%>
<%out.print("数据库操作成功,恭喜你");%>
<%rs.close();
stmt.close();
conn.close();
%>
五、jsp连接Sybase数据库
testmysql.jsp如下:
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.sql.*"%>
<%Class.forName("com.sybase.jdbc.SybDriver").newInstance();
String url =" jdbc:sybase:Tds:localhost:5007/tsdata";
//tsdata为你的数据库名
Properties sysProps = System.getProperties();
SysProps.put("user","userid");
SysProps.put("password","user_password");
Connection conn= DriverManager.getConnection(url, SysProps);
Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
String sql="select * from test";
ResultSet rs=stmt.executeQuery(sql);
while(rs.next()) {%>
您的第一个字段内容为:<%=rs.getString(1)%>
您的第二个字段内容为:<%=rs.getString(2)%>
<%}%>
<%out.print("数据库操作成功,恭喜你");%>
<%rs.close();
stmt.close();
conn.close();
%>
六、jsp连接MySQL数据库
testmysql.jsp如下:
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.sql.*"%>
<%Class.forName("org.gjt.mm.mysql.Driver").newInstance();
String url ="jdbc:mysql://localhost/softforum?user=soft&password=soft1234&useUnicode=true&characterEncoding=8859_1";
//testDB为你的数据库名
Connection conn= DriverManager.getConnection(url);
Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
String sql="select * from test";
ResultSet rs=stmt.executeQuery(sql);
while(rs.next()) {%>
您的第一个字段内容为:<%=rs.getString(1)%>
您的第二个字段内容为:<%=rs.getString(2)%>
<%}%>
<%out.print("数据库操作成功,恭喜你");%>
<%rs.close();
stmt.close();
conn.close();
%>
七、jsp连接PostgreSQL数据库
testmysql.jsp如下:
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.sql.*"%>
<%Class.forName("org.postgresql.Driver").newInstance();
String url ="jdbc:postgresql://localhost/soft";
//soft为你的数据库名
String user="myuser";
String password="mypassword";
Connection conn= DriverManager.getConnection(url,user,password);
Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
String sql="select * from test";
ResultSet rs=stmt.executeQuery(sql);
while(rs.next()) {%>
您的第一个字段内容为:<%=rs.getString(1)%>
您的第二个字段内容为:<%=rs.getString(2)%>
<%}%>
<%out.print("数据库操作成功,恭喜你");%>
<%rs.close();
stmt.close();
conn.close();
%>
八、jsp连接Access数据库
<%@page import="java.sql.*"
import ="java.util.*"
import ="java.io.*"
import="java.text.*"
contentType="text/html; charset=gb2312"
buffer="20kb"
%><%! int all,i,m_count;
String odbcQuery;
Connection odbcconn;
Statement odbcstmt;
ResultSet odbcrs;
String username,title,content,work,email,url,time,date;
String datetime;
%>
<%
try{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
}catch (ClassNotFoundException e)
{ out.print ("驱动程序不存在");
}
try{
odbcconn = DriverManager.getConnection("jdbc:odbc:db1");
odbcstmt = odbcconn.createStatement();
odbcQuery="Select * From book where datetime>2001-4-26 Order By datetime DESC";
odbcrs=odbcstmt.executeQuery(odbcQuery);
int i=0;
while (i<130) odbcrs.next();
while (odbcrs.next())
{
//*/////////////////////////显示数据库的内容用于调试程序是用//
int ii;
try{
try{
for (ii=1;;ii++)
out.print ("<br>Cloumn "+ii+" is: "+odbcrs.getString(ii));
}catch (NullPointerException e) {
out.print ("有空的指针");
}
}catch (SQLException e){
}
}
odbcrs.close();
odbcstmt.close();
odbcconn.close();
}catch (SQLException e)
{ out.print (e);
}
%>
本人前些天感冒了,到积水潭去看病偶尔看到他们的计算机系统用的是csp,以前听说过,现在终于找到了相关文章,好象也就是asp$php$jsp 一样的,但不同在他原理上可能导致它要快一些:
这个CSP不是CSP(Commercial Service Provider)即商业服务提供商,CSP不是Client/Server Program,也不是Chinese Super Programer,更不是CS Player,那么什么是CSP呢?在说明什么是CSP之前,先说明什么是“骇人听闻”,一说到“骇人听闻”,你可能就想到了是什么坏事吧,其实不一定,应该说就是前所未闻的事说严重一点就是“骇人听闻”了。在每一本关于asp, php, jsp, asp.net书上都告诉你,做网站不可能使用C++,真的吗?这个CSP偏偏就是C++ Server Pages的简称,和asp、jsp类似,属于一种Web应用扩充的脚本语言,可以用来编写网页代码。其对应的文件名是".CSP"。
(下面的文字部分来源于《CSP开发者手册》)
CSP使用C++语言作为脚本的语言,和asp、jsp、php等不同的是,CSP不是解释执行的脚本,而是真正编译后执行的脚本。因此和其它脚本语言相比较,CSP执行速度和效率都要高一些,由于使用标准的动态连接思想,因此CSP可以被用户非常方便的扩充,对于复杂的或者保密要求高的应用,完全可以通过CSP扩展来完全隐藏实现的细节。
CSP是经过编译执行的代码,用户需要作的是维护CSP的源码,而编译过程是由CSP内置的编译器来完成,称为现场编译(Field Compile)。CSP脚本的缺点是需要保存编译后的二进制代码,以提高再次执行的速度,因此CSP作的网站需要比其它脚本语言占用更多的磁盘空间。
CSP实际上就是一种CGISpawn,关于CGISpawn的详细介绍可以参考MSDN的相关内容。
---------------------------------------------------------------------------
antigloss 插嘴说:
再往下看之前,请您先了解一下如何配置 CSP 服务器。先安装 IIS(5.0 以上版本)或者 Apache(1.3.x 以上版本),然后安装 C++ Server Pages (CSP) Engine。至此,一台 CSP 服务器就配置成功了。
CSP Engine 下载地址:http://stdcpp.cn/html/8/17/0512/98.htm
---------------------------------------------------------------------------
好了,回到主题上来。现在的首要任务是:如何使用CSP写页面呢?
在场的各位会写ASP页面的有多少人呢?
嗯,好,还挺多的嘛~~~~那我就继续了。
大家都知道在ASP中写代码是要在 <% 与 %> 之间的部分写的,CSP也是如此。不过少许的差别还是有的。这个差别体现在:
1.CSP对大小写敏感。因为这是C++啊,会C/C++语言的人都知道。
2.在CSP的体系中,有一个特殊的代码段标志:<%! %>。
仔细看,没错,就是写在 <%! %> 之间,在第一个%后面有一个!,这是作为全局变量和自定义函数代码块的标志,声明结构体也要在这里。在一个CSP页面中,所有的自定义函数的实现一定要放在<%! %>之间。而其它的代码则可以像ASP代码一样在页面的各处随意穿插安放。只要在<% %>中就行。
在了解这些细节之后,我们就可以开始写页面了。
我先给出一个简单的例子,然后再仔细给大家分析一下:
<%
int i=0;
char s[50];
for ( i = 0; i < 10; ++i )
{
sprintf(s,"
%d : 欢迎来到CSP的世界!",i);
Response.Write(s);
}
%>
It is over!
访问这个CSP页面,你会得到一个显示如下内容的页面:
0 : 欢迎来到CSP的世界!
1 : 欢迎来到CSP的世界!
2 : 欢迎来到CSP的世界!
3 : 欢迎来到CSP的世界!
4 : 欢迎来到CSP的世界!
5 : 欢迎来到CSP的世界!
6 : 欢迎来到CSP的世界!
7 : 欢迎来到CSP的世界!
8 : 欢迎来到CSP的世界!
9 : 欢迎来到CSP的世界!
It is over!
大家都学过C语言吧,看看上面的语句(不是吧?你C语言挂了?!)。变量声明与循环我就不多讲了,有两句得说一下:
1.sprintf(s,"
%d : 欢迎来到CSP的世界!",i);
这句是把我们要显示的字符串复制到缓冲区 s 中去。实现这个功能的函数是:sprintf 。是不是觉得和C语言中的 printf 很像呢?没错,它实际上与printf就是同一族的(其它的还有wsprintf , fprintf 等等。这里先不做讨论。)printf的任务是把字符串输出到屏幕,而sprintf则是把字符串输出到内存中的一块区域,以供别的代码使用。它的的用法和printf类似,都是要通过%d等一些占位符来实现格式化输出。当页面执行完这一句之后,就把“0 : 欢迎来到CSP的世界!”这样的字符串放到数组 s 中了。
2.Response.Write(s);
这一句对于经常进行ASP编程的同学应该相当熟悉吧。它的主要任务就是把刚才我们得到的字符串从内存中取出来,再写入服务器的响应,进而显示在你的浏览器上。如果你已经能够正确地显示出结果,那么恭喜你,你已经入门了!
下面介绍一下在CSP中可以使用的数据类型以及可以直接使用的基本类,还有很实用的功能类。
char
wchar_t
std::string
std::wstring
int
unsigned int
__int64
unsigned __int64
long
unsigned long
short
unsigned short
char
unsigned char
bool
double
float
以上类型支持 const 关键字。
以下是基本类:
CSPDate
CSPTime
CSPDateTime
CSPVariant
CSPBuffer
CSPDate
CSPException
CSPFile
CSPString
CSPVarArray
CSPWString
这三个类是对数据库操作的封装:
CSPODBCConnection
CSPODBCField
CSPODBCRecordset
以下是功能类:
CSPImpersonation
CSPMail
CSPMime
CSPMimePart
CSPTemplate
CSPThread
CSPThreadLock
CSPThreadLockHandler
CSPTimer
CSPTxContext
CSPTxObject
下面这几个是模板类(这确实让我很惊奇):
CSPPool
CSPPool::ObjectPtr
CSPArray
CSPPtr
写了这么多,好累啊。也不知道有人看没???对于那个为什么会有关于<%! %>的规定的原因,我改天会仔细阐述的。但愿这个“改天”不会太长,呵呵。
现在读大二下学期了,从大一下学期开始学习java,旁听java课程,到现在正式地上了必修的课程,一年多以来,感觉上对J2SE大概有了一个理解。不敢说钻研得很深刻,但是也能解决许多问题了。
一年来,在学习的过程中,遇到了许多问题和困难,解决问题之余也渐渐积累了不少经验。现在,同学之间讨论或者许多询问的问题中,我觉得许多都非常有代表性。从初学者的角度看,我觉得我可以提供一些经验,使现在的初学者可以少走一些弯路,或者在郁闷的时候或者坚持不下去的时候,能够看到一点希望。
这学期学校开java的必修了,很多同学在选择课本的时候,都问道我这样的问题:怎样的书合适?真的不好回答这个问题,其实要看看你的底子了。如果对在学习java之前你对Cpp很熟悉的话,那么你可以直接选择类似于《Thinking in java》这样的书籍,虽然很多人都说TIJ不太适合初学者,不过有面向对象的基础的话,这本书还是很好理解的。如果你是一个真正的初学者,那还是先看一些简单的吧,比如《The Java Tutorial》,如果你连C语言都没有碰过,那么我建议你先学一下C语言吧,因为你连基本的语法都不懂,不要太急躁了,你对java的追求只能体现出你的浮躁。
说到浮躁,这也是一个很值得我们深思的问题。说实话,我觉得我自己也有这样的倾向,不仅是我,估计大多数的人都有这个毛病。总是喜欢讨论什么语言最好,什么语言功能强大。这种讨论倒没有错,不过真正学习的时候,浮躁会使你失去很多。在学习过程中,我很努力地使自己保持心理的平静,从基础学起,甚至是一些看上去完全没有必要的基础。我可以很坦诚地说,《Thinking in java》原版第三版的前15章我至少仔细看过两次以上,书里面多处有详细的读书笔记。里面的代码60%以上的运行过,包括可能你认为很简单的switch语句,包括一些简单的类的继承。对老师上课说的代码,起码也是读过2次以上。这一年来,我读过的Java代码超过两万行,但是最复杂的每一个程序也只是一些套接字网络编程的程序,而大多数的都是代码的优化和程序的设计思想。正因为有这些经历,我才敢在这里写下这段话,才敢说我有一个勉强扎实的基础。
。。。(待续)
宿舍要熄灯了,明天继续写。
PHP比ASP优秀的七个理由
ASP是微软公司实现动态网页的一种技术。ASP支持一些脚本语言,主要以VBScripp为主。与ASP相比较,你还可以选择另一中开放源代码编程语言——PHP,PHP可以运行在多种操作系统下,其中包括Linux和windows。
虽然ASP是一种不错的技术,但从长远考虑我相信PHP在将来的技术领域里会有不凡的表现。
我认为有七个理由可以说明PHP比ASP更优秀:
1、速度、速度、速度
当我第一次运行PHP脚本程序时,我不禁对自己说:“太快了”,当时我是在仪态166MHZ的机器上运行我的程序的,但运行的速度仍然很快。
ASP是永远也不会象PHP这样快的,因为ASP是建立在COM体系结构之上的。当用VBScript写ASP脚本时,实际上实在使用COM的对象,当向用户浏览器发送信息时,它用的是Response对象的write方法,当它访问数据库和文件系统的时候,它用的是其他的COM对象。这些COM对象的使用使运行速度下降。
在PHP代码中,所有的工作都运行在PHP的内存空间中,也就是说PHP不是基于COM对象的,所以的他的运行速度会快一些。
下面是我们在MSSQL7 40次运行一个查询语句的执行时间统计:
PHP Querying MSSQL7 时间(秒)
用 MSSQL extension 01.88
用 ODBC extension 09.54
用 ODBC via COM (ADO) 17.28
用OLEDB via COM 06.19
当我们使用PHP.ODBC,访问数据库用了9.54秒,而用COM接口去连接数据库需要比PHP所用的时间高80%。
OLEDB是微软的一种高速访问数据库的技术,他比ODBC要快。但当我们所PHP和OLEDB的效率实验时,结果是PHP的整体性能比OLEDB高200%,如此的出一个结论,如果不采用COM可以获得较快的执行速度。
当然PHP的执行速度还不是最快的,但我们才刚刚开始起步,我们会逐步的完善他,而且PHP是一种开放源代码编程语言,世界上许多程序员在不断的完善他的技术,相信他一定会比非开放源代码系统获得更高的执行速度的。
2、高级内存管理
在IIS4下,一个ASP脚本header.asp,如果被20个页面所包含,那么运行的时候,在内存当中会保留这20个header.asp的编译副本,IIS5解决了这个问题,但只有windows2000才支持IIS5,由于这种IIS5的不能向下兼容的原因,许多服务器仍然要使用IIS4下的低级的内存管理。
而在PHP中,不会存在这种问题,只有当require时,才会调用某个include文件。
3、没有后顾之忧
我非常憎恨的一件事情就是会买到一件不放心的产品,比如当你买了一辆汽车,但由于发动机是坏的,你需要更换他;当你买了一栋房子的时候,你要去修补漏雨的屋顶。
那么ASP旧乡这些产品一样,当你买了ASP之后,如果你需要加密技术,你就要买ASPEncrypt;当你需要Email管理时,你就要买ServerObjets Qmail;当你需要文件上传时,你还要买Artisans SA-FileUp.
4、MySQL使PHP更精彩
PHP与MySQL的组合既简单又精彩。PHP有许多管理和维护MySQL的工具,对MySQk的支持是最全面的。许多有用的函数如mysql_insert_id和mysql_affected_rows等,其他的数据库则没有。
ASP和PHP都是中型网站的较理想的解决方案,但PHP与MySQL的紧密结合使PHP更加优越。
MySQL的虚度比Microsoft Access速度快,Mssql和Oracle速度比MySQL要快,可是费用较高。
5、Java和C++的变成风格
这个优点只是一个看法。
我知道你不会相信一个Visual Basic程序员会因为PHP有Java和C++的编程风格而转向使用PHP,但你会相信有许多人还是喜欢Java和C++的,PHP是一种具有这两种语言的编程风格的较容易学习的语言。
PHP支持结构化编程,在VB因为他的继承性使用类还是较少的。而PHP的象Java和C++一样的继承性使一个大型的程序中到处都充满了类的影子。
6、Bug的处理。
你是否曾经要求Microsoft修改ASP的一些Bug呢?如果你不是一个象Boeing一样的组织,你无法获得迅速而恰当的修改,把么当你遇到Bug而停止工作时,如果这个Bug不修改,你将无法继续你的工作的。
PHP,当你发现Bug时,你可以修改他,如果你没有专家的水平,你可以请专家修改,并且你的修改会得到开放代码组织的接受和认可。
7、移植性
Microsoft经常修改ASP,下一版本叫ASP+,现在已经开始测试。我相信他们会修改许多我曾经提到过的问题。但也无庸质疑的,Microsoft会将你限制在他们的产品范围之内的。
我曾经是一个苹果机的程序员,当windows95问世后,我开始转变,但许多原来的代码都无法在windows95下运行,这些代码现在被放在一边,我非常的遗憾。所以我不希望在windows下再出现这样的悲剧。
不要忘记Novell曾经也象Microsoft的网络操作系统一样热及一时,但现在已经没有许多人用了,那么Microsoft也会这样的。
我找到了PHP,我仍旧在windows下工作,但我知道PHP代码可以运行在Solaris、Linux和许多其他的操作系统中,我的心里感到安慰。
简单的类定义
class SimpleClass
{
// 成员声明
public $var = 'a default value';
// 方法声明
public function displayVar() {
echo $this->var;
}
}
?>
new
要创建一个对象的实例,必须创建一个新对象并将其赋给一个变量。当创建新对象时该对象总是被赋值,除非该对象定义了构造函数并且在出错时抛出了一个异常。(很像java,呵呵)
创建一个实例e
$instance = new SimpleClass()
?>
当把一个对象已经创建的实例赋给一个新变量时,新变量会访问同一个实例,就和用该对象赋值一样。此行为和给函数传递入实例时一样。可以用克隆给一个已创建的对象建立一个新实例。
对象赋值
$assigned = $instance;
$reference =& $instance;
$instance->var = '$assigned will have this value';
$instance = null; // $instance and $reference become null
var_dump($instance);
var_dump($reference);
var_dump($assigned);
?>
上例将输出:
NULL
NULL
object(SimpleClass)#1 (1) {
["var"]=>
string(30) "$assigned will have this value"
}
extends
一个类可以在声明中用 extends 关键字继承另一个类的方法和成员。不能扩展多个类,只能继承一个基类。
被继承的方法和成员可以通过用同样的名字重新声明被覆盖,除非父类定义方法时使用了 final 关键字。可以通过 parent:: 来访问被覆盖的方法或成员。
例子 19-4. 简单的类继承
class ExtendClass extends SimpleClass
{
// Redefine the parent method
function displayVar()
{
echo "Extending class\n";
parent::displayVar();
}
}
$extended = new ExtendClass();
$extended->displayVar();
?>
上例将输出:
Extending class
a default value
看后觉得如果有Java基础是不是感觉这个问题很是简单了呢。。。。呵呵
在村子里经常看到有人问xajax的技术,说实话,我觉得那东西太麻烦,用起来太费事.
ajax本身实现的机制不是很难,难的应该是在后期的javascript处理返回的responseText,responseXml
ajax本身的操作过程无外是:
1.构建一个xmlHTTP对像
2.通过xmlHTTP的同步或是异步方式发送数据(大部分都是异步方式)
3.如果是异步方式检查xmlHttp的状态变化
4.当状态变到readyState==4,而且status==200说明发送数据成功
5.这时候再通过javascript处理xmlHTTP的responseText或是responseXml(这两者是同时存在的)
下面来实现这个过程
1.构建一个xmlHTTP的对像
CODE:function createRequest(){
if(typeof XMLHttpRequest!="undefined") {
return new XMLHttpRequest();
}else if(typeof ActiveXObject!="undefined"){
var xmlHttp_ver = false;
var xmlHttp_vers = ["MSXML2.XmlHttp.5.0","MSXML2.XmlHttp.4.0","MSXML2.XmlHttp.3.0","MSXML2.XmlHttp","Microsoft.XmlHttp"];
if(!xmlHttp_ver){
for(var i=0;i<xmlHttp_vers.length;i++){
try{
new ActiveXObject(xmlHttp_vers[i]);
xmlHttp_ver = xmlHttp_vers[i];
break;
}catch(oError){;}
}
}
if(xmlHttp_ver){
return new ActiveXObject(xmlHttp_ver);
}else{
throw new Error("Could not create XML HTTP Request.");
}
}else{
throw new Error("Your browser doesn't support an XML HTTP Request.");
}
}
注意:xmlHttp_vers 应该从版本高的往版本低的写,这样建立对像的数据调用的是你机子上安装过的最高版本的MSXML2.XmlHttp
第二步发送数据
这里主要是调用xmlHttp的open方法和send方法来处理
xmlHTTP的方法可以到www.xmlhttp.cn查看(我以前发过一个chm的,但因为版权被村长删除啦,谁要是想要,回信,我发一下)
下面是用post的方法发送数据
CODE:var xmlHttp;
xmlHttp = createRequest();
function sendPostRequest()
{
var shownum=document.getElementById("shownum").value;// html页面中一个id为shownum的input表单
var url = "show.php";//要发送到的URL
var queryString = "shownum" + "=" + shownum;
//向服务端发送请求
xmlHttp.open("post", url, true);//这里的第三个参数为true为异步方式处理
xmlHttp.onreadystatechange = showData;//异步方式处理,当状态改变时会调用onreadystatechange属性指定的回调函数showData
xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;");//这一句是用post方法发送的时候必须写的
xmlHttp.send(queryString);//发送你构建成的数据,如果为“get”方法时,这里可以写成xmlHttp.send(NULL);
}
第三步
当状态改变时会调用onreadystatechange属性指定的回调函数showData,来来检查状态变化
xmlHTTP.readyState 和xmlHTTP.status 可以去查手册,看一下就知道
CODE:function showData()
{
var msg=document.getElementById("status");
//第4步
if(xmlHttp.readyState==4)
{
if(xmlHttp.status==200)
{
//只有当readyState为4并且status为200时,才表示符合要求
//下面这一句话,就相当于上面说的第5步,处理返回的结果
msg.innerHTML = xmlHttp.responseText;
}
}
else
{
switch(xmlHttp.readyState)
{
case 0:
msg.innerHTML="未初始化...";
break;
case 1:
msg.innerHTML="加载中...";
break;
case 2:
msg.innerHTML="连接完成...";
break;
case 3:
msg.innerHTML="交换数据...";
break;
default:
break;
}
}
}
到这里就一次xmlhttp发送异步调用数据也就算完成啦
完整的代码是
CODE:<html>
<head>
<title>
ajax
</title>
<script language="javascript">
function createRequest(){
if(typeof XMLHttpRequest!="undefined") {
return new XMLHttpRequest();
}else if(typeof ActiveXObject!="undefined"){
var xmlHttp_ver = false;
var xmlHttp_vers = ["MSXML2.XmlHttp.5.0","MSXML2.XmlHttp.4.0","MSXML2.XmlHttp.3.0","MSXML2.XmlHttp","Microsoft.XmlHttp"];
if(!xmlHttp_ver){
for(var i=0;i<xmlHttp_vers.length;i++){
try{
new ActiveXObject(xmlHttp_vers[i]);
xmlHttp_ver = xmlHttp_vers[i];
break;
}catch(oError){;}
}
}
if(xmlHttp_ver){
return new ActiveXObject(xmlHttp_ver);
}else{
throw new Error("Could not create XML HTTP Request.");
}
}else{
throw new Error("Your browser doesn't support an XML HTTP Request.");
}
}
var xmlHttp;
function sendPostRequest()
{
xmlHttp = createRequest();
var shownum=document.getElementById("shownum").value;// html页面中一个id为shownum的input表单
var url = "show.php";//要发送到的URL
var queryString = "shownum" + "=" + shownum;
//向服务端发送请求
xmlHttp.open("post", url, true);//这里的第三个参数为true为异步方式处理
xmlHttp.onreadystatechange = showData;//异步方式处理,当状态改变时会调用onreadystatechange属性指定的回调函数showData
xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;");//这一句是用post方法发送的时候必须写的
xmlHttp.send(queryString);//发送你构建成的数据,如果为“get”方法时,这里可以写成xmlHttp.send(NULL);
}
function showData()
{
var msg=document.getElementById("status");
//第4步
if(xmlHttp.readyState==4)
{
if(xmlHttp.status==200)
{
//只有当readyState为4并且status为200时,才表示符合要求
//下面这一句话,就相当于上面说的第5步,处理返回的结果
msg.innerHTML = xmlHttp.responseText;
}
}
else
{
switch(xmlHttp.readyState)
{
case 0:
msg.innerHTML="未初始化...";
break;
case 1:
msg.innerHTML="加载中...";
break;
case 2:
msg.innerHTML="连接完成...";
break;
case 3:
msg.innerHTML="交换数据...";
break;
default:
break;
}
}
}
</script>
</head>
<body>
<div>要发送的数据:<input name="shownum" id="shownum" type="text"><input type="button" name="search" value="发送" onClick="sendPostRequest()"></div>
<div id="status"></div>
</body>
</html>
同一目录下要有一个show.php
内容为
CODE:<?php
$shownum = $_POST["shownum"];
echo $shownum;
?>
Linux:每一个虚拟桌面都是一个独立的立体
http://desk3d.sourceforge.net/screenshots.php
Apple公司:把每一个虚拟桌面贴在四方体的每一个面上
http://www.apple.com/macosx/features/fastuserswitching/
SUN公司:每一个窗口都是一个独立的立体
http://wwws.sun.com/software/looking_glass/details.html
--------------------------------------------------------------------------------
3d桌面,有用吗?我觉得很无聊阿
老师是这样回答的:
quote:
--------------------------------------------------------------------------------
借用法拉第的名言回答你的问题:小伙子,请问新生的婴儿有什么用呢?
关于法拉第的那句名言历史老师或物理老师都会提到:
法拉第发现电磁感应现象后,发明了世界上第一台最原始的感应发电机。这年圣诞节他为朋友们进行了表演,只见他转动摇柄,铜盘旋转起来,电流计的指针开始偏转,铜盘转得越快,电流表指针的读数就越大,在场的人都交口称誉,惟独一位贵妇人不以为然,她以不屑一顾的口吻发问:“请问先生,你发明的这玩艺儿有什么用?”法拉第不气不恼,反问道:“夫人,请问新生的婴儿有什么用呢?”
是的,一项刚被人发现的科学原理正像刚出生的婴儿一样,有谁能预料它们的未来呢?
--------------------------------------------------------------------------------
我所知sun的3d桌面用是到java+OpenGL引擎来做,是真正的3D。并且直接接手桌面系统与显卡3d显示的操作,从原理上来说是会比现在的2d桌面更加快速的。因为现在的2d系统只是把数据传给显卡并没用到3d显卡的功能的,是一种最大的浪费。其实3d桌面系统并不是像3d游戏一样占用系统资源的。因为3D运算及显示部分是交给3D桌面引擎跟显卡GPU来直接处理的,所以占资源会很少的!这种情况的理想状态就像你现在用打印机打印一样有效而少占资源!!!
3D桌面实用化还远着呢!一是大家需要时间习惯,而且现在鼠标还是平面上操作的。
本人体验过SUse10的企业版,呵呵。。。。本人还有张solaris10g的企业盘可惜没有时间安装。。。。玩玩应该很好的。
你说开源于商业谁打败了,是不是商业的就很好了呢?常规说应该是商业能打败开源,但是现在地开源是否好像在说,呵呵,我们的技术你还得学者点,微软是商业吧,他也得学习linux系统的一些东西。可惜他又不开源,广进不出。
呵呵,世界就是这么有趣,都在想向对方证明点什么,那就是他有存在地价值,而且他会很NB。。。。这才是他的核心。。
Jargon File中对“黑客”一词给出了很多个定义,大部分定义都涉及高超的编程技术,强烈的解决问题和克服限制的欲望。如果你想知道如何成为一名黑客,那么好,只有两方面是重要的。(态度和技术)
长久以来,存在一个专家级程序员和网络高手的共享文化社群,其历史可以追溯到几十年前第一台分时共享的小型机和最早的ARPAnet实验时期。 这个文化的参与者们创造了“黑客”这个词。 黑客们建起了Internet。黑客们使Unix操作系统成为今天这个样子。黑客们搭起了Usenet。黑客们让WWW正常运转。如果你是这个文化的一部分,如果你已经为它作了些贡献,而且圈内的其他人也知道你是谁并称你为一个黑客,那么你就是一名黑客。
黑客精神并不仅仅局限于软件黑客文化圈中。有些人同样以黑客态度对待其它事情如电子和音乐---事实上,你可以在任何较高级别的科学和艺术中发现它。软件黑客们识别出这些在其他领域同类并把他们也称作黑客---有人宣称黑客实际上是独立于他们工作领域的。 但在本文中,我们将注意力集中在软件黑客的技术和态度,以及发明了“黑客”一词的哪个共享文化传统之上。 阅读全文
在CU论坛上看到一段文字:
-------------------------------------------
关于JSP的问题,就我所知,SUN公司现在已不打算继续支持JSP的发展,因为JSP其实还是JAVA,当初搞JSP主要是因为用JAVA写页面比较麻烦,为了与ASP在WEB方面竞争(SUN公司好象有专门的文档写这个事,我肯定看过)。SUN公司已经明确表示与ZEND公司合作支持PHP+JAVA,用PHP做前台显示,JAVA做商务逻辑,JSR规范正在讨论之中。在新的PHP5的架构中,肯定为JSR预留了接口,就我用PHP4+JAVA的经验,真的是结合容易,效率提高很多,写程序也很简单,在PHP方面写页面简单,在JAVA方面写事务处理简单,两者结合很是舒服。但PHP4与JAVA之间的接口还是不成熟,在MOD方式或是线程方式下还是有问题。
-------------------------------------------
真的吗?
这是否能看出一些PHP的发展方向和应用前途?
______________________________________________________________________________________________
答1:
PHP也该有个什么团队与其合作了,要不然他真的是没什么发展的,现在好了,有Java就好了。
______________________________________________________________________________________________
答2:
估计主要是在socket和web service编程方面发展。
______________________________________________________________________________________________
答3:
有这个就更好了,要不PHP这个民间组织般的技术的发展前景确实暗淡。
______________________________________________________________________________________________
答4:
Free很好,但是要一直坚持Free就比较苦难了~~
______________________________________________________________________________________________
答5:
假的!
______________________________________________________________________________________________
答6:
作者在瞎吹.
______________________________________________________________________________________________
答7:
吹牛也好,给人一点光明的希望啊
______________________________________________________________________________________________
答8:
ft!
拜托楼顶的个别同志去国外站点看看!
都是老得快掉牙的信息了
还有人怀疑真实性
尽管翻译可能有出入
但是确实有这事!
______________________________________________________________________________________________
答9:
是吗
______________________________________________________________________________________________
答10:
又多了一门新的语言!!!!!
什么时侯学习的完啊!!!!!
如果是真,当然支持,因为我是用php和JAVA来工作,可加快开发web!!!
______________________________________________________________________________________________
答11:
哦?
第一次听说
看来,这一个月的php没白学,将来还有点用,又要抗起我的老本行java了
______________________________________________________________________________________________
答12:
估计PHP5应该有着方面的特性吧
______________________________________________________________________________________________
答13:
实际上对JAVA和dotNET的支持,在4.X版本中就有提供测试部分的~~~~或许5.X进行了完善吧~~
______________________________________________________________________________________________
答14:
这可能是大型网站的顶尖搭配。如果数据库再用Oracle10g的话
去掉的东西(感觉有必要提的)
2.1 register_globals
这个影响安全,又不好处理.
2.2 magic_quotes
这个本意很好,但反对的声音很多…
2.3 safe_mode
这个东西被E_CORE_ERROR代替了.
2.11 register_long_arrays, HTTP_*_VARS
这个东西影响速度
特别的
1. Unicode
这个东西好!不用再担心很多了.
3.1 XMLReader / XMLWriter in the distribution, on by default
以后处理rss之类的就更容易了
3.2 Move non-PDO DB extensions to PECL
下面特别讨论.
3.3 Move ereg to PECL
实际preg,ereg差不多.用两个等于浪费.
其余的参见(http://www.php.net/~derick/meeting-notes.html)
============================================
下面描述一下,在php6,没有mysql_*,我们怎么过.
首先要连接mysql数据库
$dbh = new PDO(’mysql:host=localhost;dbname=test’, $user, $pass);
//如果你想连mssql:
//mssql:host=localhost;dbname=testdb
//连pgsql:
//pgsql:host=localhost port=5432 dbname=testdb user=bruce password=mypass
//连odbc(DSN)
//odbc:testdb
//连access:
//odbc:Driver={Microsoft Access Driver (*.mdb)};Dbq=C:\\db.mdb;Uid=Admin
//还有oracle,sqlite,db2….
我要执行个查询
foreach ($dbh->query(’SELECT * from FOO’) as $row) {
print_r($row); //这个结果和mysql_fetch_array差不多。PDOStatement::setFetchMode 可以调整。
}
//现在多简单
另外还可以:
$sth = $dbh->prepare(”SELECT name, colour FROM fruit”);
$sth->execute();
/* Fetch all of the remaining rows in the result set */
print(”Fetch all of the remaining rows in the result set:\n”);
$result = $sth->fetchAll();
print_r($result);
得到:
Fetch all of the remaining rows in the result set:
Array
(
[0] => Array
(
[NAME] => pear
[0] => pear
[COLOUR] => green
[1] => green
)
[1] => Array
(
[NAME] => watermelon
[0] => watermelon
[COLOUR] => pink
[1] => pink
)
)
偶还想删/更新条数据。
$count = $dbh->exec(”DELETE FROM fruit WHERE colour = ‘red’”);
//$count就是删除的条数。相当于mysql_affected_rows
//也可用PDOStatement::rowCount
偶忘了偶用啥数据库了。。。。
if ($db->getAttribute(PDO::ATTR_DRIVER_NAME) == ‘mysql’) {
echo “Running on mysql; doing something mysql specific here\n”;
}
偶插入数据的时候要用mysql_escape_string.现在?
print “Unquoted string: $string\n”;
print “Quoted string: ” . $conn->quote($string) . “\n”;
得到:
Unquoted string: Nice
Quoted string: ‘Nice’
//你看现在连引号都自动加了。。。。
//注意在不同的数据库中结果不同,比如有的’ => ‘’,有的’ => \’,\ => \\
//现在没顾虑了,全自动。
//最后偶要关闭它了
$conn = null; //fcicq和这个数据库连接要说再见了。。。。
//但是!你可以:
$dbh = new PDO(’odbc:SAMPLE’, ‘db2inst1′, ‘ibmdb2′,
array(PDO_ATTR_PERSISTENT => true)); //保持连接
很简单的不是?
附:特别简单的特殊调用方法:
$stmt = $dbh->prepare(”SELECT * FROM REGISTRY where name = ?”);
if ($stmt->execute(array($_GET[’name’]))) { //你怕啥?自动quote!
while ($row = $stmt->fetch()) {
print_r($row);
}
}
也可以:
$stmt->bindParam(1, $id);
$stmt->bindParam(2, $_FILES[’file’][’type’]);
$stmt->bindParam(3, $fp, PDO::PARAM_LOB);
这么好的功能,哪里可以找到?php5.1以上在扩展里,php5在pecl里,php4?你别想了,没有。
PHP 5中引入了抽象类和抽象方法。不允许创建一个已经定义为abstract的类的一个实例。任何至少包含一个抽象方法的类也必须是抽象的。被定义为抽象的方法仅仅是声明方法的一个信号,并不能定义它们的实现。
当从一个抽象类继承时,在父类中所有抽象方法的标记的声明必须通过子类定义;另外,这些方法必须用定义相同的访问属性。例如,如果方法被定义为protected类型,执行函数必须定义为protected或public.
例子 19-16. 抽象类例子
PHP代码如下:
abstract class AbstractClass
{ // Force Extending class to define this method
abstract protected function getValue();
abstract protected function prefixValue($prefix);
public function printOut() // Common method
{
print $this->getValue()."\n";
}
}
class ConcreteClass1 extends AbstractClass
{ protected function getValue()
{
return "ConcreteClass1";
}
public function prefixValue($prefix)
{
return "{$prefix}ConcreteClass1";
}
}
class ConcreteClass2 extends AbstractClass
{ public function getValue()
{
return "ConcreteClass2";
}
public function prefixValue($prefix)
{
return"{$prefix}ConcreteClass2";
}
}
$class1 = new ConcreteClass1;
$class1->printOut();
echo $class1->prefixValue('FOO_') ."\n";
$class2 = new ConcreteClass2;
$class2->printOut();
echo $class2->prefixValue('FOO_') ."\n";
?>
上例将输出:
CODE:
ConcreteClass1
FOO_ConcreteClass1
ConcreteClass2
FOO_ConcreteClass2
旧代码拥有非用户自定义的命名为abstract的类或函数将要运行如果没有被修改