这篇文章是继<<Servlet传送对象给Applet使用>>后,征对网友的特殊问题写的又一个实例. 现发表出来与大家分享,文中瑕癖之处甚多,望各位指教.  这个问题在csdn上已经有讨论了http://www.csdn.net/expert/topic/971/971710.xml. 具体的需求就不讲了,这里把我的实现步骤详细写下,与<<Servlet传送对象给Applet使用>>中提到的方法 一样.用到的CachedRowSet可以到 http://java.sun.com//Download4?userid=zlyperson&platform=zip&button=continue&config-file=rowset-1_0-ea4.config 去下.还有一个netscape的包,在C:\WINNT\java\Packages\0S0W0NFX.ZIP中. 我也把所需要的包及我的实现代码打成了包,其中包扩了CachedRowSet&netscape&本文. http://63.210.240.215/rookieport/rowset.jar 下面给出全部代码和配置,其中Applet部分涵盖 了Javascript与Applet的互相调用,对于该部分不感兴趣的朋友可以复略. 
<pre> 第一步,实现Servlet package exapplet; import java.io.*; import java.sql.*; import javax.sql.*; import sun.jdbc.rowset.*; import javax.servlet.*; import javax.servlet.http.*; 
public class MyServlet extends HttpServlet  {  static {   try {    Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");   } catch (Exception e) {    e.printStackTrace();   }  } 
 public void doGet(HttpServletRequest req,HttpServletResponse res)   throws ServletException,IOException  {   try {    Connection dbconn = DriverManager.getConnection("jdbc:odbc:BlueSite");    Statement stmt = dbconn.createStatement();    String  dbsql = req.getParameter("DBSQL");    ResultSet dbrest = stmt.executeQuery(dbsql);    CachedRowSet crs = new CachedRowSet();             crs.populate(dbrest);             dbrest.close();    stmt.close();    dbconn.close();    file://传回对象给Applet    res.setContentType("application/octet-stream");    ObjectOutputStream oos = new ObjectOutputStream(res.getOutputStream());    oos.writeObject(crs);    oos.close();   } catch (Exception exp) {    exp.printStackTrace();   }  }  public String getServletInfo()  {   return "A simple Servlet!";  } } 
第二步,实现提取对象的Applet package exapplet; import java.awt.*; import java.applet.*; import java.io.*; import java.net.*; import javax.sql.*; import sun.jdbc.rowset.*; import netscape.javascript.*; 
public class MyAppletB extends java.applet.Applet {  public void init()  {  }  public void paint(Graphics g)  {} 
 file://This method will be call in html  public void invoke() {   try {    URL url = new URL("http://Liaoyuan:8080/WorkingRoom/exapplet/PostToApplet?DBSQL=Select%20TopicName,TopicName,TopicName%20from%20Topic");    file://注意url中的空个用%20替代.        URLConnection urlcon = url.openConnection();    urlcon.connect();    ObjectInputStream ois=new ObjectInputStream(urlcon.getInputStream());    CachedRowSet crs = (CachedRowSet)ois.readObject();    ois.close();    while ( crs.next() ) {     JSObject.getWindow(this).call("alert",new String[]{crs.getString(1)});    }    crs.close();   } catch (Exception e) {   }  } } 
第三步,配制WebServer(我用的是Tomcat4.0) 拷贝编译后的MyServlet.class到相应目录下,或者下载我打的包到WEB-INF\lib下 编辑对应的web.xml文件,确保下面的内容正确 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN" "http://java.sun.com/j2ee/dtds/web-app_2_2.dtd"> <web-app>  <servlet>         <servlet-name>PostToApplet</servlet-name>         <servlet-class>exapplet.MyServlet</servlet-class>     </servlet> 
 <servlet-mapping>         <servlet-name>             PostToApplet         </servlet-name>         <url-pattern>             /exapplet/PostToApplet         </url-pattern>     </servlet-mapping> </web-app> 
第四步,编写html文件 提取对象的html <HTML> <HEAD> <TITLE> New Document For Using Applet </TITLE> </HEAD> 
<BODY> Hello This is a Test!<br> <APPLET id="obj_applet" align=center code="exapplet.MyAppletB" codeBase="." width=400 height=300 name="obj_applet" archive="BV7RFD3P.ZIP"></APPLET> <Input type=button value="CallAppletMethod" onclick="callApplet()"> <Script language=javascript> function callApplet() {  obj_applet.invoke(); } </Script> </BODY> </HTML> </pre> 中间有错误的地方请指教,[email protected]  
 
  |