??xml version="1.0" encoding="utf-8" standalone="yes"?>区三区激情福利综合中文字幕在线一区亚洲视频1 ,亚洲高清日韩精品第一区,亚洲五月综合网色九月色http://www.tkk7.com/computerboy/archive/2010/08/04/327973.htmlComputerboyComputerboyWed, 04 Aug 2010 13:09:00 GMThttp://www.tkk7.com/computerboy/archive/2010/08/04/327973.htmlhttp://www.tkk7.com/computerboy/comments/327973.htmlhttp://www.tkk7.com/computerboy/archive/2010/08/04/327973.html#Feedback1http://www.tkk7.com/computerboy/comments/commentRss/327973.htmlhttp://www.tkk7.com/computerboy/services/trackbacks/327973.html 下蝲面Q?http://www.mysql.com/downloads/mysql
选择对应的Solaris版本Q目前需要安装的版本是Solaris 10 SPARC 64-bit
2 解压MySQL
转到下蝲目录Q目前本机器攑֜ /u02/mysqltemp 目录?br /> #gunzip -d mysql-5.1.49-solaris10-sparc-64bit.pkg.gz
3 创徏mysql 的用L和用?q指定目?br /> #groupadd mysql
#useradd -G mysql mysql
Q=Q=
mkdir /export/home/mysql
chgrp mysql /export/home/mysql
chown mysql /export/home/mysql
usermod -d /export/home/mysql mysql
Q=Q=
如果觉得不需要指定目录,可以个略q创建步骤?br />
4 使用pkgadd 安装MySQl ?br /> #pkgadd -d mysql-5.1.49-solaris10-sparc-64bit.pkg
安装后的MySQL 位于 /opt/mysql/mysql 目录?br />
如果不用此文件可以略q此步骤?br /> 4.1 建立目录q接
#cd /usr/local
#ln -s /opt/mysql/mysql/mysql
如果不需要,可以略过此步骤?br />
5 在目?etc下创建mysql.cnf 文gQ内如如下:
[mysqld]
basedir=/opt/mysql/mysql
datadir=/opt/mysql/mysql/data

6 q行MySQL 的post-install 文gQ创建数据库 repository 或者叫初始化MySQL
#cd /opt/mysql/mysql
#./scripts/mysql_install_db --defaults-file=/etc/mysql.cnf --user=mysql
或者用:
#./scripts/mysql_install_db  --user=mysql
7 启动MySQL
#cd /opt/mysql/mysql
#./bin/mysql_safe -defaults-file=/etc/mysql.cnf -user=mysql
也可以用如下的Ҏ启动MySQL
#/etc/init.d/mysql start
8 更改MySQL root用户的口?br /> #/opt/mysql/mysql/bin/mysqladmin -u root password 'new-password'
#/opt/mysql/mysql/bin/mysqladmin -u root -h 机器名称 password 'new-password'
或者登录MySQL 之后用如下的Ҏ更改Q?br /> update user set password=PASSWORD('root') where user='root';
9 dMySQL 命o
#mysql -p
输入新的密码Q?br /> 或者用如下Ҏd
mysql -u root mysql

10 停止MySQL
#/etc/init.d/mysql stop




Computerboy 2010-08-04 21:09 发表评论
]]>
一个文件复制的两种Ҏ的实?/title><link>http://www.tkk7.com/computerboy/archive/2007/05/25/120020.html</link><dc:creator>Computerboy</dc:creator><author>Computerboy</author><pubDate>Fri, 25 May 2007 08:17:00 GMT</pubDate><guid>http://www.tkk7.com/computerboy/archive/2007/05/25/120020.html</guid><wfw:comment>http://www.tkk7.com/computerboy/comments/120020.html</wfw:comment><comments>http://www.tkk7.com/computerboy/archive/2007/05/25/120020.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.tkk7.com/computerboy/comments/commentRss/120020.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/computerboy/services/trackbacks/120020.html</trackback:ping><description><![CDATA[<p>一个文件的复制我们大概的思维是通过来操作Q不错?br>本文也是q样操作的?br>至于W一U方法是我们一般的操作方式Q而第二种Ҏ其实也是一个方式,我们不妨研究一下?br>闲话说。看E序?/p> <p>q个E序我写的是两个ҎQ支持从命o行操作?br>例一Q?br>package org.stonecn.kernel;<br>import java.io.*;<br>public class FileCopy {<br> /** <br>  * 试E序<br>  */<br> public static void main(String[] args){<br>  if(args.length!=2)<br>   System.err.println("Usage: java FileCopy<source><destination>");<br>  else{<br>   try{<br>    copy(args[0],args[1]);<br>   }<br>   catch(IOException e){<br>    System.err.println(e.getMessage());<br>   }<br>  }<br> }<br> public static void copy(String from_name,String to_name)throws IOException{<br>  File from_file=new File(from_name);<br>  File to_file=new File(to_name);<br>  if(!from_file.exists())<br>   abort("no such source file:"+from_name);<br>  if(!from_file.isFile())<br>   abort("can't copy directory:"+from_name);<br>  if(!from_file.canRead())<br>   abort("source file is unreadable:"+from_name);<br>  /**<br>   * 如果目标是一个目录,则用源文g名作为目标文件名<br>   */<br>  if(to_file.isDirectory())<br>   to_file=new File(to_file,from_file.getName());<br>  /**<br>   * 如果目标文g存在Q则保它是可写?q且在覆盖之前先询问<br>   * 如果目标文g不存在,则确保存在目录,而且是可写的?br>   */<br>                 // 此处支持命o行,如果不用可以注视掉?nbsp;   sart   <br>  if(to_file.exists()){<br>   abort("destination file is unwriteable:"+to_name);<br>   //询问是否覆盖<br>   System.out.print("Overwrite existing file:"+to_file.getName()+"?(Y/N):");<br>   //得到用户响应<br>   System.out.flush();<br>   BufferedReader in=new BufferedReader(new InputStreamReader(System.in));<br>   String response=in.readLine();<br>   //查响应,如果不是yes(未做认),则终止复?br>   if(!response.equals("Y") && !response.equals("y"))<br>    abort("existing file was not overwritten.");<br>  }<br>  else{<br>   /**如果文g不存在,查是否存在目录且是否可写<br>    * 如果getParent()q回nullQ则目录是当前dirQ?br>    * 因此查找user.dirpȝҎ,以得出它是什?br>    */<br>   String parent=to_file.getParent();  //目标目录<br>   if(parent == null)<br>    parent=System.getProperty("user.dir");<br>   File dir=new File(parent);<br>   if(!dir.exists())<br>    abort("destination directory doesn't exist:"+parent);<br>   if(dir.isFile())<br>    abort("destination is not a directory:"+parent);<br>   if(!dir.canWrite())<br>    abort("destination directory is unwriteable:"+parent);<br>  }<br>                  //到此l束      end  <br>  /**<br>   * 如果走到q了Q则一切正常?br>   * 因此可以复制文gQ一ơ复制一个字节缓冲区<br>   */<br>  FileInputStream from=null;   //从源d的流<br>  FileOutputStream to=null;    //写至目标的流<br>  try{<br>   from=new FileInputStream(from_file); //创徏输入?br>   to=new FileOutputStream(to_file);    //创徏输出?br>   byte[] buffer=new byte[4096];<br>   int bytes_read;<br>   /**<br>    * 一块字节读入缓冲区Q然后将其写?br>    * 如果循环Q知道达到文件结?read()q回-1)<br>    * 注意Q在此while循环中结合了赋值和比较<br>    */<br>   while((bytes_read=from.read(buffer))!=-1)  //读,直到EOF<br>    to.write(buffer,0,bytes_read);         //?br>  }<br>  finally{<br>   if(from!=null)<br>    try{<br>     from.close();<br>    }<br>   catch(IOException e){<br>    ;<br>   }<br>   if(to!=null)<br>    try{<br>     to.close();<br>    }<br>   catch(IOException e){;}<br>  }<br> }<br> /**<br>  * q是抛出异常的一个便利方?br>  */<br> private static void abort(String msg)throws IOException{<br>  throw new IOException("FileCopy:"+msg);<br> }</p> <p>}</p> <p><br>q个E序的好处是一个安全的。因为有一个静态的copyҎ。其他程序也可以使用此方法来复制文g</p> <p> </p> <p>我们来看W二个例?/p> <p>例二Q?br>package org.stonecn.kernel;<br>import java.io.*;<br>import java.nio.channels.*;</p> <p> public class FileCopy2{<br>  public static void main(String[] args){<br>   FileInputStream fin=null;       //两个文g的流<br>   FileOutputStream fout=null;     //q些要在finally块中关闭<br>   try{<br>    //打开输入文g的一个流Qƈ从中得到一个通道<br>    fin=new FileInputStream(args[0]);<br>    FileChannel in=fin.getChannel();<br>    <br>    //下面得到输出通道<br>    WritableByteChannel out;<br>    //如果有第二个文g?br>    if(args.length>1){<br>     fout=new FileOutputStream(args[1]);<br>     out=fout.getChannel();<br>    }<br>    else{<br>     //没有目标文g?br>     out=Channels.newChannel(System.out);   //包装stdout?br>    }<br>    //查询输入文g的大?br>    long numbytes=in.size();<br>    /**<br>     *采用扚w传输的方式将所有字节从一个通道传输到另一个通道<br>     *q是fileChannel通道的一个特D特?br>     *参见FileChannel.transferForm()<br>     */<br>     in.transferTo(0,numbytes,out);<br>    <br>   }<br>   catch(IOException e){<br>    System.out.println(e);<br>   }<br>   finally{<br>    try{<br>     if(fin!=null)  fin.close();<br>     if(fout!=null)  fout.close();<br>    }<br>    catch(IOException e){<br>    }<br>   }<br>   <br>  }<br> }</p> <p><br>而这个程序将其第一个参C指定的文件复制到W二个参数所指定的文件中?br>如果没有W二个参数则复制到标准输出?/p> <p>同样的方式,两种实现Q这是我们所说的l果一P而过E也是千变万化?br>例二所涉及的包是我以前所没有接触到的?br>Ƣ迎朋友们来指正?/p> <p> </p> <p> </p> <p> </p> <p> </p> <img src ="http://www.tkk7.com/computerboy/aggbug/120020.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/computerboy/" target="_blank">Computerboy</a> 2007-05-25 16:17 <a href="http://www.tkk7.com/computerboy/archive/2007/05/25/120020.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>J2EE?3U核心技术简?/title><link>http://www.tkk7.com/computerboy/archive/2007/02/02/97450.html</link><dc:creator>Computerboy</dc:creator><author>Computerboy</author><pubDate>Fri, 02 Feb 2007 03:53:00 GMT</pubDate><guid>http://www.tkk7.com/computerboy/archive/2007/02/02/97450.html</guid><wfw:comment>http://www.tkk7.com/computerboy/comments/97450.html</wfw:comment><comments>http://www.tkk7.com/computerboy/archive/2007/02/02/97450.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.tkk7.com/computerboy/comments/commentRss/97450.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/computerboy/services/trackbacks/97450.html</trackback:ping><description><![CDATA[ <h5>本文p{载:出处:IT专家|社?/h5> <h5>在本文中解释支撑J2EE?3U核心技术:JDBC,JNDI,EJBs,RMI,JSP,Javaservlets,XML,JMS,JavaIDL,JTS,JTA,JavaMail和JAFQ同时还描q在何时、何处需要用这些技术?/h5> <div id="4y4ws4q" class="guanggao"> <span id="contentAdv"> </span> </div> <p>  Java最初是在浏览器和客L机器中粉墨登场的。当Ӟ很多疑它是否适合做服务器端的开发。现在,随着对Java2q_企业?J2EE)W三Ҏ持的增多QJava被广泛接Uؓ开发企业服务器端解决Ҏ的首选^C一?/p> <p>  J2EEq_׃整套服务(Services)、应用程序接?APIs)和协议构成,它对开发基于Web的多层应用提供了功能支持。在本文中将解释支撑J2EE?3U核心技术:JDBC,JNDI,EJBs,RMI,JSP,Javaservlets,XML,JMS,JavaIDL, JTS,JTA,JavaMail和JAFQ同时还描q在何时、何处需要用这些技术。当Ӟ我还要介l这些不同的技术之间是如何交互的。此外,Z让您更好地感受J2EE的真实应用,在WebLogic应用服务?来自BEA Systems公司的一U广为应用的产品环境下来介绍q些技术。不论对于WebLogic应用服务器和J2EE的新手,q是那些想了解J2EE能带来什么好处的目理者和pȝ分析员,怿本文一定很有参考h倹{?/p> <p>  <strong>宏观印象:分布式结构和J2EE</strong></p> <p>  q去Q二层化应用--通常被称为client/server应用--是大家谈论的最多的。在很多情况下,服务器提供的惟一服务是数据库服务。在q种解决Ҏ中,客户端程序负责数据访问、实C务逻辑、用合适的样式昄l果、弹出预讄用户界面、接受用戯入等。client/serverl构通常在第一ơ部|的时候比较容易,但难于升U或改进Q而且l常Z某种专有的协议,通常是某U数据库协议。它使得重用业务逻辑和界面逻辑非常困难。更重要的是Q在Web时代Q二层化应用通常不能体现出很好的伸羃性,因而很N应Internet的要求?/p> <p>  Sun设计J2EE的部分v因就是想解决二层化结构的~陷。于是,J2EE定义了一套标准来化N层企业应用的开发。它定义了一套标准化的组Ӟqؓq些lg提供了完整的服务。J2EEq自动ؓ应用E序处理了很多实现细节,如安全、多U程{?/p> <p>  用J2EE开发N层应用包括将二层化结构中的不同层面切分成许多层。一个N层化应用A能够Z下的每种服务提供一个分开的层Q?/p> <ul> <li>  <strong>昄Q?/strong>在一个典型的Web应用中,客户端机器上q行的浏览器负责实现用户界面?/li> <li>  <strong>动态生成显C?</strong>管览器可以完成某些动态内ҎC,但ؓ了兼容不同的览器,q些动态生成工作应该放在Web服务器端q行Q用JSP、ServletsQ或者XML(可扩展标记语a)?可扩展样式表语言)?/li> <li>  <strong>业务逻辑Q?/strong>业务逻辑适合用SessionEJBs(后面介l?来实现?/li> <li>  <strong>数据讉KQ?/strong>数据讉K适合用EntityEJBs(后面介l?和JDBC来实现?/li> <li>  <strong>后台pȝ集成:</strong>同后台系l的集成可能需要用到许多不同的技术,至于何种最佳需要根据后台系l的特征而定?/li> <li>  <strong>您可能开始诧异:</strong>Z么有q么多的?事实上,多层方式可以使企业应用h很强的׾~性,它允许每层专注于特定的角艌Ӏ例如,让Web服务器负责提供页面,应用服务器处理应用逻辑Q而数据库服务器提供数据库服务?/li> </ul> <p>  ׃J2EE建立在Java2q_标准?J2SE)的基上,所以具备了J2SE的所有优点和功能。包括“编写一ơ,到处可用”的可移植性、通过JDBC讉K数据库、同原有企业资源q行交互的CORBA技术,以及一个经q验证的安全模型。在q些基础上,J2EE又增加了对EJB(企业U?Javalg)、Javaservlets、Java服务器页?JSPs)和XML技术的支持?/p> <p>  <strong>分布式结构与WebLogic应用服务?/strong></p> <p>  J2EE提供了一个框?-一套标准API--用于开发分布式l构的应用,q个框架的实际实现留l了W三方厂商。部分厂商只是专注于整个 J2EE架构中的的特定组Ӟ例如Apache的Tomcat提供了对JSP和servlets的支持,BEApȝ公司则通过其WebLogic应用服务器品ؓ整个J2EE规范提供了一个较为完整的实现?br /></p> <p>WebLogic服务器已使徏立和部v伸羃性较好的分布式应用的q程大ؓ化。WebLogic和J2EE代你处理了大量常规的~程dQ包括提供事务服务、安全领域、可靠的消息、名字和目录服务、数据库讉K和连接池、线E池、负载^衡和定w处理{?/p> <p>  通过以一U标准、易用的方式提供q些公共服务Q象WebLogic服务器这L产品造就了具有更好׾~性和可维护性的应用pȝQ其ؓ大量的用h供了增长的可用性?/p> <p>  <strong>J2EE技?/strong></p> <p>  在接下来的部分里Q我们将描述构成J2EE的各U技术,q且了解WebLogic服务器是如何在一个分布式应用中对它们q行支持的。最常用的J2EE技术应该是JDBC、JNDI、EJB、JSP和servletsQ对q些我们作更仔l的考察?/p> <p>  <strong>Java Database Connectivity(JDBC)</strong></p> <p>  JDBCAPI以一U统一的方式来对各U各L数据库进行存取。和ODBC一PJDBC为开发h员隐藏了不同数据库的不同Ҏ。另外,׃JDBC建立在Java的基?因此q提供了数据库存取的q_独立性?/p> <p>  JDBC定义?U不同的驱动E序Q现分述如下Q?/p> <ul> <li>  cd1:JDBC-ODBCBridge</li> </ul> <p>  在JDBC出现的初期,JDBC-ODBC桥显然是非常有实用意义的Q通过JDBC-ODBC桥,开发h员可以用JDBC来存取ODBC数据源。不的是,他需要在客户端安装ODBC驱动E序Q换句话_必须安装MicrosoftWindows的某个版本。用这一cd你需要牺牲JDBC的^台独立性。另外,ODBC驱动E序q需要具有客L的控制权限?/p> <ul> <li>  cd2:JDBC-nativedriverbridge</li> </ul> <p>  JDBC本地驱动E序桥提供了一UJDBC接口Q它建立在本地数据库驱动E序的顶层,而不需要用ODBC。JDBC驱动E序对数据库的API从标准的JDBC调用转换为本地调用。用此cd需要牺牲JDBC的^台独立性,q要求在客户端安装一些本C码?/p> <ul> <li>  cd3:JDBC-networkbridge</li> </ul> <p>  JDBC|络桥驱动程序不再需要客L数据库驱动程序。它使用|络上的中间服务器来存取数据库。这U应用得以下技术的实现有了可能Q这些技术包括负载均衡、连接缓冲池和数据缓存等。由于第3U类型往往只需要相Ҏ的下蝲旉Q具有^台独立性,而且不需要在客户端安装ƈ取得控制权,所以很适合于Internet上的应用?/p> <ul> <li>  cd4:PureJavadriver</li> </ul> <p>  W?U类型通过使用一个纯Java数据库驱动程序来执行数据库的直接讉K。此cd实际上在客户端实C2层结构。要在N-层结构中应用Q一个更好的做法是编写一个EJBQ让它包含存取代码ƈ提供一个对客户端具有数据库独立性的服务?/p> <p>  WebLogic服务器ؓ一些通常的数据库提供了JDBC驱动E序Q包括Oracle,Sybase,MicrosoftSQLServer以及Informix。它也带有一UJDBC驱动E序用于CloudscapeQ这是一U纯Java的DBMSQWebLogic服务器中带有该数据库的评估版本?br /><br /></p> <p>以下让我们看一个JDBC实例Q在q个例子中我们假定你已经在Cloudscape中徏立了一个PhoneBook数据库,q且包含一个表Q名?CONTACT_TABLEQ它带有2个字D:NAME和PHONE。开始的时候先装蝲CloudscapeJDBCdriverQƈh drivermanager得到一个对PhoneBookCloudscape数据库的q接。通过q一q接Q我们可以构造一个Statement对象q用它来执行一个简单的SQL查询。最后,用@环来遍历l果集的所有数据,q用标准输出NAME和PHONE字段的内容进行输出?/p> <p> </p> <p> </p> <table style="BORDER-RIGHT: rgb(204,204,204) 1px dotted; TABLE-LAYOUT: fixed; BORDER-TOP: rgb(204,204,204) 1px dotted; BORDER-LEFT: rgb(204,204,204) 1px dotted; BORDER-BOTTOM: rgb(204,204,204) 1px dotted" cellspacing="0" cellpadding="6" width="95%" align="center" border="0"> <tbody> <tr> <td bgcolor="#f3f3f3"> <font face="Verdana">import java.sql.*;<br />public class JDBCExample...{ <br />public static void main( String args[] ) <br />...{<br />try...{ <br />Class.forName("COM.cloudscape.core.JDBCDriver"); <br />Connection conn = DriverManager.getConnection("jdbc:cloudscape:PhoneBook");   Statement stmt = conn.createStatement(); <br />String sql = "SELECT name, phone FROM CONTACT_TABLE ORDER BYname"; <br />ResultSet resultSet = stmt.executeQuery( sql ); <br />String name; <br />String phone; <br />while ( resultSet.next() ) <br />...{<br />name = resultSet.getString(1).trim();<br />phone = resultSet.getString(2).trim();<br />System.out.println( name + ", " + phone ); <br />}catch ( Exception e ) <br />...{// Handle exception heree.printStackTrace(); <br />}<br />} <br />}</font> </td> </tr> </tbody> </table> <p>  OK。接着来看一看JDBC是如何在企业应用中的q行使用?/p> <p>  JDBC在企业应用中的应用。以上实例其实是很基本的Q可能有些微不道。它假定了一?层结构。在一个多层的企业U应用中Q更大的可能是在客户端和一个EJBq行通信Q该EJB徏立数据库q接。ؓ了实现和改进可׾~性和pȝ性能Q?WebLogic服务器提供了对连接缓冲池connection pool的支持?/p> <p>  Connection pool减少了徏立和释放数据库连接的消耗。在pȝ启动以后卛_建立q样的缓冲池Q此后如故再有对数据库的hQWebLogic服务器可以很单地从缓冲池中取出数据。数据缓冲池可以在WebLogic服务器的 weblogic.properties 文g中进行定义?/p> <p>  在企业应用的另一个常见的数据库特性是事务处理。事务是一l申明statementQ它们必d为同一个statement来处理以保证数据完整性。缺省情况下JDBC使用 auto-commit 事务模式。这可以通过使用ConnectioncȝsetAutoCommit() Ҏ来实现。现在已l对JDBC有了一些认识,下面该{向JNDI了?/p> <p>  <strong>Java Naming and Directory Interface (JNDI)</strong></p> <p>  JNDI API被用于执行名字和目录服务。它提供了一致的模型来存取和操作企业U的资源如DNS和LDAPQ本地文件系l,后者在应用服务器中的对象。在JNDI 中,在目录结构中的每一个结点称为context。每一个JNDI名字都是相对于context的。这里没有绝对名字的概念存在。对一个应用来_它可以通过使用 InitialContext cL得到其第一个context:</p> <p> </p> <p> </p> <table style="BORDER-RIGHT: rgb(204,204,204) 1px dotted; TABLE-LAYOUT: fixed; BORDER-TOP: rgb(204,204,204) 1px dotted; BORDER-LEFT: rgb(204,204,204) 1px dotted; BORDER-BOTTOM: rgb(204,204,204) 1px dotted" cellspacing="0" cellpadding="6" width="95%" align="center" border="0"> <tbody> <tr> <td bgcolor="#f3f3f3">Context ctx = new InitialContext();</td> </tr> </tbody> </table> <br /> <p> 应用可以通过q个初始化的contextl有q个目录树来定位它所需要的资源或对象。例如,假设你在Weblogic服务器中展开了一个EJBq将home接口l定到名?myApp.myEJB Q那么该EJB的某个客户在取得一个初始化context以后Q可以通过以下语句定位home接口Q?/p> <p> </p> <table style="BORDER-RIGHT: rgb(204,204,204) 1px dotted; TABLE-LAYOUT: fixed; BORDER-TOP: rgb(204,204,204) 1px dotted; BORDER-LEFT: rgb(204,204,204) 1px dotted; BORDER-BOTTOM: rgb(204,204,204) 1px dotted" cellspacing="0" cellpadding="6" width="95%" align="center" border="0"> <tbody> <tr> <td bgcolor="#f3f3f3">MyEJBHome home = ctx.lookup( "myApp.myEJB" );</td> </tr> </tbody> </table> <p>  在这个例子中Q一旦你有了对被h对象的参考,EJB的home接口可以在它上面调用方法。我们将在下面的"Enterprise Java Beans"章节中做更多的介l?/p> <p>  以上关于JNDI的讨论只是冰׃一角而已。如果要更进一步地在context中查扑֯象,JNDI也提供了一些方法来q行以下操作Q将一个对象插入或l定到context。这在你展开一个EJB的时候是很有效的。从context中移d象。列出context中的所有对象。创建或删除子一U的context。接下来Q要开始关注EJB了?/p> <p>  <strong>Enterprise Java Beans (EJB)</strong></p> <p>  J2EE技术之所以赢得某体广泛重视的原因之一是EJB。它们提供了一个框架来开发和实施分布式商务逻辑Q由此很显著地简化了h可׾~性和高度复杂的企业应用的开发。EJB规范定义了EJBlg在何时如何与它们的容器进行交互作用。容器负责提供公用的服务Q例如目录服务、事务管理、安全性、资源缓冲池以及定w性?/p> <p>  EJB规范定义了三U基本的beancd:</p> <ul> <li>  <strong>Stateless session beans:</strong> 提供某种单一的服务,不维持Q何状态,在服务器故障发生时无法l存在,生命期相对较短。例如,一个stateless sessionbean可能被用于执行温度{换计?/li> <li>  <strong>Stateful session bean:</strong> T提供了与客户端的会话交互Q可以存储状态从而代表一个客戗典型例子是购物车。Stateful session bean在服务器故障时无法l生存,生命气相对较短。每一个实例只用于一个单个的U程?/li> <li>  <strong>Entity beans:</strong> 提供了一致性数据的表示-- 通常存放在数据库?-- 在服务器故障发生后能l箋存在。多用户情况下可以用EJB来表C相同的数据。entity EJB的一个典型例子是客户的帐号信息?/li> </ul> <p>  管有以上的区别Q所有的EJBq是有许多的共同之处。它们都处理homeinterface。它定义了一个客L是如何创Z消亡EJB的。可以在bean中对定义了客LҎ的远E接口进行调?beancd执行了主要的商务逻辑。描qEJB的开发已l超Z本文的范围。但是,如果一?EJB已经被开发了或者从W三方进行了购买Q它必d应用服务器中q行发布。WebLogic Server 5.1带有一个EJB Deployer Tool来协助处理EJB的发布。当你用EJB Deployer Tool的时候,你要定义客户端所用的JNDI名字来定位EJB。Deployer Tool生成wrappercL处理和容器的通信以及在一个jar文g中把被请求的Javacȝ定在一赗?/p> <p>  一旦EJB被发布,客户端就可以使用它的JNDI名字来定位EJB。首先,它必dC个到home接口的reference。然后,客户端可以用该接口Q调用一个create() Ҏ来得到服务器上运行的某个bean实例的句?最后,客户端可以用该句柄在bean中调用方法。了?EJB后,让我们再来看JSP?br /></p> <p> <strong>JavaServer Pages (JSPs)</strong></p> <p>  可能已经有许多h已经熟悉Microsoft的Active Server Pages(ASP)技术了。JSP和ASP相对应的Q但更具有^台对立性。他们被设计用以帮助Web内容开发h员创建动态网,q且只需要相对较的代码?即Web设计师不懂得如何~程也可以用JSPQ因为JSP应用是很方便的?JSP面由HTML代码和嵌入其中的Java代码所l成。服务器在页面被客户端所h以后对这些Java代码q行处理Q然后将生成的HTML面q回l客L的浏览器?/p> <p>  下面来看一个JSP的简单实例。它只显CZ服务器的当前日期和时间。虽Ӟ对语法的具体解释已经出了本文的范围Q但我们q是可以很直观地看到QJava代码被放?W号的中_而Java的表辑ּ则放在符号之间?/p> <p> </p> <p> </p> <table style="BORDER-RIGHT: rgb(204,204,204) 1px dotted; TABLE-LAYOUT: fixed; BORDER-TOP: rgb(204,204,204) 1px dotted; BORDER-LEFT: rgb(204,204,204) 1px dotted; BORDER-BOTTOM: rgb(204,204,204) 1px dotted" cellspacing="0" cellpadding="6" width="95%" align="center" border="0"> <tbody> <tr> <td bgcolor="#f3f3f3"> <font face="Verdana">QH1QDate JSP sampleQ?H1Q?br />QH2Q <br />Q? response.setHeader("Refresh", 5); %Q   The current date is Q?= new Date() %Q?  Q?H2Q?/font> </td> </tr> </tbody> </table> <p>  下面? Java servlets</p> <p>  <strong>Java Servlets</strong></p> <p>  Servlet提供的功能大多与JSPcMQ不q实现的方式不同。JSP通常是大多数HTML代码中嵌入少量的Java代码Q?servlets全部由Java写成q且生成HTML。Servlet是一U小型的JavaE序Q它扩展了Web服务器的功能。作ZU服务器端的应用Q当被请求时开始执行,q和CGI Perl脚本很相伹{Servlets和CGI脚本的一个很大的区别是:每一个CGI在开始的时候都要求开始一个新的进E?-- 而servlets是在servlet引擎中以分离的线E来q行的。因此servlets在可伸羃性上提供了很好的改进?/p> <p>  在开发servlets的时候,您常帔R要扩展javax.servlet.http.HttpServletc,q且override一些它的方法,其中包括Q?/p> <ul> <li>  <strong>service():</strong> 作ؓdispatcher来实现命?定义Ҏ</li> <li>  <strong>doGet():</strong> 处理客户端的HTTP GETh?/li> <li>  <strong>doPost():</strong> q行HTTP POST操作</li> </ul> <p>  其它的方法还包括处理不同cd的HTTPh -- 可以参考HttpServlet API文档。以上描q的是标准J2EE Servlet API的各U方法。WebLogic服务器提供了一个该API完整的实现途径。一旦你开发了一个servletQ你可以在 weblogic.properties 中加以注册ƈ由此可以在WebLogic服务器中对它q行配置?/p> <p>  通过Java servlets,我们已经到达了J2EE主要技术的末尾了。但J2EE所提供的ƈ不止于这些。下面的D落中我们将要地看一下现存的一些技术,包括RMI,Java IDL和CORBA, JTA, 以及XMLQ等{?br /><br /></p> <p> <strong>Remote Method Invocation (RMI)</strong></p> <p>  正如其名字所表示的那PRMI协议是在q程对象上调用一些方法。它使用了连l序列方式在客户端和服务器端传递数据。RMI是一U被EJB使用的更下层的协议?/p> <p>  <strong>Java IDL/CORBA</strong></p> <p>  在Java IDL的支持下Q开发h员可以将Java和CORBA集成在一赗?他们可以创徏Java对象q之可在CORBA ORB中展开, 或者他们还可以创徏Javacdƈ作ؓ和其它ORB一起展开的CORBA对象的客戗后一U方法提供了另外一U途径Q通过它Java可以被用于将你的新的应用和legacypȝ盔R成?/p> <p>  <strong>Java Transaction Architecture (JTA)/Java Transaction Service (JTS)</strong></p> <p>  JTA定义了一U标准的APIQ应用系l由此可以存取各U事务监控。JTS是CORBA OTS事务监控的基本的实现。JTS规定了事务管理器的实现方式。该事务理器是在高层支持Java Transaction API (JTA)规范Qƈ且在较底层实现OMG OTS specification的Java映像。JTS事务理器ؓ应用服务器、资源管理器、独立的应用以及通信资源理器提供了事务服务?/p> <p>  <strong>JavaMail and JavaBeans Activation Framework</strong></p> <p>  JavaMail是用于存取邮件服务器的APIQ它提供了一套邮件服务器的抽象类。仅支持SMTP服务器,也支持IMAP服务器?JavaMail利用JavaBeans Activation Framework (JAF)来处理MIME-~码的邮仉件。MIME的字节流可以被{换成Java对象Q或者{换自Java对象。由此大多数应用都可以不需要直接?JAF?/p> <p>  <strong>Java Messaging Service (JMS)</strong></p> <p>  JMS是用于和面向消息的中间g怺通信的应用程序接?API)。它既支持点对点的域Q有支持发布/订阅 (publish/subscribe)cd的域Qƈ且提供对下列cd的支持:l认可的消息传?事务型消息的传递,一致性消息和h持久性的订阅者支持。JMSq提供了另一U方式来Ҏ的应用与legacy backendpȝ盔R成?/p> <p>  <strong>Extensible Markup Language (XML)</strong></p> <p>  XML是一U可以用来定义其它标记语a的语a。它被用来在不同的商务过E中׃n数据。XML的发展和Java是相互独立的Q但是,它和Java h的相同目标正是^台独立性。通过Java和XML的组合,您可以得C个完的hq_独立性的解决Ҏ。目前正有许多不同的公司在ؓJava?XML的组合而努力。如果要了解更多的这斚w的信息,可以讉KSun的Java-XML面Q或者IBM developerWorks的XML Zone?/p> <img src ="http://www.tkk7.com/computerboy/aggbug/97450.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/computerboy/" target="_blank">Computerboy</a> 2007-02-02 11:53 <a href="http://www.tkk7.com/computerboy/archive/2007/02/02/97450.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java基础知识ȝhttp://www.tkk7.com/computerboy/archive/2007/02/02/97446.htmlComputerboyComputerboyFri, 02 Feb 2007 03:45:00 GMThttp://www.tkk7.com/computerboy/archive/2007/02/02/97446.htmlhttp://www.tkk7.com/computerboy/comments/97446.htmlhttp://www.tkk7.com/computerboy/archive/2007/02/02/97446.html#Feedback0http://www.tkk7.com/computerboy/comments/commentRss/97446.htmlhttp://www.tkk7.com/computerboy/services/trackbacks/97446.html 本文p{载:出处:IT专家|社?br />
1、对象的初始?/strong>

  •   (1)非静态对象的初始?/li>

  在创建对象时Q对象所在类的所有数据成员会首先q行初始化?/p>

    •   基本cdQint型,初始化ؓ0?/li>
    •   如果为对象:q些对象会按序初始化?/li>

  d所有类成员初始化完成之后,才调用本cȝ构造方法创建对象?/p>

  构造方法的作用是初始化?/p>

  •   (2)静态对象的初始?/li>

  E序中主cȝ静态变量会在mainҎ执行前初始化?/p>

  不仅W一ơ创建对象时Q类中的所有静态变量都初始化,q且W一ơ访问某c?注意此时未创建此cd?的静态对象时Q所 有的静态变量也要按它们在类中的序初始化?/p>

  2、承时Q对象的初始化过E?/strong>

  •   (1)ȝ的超cȝ高到低按序初始化静态成员,无论静态成员是否ؓprivate?/li>
  •   (2)ȝ静态成员的初始化?/li>
  •   (3)ȝ的超cȝ高到低进行默认构造方法的调用。注意,在调用每一个超cȝ默认构造方法前Q先q行Ҏ类q行非静态对象的初始化?/li>
  •   (4)ȝ非静态成员的初始化?/li>
  •   (5)调用ȝ的构造方法?/li>

  3、关于构造方?/strong>

  •   (1)cd以没有构造方法,但如果有多个构造方法,应该要有默认的构造方法,否则在承此cLQ需要在子类中显式调用父cȝ某一个非默认的构造方法了?/li>
  •   (2)在一个构造方法中Q只能调用一ơ其他的构造方法,q且调用构造方法的语句必须是第一条语句?/li>

  4、有关public、private和protected

  •   (1)无public修饰的类Q可以被其他c访问的条g是:a.两个cd同一文g中,b.两个cd同一文g夹中Qc.两个cd同一软g包中?/li>
  •   (2)protectedQ承类和同一软g包的cd讉K?/li>
  •   (3)如果构造方法ؓprivateQ那么在其他cM不能创徏该类的对象?/li>

  5、抽象类

  •   (1)抽象cM能创建对象?/li>
  •   (2)如果一个类中一个方法ؓ抽象ҎQ则q个cdMؓabstract抽象cR?/li>
  •   (3)l承抽象cȝcdcM必须实现抽象cM的抽象方法?/li>
  •   (4)抽象cM可以有抽象方法,也可有非抽象Ҏ。抽象方法不能ؓprivate?/li>
  •   (5)间接l承抽象cȝcd以不l出抽象Ҏ的定义?/li>

  6、final关键?/strong>

  •   (1)一个对象是帔RQ不代表不能转变对象的成员,仍可以其成员q行操作?/li>
  •   (2)帔R在用前必须赋|但除了在声明的同时初始化外,只能在构造方法中初始化?/li>
  •   (3)final修饰的方法不能被重置(在子cM不能出现同名Ҏ)?/li>
  •   (4)如果声明一个类为finalQ则所有的Ҏ均ؓfinalQ无论其是否被final修饰Q但数据成员可ؓfinal也可不是?/li>

7、接口interface(用implements来实现接?

  •   (1)接口中的所有数据均为static和final即静态常量。尽可以不用这两个关键字修饎ͼ但必ȝ帔R赋初倹{?/li>
  •   (2)接口中的Ҏ均ؓpublicQ在实现接口cMQ实现方法必dpublic关键字?/li>
  •   (3)如果使用public来修饰接口,则接口必M文g名相同?/li>

  8、多重?/strong>

  •   (1)一个类l承了一个类和接口,那么必须类写在前面Q接口写在后面,接口之间用逗号分隔?/li>
  •   (2)接口之间可多重承,注意使用关键字extends?/li>
  •   (3)一个类虽只实现了一个接口,但不仅要实现q个接口的所有方法,q要实现q个接口l承的接口的ҎQ接口中的所有方法均dcM实现?/li>

  9、接口的嵌入

  •   (1)接口嵌入cMQ可以用private修饰。此Ӟ接口只能在所在的cM实现Q其他类不能讉K?/li>
  •   (2)嵌入接口中的接口一定要为public?/li>

  10、类的嵌?/strong>

  •   (1)cd以嵌入另一个类中,但不能嵌入接口中?/li>
  •   (2)在静态方法或其他Ҏ中,不能直接创徏内部cd象,需通过手段来取得?/li>

  手段有两U:

class A ...{
class B ...{}
B getB() ...{
B b = new B();
return b;  }
}
static void m() ...{
 A a = new A();
A.B ab = a.getB(); // 或者是 A.B ab = a.new B(); 

  (3)一个类l承了另一个类的内部类Q因cL内部c,而内部类的构造方法不能自动被调用Q这样就需要在子类的构造方法中明确的调用超cȝ构造方法。接上例Q?class C extends A.B ...{

class C extends A.B ...{
 C() ...{
 new A().super(); // q一句就实现了对内部cL造方法的调用。?
}  } 

  构造方法也可这样写Q?

C(A a) ...{
a.super();
} // 使用q个构造方法创建对象,要写成C c = new C(a); a是A的对象?/font>

  11、异常类

  JAVA中除了RunTimeExceptionc,其他异常均须捕获或抛出?/p>

Computerboy 2007-02-02 11:45 发表评论
]]>
目开发前的准备工作-Q-~写跨^台注意事?/title><link>http://www.tkk7.com/computerboy/archive/2007/01/19/94928.html</link><dc:creator>Computerboy</dc:creator><author>Computerboy</author><pubDate>Fri, 19 Jan 2007 06:16:00 GMT</pubDate><guid>http://www.tkk7.com/computerboy/archive/2007/01/19/94928.html</guid><wfw:comment>http://www.tkk7.com/computerboy/comments/94928.html</wfw:comment><comments>http://www.tkk7.com/computerboy/archive/2007/01/19/94928.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.tkk7.com/computerboy/comments/commentRss/94928.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/computerboy/services/trackbacks/94928.html</trackback:ping><description><![CDATA[最q由于公司要开发最q的web和wap|站?br /><br />前提Qwindowspȝ开发,linux pȝq行?br /><br />没有办法Q我采用的几本是一些开发的东西Q?br />配置是这LQ数据库QMysql 服务器:TomcatQApache。系l:linux<br /><br />上网找了一些资料,主要是关于跨^台的一些细节:<br /><br />1 E序设计的信息编码要注意Q一般要采用 ASCII码字W集Qƈ不是所有的操作pȝ都支持Unicode码?br />  后来研究一下,q是UTF-8?br /><br />2 E序中不要硬性编码与q_相关的Q何常量,比如行分隔符、文件分隔符、\径分隔符{?br />在unix和mac 中是?”,在windows里是“\”?br />如要用这些常量,要用?Java.util.properties cȝgetProperty Ҏ?br />如: Java.util.properties.getProperty("file.seParator")<br />可以获得文g分隔W,getProperty("line.seParator") q回行分隔符?br />                    getProperty("path.seParator") q回路径分隔W?br /><br />3 ~写跨^台网l程序时Q不要?Java.net.InetAddresscȝgetHostNameҎ得到L名,<br />因ؓ不同的^台的L名格式不同。最好?getAddress得到格式相同的IP地址。另外,<br />E序中的所有的L都要换成IP地址?br /><br />4 如写GUIE序Q在使用AWTlg时不能硬性设|组件的大小和ؓ止,而应该用JAVA的布局理?Layout manager)<br />  来设|?br /><br />5 不同的操作系l,不同的机器,pȝ支持的颜色和屏幕的大和分L率都不同Q如何获得这些属性,<br />使用 Java.awt.systemcolor cd以获得需要的颜色Q如该类?inactiveCaption 是H口Ҏ<br />zd标题背景色 ?Menu是菜单背景色Q用Java.awt.Tookit ?getScreenResolution可以?br />“像素每英寸”ؓ单位昄分L率?br />该类 getScreenSize 可以得到屏幕大小(英寸), LoadSystemcolors 可以列出所有的pȝ颜色?br /><br />6 E序中用Q何一个方法时Q要详细查看文档Q确保,使用的方法不是文档已l申明ؓq时的方法,<br />也不是文档中未标明的隐含Ҏ?img src ="http://www.tkk7.com/computerboy/aggbug/94928.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/computerboy/" target="_blank">Computerboy</a> 2007-01-19 14:16 <a href="http://www.tkk7.com/computerboy/archive/2007/01/19/94928.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>DWR 下的脚本分页http://www.tkk7.com/computerboy/archive/2006/11/01/78458.htmlComputerboyComputerboyWed, 01 Nov 2006 05:23:00 GMThttp://www.tkk7.com/computerboy/archive/2006/11/01/78458.htmlhttp://www.tkk7.com/computerboy/comments/78458.htmlhttp://www.tkk7.com/computerboy/archive/2006/11/01/78458.html#Feedback1http://www.tkk7.com/computerboy/comments/commentRss/78458.htmlhttp://www.tkk7.com/computerboy/services/trackbacks/78458.html
好久没有上来写东西,最q在写关于DWR的项目,出现了一炚w题,是脚本分页Q在|上找了怹Q都没有扑ֈ
所以还是动手写一个吧
呵呵Q懒人没有办法 Q_Q?!

首先是HTMLQ静态页Q我在这随便写一个吧。就是ؓ了实现功能而已Q这个页面是Z实现从数据库d?br />用户的相关信息,然后实现修改Q?br />

Q-Q-Q-Q-Q-stone HTML start  -----------
<html>
<head>
  <script type="text/javascript" language="javascript" src="../dwr/interface/UserService.js"></script>
  <script type="text/javascript" language="javascript" src="../dwr/interface/CorpService.js"></script>
  <script type="text/javascript" language="javascript" src="../dwr/interface/CopyrightService.js"></script>
  <script type="text/javascript" language="javascript" src="../dwr/interface/SearchEngine.js"></script>
  <script type="text/javascript" language="javascript" src="../dwr/engine.js"></script>
  <script type="text/javascript" language="javascript" src="../dwr/util.js"></script>
  <script type="text/javascript" language="javascript" src="../dwr/interface/BackstageService.js"></script>
  <script type="text/javascript" language="javascript" src="../dwr/interface/Backstage.js"></script>
  <script type="text/javascript" language="javascript" src="../dwr/interface/UserDbManager.js"></script>
  <script type="text/javascript" language="javascript" src="../dwr/interface/User.js"></script>
  <script type="text/javascript" language="javascript" src="report.js"></script>
</head>
<body onload="init()">
<table width="100%" border="0" cellspacing="2">
  <tr>
    <td valign="top">
      <div style="width:100%"; margin-top:-5px;">
      <table width="100%" align="center" cellpadding="0"  cellspacing="0" border="0" bgcolor="#C3D9FF" style="margin-bottom:5px;">
       <tr>
         <td>
          <div style="width:100%">
          <table>
            <tr>
             <td>
              <div id="content-div" style="height:260px;"><b style="font-weight:bold;color:green;">此处为用h?lt;/b><br/>
               <table  border="1" class="rowed">
               <thead>
                <tr>
                   <th>用户名称</th>
                   <th>用户邮箱</th>
                   <th>手机</th>
                   <th colspan="2">操作</th>
                </tr>
               </thead>
               <tbody id="peoplebody">
               </tbody>
               </table>
              </div>
            </table>
            </div>
          </table>
         </div>
        </table>
<div id="--copyright" class="copyright"></div>
           <div id="edit-user-div"  style="position:absolute; width:260px; border:solid 1px red; background-color:tomato; display:none;">
           <div id="edit-user-div-content" style="width:100%;"></div>
          <hr/>
           <button onclick="editUser()">修改</button>
            <button onclick="$('edit-user-div').style.display='none';">取消</button>
          </div>
   
</body>
</html>          
        


Q-Q-Q-Q-Q-Q-Q-stone  HTML end  ---------------------------------------


那么开始真正的脚本实现了。由于DWR是静态和脚本联合的东ѝ那么我们在脚本要实C个动态的LIST查询

Q-Q-Q-Q-Q-Q-Q-stone Script start-----------------------------

function init() {

  username = false;
  email = false;
  cellphone = false;
  if ($('--copyright') != null) {
    CopyrightService.get(function(data) {
      $('--copyright').innerHTML = data;
    });
  }


  BackstageService.getAllUsers(function(userList) {
    _corps=userList;
    _pageData=userList;
    var ttt='';
    var count=0;
    _page=1;
    var s = '';
    for (var user in userList) {
       count++;
      if(count>10){
        continue;
      }

      var u = userList[user];
      s += '<tr><td>' + u.username + '</td>';
      s += '<td>' + u.email + '</td>';
      s += '<td>' + u.cellphone + '</td>';
      s += '<td> &nbsp; <input type="button"value="修改" onclick="showEditDiv(\'' + u.username + '\',\'' + u.email + '\',\'' + u.cellphone + '\');"/> '
              + '</td>';
      s += '<td>  &nbsp; <input type="button"value="删除" onclick="delUser(\'' + u.username + '\');"/>'
              + '</td>';

    }
    _pageCount=count;
    if(count==0){
      ttt='没有扑ֈ记录';
    }
    else{
      var tmp='<div style="width:99%;font-size:9pt;text-align:right;">';
      if(count>10){
        tmp +='W?lt;b style="color:green;">1</b>??lt;b>'+(Math.ceil(_pageCount/10))+'</b>?;
        tmp +='&nbsp;&nbsp;&nbsp;';
        tmp +='<a href="#" style="color:black;" onClick="showPage(2)">下页</a>';
        tmp +='&nbsp;&nbsp;&nbsp;';
        tmp +='<a href="#" style="color:black;" onClick="showPage('+(Math.ceil(_pageCount/10))+')">末页</a>';

      }
        tmp +='</div>';
        tmp +='<div style="width:99%; font-size:10pt; text-align:right;"><br/>?lt;b style="color:green;">'+count+'</b>条记?;
        tmp +='</div>';
        ttt +=tmp;
    }

    var tb = $('peoplebody');
    tb.innerHTML = s;
    $('content-div').innerHTML=ttt;
  });


}




------------------下面是分|C的脚本--------------------
function showPage(page){
  $('content-div').innerHTML='<span style="color:gray;font-size:9pt;">载入?..</span>';
  _page=page;
  var ttt='';
  var count=0;
  var total=Math.ceil(_pageCount/10);
  for(var no in _pageData){
    count++;
    if(count>10*page||count<=(page-1)*10){
      continue;
    }
  }
  var tmp ='<div style="width:99%; font-size:9pt; text-align:right;">';
  if(page>1){
    tmp +='<a href="#" style="color:black;" onClick="showPage(1)">首页</a>';
    tmp +='&nbsp;&nbsp;&nbsp;';
    tmp +='<a href="#" style="color:black;" onClick="showPage('+(page-1)+')">上页</a>';
    tmp +='&nbsp;&nbsp;&nbsp;&nbsp;';
  }
    tmp +='W?lt;b style="color:green;">'+_page+'</b>??lt;b>'+total+'</b>?;
    if(page<total){
      tmp +='&nbsp;&nbsp;&nbsp;';
      tmp +='<a href="#" style="color:black;" onClick="showPage('+(page+1)+')">下页</a>';
      tmp +='&nbsp;&nbsp;&nbsp;';
      tmp +='<a href="#" style="color:black;" onClick="showPage('+total+')">末页</a>';

    }
      tmp +='</div>';
      tmp +='<div style="width:99%;font-size:10pt;text-align:right;"><br/>?lt;b style="color:green;">'+count+'</b>条记?;
      tmp +='</div>';
      ttt +=tmp;
     $('content-div').innerHTML=ttt;


}


׃我的实现是一个脚本的分页Q所以ƈ没有在后台或者JAVA上实现。这个是存脚本实现的DWR分页
技术有限,希望大家l予指点Q  
By:stone





-----------------------------stone  end  -------------

Computerboy 2006-11-01 13:23 发表评论
]]>
一些常用的Java问答http://www.tkk7.com/computerboy/archive/2006/09/20/70697.htmlComputerboyComputerboyWed, 20 Sep 2006 01:51:00 GMThttp://www.tkk7.com/computerboy/archive/2006/09/20/70697.htmlhttp://www.tkk7.com/computerboy/comments/70697.htmlhttp://www.tkk7.com/computerboy/archive/2006/09/20/70697.html#Feedback0http://www.tkk7.com/computerboy/comments/commentRss/70697.htmlhttp://www.tkk7.com/computerboy/services/trackbacks/70697.html
虽然很基Q但是我觉得有必要脓一下,呵呵。谁都有忘记的时候么Q希望对新手或者找工作的朋友有帮助Q以后找C在l更斎ͼ



1. 问:在JAVA与JSP中要调用一个LINUX上的脚本E序,或WINDOWS上的脚本E序,该怎么写?
{:System.getRuntime().exec("bash < aaa.sh");

2. 问:java中用什么表C双引号
{:"""

3. 问:如何在JSPE序里另起一个线E?
{:
JSP本n是独立U程q行而不象CGI都是独立q程.
一?
Thread t = new Thread("你的对象");
t.start();可以了.
要求你这个对象要实现runnable接口或承thread.

4. 问:jsp如何获得客户端的IP地址Q?br />{:
request.getRemoteAddr()
看看各个webserver的API文档说明Q一般都有自带的Qresin和tomcat都有

5. 问:E序l止与输出终?br />{:
E序中止:return;
输出中止out.close();q一句相当于ASP的response.end

6. 问:jsp中如何得C늚URLQ?br />{:request.getHeader("referer");

7. 问:提交|页的网过期功能是怎么做的Q?br />{:response.setHader("Expires","0");

8. 问:在JSP|页中如何知道自已打开的页面的名称
{:
request.getRequestURI() ;//文g?br />request.getRequestURL() ;//全部QRQ?br />
9. 问:提交表单后验证没有通过Q返回提交页面,如何使原提交面中的数据保留Q?br />{:javascript的go(-1)可以把上늚表单内容重新昄出来,但password域没?br />
10. 问:如何取得http的头信息Q?br />{:request.getHader(headerName);

11. 问:&&?amp;的区别?
{:
&&是短路的与操作,也就是当C个条件是false的时候,W二个条件不用执?br />&相反Q两个条件L执行?br />
12. 问:?以正弦曲U的一个周期显C出?br />{:
public void paint(Graphics g)
{
for(int i=0;i<200;i++)
g.drawString("*",i,(int)(Math.sin(i)*20)+50);
}
}

13. 问:点数相乘后l果不精如100.0 * 0.6 l果{于 60.0004
{:
q不叫错?float和double是这样实现的.如果要精计,java提供了一个strictfp,它的计算遵@IEEE 754标准.而普通的float和double是由地^台QҎ式或g提供的额外精度或表示范围?br />
14. 问:如何获得当前用的cursors的位|?
{:
int row = rs.getRow()是当前指针行数,q有isFrist();isBeforeFist();isLast();isAfterLast();可以试是不是在Ҏ名所说的位置

15. 问:表单成功提交了,点后退昄|页q期
{:
?lt;head></head>里面加以下代?br /><META HTTP-EQUIV="Pragma" CONTENT="no-cache">
<META HTTP-EQUIV="Cache-Control" CONTENT="no-cache">
<META HTTP-EQUIV="Expires" CONTENT="0">
或者在表单中加上
<%
response.setHeader("Pragma","no-cache");
response.setHeader("Cache-Control","no-cache");
response.setDateHeader("Expires",0);
%>

16. 问:接口的简单理?br />{:接口Z规范,比如我在接口中定义了一个方?
getData()
q是用来从不同的数据库中取数据的,是JDBC的实现对于用?我不要知道每U数据库是如何做?但我知道如何它们要实现这个接口就一定有q个Ҏ可以供我调用.q样SUN把q个接口l各个数据库开发商,让他们自己实? 但ؓ什么不用承而用接口?因ؓl承只能从一个你cȝ?而接口可以实现多?是说我实现的子cL多个规定好的接口中的功能. q只是简单的理解,{你深入理解抽象的时候就知道抽象到抽象类时ؓ什么还要再抽象到接?

17. 问:怎样~写一个取消按钮(怎样q回上一个页面,象工h的后退按钮Q?
{:
javascript把每ơ浏览过的location都压C一个栈?q个栈就是history,然后你如果要回到W几个页面它做几次POP操作,把最后POP出来的那个LOCATIONl你. q就是JAVASCRIPT在实现history.go(-x)的原?

18. 问:什么是回调Q?br />{:
单说,回调用不是让你去监听谁做完了什么事,而是谁做完了什么事报告给? q就是回调用的思想.例子太多?AWT的事?SWING事g模型都是q样? q有多线E中,如果要控制线E数,不能L查询每个U程是否l束,要在每个U程l束时让U程自己告诉ȝE我l束?你可以开新的U程?

19. 问:要介l一下compareToҎ
{:
compareToҎ是Comparable 接口必需实现的方?只要实现Comparable 可以用Arrays.srot()排序p实现Runnable接口的runpThread()一?

20. 问:如何可以从别的Web服务器检索页, 然后把检索到的网늚HTML代码储存在一个变量中q回q来
{:q是一个简单的WEB ROBOT实现,用URLcdC|页中抓内容,然后自己写一个分析程序从中找出新的URL,不断递归下去p?

21. 问:applet中如何获得键盘的输入
{:application的System.in是当前系l的标准输入,applet因ؓ安全的原因不可能d当前pȝ(客户?的标准输?只能从它的ROOTlg的事件中,比如键盘事g中取得键?

22. 问:怎样计算代码执行所p的时_
{:
代码开始取旉Q结束后取时_相减
long t1 = System.currentTimeMillis();
///////////////// your code
long t2 = System.currentTimeMillis() ;
long time = t2-t1;

23. 问:如何获在E序中获得一个文件的ContentTypeQ?br />{:
URL u = new URL("file:///aaa.txt");
URLConnection uc = u.openConnection();
String s = uc.getContentType();

24. 问:q接池的使用是徏立很多连接池Q还是一个连接池里用多个q接Q?br />{:
只有在对象源不同的情况下才会发生多个池化,如果你只q一l一个数据源,永远不要用多个连l池. 所以连l池的初始化一定要做成静态的,而且应该在构造对象之?也就是只有在cLOAD的时?别的时候不应该有Q何生成新的连l池的时候?br />
25. 问:JavaMail要怎么安装Q?br />{:下蝲两个包,一个是javamail包,另一个是jaf包。下载完直接把这两个包不解压加到CLASSPATH?br />
26. 问:怎样把地址栏里的地址锁定Q?br />{:把你的服务器的可讉K目录索引选项关闭p?M服务器都有一个conf文g,里面都有q个选项?br />
27. 问:在JAVA中怎么取得环境变量啊。比如: TEMP = CQTEMP Q?br />{:String sss = System.getProperty(key)

28. 问:怎样实现四舍五入Q保留小数点后两位小敎ͼ
{:
import java.text.*;
...
NumberFormat nf=NumberFormat.getNumberInstance();
nf.setMaximumFractionDigits(2);
nf.setMinimumFractionDigits(2);
nf.format(numb);

29. 问:Applet和form如何通信Q?br />{:
取得的参C到param里面
<%
String xxx = request.getParameter("xxx");
%>
<applet>
<param value="<%=xxx%>">
</applet>


30. 问:java-plug-in是什么?
{:Java Runtime Environment的插件。用来运行javaE序。不需要什么特别的讄。等于你的机器里面有了jvm?br />
31. 问:WEB上面怎么栯接上一个EXCEL表格Q?br />{:
定义面得contentType="application/vnd.ms-excel"Q让面以excel得Ş式打开。同样也可以以word得Ş式打开Qapplication/msword?br />
32. 问:怎样才能避免textarea字数限制Q?br />{:是用了FORM的默认方法的~故,如果什么也不写默认是GET改用Post卛_Q在Form中定义mothod="post"?br />
33. 问:Z么加?lt;%@page contentType="text/html;charset=gb2312" %>插入数据库的中文Q依然是qQ?br />{:
q要从环境看,能显C明你的JSP引擎没有问题,但写入数据库时你的JDBC能不能处理中?同一公司不同版本的JDBC都有支持中文和不支持中文的情?RESIN自带的MYSQL JDBC׃支持,MM的就支持,q有你的数据库类型是否支持中?CHAR的一般支?但是否用binary存储双字节码

34. 问:对于JFrameQhide()Qshow()与setVisibel()有什么区别吗Q?br />{:
setVisible()从Componentl承q来Q而hide(),show()从Window里面l承q来?br />Makes the Window visible. If the Window and/or its owner are not yet displa yable, both are made displayable. The Window will be validated prior to being made visible. If t he Window is already visible, this will bring the Window to the front. 区别在这?br />36. 问:sendRedirectZ么不可以转到mms协议的地址的?response.sendRedirect("mms://missiah.adsldns.org:9394");
{:javaq_目前实现的protocol中ƈ没有mms,你可以取pȝ属性java.protocol.handler.pkgs看看它的g有没有mms,所以如果要想重定向到mms://hostq样和URL,只有生成客户端的JAVASCRIPT让它来重定向

37. 问:JTable中怎样定义各个Columns和Width和怎样讄表格的内定w做靠x居中Q?br />{:
TableColumn tc = table.getColumn("Name");//取得列名?Name"的列Handle
int currentWidth = tc.getPreferredWidth(); //取得该列当前的宽?br />tc.setPreferredWidth(200); //讄当前列宽
tc.setMaxWidth(200); //讄该列最大宽?br />tc.setMinWidth(50); //讄该列最宽?br />
38. 问:Ҏ作是否可用于select语句Q?br />{:Ҏ作其实是指成批理更新的操?l对不可能用于select操作?br />
39. 问:Z么jsp路径太深文g名太长就无法d文gQ?br />{:path不能过255长度,不然找不到?q是作业pȝ的事?br />
40. 问:如何让页面不保留~存Q?br />{:
<%
response.setHeader("Pragma","No-cache");
response.setHeader("Cache-Control","no-cache");
response.setDateHeader("Expires", 0);
%>

41. 问:我的applet code 中用到jbutton 时就出错是否׃ie不支持swing package 请问应怎么办?
{:JBUTTON是SWING基本包啊,只要把jdk/jre/lib/rt.jar攑֜classpathp?不要加蝲M别的库?br />
42. 问:不知道java是否支持midi格式Q如果支持,应该怎么把wave格式转换成midi格式Q?br />{:目前q不?可以看一下JMF三个版中对MIDI的格式支持是read only,而WAVE是read/write,MIDI只能播放,不能生成?br />
43. 问:在jsp里面防止用户直接输入urlq去面Q应该怎么做呢Q?br />{:
一是从web服务器控?Ҏ一目录的所有访问要通过验证.
二是在要讉K的页面中加入控制.q个一般用session,也可以用h状态码实现

44. 问:
例如后台有一计算应用E序Q此E序q算h很慢Q可持箋几分钟到几小Ӟq不,主要是能ȀzdQ,客户d提交后,服务器对dq行无误后向服务器后台程序发送信息,q将其激zR要求如下:
1Q首先将后台E序Ȁz,让它执行此Q务(比如Q前台将计算的C代码提交上后Q后台程序程序能马上调用Qƈ其q行Q?br />2Q要在前台JSP面中显C行过E信息(׃q行旉长,希望让客L到运行过E中产生的信息)如何完成Q?br />
{:
zL可以?q行一个shell让它去运行后台就?但不可能取出q行信息,因ؓHTTP的超旉制不可能永远{你后台q行?而且信息如果要动态实时推出来得用SERVER PUSH技术?br />
45. 问:数据库是datetime ?Q插入当前时间到数据库?
{:
java.sql.Date sqlDate = new java.sql.Date();
PreparedStatement pstmt = conn.prepareStatement("insert into foo(time) values(?)");
pstmt.setDate(1,sqlDate);
pstmt.executeUpdate();

46. 问:怎样L字符串前后的I格?br />{:String.trim()

47. 问:session怎样存取intcd的变量?
{:
session.setAttribute("int", i+"");
int i = Integer.parseInt(session.getAttribute("int"));

48. 问:在javascript中如何输出的floatcd的数据保留两位小数?br />{:Math.round(aaaaa*100)/100?br />
49. 问:在beanU如何调用session
{:
你可把session对象作ؓ一个参Clbean
在BEAN中定义HttpServletRequest request;HttpSession session;
然后
session = request.getSession(false);
false为如果session为空,不徏立新的session
session作ؓ参数传入.其实只要request传入可?br />
50. 问:如何把txt或word文g按原格式昄在jsp面或servlet上?
{:
其实一个非常简单的解决Ҏ是在服务器的MIME中指点定TEXT和WORD的解释方?然后用JSP或SERVLET生成它就行了,客户端就会自动调用相应程序打开你的文档?br />如果是希望按原格式的昄在页面上Q而不是调用其他程序打开那么你可以试试用WEBDEV协议,可以说这是MS的一个亮?它是在WEB方式下打开文档,和共享一?完全W合的要求?br />
51. 问:object的cloneҎZ么不能直接调用?
{:
q个Ҏ在object中是protected
Z么要把这个方法定义ؓprotected,q是一个折?它的目的是想知道你这个方法在Object里只是一个标?而不是一个实?比如

public class Object
{

.............
protected Object clone()
{}
}

所以直接承的clone()Ҏq不能做M?你要使用q个Ҏp重蝲q个Ҏq放宽访问权限ؓpublic,或实现cloneable接口. 但它没法q样告诉你它没有真的实现,只好用protected Ҏ加以警示

52. 问:一个页面中如何h另外一个页面?
{:
要求是这些面必L兌,一是它们都有一个共同的层?也就是说是一个内的分面,当然可以是Q意,帧内再分帧也可以,另一个可能是当前H口弹出的窗?如果没有联系,那就不可能用一个页面刷新另一个页? 帧内只要一U一U引用就行了. 比如在左帧中一个页面中写top.right.location.reload();那么名ؓright的右帧中的页面就会刷? 弹出的一?用open时的名称h子窗?子窗口用openerhȝ?br />
53. 问:如何在jsp中怎么样向客户端写cookiesQ?br />{:
Cookie coo = new Cookie(name, value);
HttpServletResponse.addCookie(name);

54. 问:Z么jTextField1.setText("aaabbb");jTextField2.setText("AAABBB"); 得到的字体宽度不一P
{:是说如果不是指定ؓ{宽字体,每个字体的宽度都是不一L.因此JAVA中用FontMetrics cL取字W宽度?br />
55. 问:String kk=application/octet-stream; name="G:/SMBCrack.exe";如何得到SMBCrack.exeQ?br />{:
q应该是解析上传时候的二进制流得到的这一行里面格式是固定的,取到name="后面的字W串Q然后把";L。然后取最后一?后面的所有字W组成一个新字符串就行了?br />
56. 问:如何传值ƈ不刷新页面?
{:
弹出一个页面进行值的选择或者输入,ok后用将gl原H口Q用javascript关闭打开的窗口即可:
window.close();opener.focus();

57. 问:有一个字W串Q?EF0C114EA4"Q如何变为a[0] = 0xEF a[1] = 0x0C a[2] = 0x11 a[3] = 0x4E a[4] = 0xA4Q?br />{:
String str="EF0C114EA4F";
out.print(str+"<br>");
int l=str.length()/2+str.length()%2,j=0,k=0;
String[] a=new String[l];
for(int i=0;i<l;i++){
if(str.length()-j==1)
k=str.length();
else
k=j+2;
a="0x"+str.substring(j,k);
out.print("a["+Integer.toString(i)+"]="+a+"<br>");
j+=2;
}

58. 问:怎样一个int转换成一个四字节的byte数组Q?br />{:
int x = 1234567;
byte[] b = new byte[4];
for(int i=0;i<b.length;i++)
{
b = (x >>( i*8)) & 0xFF;
}

59. 问:indexOf()的用需要注意什么?
{:参数是指从第几位Q?Q?Q?Q?..Q开始搜索,而返回值是指搜索到的位|(0Q?Q?Q?.......Q注意是从零v的?br />
60. 问:在Java应用E序中如何动态的d一个按钮?
{:
q里涉及一个组仉l的问题,lg要先于panel被显CZ处存?如果一panel已经昄?那么加在上面你能看到?但如果在同一个panel? 先有button A,假如按下它加了butt on B,q时你如果整个panel重给,那么A本n要重l?它的事g监听没有了,当然也就加不成B?所以如果要先有另一个panel,当按A时把B加在q个panel上ƈ重绘q个paenl,其实更好的方法是先把B加在panel?同一个也?把它setVisiable(flase),按A时设?true?br />
61. 问:book mybook=new book(bookid);book是servlet,出错?br />{:
book是servlet,能book mybook=new book(bookid);
说明自己实现了servlet容器?不然,servlet能让你自己去调用? servlet如果调用其实和EJBq?%的区别都没有,它们都是自己l承或实C些接?在这些父cL接口中实C如果和容?打交?的方?然后容器调用q些Ҏ来管理它,让它生成实例,池化,钝化,销?再生{?所以这样写是错误的?br />
62. 问:l定一个字W串5*(5+9)/7怎样计算出结果?
{:
可有两种Ҏ
1。用堆栈完成
2。最单的ҎQ不用编E,如果有Q何一个数据库的化Q用select (5*(5+9)/7) from oneTable

63. 问:如何实现递交表单内容的加密解密?
{:
如果你用IE目前只能用SSL协议,q一层不要你考虑,否则只你用你自己的工具加密传?接收后再解密?至于如何加解,如果要和公认的系l结?q通用的MD5,RAS{公开法,如果你只是自׃自己?你随便按你的x把数据加上一些东?取回来按规则减掉q些东西,我敢保证除你自己没有M知道解密Ҏ.

64. 问:Z么Integer.parseInt("+1");会抛出NumberFormatException的异常?
{:因ؓ"+"q行在JAVA中被重蝲.pȝ无法定你用的是术加还是字W??br />q一点可以在JAVASCRIPT中更好地理解:
<form name="t"><input name=s value=1234></form>
var a = document.t.s.value+1;
q时a = 12345,因ؓdocument.t.s.value作ؓ字符?但var a = document.t.s.value-1;
a 是1233,因ؓpȝ知道-q算肯定是算术运?所以把document.t.s.value转换成数?


65. 问:hashCode() 有什么用Z么有时候需要覆盖Object里的hashcode()ҎQ?br />{:q就是这个对象的w䆾证啊,要不如何区分哪个对象?br />
66. 问:怎样在tomcat中实C个定时执行的东东Q?br />{:
在应用程序启动时自动q行。servlet2.3中定义了ServletListener,监听Servlet Con text的启动或则关闭(可在配置文g中配|)Q启动时触发一个守护程序的q行(可以实现java.util.Timer或则 javax.swing.Timer).

67. 问:E序可以输出自己吗?
{:孔d悖论q个非常有名的法?是说Q何程序都不可能输?


68. 问:能够把字W{化成ASCII码?比如?A 转化?65Q?br />{:
int a='A';
out.println(a);

69. 问:如何区分输入的文字中的全角与半角Q?br />{:׃不能分L出全角和半角字符的值有什么规?只好把全角符L丑և来了.

70. 问:用户注册后的自动发信E序该怎么做?
{:
q种发信E序不考虑性能,因ؓ不可?U就有一个h注册,我们说的考虑性能的发信程序是指上百万信在队列里要不停发送的那种,象你q个随便怎么写一个程序都?没有必要用JAVAMAIL.只要指定一个发信的服务器然后用cocketq它?5口就行了.自己用SOCKETqSMTP?5口发一信好象两个邻居之间送一样东?直接递过d?用JAVAMAIL,消息机制是你把q个东西从邮局寄给你的d?


Computerboy 2006-09-20 09:51 发表评论
]]>
面向 Java 开发h员的 Ajax: 构徏动态的 Java 应用E序http://www.tkk7.com/computerboy/archive/2006/09/15/69986.htmlComputerboyComputerboyFri, 15 Sep 2006 15:27:00 GMThttp://www.tkk7.com/computerboy/archive/2006/09/15/69986.htmlhttp://www.tkk7.com/computerboy/comments/69986.htmlhttp://www.tkk7.com/computerboy/archive/2006/09/15/69986.html#Feedback1http://www.tkk7.com/computerboy/comments/commentRss/69986.htmlhttp://www.tkk7.com/computerboy/services/trackbacks/69986.html
面向 Java 开发h员的 Ajax: 构徏动态的 Java 应用E序



?Web 应用E序开发中Q页面重载@环是最大的一个用障,对于 Java 开发h员来说也是一个严ȝ挑战。AjaxQ异?JavaScript ? XMLQ是一U编E技术,它允ؓZ Java ?Web 应用E序?Java 技术、XML ?JavaScript l合hQ从而打破页面重载的范式?br />AjaxQ即异步 JavaScript ?XMLQ是一U?Web 应用E序开发的手段Q它采用客户端脚本与 Web 服务器交换数据。所以,不必采用会中断交互的完整面hQ就可以动态地更新 Web 面。? AjaxQ可以创建更加丰富、更加动态的 Web 应用E序用户界面Q其x性与可用性甚臌够接q本机桌面应用程序?br />
Ajax 不是一Ҏ术,而更像是一?模式 —?一U识别和描述有用的设计技术的方式。Ajax 是新颖的Q因多开发h员才刚刚开始知道它Q但是所有实? Ajax 应用E序的组仉已经存在若干q了。它目前受到重视是因为在 2004 ?2005 q出C一些基?Ajax 技术的非常的动? Web UIQ最著名的就?Google ?GMail ?Maps 应用E序Q以及照片共享站? Flickr。这些用L面具有够的开创性,有些开发h员称之ؓ“Web 2.0”,因此?Ajax 应用E序的兴飞速上升?br />
在这 个系列中Q我提供?Ajax 开发应用程序需要的全部工具 。在W一文章中Q我解?Ajax 背后的概念,演示为基?Java ? Web 应用E序创徏 Ajax 界面的基本步骤。我用代码示例演C Ajax 应用E序如此动态的服务器端 Java 代码和客L JavaScript。最后,我将指出 Ajax 方式的一些不I以及在创?Ajax 应用E序时应当考虑的一些更q的可用性和讉K性问题?br />
更好的购物R

? 以用 Ajax 增强传统?Web 应用E序Q通过消除面装入从而简化交互。ؓ了演C一点,我采用一个简单的购物车示例,在向里面d目Ӟ它会动态更新。这Ҏ术如果整合到在线? 店,那么用户可以持箋地浏览和向购物R中添加项目,而不必在每次点击之后都等候完整的面更新。虽然这文章中的有些代码特定于购物车示例,但是演示的技 术可以应用于M Ajax 应用E序。清?1 昄了购物RCZ使用的有?HTML 代码Q整文章中都会使用q个 HTML?br />

清单1. 购物车示例的有关片断

<!-- Table of products from store's catalog, one row per item -->
<th>Name</th> <th>Description</th> <th>Price</th> <th></th>
...
<tr>
  <!-- Item details -->
  <td>Hat</td> <td>Stylish bowler hat</td> <td>$19.99</td>
  <td>
    <!-- Click button to add item to cart via Ajax request -->
    <button onclick="addToCart('hat001')">Add to Cart</button>
  </td>
</tr>
...

<!-- Representation of shopping cart, updated asynchronously -->
<ul id="cart-contents">

  <!-- List-items will be added here for each item in the cart -->
 
</ul>

<!-- Total cost of items in cart displayed inside span element -->
Total cost: <span id="total">$0.00</span>



Ajax 往q过E?br />
Ajax 交互开始于叫作 XMLHttpRequest ?JavaScript 对象。顾名思义Q它允许客户端脚本执?HTTP hQƈ解析 XML 服务器响应。Ajax 往q过E的W一步是创徏 XMLHttpRequest 的实例。在 XMLHttpRequest 对象上设|请求用的 HTTP ҎQGET ?POSTQ以及目?URL?br />
现在Q您q记?Ajax 的第一?a 是代表异步(asynchronousQ?吗?在发?HTTP hӞ不想让浏览器挂着{候服务器响应。相反,您想让浏览器l箋对用户与面的交互进行响应,q在服务器响应到达时再进行处理。ؓ了实现这个要求,可以 ?XMLHttpRequest 上注册一个回调函敎ͼ然后异步地分z? XMLHttpRequest。然后控制就会返回浏览器Q当服务器响应到达时Q会调用回调函数?br />
?Java Web 服务器上Q请求同其他 HttpServletRequest 一样到达。在解析了请求参C后,servlet 调用必要的应用程序逻辑Q把响应序列化成 XMLQƈ?XML 写入 HttpServletResponse?br />
回到客户端时Q现在调用注册在 XMLHttpRequest 上的回调函数Q处理服务器q回?XML 文档。最后,Ҏ服务器返回的数据Q用 JavaScript 操纵面?HTML DOMQ把用户界面更新。图 1 ?Ajax 往q过E的序图?br />

?1. Ajax 往q过E?br />

现在您对 Ajax 往q过E有了一个高层面的认识。下面我放大其中的每一步骤Q进行更详细的观察。如果过E中q了路,请回头看?1 —?׃ Ajax 方式的异步性质Q所以顺序ƈ非十分简单?br />
分派 XMLHttpRequest

? 从 Ajax 序列的v点开始:创徏和分z来自浏览器?XMLHttpRequest。不q的是,不同的浏览器创徏 XMLHttpRequest 的方法各不相同。清?2 ?JavaScript 函数消除了这些依赖于览器的技巧,它可以检当前浏览器要用的正确方式Qƈq回一个可以用的 XMLHttpRequest。最好是把它当作辅助代码Q只要把它拷贝到 JavaScript 库,q在需?XMLHttpRequest 的时候用它可以了?br />

清单 2. 创徏跨浏览器?XMLHttpRequest

/*
 * Returns a new XMLHttpRequest object, or false if this browser
 * doesn't support it
 */
function newXMLHttpRequest() {

  var xmlreq = false;

  if (window.XMLHttpRequest) {

    // Create XMLHttpRequest object in non-Microsoft browsers
    xmlreq = new XMLHttpRequest();

  } else if (window.ActiveXObject) {

    // Create XMLHttpRequest via MS ActiveX
    try {
      // Try to create XMLHttpRequest in later versions
      // of Internet Explorer

      xmlreq = new ActiveXObject("Msxml2.XMLHTTP");

    } catch (e1) {

      // Failed to create required ActiveXObject

      try {
        // Try version supported by older versions
        // of Internet Explorer

        xmlreq = new ActiveXObject("Microsoft.XMLHTTP");

      } catch (e2) {

        // Unable to create an XMLHttpRequest with ActiveX
      }
    }
  }

  return xmlreq;
}

 


E后我将讨论处理那些不支?XMLHttpRequest 的浏览器的技术。目前,CZ假设清单 2 ?newXMLHttpRequest 函数总能q回 XMLHttpRequest 实例?br />
q? 回示例的购物车场景,我想要当用户在目录项目上点击 Add to Cart 时启?Ajax 交互。名?addToCart() ? onclick 处理函数负责通过 Ajax 调用来更新购物R的状态(请参?清单 1Q。正如清?3 所C,addToCart() 需要做的第一件事是通过调用清单 2 ?newXMLHttpRequest() 函数得到 XMLHttpRequest 对象。接下来Q它注册一个回调函敎ͼ用来接收服务器响应(我稍后再详细解释q一步;请参?清单 6Q?br />
因ؓh会修Ҏ务器上的状态, 所以我用 HTTP POST 做这个工作。通过 POST 发送数据要求三个步骤。第一Q需要打开与要通信的服务器资源?POST q接 —? 在这个示例中Q服务器资源是一个映到 URL cart.do ?servlet。然后,我在 XMLHttpRequest 上设|一个头Q指明请求的内容是表?~码的数据。最后,我用表单~码的数据作求体发送请求?br />
清单 3 把这些步骤放在了一赗?br />

清单 3. 分派 Add to Cart XMLHttpRequest

/*
 * Adds an item, identified by its product code, to the shopping cart
 * itemCode - product code of the item to add.
 */
function addToCart(itemCode) {

  // Obtain an XMLHttpRequest instance
  var req = newXMLHttpRequest();

  // Set the handler function to receive callback notifications
  // from the request object
  var handlerFunction = getReadyStateHandler(req, updateCart);
  req.onreadystatechange = handlerFunction;
 
  // Open an HTTP POST connection to the shopping cart servlet.
  // Third parameter specifies request is asynchronous.
  req.open("POST", "cart.do", true);

  // Specify that the body of the request contains form data
  req.setRequestHeader("Content-Type",
                       "application/x-www-form-urlencoded");

  // Send form encoded data stating that I want to add the
  // specified item to the cart.
  req.send("action=add&item="+itemCode);
}




q就是徏?Ajax 往q过E的W一部分Q即创徏和分z来自客h?HTTP h。接下来是用来处理请求的 Java servlet 代码?br />

servlet h处理

? servlet 处理 XMLHttpRequestQ与处理普通的览?HTTP h一栗可以用 HttpServletRequest.getParameter() 得到?POST h体中发送的表单~码数据。Ajax h被放q与来自应用E序的常?Web h一L HttpSession 中。对于示例购物R场景来说Q这很有用,因ؓq让我可以把购物车状态封装在 JavaBean 中,q在h之间在会话中l持q个状态?br />
? ?4 是处?Ajax h、更新购物R的简?servlet 的一部分。Cart bean 是从用户会话中获得的QƈҎh参数更新它的状态。然?Cart 被序列化?XMLQXML 又被写入 ServletResponse。重要的是把响应的内容类型设|ؓ application/xmlQ否?XMLHttpRequest 不会把响应内容解析成 XML DOM?br />

清单 4. 处理 Ajax h?servlet 代码

public void doPost(HttpServletRequest req, HttpServletResponse res)
                        throws java.io.IOException {

  Cart cart = getCartFromSession(req);

  String action = req.getParameter("action");
  String item = req.getParameter("item");
 
  if ((action != null)&&(item != null)) {

    // Add or remove items from the Cart
    if ("add".equals(action)) {
      cart.addItem(item);

    } else if ("remove".equals(action)) {
      cart.removeItems(item);

    }
  }

  // Serialize the Cart's state to XML
  String cartXml = cart.toXml();

  // Write XML to response.
  res.setContentType("application/xml");
  res.getWriter().write(cartXml);
}




清单 5 昄?Cart.toXml() Ҏ生成的示?XML。它很简单。请注意 cart 元素?generated 属性,它是 System.currentTimeMillis() 生成的一个时间戳?br />

清单 5. Cart 对象的XML 序列化示?br />
<?xml version="1.0"?>
<cart generated="1123969988414" total="$171.95">
  <item code="hat001">
    <name>Hat</name>
    <quantity>2</quantity>
  </item>
  <item code="cha001">
    <name>Chair</name>
    <quantity>1</quantity>
  </item>
  <item code="dog001">
    <name>Dog</name>
    <quantity>1</quantity>
  </item>
</cart>




如果查看应用E序源代码(可以?下蝲 一节得刎ͼ中的 Cart.javaQ可以看到生?XML 的方式只是把字符串添加在一赗虽然对q个CZ来说_了,但是对于?Java 代码生成 XML 来说则是最差的方式。我在q个pd的下一期中介绍一些更好的方式?br />
现在您已l知道了 CartServlet 响应 XMLHttpRequest 的方式。下一件事是q回客户端,查看如何?XML 响应更新面状态?br />

?JavaScript q行响应处理

XMLHttpRequest ?readyState 属性是一个数|它指求生命周期的状态。它?0Q代表“未初始化”)变化?4Q代表“完成”)。每? readyState 变化Ӟreadystatechange 事gp发,?onreadystatechange 属性指定的事g处理函数p调用?br />
?清单 3 中已l看C如何调用 getReadyStateHandler() 函数创徏事g处理函数。然后把q个事g处理函数分配l?onreadystatechange 属性。getReadyStateHandler() 利用了这样一个事实:函数?JavaScript 中的一U对象。这意味着函数可以是其他函数的参数Q也可以创徏和返回其他函数。getReadyStateHandler() 的工作是q回一个函敎ͼ?XMLHttpRequest 是否已经完成Qƈ?XML 响应传递给调用者指定的事g处理函数。清?6 ? getReadyStateHandler() 的代码?br />

清单 6. getReadyStateHandler() 函数

/*
 * Returns a function that waits for the specified XMLHttpRequest
 * to complete, then passes its XML response to the given handler function.
 * req - The XMLHttpRequest whose state is changing
 * responseXmlHandler - Function to pass the XML response to
 */
function getReadyStateHandler(req, responseXmlHandler) {

  // Return an anonymous function that listens to the
  // XMLHttpRequest instance
  return function () {

    // If the request's status is "complete"
    if (req.readyState == 4) {
      
      // Check that a successful server response was received
      if (req.status == 200) {

        // Pass the XML payload of the response to the
        // handler function
        responseXmlHandler(req.responseXML);

      } else {

        // An HTTP problem has occurred
        alert("HTTP error: "+req.status);
      }
    }
  }
}



HTTP 状态码

? 清单 6 中,?XMLHttpRequest ?status 属性以查看h是否成功完成。status 包含服务器响应的 HTTP 状态码。在执行单的 GET ?POST hӞ可以假设M大于 200 QOKQ的码都是错误。如果服务器发送重定向响应Q例?301 ? 302Q,览器会透明地进行重定向q从新的位置获取资源QXMLHttpRequest 看不到重定向状态码。而且Q浏览器会自动添? Cache-Control: no-cache 头到所?XMLHttpRequestQ这样客户代码永q也不用处理 304Q未l修改)服务器响应?br />

关于 getReadyStateHandler()

getReadyStateHandler() 是段相对复杂的代码,特别是如果您不习惯阅?JavaScript 的话。但是通过把这个函数放?JavaScript 库中Q就可以处理 Ajax 服务器响应,而不必处?XMLHttpRequest 的内部细节。重要的是要理解如何在自q代码中? getReadyStateHandler()?br />
?清单 3 中看C getReadyStateHandler() 像这栯调用QhandlerFunction = getReadyStateHandler(req, updateCart)。在q个CZ中,getReadyStateHandler() q回的函数将查在 req 变量中的 XMLHttpRequest 是否已经完成Q然后用响应?XML 调用名ؓ updateCart 的函数?br />
提取购物车数?br />
? ?7 ?updateCart() 本n的代码。函数用 DOM 调用查购物R?XML 文档Q然后更?Web 面Q请参阅 清单 1Q,反映新的购物车内宏V这里的重点是用来从 XML DOM 提取数据的调用。cart 元素?generated 属性是?Cart 序列化ؓ XML 时生成的一个时间戳Q检查它可以保证新的购物车数据不会被旧的数据覆盖。Ajax h天生是异步的Q所以这个检查可以处理服务器响应未按ơ序到达的情c?br />

清单 7. 更新面Q反映购物R?XML 文档

function updateCart(cartXML) {

 // Get the root "cart" element from the document
 var cart = cartXML.getElementsByTagName("cart")[0];

 // Check that a more recent cart document hasn't been processed
 // already
 var generated = cart.getAttribute("generated");
 if (generated > lastCartUpdate) {
   lastCartUpdate = generated;

   // Clear the HTML list used to display the cart contents
   var contents = document.getElementById("cart-contents");
   contents.innerHTML = "";

   // Loop over the items in the cart
   var items = cart.getElementsByTagName("item");
   for (var I = 0 ; I < items.length ; I++) {

     var item = items[I];

     // Extract the text nodes from the name and quantity elements
     var name = item.getElementsByTagName("name")[0]
                                               .firstChild.nodeValue;
                                               
     var quantity = item.getElementsByTagName("quantity")[0]
                                               .firstChild.nodeValue;

     // Create and add a list item HTML element for this cart item
     var li = document.createElement("li");
     li.appendChild(document.createTextNode(name+" x "+quantity));
     contents.appendChild(li);
   }
 }

 // Update the cart's total using the value from the cart document
 document.getElementById("total").innerHTML =
                                          cart.getAttribute("total");
}




? 此,整个 Ajax 往q过E完成了Q但是您可能惌 Web 应用E序q行一下查看实际效果(请参? 下蝲一节)。这个示例非常简单,有很多需要改q之处。例如,我包含了从购物R中清除项目的服务器端代码Q但是无法从 UI 讉K它。作Z个好的练习,误着在应用程序现有的 JavaScript 代码之上构徏够实现这个功能的代码?br />
使用 Ajax 的挑?br />
像M技术一P使用 Ajax 也有许多出错的可能性。我目前在这里讨论的问题q缺乏容易的解决ҎQ但是会随着 Ajax 的成熟而改q。随着开发h员社区增加开?Ajax 应用E序的经验,会记录下最佛_践和指南?br />
XMLHttpRequest 的可用?br />
Ajax 开发h员面临的一个最大问题是Q在没有 XMLHttpRequest 可用时该如何响应Q虽然主要的C览器都支持 XMLHttpRequestQ但仍然有少数用L览器不支持Q或者浏览器的安全设|阻止?XMLHttpRequest。如果开发的 Web 应用E序要部|在企业内部|,那么可能拥有指定支持哪种览器的权力Q从而可以认?XMLHttpRequest 总能使用。但是,如果要部|在公共 Web 上,那么必d心,如果假设 XMLHttpRequest 可用Q那么就可能会阻止那些用旧的浏览器、残疾h专用览器和手持讑֤上的轻量U浏览器的用户用您的应用程序?br />
所以,您应当努力让? 用程序“^E降U”,在没?XMLHttpRequest 支持的浏览器中也能够工作。在购物车的CZ中,把应用程序降U的最好方式可能是?Add to Cart 按钮执行一个常规的表单提交Q刷新页面来反映购物车更新后的状态。Ajax 的行为应当在面装入的时候就通过 JavaScript d到页面,只有?XMLHttpRequest 可用时才?JavaScript 事g处理函数附加到每?Add to Cart 按钮。另一U方式是在用L录时?XMLHttpRequest 是否可用Q然后相应地提供应用E序?Ajax 版本或基于表单的普通版本?br />
可用性考虑

? ?Ajax 应用E序的某些可用性问题比较普遍。例如,让用L道他们的输入已经注册了可能是重要的,因ؓ沙漏光标?spinning 览器的常用反馈机制“throbber”对 XMLHttpRequest 不适用。一U技术是用“Now updating...”类型的信息替换 Submit 按钮Q这L户在{候响应期间就不会反复单击按钮了?br />
另一个问题是Q用户可能没有注意到他们正在查看的页面的某一部分已经 更新了。可以用不同的可视技术,把用L眼球带到面的更新区域,从而缓解这个问题。由 Ajax 更新面造成的其他问题还包括Q“破坏了”浏览器的后退按钮Q地址栏中?URL 也无法反映页面的整个状态,妨碍了设|书{。请参阅 参考资料一节,获得专门解决 Ajax 应用E序可用性问题的文章?br />
服务器负?br />
?Ajax 实现代替普通的Z表单?UIQ会大大提高Ҏ务器发出的请求数量。例如,一个普通的 Google Web 搜烦Ҏ务器只有一个请求,是在用户提交搜烦表单时出现的。?Google Suggest 试图自动完成搜烦术语Q它要在用户输入时向服务器发送多个请求。在开?Ajax 应用E序Ӟ要注意将要发送给服务器的h数量以及由此造成的服务器负荷。降低服务器负蝲的办法是Q在客户Z对请求进行缓冲ƈ且缓存服务器响应Q如果可 能的话)。还应该试?Ajax Web 应用E序设计为在客户Z执行可能多的逻辑Q而不必联l服务器?br />
处理异步

? 帔R要的是,要理解无法保?XMLHttpRequest 会按照分z֮们的序完成。实际上Q应当假讑֮们不会按序完成Qƈ且在设计应用E序时把q一点记在心上。在购物车的CZ中,使用最后更新的旉x保 新的购物车数据不会被旧的数据覆盖Q请参阅 清单 7Q。这个非常基本的方式可以用于购物车场景,但是可能不适合其他场景。所以在设计时请考虑如何处理异步的服务器响应?br />

l束?br />
? 在您?Ajax 的基本原则应当有了很好的理解Q对参与 Ajax 交互的客L和服务器端组件也应当有了初步的知识。这些是Z Java ? Ajax Web 应用E序的构造块。另外,您应当理解了伴随 Ajax 方式的一些高U设计问题。创建成功的 Ajax 应用E序要求整体考虑Q从 UI 设计?JavaScript 设计Q再到服务器端架构;但是您现在应当已l武装了考虑其他q些斚w所需要的核心 Ajax 知识?br />
? 果用这里演C的技术编写大?Ajax 应用E序的复杂性让您觉得恐慌,那么有好消息l您。由?Struts、Spring ? Hibernate q类框架的发展把 Web 应用E序开发从底层 Servlet API ?JDBC 的细节中抽象出来Q所以正在出现简? Ajax 开发的工具包。其中有些只侧重于客LQ提供了向页面添加可视效果的便方式,或者简化了?XMLHttpRequest 的用。有些则走得更远Q提供了从服务器端代码自动生?Ajax 接口的方式。这些框架替您完成了J重的Q务,所以您可以采用更高U的方式q行 Ajax 开发。我在这个系列中研I其中的一些?br />
Ajax C֌正在快速前q,所以会有大量有价值的信息涌现。在阅读q个pd的下一期之前,我徏议您参?参考资?一节中列出的文章,特别是如果您是刚接触 Ajax 或客L开发的话。您q应当花些时间研I示例源代码q考虑一些增强它的方式?br />
? q个pd的下一文章中Q我深入讨?XMLHttpRequest APIQƈ推荐一些从 JavaBean 方便地创?XML 的方式。我q将介绍替代 XML q行 Ajax 数据传递的方式Q例?JSONQJavaScript Object NotationQ轻量数据交换格式?img src ="http://www.tkk7.com/computerboy/aggbug/69986.html" width = "1" height = "1" />

Computerboy 2006-09-15 23:27 发表评论
]]>
javascript 客户端实现导入word、excel的小E序http://www.tkk7.com/computerboy/archive/2006/08/05/61986.htmlComputerboyComputerboySat, 05 Aug 2006 12:40:00 GMThttp://www.tkk7.com/computerboy/archive/2006/08/05/61986.htmlhttp://www.tkk7.com/computerboy/comments/61986.htmlhttp://www.tkk7.com/computerboy/archive/2006/08/05/61986.html#Feedback3http://www.tkk7.com/computerboy/comments/commentRss/61986.htmlhttp://www.tkk7.com/computerboy/services/trackbacks/61986.html本文的所有权归原作者所有!


Q-Q-Qstart

<table id = "PrintA" width="100%" border="1" cellspacing="0" cellpadding="0" bgcolor = "#61FF13">
<TR style="text-align : center;">
 <TD>单元格A</TD>
 <TD>单元格A</TD>
 <TD>单元格A</TD>
 <TD>单元格A</TD>
</TR>
<TR>
 <TD colSpan=4 style="text-align : center;"><font color="BLUE" face="Verdana">单元格合q行A</FONT></TD>
</TR>
</TABLE>
<table id = "PrintB" width="100%" border="1" cellspacing="0" cellpadding="0">
<TR style="text-align : center;">
 <TD>单元格B</TD>
 <TD>单元格B</TD>
 <TD>单元格B</TD>
 <TD>单元格B</TD>
</TR>
<TR>
 <TD colSpan=4 style="text-align : center;">单元格合q行B</TD>
</TR>
</TABLE>
<br/>
<input type="button" onclick="javascript:AllAreaWord();" value="导出面指定区域内容到Word">
<input type="button" onclick="javascript:AllAreaExcel();" value="导出面指定区域内容到Excel">
<input type="button" onclick="javascript:CellAreaExcel();" value="导出表单单元格内容到Excel">



-----------------------



<SCRIPT LANGUAGE="javascript">
 //指定面区域内容导入Excel
 function AllAreaExcel()
 {
  var oXL = new ActiveXObject("Excel.Application");
  var oWB = oXL.Workbooks.Add();
  var oSheet = oWB.ActiveSheet; 
  var sel=document.body.createTextRange();
  sel.moveToElementText(PrintA);
  sel.select();
  sel.execCommand("Copy");
  oSheet.Paste();
  oXL.Visible = true;
 }
 //指定面区域“单元格”内容导入Excel
 function CellAreaExcel()
 {
  var oXL = new ActiveXObject("Excel.Application");
  var oWB = oXL.Workbooks.Add();
  var oSheet = oWB.ActiveSheet;
  var Lenr = PrintA.rows.length;
  for (i=0;i<Lenr;i++)
  {
   var Lenc = PrintA.rows(i).cells.length;
   for (j=0;j<Lenc;j++)
   {
    oSheet.Cells(i+1,j+1).value = PrintA.rows(i).cells(j).innerText;
   }
  }
  oXL.Visible = true;
 }
 //指定面区域内容导入Word
 function AllAreaWord()
 {
  var oWD = new ActiveXObject("Word.Application");
  var oDC = oWD.Documents.Add("",0,1);
  var oRange =oDC.Range(0,1);
  var sel = document.body.createTextRange();
  sel.moveToElementText(PrintA);
  sel.select();
  sel.execCommand("Copy");
  oRange.Paste();
  oWD.Application.Visible = true;
  //window.close();
 }
</SCRIPT>
</body></html>

Q-Q-end


Computerboy 2006-08-05 20:40 发表评论
]]>
Ajax框架汇?/title><link>http://www.tkk7.com/computerboy/archive/2006/06/04/50328.html</link><dc:creator>Computerboy</dc:creator><author>Computerboy</author><pubDate>Sun, 04 Jun 2006 12:25:00 GMT</pubDate><guid>http://www.tkk7.com/computerboy/archive/2006/06/04/50328.html</guid><wfw:comment>http://www.tkk7.com/computerboy/comments/50328.html</wfw:comment><comments>http://www.tkk7.com/computerboy/archive/2006/06/04/50328.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.tkk7.com/computerboy/comments/commentRss/50328.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/computerboy/services/trackbacks/50328.html</trackback:ping><description><![CDATA[文章来源<br />http://tb.blog.csdn.net/TrackBack.aspx?PostId=655786<br />http://www.okajax.com/info/zixun/200605189.html<br /><br /><br /><br />1. Pure Javascript: Application Frameworks<br />1.1 Bindows (成立?003q?<br /><br />Backbase是一个通过DHTML、JavaScript、CSS和HTML{技术强劲联合v来的一套完整的<br /><br />Windows桌面式的WEB应用E序解决Ҏ?Bindows无需下蝲安装客户端支撑组Ӟ如Java?br /><br />ActiveX或FlashQ,仅需一个浏览器。纯OO的理念体现在BindowsM地方Q?Bindows或许<br /><br />是笔者见q的最完整最强大的AJAX应用E序q_?br />Bindows是商业程序的Q用了来自于MB的技?总部位于GA USAQ主要开发中心在瑞典Q成<br /><br />立于2002q??br /><br />Bindows框架提供的功能和Ҏ有Q?br /><br />    * Z面相对象技术的cdAPI<br />    * 一套完整的Windows桌面pȝQ支持各U特性窗口模式,包括菜单、表单、表根{滑<br /><br />动条、测量A器窗口和其他一些WindowsH口Ҏ支持?br />    * 是开发zero-footprint(零空间占?SOA客户端应用程序首选工具包<br />    * 本机的XMLQSOAP和XML-RPC支持<br />    * 单用户到企业U开发的支持<br />    * 内徏的完的AJAX支持 <br /><br />Bindows开发环境:<br /><br />    * 支持企业U规模的目开?br />    * 跨浏览器、跨OSq_的支?br />    * 不受服务器结构限?br />    * 良好的与新的、现有的资源互操作?br />    * l一的开发接?<br /><br /> <br />1.2 BackBase (成立?003q?<br /><br />BackBase是一个完整的览器端框架Q提供了丰富的浏览器操作功能Q以及对.NET和JAVAq?br /><br />台的集成?br />商业化品,来自于Backbase B.V(总部在AmsterdamQ成立于2003q??br /><br /> <br />1.3 DOJO (开发中,成立?004q??<br /><br />DOJO提供完整的轻量H口lg和浏览器-服务器消息映支?br /><br />    * 提供创徏自定义JavascriptH口lg的框架支?br />    * 预制的丰富的H口cd?br />    * B/S消息映射支持——XMLHttpRequest和其他机?br />    * 支持览器中的URL操纵功能<br />    * 开源许?Academic Free License 2.1)Q由JotSpot的Alex Russell所领导?<br /><br />1.4 Open Rico (开发中;成立?005q??Z早期的一个proprietary 框架)<br /><br />Open Rico是一个支持Ajax架构和用户交互的多用途框架?br /><br />    * 一个XMLHttpRequest response能被一个或多个的DOM对象Q或者Javascript对象调用<br /><br />?br />    * 支持拖拽操作<br />    * 支持ZAJAX的动L式,如羃攑֒变换{?br />    * ZBehaviors的操作库<br />    * 使用指南Q由RussMirimar的Yonah提供<br />    * 开源。源于Sabre航空公司解决ҎQ由Bill ScottQDarren James及另外一些hl?br /><br />护?<br /><br /> <br />1.5 qooxdoo (开发中; 成立?005q??<br /><br />qooxdooQ是另一个发展迅猛的应用框架Q提供广泛的UI支持Q正在开发基架构{特性?br /><br />    * 基础l构Ҏ:<br />          o 能轻易的捕获和操UDOM事g<br />          o 支持调试<br />          o 支持一个时间操作的Timerc?br />          o Getter/Setter支持 <br />    * UI:<br />          o H口lg库和框架<br />          o 界面布局理<br />          o 囑փ~存和透明PNG囄处理 <br />    * 开?LGPL). <br /><br />1.6 Tibet (开发中; 创徏?005q??<br /><br />Tibet提供了大量的易移植和完整的JavaScript APIQ通过q些可以快速生成大量的客户?br /><br />代码QTibet自称是企业AJAX?br /><br />    * q程脚本调用装在XMLHttpRequest?br />    * URI支持<br />    * 支持所有的HTTP事gQ不再仅仅是GET和POST<br />    * 低的协?File://和WebDav也可以当作HTTP正常使用<br />    * Web Services调用支持Q包括SOAP、XML-RPC{等<br />    * 大型的Javascript对象?br />    * 多种多样的XML操作支持<br />    * IDE和开发工?br />    * 开源协?OSI) <br /><br />1.7 AJFORM (创徏?005q??<br /><br />AJFORM是一个极易上手的AJAX框架Q被用来~写入门U的AJAX代码Q提供有以下功能Q?br /><br />    * 三步安装<br />    * 自动支持LHTML表单元素<br />    *<br />      几乎无需~码卛_实现AJAX <br />2 Pure Javascript: Infrastructural Frameworks<br />2.1 AjaxCaller(创徏?005q?月,目前是Alpha?<br /><br />AjaxCaller是一个具有多U程安全讉K的XMLHttpRequestlgQ主要针对Ajax开发新手,?br /><br />前仍处于alpha开发阶D,仅在AjaxPatterns的在U搜索范例中使用了这个程序?br /><br />    * 用明文或者XMLl构的数据实现和服务器的交互(GET/POST/PUT/DELETE)<br />    * 支持XMLHttRequest对象的构?销毁对象,C++支持内存对象的构析操?<br />    * 支持Response的高速缓?在计划?<br />    * 单的库文件代码易于新手学习用,q且支持脚本调试<br />    * 开源协?<br /><br />2.2 Flash JavaScript Integration Kit<br /><br />The Flash JavaScript Integration Kit可以使Flash和Javascript脚本实现怺集成?br /><br />    * 可以实现在JavaScript中调用Flash ActionScript脚本Q反之亦然?br />    * 几乎支持双方主要数据cd的在不同环境中的传递调用?br />    * 开源协议,有几个Flash开源爱好者维护?<br /><br />2.3 Google AJAXSLT (2005q?月发?<br /><br />Google AJAXSLTQ是一个Javascript框架Q用来执行XSLT转换以及XPath查询?br /><br />    * 目前在Google Map上就使用了这个?br />    * 开源协?BSD) <br /><br />2.4 HTMLHttpRequest(Beta版;创徏?005q?<br /><br />HtmlHttpRequest最大的特点是q用XMLHttpRequest对象和标准HTML标签IFrame来实现最<br /><br />大限度的跨浏览跨q_的AJAX支持Q其原理是在支持XMLHttpRequest的浏览器上调?br /><br />XMLHttpQ如果不支持Q就用IFrame来模拟实现异步交互?br /><br />    * 目前支持的浏览器QIE6/Win, IE5.5/Win, IE5/Win, IE4/Win, Mozilla/Win, <br /><br />Opera7/Win, Safari/Mac, IE5/Mac<br />    * 未试的浏览器QIE4/Mac, Mozilla/Mac, Opera/Other, Konqueror/Linux?br />    * 开源协?LGPL) <br /><br />2.5 Interactive Website Framework (创徏?005q?<br /><br />Interactive Website Framework定位在浏览器中支持各U各LAJAX基础应用的开源项?br /><br />。自U是通过JavaScript、CSS、XML和HTML实现高性能的交互式WEB框架Q包括一个可定制<br /><br />易读的XML解析器。实际上QIWF是一个AJAX的基框架Qƈ且还包括一些通用脚本代码?br /><br />    * 实现了线E安全的XMLHttpRequest<br />    * 对XML Documentq行装Q以便创建更h可读性的代码Q?br /><br />          var node = doc.groceries.frozen[0].pizza[0].size;<br /><br />      装后的数据d<br /><br />          var node = doc.documentElement.firstChild.firstChild.getAttribute<br /><br />("size");<br /><br />      原始的DOM操作d<br />    * 开源协?<br /><br />2.6 LibXMLHttpRequest (2003q?月发?<br /><br />libXmlRequest是一个小型XMLHttpRequest装?br /><br />    * 用getXML()和postXML()两个事g化XMLHttpReuqest调用<br />    * 支持XMLHttpRequest对象?br />    * Response~存处理<br />    * 源码可以使用Q但是有版权保护?<br /><br />2.7 MAJAX<br /><br />MAJAX是另一个非常小巧的HttpRequest装包,为收发字W型信息提供单接口,qؓ每步<br /><br />动作讄回调界面?br />2.8 RSLite (x)<br /><br />RSLite是一个XMLHttpRequest装lgQ作为Brent Ashley的JSRS(JavaScript Remote <br /><br />Scripting)其中的一部分功能单独发布。详情可以看JSRS的介l?br />2.9 Sack(开发中Q成立于2005q??<br /><br />Sack也是一个很有名字的微型XMLHttpRequest装包。调用者可以自定义回调函数或者是<br /><br />DOM对象。借助于回调DOM对象Q可以把Response回来的数据直接以文本的方式嵌入DOM中?br />2.10 Sarissa (发布?003q??<br /><br />Sarissa是一个JavaScript APIQ封装了在浏览器端独立调用XML的功能?br /><br />    * 可移植的XMLHttpRequest对象创?br />    * 可移植的XPath查询<br />    * 可移植的DOM操控<br />    * 可移植的XSLT<br />    * 可移植的XML序列?br />    * 开源协?GPL2.0和LGPL2.1) <br /><br />2.11 XHConn (2005q?月发?<br /><br />XHConn也是一个小型的XMLHttpRequest装库。笔者也使用改良q的XHConnQ其特点是?br /><br />用简单,代码也清晰易诅R?br /><br />    * 例子Q?br /><br />          new XHConn().connect("mypage.php"Q?POST"Q?foo=bar&baz=qux"Q?br /><br />fnWhenDone);<br /><br />    *<br />      开源协议许?<br /><br />3 Server-Side: Multi-Language<br />3.1 Cross-Platform Asynchronous INterface Toolkit (2005q??<br /><br />CPAINT是一个真正的同时支持PHP和ASP/VBScript脚本的AJAX和JSRS工具包。CPAINT在后?br /><br />提供你需求的AJAX和JSRS代码Qƈ自动q回到浏览器端相应的Javascript脚本代码Q这U方<br /><br />式易于实时反馈需求的WEB应用E序?br /><br />    * 支持PHP和ASP<br />    * 所有功能函数都在统一的JavaScript文g?br />    * 支持q程脚本和XML<br />    * 支持本地和远E函数调?br />    * 可以创徏单个或多个XMLHttp对象<br />    * q回l后台的数据卛_以是文本也可以是XML/DOM文档对象<br />    * 支持POST和GET<br />    * 用服务端代理的方式实现远E函数和数据的访问操?br />    * 大部分浏览器中测试正怋?br />    * 在GNU、GPL、LGPL开源协议保护下发行 <br /><br />3.2 SAJAX (2005q??<br /><br />SAJAX的实现方式很独特Q例如:调用一个javascriptҎx_calculateBudget()Q将先把?br /><br />应传到服务器q调用一个Java calculateBudget()ҎQ然后以javascript方式把D回到<br /><br />x_calculateBudget_cb()中。SAJAX的名气不错,估计很多人都听过甚至用过Q不q缺点就<br /><br />是它的这套映理论感觉较J锁Q远不如一些轻量的封装库好用Q不qSAJAX最大的特点<br /><br />是支持的^C富,几乎囊括了WEB下常用的~程语言和^?br /><br />    * 很方便从JavaScript函数映射到服务端代理操作<br />    * 支持多种q_(ASP/ColdFusion/Io/Lua/Perl/PHP/Python/Ruby)<br />    * 开源协?<br /><br />3.3 Javascipt Object Notation (JSON) and JSON-RPC<br /><br />JSON是一?face-free" XMLQ而JSON-RPC是一U远E交互协议,cM于XML-RPCQ对<br /><br />JavaScript支持较强<br /><br />    * 支持多服务端q_: Java, Python, Ruby, Perl.<br />    * 针对不同的^台有不同的包和许可协? 如JSON-RPC-Java. <br /><br />3.4 JavaScript Remote Scripting(JSRS)(2000q?<br /><br />JSRSQ较l典的远E脚本访问组Ӟ支持客L数据通过服务器做代理q行q程的数?<br /><br />操作交互?br /><br />    * 支持的浏览器QIE4+QNS4.xQNS6.xQMozillaQOpera7和Galeon?br />    * 服务器端脚本语言支持QASPQColdFusionQPerlCGIQPHP,Python和JSP(servlet)?br />    * 开源协议。由Brent Ashley提供支持?<br /><br />3.5 Bitkraft for ASP.NET<br /><br />Bitkraft是个Z(.NET)Web框架的CLR(公共语言q行?Q允许用独特的方式创建和操作?br /><br />布式Web内容。用C#~写Q运行在微Y?NET 1.1和Mono框架下,无缝式的客户?服务器响<br /><br />应方式是它的最大特炏VBitkraft没有使用XMLl织数据Q而是用JSON代替?br /><br />    * 支持的浏览器Q?IE5+, Firefox1+, NS6<br />    * 服务器端要求QASP.NET, Mono XSP, Cassini, Apache (modMono) .NET Framework <br /><br />1.1+<br />    * 事g驱动<br />    * 支持同步和异步的q程代理<br />    * 客户端支持所有的.NETcd或自定义cd象映到JSON?br />    * 用JSON取代XML<br />    *<br />      免费Q开源许可协?<br /><br />4 Server-Side: Java<br />4.1 WebORB for Java (2005q??<br /><br />WebORB for Java是一个开发AJAX和基于Flash的富客户端应用程序的开发^台。在U例?br /><br />    * WebORB包括一个富客户端开发类库。提供简单的在线式API用来l定或者调用Q?br /><br />Java对象、XML Web Services和EJB<br />    * 支持异步或同步的事g驱动<br />    * 不需要在服务端修改Q何代码,不需要自定义Ҏ或属性、变量等。不要求设计时指<br /><br />定代理等?br />    * 同步调用不需要回调,异步调用需要一个回调方法?br />    * 客户端可以向服务端请求指定的zd方式Q不需要Q何编E就可以把处理结果轻易的<br /><br />转变为状态?br />    * 提供一个特定API来处理数据库查询l果-服务器代码能q回DataSet或者DataTableQ?br /><br />而客L以一个类gRecordSet的JavaScript对象来显C个结果。该对象提供索列?br /><br />和行数据的方法?br />    * 支持数据分页技术。客户应用程序能索页面中的数据?br />    * 支持以参数的方式q回所有服务期端数据类型,如primitives, strings, complex <br /><br />types, arrays, native .net collections, remote references<br />    * 目前有两个版本:标准?免费)Q专业版(商业许可) <br /><br />4.2 Echo 2 (2005q??<br /><br />Echo 2允许你用UJava语言~写AJAXE序?Demo.<br /><br />    * 自动生成HTML和Javascript代码<br />    * 用XML在客L-服务端传递消?br />    * 如果愿意支持自定义Javascriptlg<br />    * 开源协?Mozilla Public License or GNU LGPL) <br /><br />4.3 Direct Web Remoting (DWR) (2005)<br /><br />Direct Web Remoting可以在Javascript代码中直接调用JavaҎ的应用框?br /><br />    * cM于SAJAXQ可以把Javascript中的h调用转递到JavaҎ中ƈ执行结果返?br /><br />lJavascript<br />    * 可以和Q何Web框架一起用,如Struts、Tapestry{等<br />    * 开?Apache)Q目前该产品被加入到WebWork?<br /><br />4.4 SWATO (2005)<br /><br />SWATO是一套可重用的和良好集成的Java/JavaScript库,它实C一U更Ҏ的方式来改变<br /><br />你的web应用E序的交互,通过AJAX方式实现?br /><br />    * 服务端Java库可以非常容易的部v到所有Servlet2.3+兼容的容器中<br />    * 客户端Javascript库可以在所有支持XMLHttpRequest的浏览器中?br />    * 使用JSON技术在服务端组lPOJO数据Q这样你可以在Q何Javascript环境?HTML?br /><br />XUL、SVG)讉Kq些q程数据Q这U方式很Ҏ通过编码或者某U成熟的Javascript库集<br /><br />成到当前应用?br />    * 提供一个简单接口你能在Javascript中调用远E的POJO数据<br />    * 使用和灵zȝ在web.xml中进行配|,q且可以集成(不是必须)C的Spring框架?br />    * 提供了几个可帮助你快速开发web应用E序的组?如自动完成的文本框,在线表单Q?br /><br />在线列表{等) <br /><br />4.5 AJAX JSP Tag Library<br /><br />The AJAX JSP Tag Library是一lJSP标签库,用来AJAXE序开发。可以在J2EE下无需<br /><br />JavascriptpL开发AJAX模式的Web Form。标{ֺ为比较通用的AJAX功能提供?个标<br /><br />{:<br /><br />    * autocomplete: 用户在文本框中输入字W,自动从指定的数据中匹配用戯入的字符<br /><br />Q类gGoogle Suggest<br />    * callout:可以为A标签加入气式的消息提示框,不过是实时的服务端取出数?br />    * Select/dropdown:cM于联动菜单,比如地州市的联动下拉?br />    * toggle:开关闸按钮Q比如在一个hidden表单域中存储true和falshQ同时显C相应的<br /><br />img囑փ<br />    * update field:更新数据Q也是无刷新提交了?<br /><br />4.6 AJAX Java Server Faces Framework<br /><br />The AJAX-JSF用来把Q意的JSF应用E序转变为AJAX应用E序<br /><br />    * 例子QAJAXlg?MyFaces JSF Tree(树型目录), table scroller(可滚动的表格), <br /><br />tabbed pane(分页?<br />    *<br />      开源协?Apache Software License) <br />Server-Side: Lisp<br />5.1 CL-Ajax<br /><br />CL-Ajax实现Javascript直接调用服务端Lisp<br /><br />    * 生成可带参数的函?br />    * 可以回调Javascript函数或者DOM对象<br />    * 可以集成到SAJAX?br />    * 开源许?<br /><br />6 Server-Side: .NET<br />6.1 WebORB for .NET (2005q??<br /><br />WebORB for .NET是一个用.NET和XML Web Services方式开发AJAX和基于Flash的富客户端应<br /><br />用程?在线例子)<br /><br />    * WebORB包括一个富客户端开发类库。提供简单的在线式API用来l定或者调用Q<br /><br />?NET对象、XML Web Services<br />    * 支持异步或同步的事g驱动<br />    * 不需要在服务端修改Q何代码,不需要自定义Ҏ或属性、变量等。不要求设计时指<br /><br />定代理等?br />    * 同步调用不需要回调,异步调用需要一个回调方法?br />    * 客户端可以向服务端请求指定的zd方式Q不需要Q何编E就可以把处理结果轻易的<br /><br />转变为状态?br />    * 提供一个特定API来处理数据库查询l果-服务器代码能q回DataSet或者DataTableQ?br /><br />而客L以一个类gRecordSet的JavaScript对象来显C个结果。该对象提供索列?br /><br />和行数据的方法?br />    * 支持数据分页技术。客户应用程序能索页面中的数据?br />    * 支持以参数的方式q回所有服务期端数据类型,如primitives, strings, complex <br /><br />types, arrays, native .net collections, remote references<br />    * 目前有两个版本:标准?免费)Q专业版(商业许可) <br /><br />6.2 Ajax.NET (2005q??<br /><br />Ajax.NET是首家支持各U方式通过Javascript讉K服务?net的免费库<br /><br />    * cM于SAJAXQ能把Javascripth发送到.NETҎQ服务端回传lJavascriptQ甚<br /><br />臛_括串行化自定义类?br />    * 可以在Javascript中访问Session和Application数据<br />    * ~存查询l果<br />    * 免费使用源代?br />    * 无需更改源代码,允许lAjax.NETd和修Ҏ法和属?br />    * 所有类支持Javascript客户端返回数据,可以在JavaScript中用DataSetQ?br /><br />res.Tables[0].Rows<br />    * 使用HtmlControlslg讉K和返回数?br />    * 面无需重蝲Q用事g代理(数据讉K?<br />    * 因ؓ只提供一个调用接口方法,所以服务端CPU占用非常?<br /><br />6.3 ComfortASP.NET (2005q??<br /><br />ComfortASP.NET可以让开发者在U?NET下开发类似AJAX(DHTML,JavaScript,XMLHttp)Ҏ的<br /><br />应用E序?br /><br />    * 快速应{?br />    * 减少HTML传输<br />    * 减少面重蝲<br />    * 无闪烁的览器内Ҏ?br />    * AJAX用户体验Q?<br /><br />6.4 AjaxAspects (2005q??<br /><br />AjaxAspects是个可以用Javascript调用服务端WebService事g的引?br /><br />    * 用标准的SOAP和WSDLq行服务?客户端通信<br />    * 用简单的cd和XML对象支持带参数的q回?br />    * ~存支持<br />    * 动作队列<br />    *<br />      免费使用Q开源协?<br /><br />7 Server-Side: PHP<br />7.1 AjaxAC (2005q??<br /><br />AjaxAC用一个单独类装了完整的应用E序功能<br /><br />    * 所有的功能集成在自包含的类?另外附带一些Javascript?<br />    * 调用PHP文g或者HTML面非常易,只需创徏Appcd把类引用传递给需要调用的<br /><br />Javascript对象或者HTML元素卛_?br />    * 捕获Javascript事g<br />    * 可以自定义配|数据,q且支持q行时参数更?br />    * 无需再Javascript代码中夹杂凌qHtml代码Q所有事仉是被动态附加上?br />    * ׃以上两个优点Q所以支持良好的模版引擎<br />    * ҎHook到PHPcdMySql数据已返回给自己的request<br />    * 能够Ҏ的用Javascript建立H口模式应用E序?<br /><br />7.2 JPSpan<br /><br />JPSPAN通过Javascript直接调用PHP中的函数?br /><br />    * q行了严谨的单元试<br />    * 开源许?PHP) <br /><br />7.3 XAJAX<br /><br />XAjax通过Javascript直接调用PHP中的函数<br /><br />    * 支持用Javascript调用PHP脚本<br />    * 开源许可协?<br /><br />8 Server-Side: Ruby<br />8.1 Ruby On Rails<br /><br />Ruby On Rails是一个支持AJAX的完整Web框架Q用Ruby语言~写Q严格按照MVCl构开?br /><br />?br /><br />    * 当Ajax出现的时候Railsq处于其发展的早期,因此Ajax可能逐渐成ؓRails框架的核<br /><br />心?br />    * 生成览器中大多?全部的Window应用lg和动ȝJavascript脚本?br />    * 支持服务器端调用?br />    * 队列支持<br />    *<br />      开源许?<br /><br /><img src ="http://www.tkk7.com/computerboy/aggbug/50328.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/computerboy/" target="_blank">Computerboy</a> 2006-06-04 20:25 <a href="http://www.tkk7.com/computerboy/archive/2006/06/04/50328.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Ajax资源 or Ajax Resourceshttp://www.tkk7.com/computerboy/archive/2006/06/04/50256.htmlComputerboyComputerboySun, 04 Jun 2006 05:41:00 GMThttp://www.tkk7.com/computerboy/archive/2006/06/04/50256.htmlhttp://www.tkk7.com/computerboy/comments/50256.htmlhttp://www.tkk7.com/computerboy/archive/2006/06/04/50256.html#Feedback1http://www.tkk7.com/computerboy/comments/commentRss/50256.htmlhttp://www.tkk7.com/computerboy/services/trackbacks/50256.html
资源Q-Q-中文
1 Ajax中国
    http://www.okajax.com/
2 Java 开源大?br />    http://www.open-open.com/

3 安全矩阵QSecurity MatrixQ官方网?br />    http://www.smatrix.org/
4 TechTarget IT专家|-QAjax_IT专家|_Web服务
    http://searchwebservices.techtarget.com.cn/wsdev/ajax/
5 |易学院
    http://tech.163.com/special/c/0009159F/codeother.html
6 Java 视线论坛
    http://forum.javaeye.com/


ResourcesQ-Q-English

1 AJAX开发h员的~译模式:
    http://www.ajaxpatterns.org
2  XMLHttpRequest教程Q“动态网|口?
    http://www.xml.com/pub/a/2005/02/09/xml-http-request.html
3 JavaScript性能基准:
    http://blogs.ebusiness-apps.com/dave/?p=14
4 AJAX资源:
    http://www.ajaxmatters.com
5 JavaScript规范:
    http://www.ecma-international.org/publications/standards/Ecma-262.htm
6 介绍JavaScript对象标识:
    http://www.crockford.com/JSON/index.html
7  Mozilla 的Venkman JavaScript调试?
    http://www.mozilla.org/projects/venkman/
8  XML DOM参?
      http://msdn.microsoft.com/library/default.asp?url=/library/en-us/xmlsdk/html/e9da2722-7879-4e48-869c-7f16714e2824.asp
9 Microsoft Dynamic HTML reference:
    http://msdn.microsoft.com/library/default.asp?url=/workshop/author/dhtml/reference/dhtml_reference_entry.asp
10 Gecko DOM Reference:
      http://www.mozilla.org/docs/dom/domref/
11 "“移植IE应用到Mozilla?br />    http://www-128.ibm.com/developerworks/web/library/wa-ie2mozgd/
12 Mozilla XUL reference:
    http://www.xulplanet.com/
13 Microsoft XAML reference:
    http://windowssdk.msdn.microsoft.com/library/default.asp?url=/library/en-us/wcp_conceptual/html/0ff5f36e-dd84-44d1-aa3e-            

5bb4f147b169.asp?frame=true
14 James Jesses Garret introduced the term AJAX in his article "AJAX: A New Approach to Web Applications," (Adaptive Path, February 2005):

“AJAXQ新的网应用开发方式?br />    http://www.adaptivepath.com/publications/essays/archives/000385.php
15 JetBrains IntelliJ IDEA:
    http://www.jetbrains.com/
16 Microsoft Visual Studio:
    http://msdn.microsoft.com/vstudio/
17 JSEditor:
    http://jseditor.sourceforge.net/
18 JSEclipse:
    http://www.interaktonline.com/Products/Eclipse/JSEclipse/Overview/
19 ActiveState Komodo:
    http://www.activestate.com/Products/Komodo/
20 XHTML:
    http://www.w3.org/TR/xhtml1/
21 Document Object Model:
    http://www.w3.org/DOM/
22 Cascading Style Sheets:
    http://www.w3.org/Style/CSS/
23 Extensible Stylesheet Language:
    http://www.w3.org/Style/XSL/
24 XForms:
    http://www.w3.org/MarkUp/Forms/
25 Scaling Vector Graphics:
    http://www.w3.org/Graphics/SVG/
26 XPath:
    http://www.w3.org/TR/xpath
27 AJAX.Net:
    http://ajax.schwarz-interactive.de/csharpsample/default.aspx
28 Backbase:
    http://www.backbase.com
29 Bitkraft:
    http://www.tiggrbitz.com/
30 Django:
    http://www.djangoproject.com/
31 Dojo:
    http://www.dojotoolkit.org/
32 DWR (Direct Web Reporting):
    http://getahead.ltd.uk/dwr/
33 MochiKit:
    http://mochikit.com/
34 Prototype:
    http://prototype.conio.net/
35 Rico:
    http://openrico.org/rico/home.page
36 Sajax:
    http://www.modernmethod.com/sajax/
37 Sarissa:
    http://sarissa.sourceforge.net/doc/
38 Script.aculo.us:
    http://script.aculo.us/
39 Ruby on Rails:
    http://www.rubyonrails.org/
40 For more on AJAX and DWR, read "AJAX Made Simple with DWR," Cloves Carneiro Jr. (JavaWorld, June 2005): 关于AJAX和DWRQ请阅读“AJAX使用DWR?br />
单?br />    http://www.javaworld.com/javaworld/jw-06-2005/jw-0620-dwr.html
41 For more articles on Java development tools, browse the Development Tools section of JavaWorld’s Topical Index: 更多Java开发工L文章Q请

览JavaWorld的开发工具部分烦引页
    http://www.javaworld.com/channel_content/jw-tools-index.shtml
42 For more articles on XML, browse the Java and XML section of JavaWorld’s Topical Index: 更多XML的文章,h览JavaWorld的Java和XML部分索引?br />    http://www.javaworld.com/channel_content/jw-xml-index.shtml
43 For more articles on UI design, browse the User Interface Design section of JavaWorld’s Topical Index: 更多UI设计的文章,h览JavaWorld?br />
UI设计部分索引?br />    http://www.javaworld.com/channel_content/jw-ui-index.shtml


Computerboy 2006-06-04 13:41 发表评论
]]>
Ajax 之DWR里程?发布说明Q试译Q?/title><link>http://www.tkk7.com/computerboy/archive/2006/05/31/49137.html</link><dc:creator>Computerboy</dc:creator><author>Computerboy</author><pubDate>Tue, 30 May 2006 16:05:00 GMT</pubDate><guid>http://www.tkk7.com/computerboy/archive/2006/05/31/49137.html</guid><wfw:comment>http://www.tkk7.com/computerboy/comments/49137.html</wfw:comment><comments>http://www.tkk7.com/computerboy/archive/2006/05/31/49137.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.tkk7.com/computerboy/comments/commentRss/49137.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/computerboy/services/trackbacks/49137.html</trackback:ping><description><![CDATA[q个里程是我在出差期间译的,旉仓促Q可能有的没有翻译,准备回去再整理了Q先发个草稿到博客上吧。有错误请告诉我Q!Q!<br />原文地址Qhttp://getahead.ltd.uk/dwr/changelog/dwr20m2<br /><br /><br />DWR2.0版本里程? 发布Q?br /><br />We're on a roll ...<br /><br />里程1描述反向Ajax和其它goodies.里程?d注释Q反向Ajax使用Jetty ContinuationsQ在Java 中写JavaScript 你的效率会更高!<br /><br />Java 中写脚本QWrite your Javascript in JavaQ?br />Javascript puts some people off Ajax; DWR2.0里程?有一套新的实验性的API允许你用Java和熟悉的语言和IDE写脚?JavaScript).<br /><br />我们拥有DWRUtil库,首先是服务器端版本:<br /><br />Q-Q-<br />import org.directwebremoting.proxy.dwrutil.DwrUtil;<br />  DwrUtil util=new DwrUtil(...);<br />  util.addOptions("selectId",array);<br /><br />Q-Q-<br /><br />上述是Java代码Q但是它修改是在q程览器中是可见的Q在q种情况下,加入了一pd内容C拉列?droo-down list)?br />我们也有一个实验性的服务器端java版本of Script.aculo.us Effects:<br /><br />Q-Q-<br />import org.directwebremoting.proxy.scriptaculous.Effect;<br />  Effect effect=new Effect(...);<br />  effect.fade("selectId");<br /><br />Q-Q-<br /><br /><br />整洁的事情是反向AJAX能结合这些服务器端APIS以少数请求改变多数浏览器.<br /><br /><br />Q-Q-<br />Collectiong sessions=WebContextFactory.get().getScriptSessionsByPage("/index.html");<br />DwrUtil util=new DwrUtil(sessions);<br />util.setValue("message","Hello,World!");<br /><br />Q-Q-<br /><br />q代码将在主上查找所有浏览器q更改内容of a div with id="message" 包含问候?br /><br /><br />注释<br />如果你用java 5(JDK) Q那么你能利用新的DWR注释Q感谢Maik Schreiber.<br />在里E碑1支持l合一般类型映?to get rid of the need for a <signature> element)<br />你能没有对Q何DWR.XML的需?了解)而用DWR.<br />新的注释包括 @Create,@Convert,@RemoteMethod,@RemoteProperty.<br />了解更多注释l节Lhttp://getahead.ltd.uk/dwr/server/annotations<br /><br />Jetty Continuations<br />反向的Ajax正在q行的工作是保׃额外的加载没有WebServer得到损害?br />W一块难题来自于Greg Wilkins of Jetty fame.<br />如果反向的Ajax在Jetty Servlet引擎上能够打开的话Q那么DWRp够自动用Jetty ?Ajax Continuations在多U程上保存?br /><br />我想要把支持扩展到其它的Servlet引擎上,但是QJetty看v来像是在曲线的前面?br />我最qbloggedQ我们需要一个JSR ?Continuations to make this easy.<br /><br />Other Changes<br />如果有安全限制超Ӟ一些安全的机制会自动的q回一个登录页面给用户Q?br />如果有些事物替换DWRhQ我们添加一个实验性的Ҏ,允许你采取特D的方式d?br />你一般想要重新加载当前页面,查看完全的登录?br />你能做如下:<br /><br />Q-Q-<br />DWREngine.setTextHtmlHandler(function(){document.location.reload();});<br /><br />Q-Q-<br />里程?也确定了许许多多的错误,如果你发现有M错误Q请反馈l我Q?br /><br /><br /><img src ="http://www.tkk7.com/computerboy/aggbug/49137.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/computerboy/" target="_blank">Computerboy</a> 2006-05-31 00:05 <a href="http://www.tkk7.com/computerboy/archive/2006/05/31/49137.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>HTTP及XMLHTTP状态代码一?基础知识?http://www.tkk7.com/computerboy/archive/2006/05/30/48952.htmlComputerboyComputerboyTue, 30 May 2006 05:30:00 GMThttp://www.tkk7.com/computerboy/archive/2006/05/30/48952.htmlhttp://www.tkk7.com/computerboy/comments/48952.htmlhttp://www.tkk7.com/computerboy/archive/2006/05/30/48952.html#Feedback0http://www.tkk7.com/computerboy/comments/commentRss/48952.htmlhttp://www.tkk7.com/computerboy/services/trackbacks/48952.html  
  100 Continue 初始的请求已l接受,客户应当l箋发送请求的其余部分
  
  101 Switching Protocols 服务器将遵从客户的请求{换到另外一U协?br />  
  200 OK 一切正常,对GET和POSTh的应{文档跟在后面?br />  
  201 Created 服务器已l创Z文档QLocation头给Z它的URL?br />  
  202 Accepted 已经接受hQ但处理未完成?br />  
  203 Non-Authoritative Information 文档已经正常地返回,但一些应{头可能不正,
        因ؓ使用的是文档的拷?br />  
  204 No Content 没有新文档,览器应该l显C原来的文档。如果用户定期地h面Q?br />        而Servlet可以定用户文档_斎ͼq个状态代码是很有用的
  
  205 Reset Content 没有新的内容Q但览器应该重|它所昄的内宏V?br />        用来强制览器清除表单输入内?br />  
  206 Partial Content 客户发送了一个带有Range头的GEThQ服务器完成了它?br />  
  300 Multiple Choices 客户h的文档可以在多个位置扑ֈQ这些位|已l在q回的文档内列出?br />        如果服务器要提出优先选择Q则应该在Location应答头指明?br />  
  301 Moved Permanently 客户h的文档在其他地方Q新的URL在Location头中l出Q?br />        览器应该自动地讉K新的URL?br />  
  302 Found cM?01Q但新的URL应该被视Z时性的替代Q而不是永久性的?br />  
  303 See Other cM?01/302Q不同之处在于,如果原来的请求是POSTQ?br />        Location头指定的重定向目标文档应该通过GET提取
  
  304 Not Modified 客户端有~冲的文档ƈ发出了一个条件性的h
      Q一般是提供If-Modified-Since头表C客户只x指定日期更新的文档)?br />       服务器告诉客P原来~冲的文档还可以l箋使用?br />  
  305 Use Proxy 客户h的文档应该通过Location头所指明的代理服务器提取?br />  
  307 Temporary Redirect ?02QFoundQ相同。许多浏览器会错误地响应302应答q行重定向,
        即原来的请求是POSTQ即使它实际上只能在POSTh的应{是303时才能重定向?br />        ׃q个原因QHTTP 1.1新增?07Q以便更加清除地区分几个状态代码:当出?03应答Ӟ
        览器可以跟随重定向的GET和POSThQ如果是307应答Q?br />        则浏览器只能跟随对GETh的重定向?br />  
  400 Bad Request h出现语法错误?br />  
  401 Unauthorized 客户试图未经授权讉K受密码保护的面?br />        应答中会包含一个WWW-Authenticate_览器据此显C用户名?密码对话框,
        然后在填写合适的Authorization头后再次发出h?br />  
  403 Forbidden 资源不可用?br />  
  404 Not Found 无法扑ֈ指定位置的资?br />  
  405 Method Not Allowed hҎQGET、POST、HEAD、DELETE、PUT、TRACE{)
        Ҏ定的资源不适用?br />  
  406 Not Acceptable 指定的资源已l找刎ͼ但它的MIMEcd和客户在Accpet头中所指定的不兼容?br />  
  407 Proxy Authentication Required cM?01Q表C客户必dl过代理服务器的授权?br />  
  408 Request Timeout 在服务器许可的等待时间内Q客户一直没有发ZQ何请求?br />        客户可以在以后重复同一h?br />  
  409 Conflict 通常和PUTh有关。由于请求和资源的当前状态相冲突Q因此请求不能成功?br />  
  410 Gone 所h的文档已l不再可用,而且服务器不知道应该重定向到哪一个地址?br />       它和404的不同在于,q回407表示文档怹地离开了指定的位置Q?br />       ?04表示׃未知的原因文档不可用?br />  
  411 Length Required 服务器不能处理请求,除非客户发送一个Content-Length头?br />  
  412 Precondition Failed h头中指定的一些前提条件失?br />  
  413 Request Entity Too Large 目标文档的大超q服务器当前愿意处理的大?br />        如果服务器认p够稍后再处理该请求,则应该提供一个Retry-After?br />  
  414 Request URI Too Long URI太长
  
  416 Requested Range Not Satisfiable 服务器不能满_户在h中指定的Range头?br />  
  500 Internal Server Error 服务器遇C意料不到的情况,不能完成客户的请?br />  
  501 Not Implemented 服务器不支持实现h所需要的功能?br />        例如Q客户发Z一个服务器不支持的PUTh
  
  502 Bad Gateway 服务器作为网x者代理时Qؓ了完成请求访问下一个服务器Q?br />        但该服务器返回了非法的应{?br />  
  503 Service Unavailable 服务器由于维护或者负载过重未能应{?br />        例如QServlet可能在数据库q接池已满的情况下返?03?br />        服务器返?03时可以提供一个Retry-After?br />  
  504 Gateway Timeout ׃Z理或|关的服务器使用Q表CZ能及时地从远E服务器获得应答?br />  
  505 HTTP Version Not Supported 服务器不支持h中所指明的HTTP版本
  
  (? XMLHttpRequest 对象Ҏ
  
  abort()           停止当前h
  getAllResponseHeaders()   作ؓ字符串返问完整的headers
  getResponseHeader("headerLabel")        作ؓ字符串返问单个的header标签
  open("method","URL"[,asyncFlag[,"userName"[, "password"]]])  
                                讄未决的请求的目标 URL, Ҏ, 和其他参?br />  send(content)             发送请?br />  setRequestHeader("label", "value")    讄headerq和h一起发?br />  
  (? XMLHttpRequest 对象属?br />  
  onreadystatechange      状态改变的事g触发?br />  readyState          对象状?integer):
          0 = 未初始化
          1 = d?br />          2 = 已读?br />          3 = 交互?br />          4 = 完成
  responseText    服务器进E返回数据的文本版本
  responseXML     服务器进E返回数据的兼容DOM的XML文档对象
  status        服务器返回的状态码, 如:404 = "文g末找? ?00 ="成功"
  statusText      服务器返回的状态文本信?img src ="http://www.tkk7.com/computerboy/aggbug/48952.html" width = "1" height = "1" />

Computerboy 2006-05-30 13:30 发表评论
]]>
Ajax 之DWR发布说明Q试译Q?/title><link>http://www.tkk7.com/computerboy/archive/2006/05/14/46038.html</link><dc:creator>Computerboy</dc:creator><author>Computerboy</author><pubDate>Sat, 13 May 2006 18:32:00 GMT</pubDate><guid>http://www.tkk7.com/computerboy/archive/2006/05/14/46038.html</guid><wfw:comment>http://www.tkk7.com/computerboy/comments/46038.html</wfw:comment><comments>http://www.tkk7.com/computerboy/archive/2006/05/14/46038.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.tkk7.com/computerboy/comments/commentRss/46038.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/computerboy/services/trackbacks/46038.html</trackback:ping><description><![CDATA[ <p>说明Q这个发布说明是我试译的,׃水^有限Q错误再所隑օQ?br />原文地址Q?a >http://getahead.ltd.uk/dwr/changelog/dwr20m1</a><br />DWR现在已经发布?.0的milestone 2 了。我现在译的是milestone 1<br />׃我要出差Q所以这个翻译是一个草E?br />Ƣ迎朋友们提出指?br />我的MSNQzhang_2958@hotmail.com<br /><br /><br /><br /><br />DWR 发布说明</p> <p>DWR 2.0版本 ?的里E碑</p> <p> <br />q是我们在新Ҏ方面的最大发布!<br />反向的AJAX<br />最大的Ҏ是我们成ؓ反向的Ajax。DWR1.x允许你用javascript异步的访问java代码?br />DWR2.0在这上允怽建立异步java讉Kjavascript代码?br />反向的Ajax使你~写应用E序更容易得多?/p> <p> It can use polling or Comet(long-lived HTTP)queries.<br />我们的‘聊天室’例子包含这样一Djava代码Q?/p> <p>Q-Q-</p> <p>//Get the current page Q-得到当前的页</p> <p>WebContext wctx=WebContextFactory.get();<br />String currentPage=wctx.getCurrentPage();</p> <p>// 'messages' is a List of recent messages for a browser to display<br />// Java objects converted to Javascript hava a declarating and a declared </p> <p>///variable name.<br />OutboundVariable ov=wctx.toJavascript(messages);<br />//Loop over all the users on the current page</p> <p>for(ScriptSession otherSession:wctx.getScriptSessionsByPage(currentPage)){<br />     otherSession.addScript(ov.getInitCode());<br />     otherSession.addScript("receiveMessages("+ov.getAssignCode()+");");<br />   //receiveMessages is a Javascript function that displays the current list of  <br />     ///messages <br />  }</p> <p>Q-Q-</p> <p>在本质上我们发送一些javascript循环所有用户在当前上更新q显CZ们?br />javascript更简单。你可以启用轮流Q轮询)这U查询方式?/p> <p>Q-Q-</p> <p>DWREngine.setPolling(true);</p> <p>Q-Q-</p> <p>聊天室例子(在WAR包里下蝲Q包括javascript源码 ?receiveMessages() 是?/p> <p>DWRUtil的4路线路(U程Q将信息昄到屏q上。 ????<br />其它q技术的用法包括酒吧Q游戏在U,售票和Q何的pȝ在何处服务器状态变化,<br />我们需要把更新发布到浏览者或者浏览器上?/p> <p> <br />跨领?Ajax:<script> 标签QtagQ操作   <br />如果你需要访问不同的领域服务器 我们的遥q(remotingQ计划已成ؓ可能?br />从DWR2.0你可以操?lt;script>标签(tags)增加在XMLHttpRequest 或 iframes.<br />对于使用你需要做如下Q?/p> <p>Q-Q-<br />DRWEngine.setMethod(DWREngine.ScriptTag);<br />Q-Q-</p> <p><signatures>({֐)元素(Element)<br />DWR1.0有时需要一?lt;signatures>元素(Element)帮你它得C个类型{换?br />如果你用DWR2.0同JDK5 此时一般的cd你就不要使用更多?lt;signatures><br />DWR自动调用类型{换?/p> <p> <br />DWRUtil 更新<br />我们已更新DWRUtils.有一U新的DWRUtil.cloneNode(elementID)Ҏ<br />你可以重复用HTML片段作ؓ模板?br />例如Q?/p> <p>Q-Q-<br />// Loop over all the beans<br />for(var i=0;i<beanArray.length;i++){<br />   //Fill in the blanks in the template. You will have several lines like this.<br />   DWRUtil.setValue("someid",beanArray[i].property);<br />   //Clone the node so we don't overwrite it next time<br />   DWRUtil.cloneNode("template");<br />  }<br /> //Finally hide the template<br />  $("template").style.display="none";</p> <p>Q-Q-</p> <p>我们也尝试着写一些的取值的的更新。如果其gؓ假的话,返回false(?.<br />q有可能破坏反向的兼Ҏ?br />它是d非明显依赖你的观点,我们需要关于这L反馈?/p> <p>新的属性作用域(Scope)Q-脚本(Script)<br />有一个新的作用域?br />Servlet与JSP开发者熟悉设|属性在一ơ请求,面Q会话,或者应用水q?br />DWR2.0允许你?script"(脚本)作用域?br />脚本作用域在单一面内,Ajax应用能持l用变量?/p> <p> <br />脚本作用域其long-lived 有一点像会话作用域,然而它不要cookiesQ甜点).脚本作用?/p> <p>属性在单一面内,MAjax操作都是可用的?br />创徏dwr.xml它是可用的?/p> <p>Q-Q-<br /><create creator="new" javascript="Test" scope="script"><br />   <param name="class" value="com.example.Test"/><br /></create></p> <p>Q-Q-</p> <p>脚本作用域也同样可用?programatically:</p> <p>Q-Q-<br />WebContextFactory.get().getScriptSession().setAttribute("key",value);<br />Q-Q-</p> <p>例子(Example)</p> <p>开始下载DWR2.0 压羃文g时会比以前有一些大因ؓ我们包括一些例子?br />我们从事单的struts 和 Spring 整理演示?/p> <p> <br />Refactoring(重用)q个词我叫不准。是应该是重载的呢还是重构。大家可以告诉我Q?/p> <p> 在开发者眼中,重用是一个特性,因ؓ代码整洁?br />但是它也是导致用户向后兼Ҏ问题的原因?br />我们为DWR2.0做了一些重用。但是这里是用户剔除它:<br />我们使用 org.directwebremoting.* 包 代替模糊的uk.ltd.getahead.dwr.*, <br />׃兼容性差Q我们已l抛弃存根(stubsQ?<br />如果我们有所遗漏Q请告诉我们。我们也试图使DWR成ؓ可嵌入的?/p> <p>同时Q如果现在创建像SOAP或者JSON-RPC一L预备的协议应该是可能的!</p> <p> <br />呼叫集合数据QCall Meta-dataQ?br />你能像这样用DWR传递请求属性呼叫集合数?</p> <p>Q-Q-<br />Remote.getData(42,{<br />   Callback:function(str){alert(str);},<br />   customKey:"Fred",<br />});</p> <p>Q-Q-<br />java 在HttpSevletRequest 中额外的集合数据是可用的。如下代码将q回字符?Fred":</p> <p>Q-Q-<br />WebContextFactory.get().getHttpServletRequest().getAttribute("customKey");</p> <p>Q-Q-</p> <p>其它事项</p> <p>虽然我们已经删除了deprecated.jsQ但是有人竟然还能够注意刎ͼҎ我十分怀疑。在</p> <p>DWR9.0版本出现Ӟ它已l不能满需求了?/p> <p> <br />安全和稳?/p> <p>我们十分慎重的对待安全。DWR1.X 到迄今ؓ止是十分安全的,但是Q那不意味着我们停止</p> <p>在我们的荣誉上?br />DWR2.0介绍许多新的代码。反向的AJAX和脚本ؓ基础的会话管理是疏忽Qslip upQ的地方</p> <p>?/p> <p>此外Q里E碑1Q反向的ajax在你的webserver 上创Z些较多的加蝲Q比老版本稳定?br />我们已得?个答案-Q设计允许服务器加蝲监控和动态back-off?/p> <p> <br />更o人激动的是,我们正与Mortbay一起努力,使DRW能够q用Jetty6的持l性,如果可行的话Q可以满长期HTTP的请求而不冒资源匮乏风险?/p> <p> </p> <p> <br />因此Q在q之前,请不要用DWR2.0在开发系l,直到我们有更多的试和检查?/p> <p> <br />未来版本</p> <p>q是一个o人兴奋的W一个里E碑,我们在未来数周内推?<br />我们得到更多东西!</p> <p> <br />下蝲<br />你可以下载DWR2.0 M1 <br />下蝲地址Q?br /><a >http://getahead.ltd.uk/dwr/download</a></p> <p> </p> <img src ="http://www.tkk7.com/computerboy/aggbug/46038.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/computerboy/" target="_blank">Computerboy</a> 2006-05-14 02:32 <a href="http://www.tkk7.com/computerboy/archive/2006/05/14/46038.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>AJAX ?DWR介(不断更新Q?/title><link>http://www.tkk7.com/computerboy/archive/2006/04/19/41974.html</link><dc:creator>Computerboy</dc:creator><author>Computerboy</author><pubDate>Wed, 19 Apr 2006 10:12:00 GMT</pubDate><guid>http://www.tkk7.com/computerboy/archive/2006/04/19/41974.html</guid><wfw:comment>http://www.tkk7.com/computerboy/comments/41974.html</wfw:comment><comments>http://www.tkk7.com/computerboy/archive/2006/04/19/41974.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.tkk7.com/computerboy/comments/commentRss/41974.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/computerboy/services/trackbacks/41974.html</trackback:ping><description><![CDATA[ <p>本文是我译的ƈ整理的,׃水^有限Q错误在所隑օQ希望指正?br />如果要{载,h明出处。谢?br /><br />DWR: Easy Ajax for java<br />DWR使你制作单的AJAX|站成ؓ可能<br /><br />关于DWRQ?/p> <p>你写Ajax|站QDWR是你的java开源库?br />DWR能够让运行在服务器端的Java代码像q行在浏览器里一?br />DWR 包括两个主要部分Q?br /> 一 在服务器上运行java servlet hQƈ把应{返回给览?br /> ?在浏览器q行JavaScript h和能动态的更新|页?/p> <p>DWR动态的通过Javacȝ成Javascript代码,<br />执行AJAX服务器端的代码就像在本地览器上执行的一?但是是实际上服务器上执行代码和DWR来回的传递数据?br />q从 JAVA到JAVASCRIPT lDWR 用户感到像像RMI或者SOAP一L常规的RPC机制一栗而运行在WEB 上不要浏览器插入?br />JAVA是同步的而AJAX是异步的Q因此当数据从网l返回时Q你向DWR提供一个返回功能调用。DWR 能像javascript的onclick事g一P改变囑Ş昄目录列表的结?br />DWR 能动态的产生一个AjaxServiceQ服务)c?与一些javascript匚w的服务器端代码?br />q是通过事g处理器调用的。然后DWR处理q程的数据(l节Q,包括改变javascript和java之间所有参数和q回倹{?br />用DWR实用工具来执行下面的例子中提供的回调函数来改变网c?br />DWR提供一些javascript库和一套DHTML的例子给你帮助你开发出高效的交互式站点?br />囄如下Q?br /><img src="http://getahead.ltd.uk/sitefiles/getahead/howitworks.png" /></p> <img src ="http://www.tkk7.com/computerboy/aggbug/41974.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/computerboy/" target="_blank">Computerboy</a> 2006-04-19 18:12 <a href="http://www.tkk7.com/computerboy/archive/2006/04/19/41974.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java相关pQ不断更CQ?/title><link>http://www.tkk7.com/computerboy/archive/2006/03/20/36267.html</link><dc:creator>Computerboy</dc:creator><author>Computerboy</author><pubDate>Mon, 20 Mar 2006 03:43:00 GMT</pubDate><guid>http://www.tkk7.com/computerboy/archive/2006/03/20/36267.html</guid><wfw:comment>http://www.tkk7.com/computerboy/comments/36267.html</wfw:comment><comments>http://www.tkk7.com/computerboy/archive/2006/03/20/36267.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.tkk7.com/computerboy/comments/commentRss/36267.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/computerboy/services/trackbacks/36267.html</trackback:ping><description><![CDATA[ <p>q个是我所攉的和JAVA有关的英语主要是Servlet的(以后不断更新中)<br />当然了,q个也只是对p不好的h来说的,高手׃用看了!Q!<br /><br />***********************<br /><br />Lift-cycle methods    生命周期<br />calls                 调用<br />sequence              序列<br />access                存取<br />Binding               l定<br />provide               提供<br />getCharacterEncoding  获取字符~码<br />Attribute             属?br />MIME                  多用途网际邮件扩充协?br />container             容器<br />middle layer          中间?br />acting as             担当<br />Custom                定制<br />Explicit              昄<br />Implicit              隐式<br />Varieties             变量<br />behing-the-scenes     q后<br />Critical              重要?/p> <p> <br />****************************************************************<br />Servlet's Job</p> <p>Servlets are Java programs that run on Web or application servers,<br />acting as a middle layer between requests coming from Web browsers <br />or other HTTP clients and databases or applications on the HTTP server.</p> <p> </p> <p>Read the explicit data sent by the client</p> <p>The end user normally enters this data in an HTML form on a Web page.<br />However,the data could also come from an applet or a custom HTTP client program.</p> <p> </p> <p>Read the implicit HTTP request data sent by the browser</p> <p>there are really two varieties of data:the explicit data that the end user enters<br />in a form and the behind-the-scenes HTTP information.<br />Both varieties are critical.The HTTP information includes cookies,information<br />about media types and compression schemes.</p> <p> </p> <p>Generate the results</p> <p>This process may require talking to a database,executing an RMI or EJB call,invoking<br />a Web service,or computing the response directly.<br />Your real data may be in a relational database.Fine.<br />But your database probably doesn't speak HTTP or return results in HTML,<br />so the Web browser can't talk directly to the database.Even if it could,for secutity<br />reasons,you probably would not want it to. The same argument applies to most other<br />applications.<br />You need the Web middle layer to extract the incoming data from the HTTP stream,talk<br />to the application,and embed the results inside a document.</p> <p> </p> <p>Send the explicit data (i.e.,the document)to the client.</p> <p>This document can be sent in a variety of formats,including text(HTML or XML),binary<br />(GIF images),<br />or even a compressed format like gzip that is layered on top of some other underlying format.<br />But,HTML is by far the most common format,so an important servlet/JSp task is to <br />wrap the results inside of HTML.</p> <p> </p> <p> <br />Send the implicit HTTP response data.</p> <p>there are really two varieties of data sent:<br />the document itself and the behind-the-scenes HTTP information.Again,both varieties are critical to effective development.<br />Sending HTTP response data involves telling the browser or other client what type of<br />documents is being returned(e.g.,HTML),setting cookies and caching parameters,and<br />other such tasks.</p> <p> </p> <p>************************************************************</p> <p>Servlet 的功?br /> Servlet 是运行在Web 服务器或应用服务器上的JAVAE序Q它是一个中间层Q?br />负责q接来自Web览器或其他HTTP客户E序的请求和HTTP服务器上的数据库或应用程序?/p> <p>d客户发送的昄数据<br />最l用户一般在|页的HTML表单中输入这些数据。然而,数据q有可能来自于applet 或定制的<br />HTTP客户E序?/p> <p>它们分别为用户在表单中输入的昄数据Q以及后台的HTTP信息Q两U数据都很重要。HTTP<br />信息包括cookie, 览器所能识别的媒体cd和压~模式等?/p> <p> </p> <p> </p> <p>***********************************************************</p> <p> </p> <p>Sensitive                 敏感<br />Concuread                 可同时发生的<br />Absoluteposion            l对位置<br />Cursor                    指针<br />granted                   准许<br />License                   许可Q执?br />involve                   包括<br />indirectly                间接?br />directories               目录<br />ascirbe                   归因?/p> <p> </p> <p> <br />*******</p> <p>student_survey                 n 学生调查<br />Separator                      n 分隔W?br />generates                      v 生成  <br />CompareTO                      v 比较<br />Otherwise                      adv 否则Q另?br />Hierarchy                      n 层次 Class Hierarchy<br />compatibility                  兼容?br />resources                      资源<br />Data resources                 数据?br />Constructs                     v 创徏<br />Functionality                  n 功能<br />Encodes                        v ~码<br />specified URL                  特定的URL<br />Raw                            原始</p> <p> <br />************************************************************</p> <p> <br />You call request.getParameter to get the value of a form parameter.<br />You can also call request.getParameterValues if the parameter appears more <br />than once you can call request.getParameterNames if you want a complete list of <br />all parameters in thecurrent request.<br />In the rare cases in which you need to read the raw request data and parse it <br />yourself,call getReader of getInputStream.</p> <p> </p> <p>********</p> <p>你可以调用request.getParameter 可以得到表单参数倹{?br />如果参数多次出现Q还可以调用request.getParameterValues.<br />如果希望得到当前h中所有参数的完整列表Q可以调用request.getParameterNames.<br />在极数情况下,可能需要读取原始的h数据对它自己q行分析Q此时可以调用getReader?br />getInputStream.</p> <p> <br />************************************************************03 Servelet 处理表单</p> <p> <br />Override        覆盖<br />Resource bundle      资源?br />Scheme          模式<br />Template        模板<br />Wildcard        通配W?br />Internationalization      国际?br />Authorization   鉴别<br />Authentication  授权<br />Native code     本机代码<br />Manipulation    处理</p> <p>Java syntax     Java语法<br />Standardizes    标准?br />approach        路径<br />extensions      扩展<br />Vendor          卖主Q供应商<br />Establish       建立</p> <p> <br />JDBC provides a standard library for accessing relational databases.<br />By using the JDBC API, you can access a wide variety of SQL databases with exactly<br />the same Java syntax.</p> <p>********译开?/p> <p>JDBC 提供一套访问关pd数据库的标准库。通过JDBC API Q我们可以适用完全相同的JAVA 语法讉K大量各种各样的SQL数据库?/p> <p> <br />********</p> <p> </p> <p>It is important to note that although the JDBC API standardizes the approach for </p> <p>connection to databases,the syntax for sending queries and committing t<br />ransactions,<br />and the data structure representing the result,JDBC does not attmpt to standardize<br />the SQL syntax.</p> <p>*******译开?/p> <p>要主义,虽然JDBC API 标准化了数据库的q接方式Q发送查询和提交事务的语法,以及表示l果的数据结构,但JDBC q不试图SQL的语法也标准化,了解q一Ҏ较重要?/p> <p>********</p> <p> </p> <p>So,you can use any SQL extensions your database vendor supports.However,since most<br />queries follow standard SQL syntax,using JDBC lets you change database hosts,ports,and even database vendors with minimal changes to you code.</p> <p> <br />*******译开?/p> <p>故而,我们依旧可以使用数据库提供商支持的Q何扩展,但是׃大多数查询都遵@标准的SQL语法。因此,在用JDBC 的情况下Q对代码做出很少的修改就可以更改数据的主机,端口Q甚x据库提供商?/p> <p> <br />*******</p> <p>Following is a summary;details are given in the rest of the section.</p> <p>Load the JDBC driver. To load a driver,you specify the classname of the database <br />driver in the Class.forName method.By doing so,you automatically create a driver<br />instance and register is with the JDBC driver manager.<br />Define the connection URL. In JDBC,a connection URL specifies the server host,<br />port ,and database name with which to establish a connection.</p> <p>*******译开?/p> <p>下面是一个汇怅R?br />载入JDBC 驱动E序Q如果要载入驱动E序Q只需在Class.forName Ҏ中指定数据库驱动E序的类名。这样做p动创Z驱动E序的实例,产注册到JDBC 驱动E序理器?/p> <p>定义q接URL<br />在JDBC 中,q接URL 指定服务器的L名,端口以及希望与之建立q接的数据库名?/p> <p>********<br />Estblish the connection.With the connection URL, username,and passwrod, a network<br />connection to the database can be established. Once the <br />connection is established,<br />database queries can be preformed until the connection is closed.<br />Create a Stantement object. Creating a Statement object enables you to send <br />queries and commands to the database.</p> <p> <br />*******译开?/p> <p>建立q接<br />有了q接URL,用户名和密码Q就可以建立到数据库的网l连接。连接徏立之后,可以执行数据库的查询,直到数据关闭为止?br />创徏Statement 对象<br />创徏Statement 对象才能向数据库发送查询和命o?/p> <p> <br />*************</p> <p>Execute a query or update. Give a Statement object, you can send SQL stateents to <br />the database by using the execute, executeQuery, executeUpdate, or executeBatch<br />methods.</p> <p>Process the results.When a database query is executed, a ResultSet is returned.<br />The ResultSet represents a set of rows and columns that you can process by calls <br />to next and various getXXX methods.</p> <p>Close the connection. When you are finished performing queries and processing <br />results, you should close the connection ,releasing resources to the database.</p> <p> <br />******译开?/p> <p>执行查询或更?br />有了Statement 对象后,可以用excute,excuteQuery,excuteUpdate ?excuteBatch Ҏ<br />发送给SQL 语句到数据库?br />l果处理<br />数据库查询执行完毕后Q返回一个ResultSet 。ResultSet表示一pd的行和列Q我们可?br />调用next 和各U?getXXXҎ对这些行和列q行处理?br />关闭q接<br />在执行完查询且处理完l果之后Q应该关闭连接,释放与数据库相连的资源?/p> <p> <br />**************************************************************<br />**** Cookies </p> <p>Cookies are small bits of textual information that a Web server sends to a <br />browser <br />and that the browser later returns unchanged when visiting the same Web site <br />of domain.<br />By letting the server read information it sent the client previously,the site can <br />provide visitors with a number of conveniences<br />such as presenting the site the way the visitor previously customized it or <br />letting identifiable visitors in without their having to reenter a password.</p> <p> <br />********译开?/p> <p>Cookie 是小D|本信息,由Web 服务器将它发送到览器,<br />之后Q在讉K同一|站或域Ӟ览器又它原封不动地返回?br />通过让服务器d它之前发送给客户E序的信息,站点可以问者提供诸多的便利Q?br />比如按照讉K者之前的定制呈现该站点,或让分n已通过验证者进入,不需要再ơ输?br />密码?/p> <p> <br />************</p> <p>communicate          通话<br />dispatch             分布式的<br />processing           处理<br />match                匚w<br />ignored              忽略<br />overloaded           q蝲<br />Furthermore          此外<br />purposes             目的目标</p> <p> <br />************************* 05-Servlet 中处理会?Session </p> <p> </p> <p>Separate       单独、分?br />Persistent     持久Q稳?br />Multiple       多个、多?br />Maintaining    l持、维?br />Inadequacies   不</p> <p> </p> <p>****</p> <p>HTTP is a "stateless" protocol:<br />each time a client retrieves a Web page,the client opens a separate connection to <br />the Web server and the server does not automatically maintain contextual <br />information .<br />about the client.Even with servers that support persistent(Keep-alive)HTTP<br />connections and keep sockets open for multiple client requests that occur<br />in rapid succession, there is no built-in support for maintaining contextual<br />information.</p> <p>This lack of context causes a number of difficulties.</p> <p>*******译开?</p> <p>HTTP 是“无状态”协议:<br />客户E序每次dWeb面Q都会打开一个单独连接到Web服务器,q且服务器也不自?br />l护客户的上下文信息?br />即哪些支持持箋性HTTP q接的服务器Q尽?多个客户hq接发生且间隔很短时他们<br />会保持socket打开Q但是,它们也没有提供维护上下文信息的内建支持?br />上下文的~失引v许多困难?/p> <p> <br />*******</p> <p> <br />For example, when clients at an online store add an item to their shopping carts,<br />how does the server know what's already in the carts?<br />Similarly, when clients decide to proceed to checkout, how can the server <br />determine which previously created shopping carts are theirs?<br />These questions seem very simple, yet, because of the inadequacies of HTTP,<br />answering them is surprisingly complicated.</p> <p>********译开?/p> <p>例如Q在U商店的客户向它们的购物车加入商品时Q服务器如何知道购物车中已有何种<br />物品呢?<br />cM的,在客户决定结账时Q服务器如何能确定之前创建的购物车中哪个属于客户呢?<br />q些问题虽然看v来简单,但是׃HTTP的不I解决它们却异常复杂困难?/p> <p> </p> <p> <br />***********</p> <p> <br />There are three typical solutions to this problem:cookies,URL rewriting,and<br />hidden form fields ,session</p> <p> <br />****译开?/p> <p>对于q个问题Q存在四U解x案:<br />cookieQURL重写隐藏的表单域和session</p> <p> </p> <p> </p> <p>*********************</p> <p> <br />initialization parameters        初始化参?br />Reference                        引用<br />Logging                          日志<br />Encryption                       加密<br />Chain                            ?br />executing                        执行<br />tasks                            d<br />Authentication                   压羃<br />conversion                       转换</p> <p> </p> <p>*******</p> <p> <br />A filter is a program that runs on the server before the servlet or JSP page<br />with which it is associated.</p> <p>A filter can be attached to one or more servlets or JSp pages and can examine<br />the request information going into these resources</p> <p> </p> <p>****************************</p> <p> </p> <p> </p> <p>                 <br /><br /></p> <img src ="http://www.tkk7.com/computerboy/aggbug/36267.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/computerboy/" target="_blank">Computerboy</a> 2006-03-20 11:43 <a href="http://www.tkk7.com/computerboy/archive/2006/03/20/36267.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>jsp数据库连接大?/title><link>http://www.tkk7.com/computerboy/archive/2006/03/17/35839.html</link><dc:creator>Computerboy</dc:creator><author>Computerboy</author><pubDate>Fri, 17 Mar 2006 08:01:00 GMT</pubDate><guid>http://www.tkk7.com/computerboy/archive/2006/03/17/35839.html</guid><wfw:comment>http://www.tkk7.com/computerboy/comments/35839.html</wfw:comment><comments>http://www.tkk7.com/computerboy/archive/2006/03/17/35839.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/computerboy/comments/commentRss/35839.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/computerboy/services/trackbacks/35839.html</trackback:ping><description><![CDATA[ 一、jspq接Oracle8/8i/9i数据库(用thin模式Q?<br />testoracle.jsp如下Q?<br />< %@ page contentType="text/html;charset=gb2312"% > <br />< %@ page import="java.sql.*"% > <br />< html > <br />< body > <br />< %Class.forName("oracle.jdbc.driver.OracleDriver").newInstance(); <br />String url="jdbc:oracle:thin:@localhost:1521:orcl"; <br />//orclZ的数据库的SID <br />String user="scott"; <br />String password="tiger"; <br />Connection conn= DriverManager.getConnection(url,user,password); <br />Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE); <br />String sql="select * from test"; <br />ResultSet rs=stmt.executeQuery(sql); <br />while(rs.next()) {% > <br />您的W一个字D内容ؓQ?lt; %=rs.getString(1)% > <br />您的W二个字D内容ؓQ?lt; %=rs.getString(2)% > <br />< %}% > <br />< %out.print("数据库操作成功,恭喜?);% > <br />< %rs.close(); <br />stmt.close(); <br />conn.close(); <br />% > <br />< /body > <br />< /html > <br /><br />二、jspq接Sql Server7.0/2000数据?<br />testsqlserver.jsp如下Q?<br />< %@ page contentType="text/html;charset=gb2312"% > <br />< %@ page import="java.sql.*"% > <br />< html > <br />< body > <br />< %Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance(); <br />String url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=pubs"; <br />//pubsZ的数据库?<br />String user="sa"; <br />String password=""; <br />Connection conn= DriverManager.getConnection(url,user,password); <br />Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE); <br />String sql="select * from test"; <br />ResultSet rs=stmt.executeQuery(sql); <br />while(rs.next()) {% > <br />您的W一个字D内容ؓQ?lt; %=rs.getString(1)% > <br />您的W二个字D内容ؓQ?lt; %=rs.getString(2)% > <br />< %}% > <br />< %out.print("数据库操作成功,恭喜?);% > <br />< %rs.close(); <br />stmt.close(); <br />conn.close(); <br />% > <br />< /body > <br />< /html > <br /><br />三、jspq接DB2数据?<br />testdb2.jsp如下Q?<br />< %@ page contentType="text/html;charset=gb2312"% > <br />< %@ page import="java.sql.*"% > <br />< html > <br />< body > <br />< %Class.forName("com.ibm.db2.jdbc.app.DB2Driver ").newInstance(); <br />String url="jdbc:db2://localhost:5000/sample"; <br />//sampleZ的数据库?<br />String user="admin"; <br />String password=""; <br />Connection conn= DriverManager.getConnection(url,user,password); <br />Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE); <br />String sql="select * from test"; <br />ResultSet rs=stmt.executeQuery(sql); <br />while(rs.next()) {% > <br />您的W一个字D内容ؓQ?lt; %=rs.getString(1)% > <br />您的W二个字D内容ؓQ?lt; %=rs.getString(2)% > <br />< %}% > <br />< %out.print("数据库操作成功,恭喜?);% > <br />< %rs.close(); <br />stmt.close(); <br />conn.close(); <br />% > <br />< /body > <br />< /html > <br /><br />四、jspq接Informix数据?<br />testinformix.jsp如下Q?<br />< %@ page contentType="text/html;charset=gb2312"% > <br />< %@ page import="java.sql.*"% > <br />< html > <br />< body > <br />< %Class.forName("com.informix.jdbc.IfxDriver").newInstance(); <br />String url = <br />"jdbc:informix-sqli://123.45.67.89:1533/testDB:INFORMIXSERVER=myserver; <br />user=testuser;password=testpassword"; <br />//testDBZ的数据库?<br />Connection conn= DriverManager.getConnection(url); <br />Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE); <br />String sql="select * from test"; <br />ResultSet rs=stmt.executeQuery(sql); <br />while(rs.next()) {% > <br />您的W一个字D内容ؓQ?lt; %=rs.getString(1)% > <br />您的W二个字D内容ؓQ?lt; %=rs.getString(2)% > <br />< %}% > <br />< %out.print("数据库操作成功,恭喜?);% > <br />< %rs.close(); <br />stmt.close(); <br />conn.close(); <br />% > <br />< /body > <br />< /html > <br /><br />五、jspq接Sybase数据?<br />testmysql.jsp如下Q?<br />< %@ page contentType="text/html;charset=gb2312"% > <br />< %@ page import="java.sql.*"% > <br />< html > <br />< body > <br />< %Class.forName("com.sybase.jdbc.SybDriver").newInstance(); <br />String url =" jdbc:sybase:Tds:localhost:5007/tsdata"; <br />//tsdataZ的数据库?<br />Properties sysProps = System.getProperties(); <br />SysProps.put("user","userid"); <br />SysProps.put("password","user_password"); <br />Connection conn= DriverManager.getConnection(url, SysProps); <br />Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE); <br />String sql="select * from test"; <br />ResultSet rs=stmt.executeQuery(sql); <br />while(rs.next()) {% > <br />您的W一个字D内容ؓQ?lt; %=rs.getString(1)% > <br />您的W二个字D内容ؓQ?lt; %=rs.getString(2)% > <br />< %}% > <br />< %out.print("数据库操作成功,恭喜?);% > <br />< %rs.close(); <br />stmt.close(); <br />conn.close(); <br />% > <br />< /body > <br />< /html > <br /><br />六、jspq接MySQL数据?<br />testmysql.jsp如下Q?<br />< %@ page contentType="text/html;charset=gb2312"% > <br />< %@ page import="java.sql.*"% > <br />< html > <br />< body > <br />< %Class.forName("org.gjt.mm.mysql.Driver").newInstance(); <br />String url ="jdbc:mysql://localhost/softforum?user=soft&password=soft1234&useUnicode=true&characterEncoding=8859_1" <br />//testDBZ的数据库?<br />Connection conn= DriverManager.getConnection(url); <br />Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE); <br />String sql="select * from test"; <br />ResultSet rs=stmt.executeQuery(sql); <br />while(rs.next()) {% > <br />您的W一个字D内容ؓQ?lt; %=rs.getString(1)% > <br />您的W二个字D内容ؓQ?lt; %=rs.getString(2)% > <br />< %}% > <br />< %out.print("数据库操作成功,恭喜?);% > <br />< %rs.close(); <br />stmt.close(); <br />conn.close(); <br />% > <br />< /body > <br />< /html > <br /><br />七、jspq接PostgreSQL数据?<br />testmysql.jsp如下Q?<br />< %@ page contentType="text/html;charset=gb2312"% > <br />< %@ page import="java.sql.*"% > <br />< html > <br />< body > <br />< %Class.forName("org.postgresql.Driver").newInstance(); <br />String url ="jdbc:postgresql://localhost/soft" <br />//softZ的数据库?<br />String user="myuser"; <br />String password="mypassword"; <br />Connection conn= DriverManager.getConnection(url,user,password); <br />Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE); <br />String sql="select * from test"; <br />ResultSet rs=stmt.executeQuery(sql); <br />while(rs.next()) {% > <br />您的W一个字D内容ؓQ?lt; %=rs.getString(1)% > <br />您的W二个字D内容ؓQ?lt; %=rs.getString(2)% > <br />< %}% > <br />< %out.print("数据库操作成功,恭喜?);% > <br />< %rs.close(); <br />stmt.close(); <br />conn.close(); <br />% > <br />< /body > <br />< /html > <br /> <img src ="http://www.tkk7.com/computerboy/aggbug/35839.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/computerboy/" target="_blank">Computerboy</a> 2006-03-17 16:01 <a href="http://www.tkk7.com/computerboy/archive/2006/03/17/35839.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>struts表单校验http://www.tkk7.com/computerboy/archive/2006/03/17/35799.htmlComputerboyComputerboyFri, 17 Mar 2006 03:41:00 GMThttp://www.tkk7.com/computerboy/archive/2006/03/17/35799.htmlhttp://www.tkk7.com/computerboy/comments/35799.htmlhttp://www.tkk7.com/computerboy/archive/2006/03/17/35799.html#Feedback0http://www.tkk7.com/computerboy/comments/commentRss/35799.htmlhttp://www.tkk7.com/computerboy/services/trackbacks/35799.html要描q?/h3>

Struts采用Validator框架QValidator框架现在是Jakarta Commons目的一部分Q来解决校验问题Q它校验规则代码集中到外部的且对具体的应用E序中立?xml文g中,q样Q就那些到处出现的校验逻辑从应用程序中分离出来QQ何一个Struts应用都可以用这个文Ӟ同时qؓ校验规则的扩展提供了便利。更难能可贵的是׃Validator框架校验中要用到的一些消息等信息与资源绑定有机结合在一P使得校验部分的国际化~程变得十分的便捷和自然?br />

主要构成

Validator框架大致有如下几个主要组Ӟ

  • 校验c:
    是Validator框架调用的一些Javac,它处理那些基本的通用的校验,包括required、maskQ匹配正则表辑ּQ、最长度、最大长度、范围、日期等。校验类可以Ҏ需要扩展?
  • 配置文gQ?br />主要包括两个配置文gQ一个是validator-rules.xmlQ主要包含一些通用的校验规则,另一个是validation.xmlQ包含需要校验的一些form及其lg的集合?
  • 资源l定Q?br />提供国际化标{֒消息Q缺省用struts的资源绑定。即校验所用到的一些标{与消息都写在ApplicationResources.properities文g中?
  • Jsp 标签Q?br />为给定的form或者action path生成前端校验?JavaScript 代码?
  • ValidatorFormQ?br />是ActionForm的一个子cR?

校验框架的?/h3>

1) 配置

在struts-config.xml文g中,最底下d一l插Ӟ

 <plug-in  className="org.apache.struts.validator.ValidatorPlugIn">
         <set-property  property="pathnames"  
                      
value="/WEB-INF/validator-rules.xml,
                              /WEB-INF/validation.xml"/>
     </plug-in>

从struts的例子,拯文g validator-rules.xml ?validation.xml Q?/font>攑ֈ目录 /WEB-INF 下面

2) 校验定义

?font color="#000080" size="2">validation.xml文g中定义校验的表单和属性?/p>

例子Q?/font>

     <form    name= "customerForm" >
             <field    property= "name"    depends= "required" >
                 <arg0    key= "customerForm.name" />
             </field>
               <field    property= "address"    depends= "required" >
                 <arg0    key= "customerForm.address" />
             </field>
         </form>

其中Q表单名UcustomerForm必须在struts-config.xml中定义?/p>

property单的属性?/p>

depends为校验规则的名称。validator_rules.xml中缺省定义的校验规则请参考struts的文档?/p>

<arg0    key= "customerForm.name" /> 指定校验规则中用的消息在消息资源文件中的key?/p>

3) 表单cȝ?/h4>

Z使服务器边的验证能够q行Q将用到的formBean从ActionForm的子cL为ValidatorForm的子c,如:

public class BaseForm extends ValidatorForm implements Serializable

4) 客户端校?/h4>

要实现客L校验Q必d提交的时候运行校验框架生成的javascript代码?/p>

?lt;html:form>标签中,d属?onsubmit="return validateCustomerForm(this)"

在标{֐加上Q?/p>

< html:javascript formName = "customerForm"   cdata = "false"
      
dynamicJavascript = "true" staticJavascript = "false" />
<
script type = "text/javascript"
      
src = " < c:url    value = "/scripts/validator.jsp" /> " ></ script >

5) Action指定校验

在action的配|中加上指定校验的属性:validate="true"Q如Q?/p>

 <action  path="/customer/customer"  
                
type="com.demo.order.actions.CustomerAction"  
                
name="customerForm"  
                
parameter="method"  
                
input="add"
                unknown="false"
                
validate="true"
                >
            <forward  name="view"  path="model.customer.view">
            </forward>
            <forward  name="add"  path="model.customer.add">
            </forward>
            <forward  name="list"  path="model.customer.list">
            </forward>

        </action>



Computerboy 2006-03-17 11:41 发表评论
]]>
一些常用Java站和下蝲地址http://www.tkk7.com/computerboy/archive/2006/01/06/26830.htmlComputerboyComputerboyFri, 06 Jan 2006 01:46:00 GMThttp://www.tkk7.com/computerboy/archive/2006/01/06/26830.htmlhttp://www.tkk7.com/computerboy/comments/26830.htmlhttp://www.tkk7.com/computerboy/archive/2006/01/06/26830.html#Feedback0http://www.tkk7.com/computerboy/comments/commentRss/26830.htmlhttp://www.tkk7.com/computerboy/services/trackbacks/26830.htmlJava 站:
 1?http://java.sun.com/ ;(英文)
Sun的Java|站Q是一个应该经常去看的地方。不用多说?

2?http://www-900.ibm.com/developerWorks/cn/ ;
IBM的developerWorks|站Q英语好的直接去英文ȝ点看。这里不但是一个极好的面向对象的分析设计网站,也是Web ServicesQJavaQLinux极好的网站。强烈推荐!Q!

3?http://www.java-cn.com/ ;(中文)
JAVA中文站,目前国内资料最全、会员最多的JAVA技术网站,人气极高。有《JAVA电子书库》、《JAVA视频库?国内唯一)、《JAVA技术文摘库》、《JAVA源代码库》、《JAVA工具库》、《招聘求职广场》等主要栏目Q还有一些专家栏目。目前会员有5万多QVIP会员q?000人。无论是菜鸟q是老鸟Q都能在此网站中扑ֈ自己所需要的东东Q! 最强烈推荐Q!Q!Q!

4?http://www.javaworld.com/ ;(英文)
关于Java很多新技术的讨论和新闅R想多了解Java的方斚w面的应用Q这里比较好?

5?http://dev2dev.bea.com.cn/index.jsp ;
BEA的开发者园圎ͼBEA作ؓ最重要的App Server厂商Q有很多独到的技术,在Weblogic上做开发的朋友不容错过?

6?http://www.huihoo.com/ ;
灰狐动力|站Q一个专业的中间件网站,虽然不是专业的Java|站Q但是在J2EE企业应用技术方面有深厚的造诣?

7?http://www.theserverside.com/home/ ;(英文)
TheServerSide是一个著名的专门面向Java Server端应用的|站?

8?http://www.javaresearch.org/ ;
Java研究l织Q有很多优秀的Java斚w的文章和教程Q特别是在JDO斚w的文章比较丰富?

9?http://www.cnjsp.org/ ;
JSP技术网站,有相当多的Java斚w的文章和资源?

10?http://www.jdon.com/ ;

q有www.javaeye.com


下蝲地址Q?br />
相关下蝲 ModelsTry_SSH_V1下蝲Q请点击q里
ModelsTry_SSH_V1的评估版License下蝲Q请点击q里
ModelsTry属性编辑器下蝲Q请点击q里
ModelsTry安装演示录像的下载,L?a href="ftp://modelstry:modelstry@61.129.117.61/install.zip">q里下蝲Qƈ请阅?a >安装说明
ModelsTry使用演示录像的下载,L?a href="ftp://modelstry:modelstry@61.129.117.61/use_modelstry.zip">q里下蝲?
下蝲JDK 5.0Q请?
http://java.sun.com/j2se/downloads.html 下蝲
Eclipse 3.1 SDK 和GEF3.1Q请到http://www.eclipse.org/downloads/index.php 
Eclipse3.2发布了:
官方下蝲Q?br />http://download.eclipse.org/eclipse/downloads/drops/S-3.2M6-200603312000/index.php

通过Jpetstore学习WSAD、ROSE、WEBSPHERE
http://www.matrix.org.cn/resource/article/43/43859_Jpetstore_Websphere.html

Tomcat |站:
http://jakarta.apache.org/tomcat

BEA Weblogic |站:
http://commerce.bea.com/index.jsp

IBM Webshpere |站:
http://www7b.software.ibm.com
developerWorks中文|站的连接是Q?br />http://www-900.ibm.com/developerWorks/cn/wsdd/

Jboss 下蝲:
http://www.jboss.org/index.html

BEA dev2dev在线
http://dev2dev.bea.com.cn/



Computerboy 2006-01-06 09:46 发表评论
]]>
վ֩ģ壺 Ʒ޹| ĻƵ| պ| պƷרַ| ѹۿ+ձ| 99ֻоƷƵѹۿ17| þWWW˳Ƭ| ձƵѸһ18| ѿŮҹƬ| ޸| ޺Сvideos| ޳avƬ| ŷ޾þþþƷ| ƷҹѸ| ˳ѵӰ| һëƬëƬһëƬ| һëƬƵ| ѿһëƬ߹ۿƷƵ | Ů߹| ɬɬƵ| avƬ߿| Ѹվ߹ۿ| 97ԭѹۿ| 㽶һ| aҹëƬһ| Ƶ| ߹ۿѻվ| XXX2߹ۿƵ| һŮ18ƬëƬƵ| ɫƵ߹ۿѸֱ| ޹ƷŮþþþ| ҹƷһ鶹 | ޸Ļ| Ļ| ƷһƵ| ҹƵ| 69Ƶ߹ۿ| hƬѹۿ| ѿٶ޵վ| jlzzjlzz߲| Ƶ|