<%@ 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

写了这么多,好累啊。也不知道有人看没???对于那个为什么会有关于<%! %>的规定的原因,我改天会仔细阐述的。但愿这个“改天”不会太长,呵呵。

2005年3月24日         晴          于 北京交通大学16号宿舍楼

现在读大二下学期了,从大一下学期开始学习java,旁听java课程,到现在正式地上了必修的课程,一年多以来,感觉上对J2SE大概有了一个理解。不敢说钻研得很深刻,但是也能解决许多问题了。

一年来,在学习的过程中,遇到了许多问题和困难,解决问题之余也渐渐积累了不少经验。现在,同学之间讨论或者许多询问的问题中,我觉得许多都非常有代表性。从初学者的角度看,我觉得我可以提供一些经验,使现在的初学者可以少走一些弯路,或者在郁闷的时候或者坚持不下去的时候,能够看到一点希望。

这学期学校开java的必修了,很多同学在选择课本的时候,都问道我这样的问题:怎样的书合适?真的不好回答这个问题,其实要看看你的底子了。如果对在学习java之前你对Cpp很熟悉的话,那么你可以直接选择类似于《Thinking in java》这样的书籍,虽然很多人都说TIJ不太适合初学者,不过有面向对象的基础的话,这本书还是很好理解的。如果你是一个真正的初学者,那还是先看一些简单的吧,比如《The Java Tutorial》,如果你连C语言都没有碰过,那么我建议你先学一下C语言吧,因为你连基本的语法都不懂,不要太急躁了,你对java的追求只能体现出你的浮躁。

说到浮躁,这也是一个很值得我们深思的问题。说实话,我觉得我自己也有这样的倾向,不仅是我,估计大多数的人都有这个毛病。总是喜欢讨论什么语言最好,什么语言功能强大。这种讨论倒没有错,不过真正学习的时候,浮躁会使你失去很多。在学习过程中,我很努力地使自己保持心理的平静,从基础学起,甚至是一些看上去完全没有必要的基础。我可以很坦诚地说,《Thinking in java》原版第三版的前15章我至少仔细看过两次以上,书里面多处有详细的读书笔记。里面的代码60%以上的运行过,包括可能你认为很简单的switch语句,包括一些简单的类的继承。对老师上课说的代码,起码也是读过2次以上。这一年来,我读过的Java代码超过两万行,但是最复杂的每一个程序也只是一些套接字网络编程的程序,而大多数的都是代码的优化和程序的设计思想。正因为有这些经历,我才敢在这里写下这段话,才敢说我有一个勉强扎实的基础。

。。。(待续)

宿舍要熄灯了,明天继续写。
 看了张孝祥地java基础篇,然后看了孙鑫--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基础是不是感觉这个问题很是简单了呢。。。。呵呵

ajax可以说的上当今很火的技术啦.
在村子里经常看到有人问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;
?>
3D到底有什么好,感觉就是好玩,呵呵。。。。
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的企业盘可惜没有时间安装。。。。玩玩应该很好的。


 你说软件打败了硬件了还是硬件打败了软件了呢,理论上应该是硬件打败软件,应为软件要在硬件上跑,但是现目前的事实是软件打败了硬件,你的硬件得适合我这个软件,尤其是像windows等的操作系统,这个神话让比尔盖茨创造了。
 你说开源于商业谁打败了,是不是商业的就很好了呢?常规说应该是商业能打败开源,但是现在地开源是否好像在说,呵呵,我们的技术你还得学者点,微软是商业吧,他也得学习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的话
先展望php6(当然也可能是php5.2之类,暂未确定)

去掉的东西(感觉有必要提的)
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?你别想了,没有。
类与对象(PHP5)之五:抽象类(Class Abstraction)
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的类或函数将要运行如果没有被修改
分页: 266/272 第一页 上页 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 下页 最后页 [ 显示模式: 摘要 | 列表 ]