Applet与Servlet通讯的问题
我的servlet代码如下:
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.util.*;
import javax.sql.*;
import java.sql.*;
import oracle.jdbc.rowset.OracleCachedRowSet;
public class GetZtuDataServlet extends HttpServlet {
static {
try {
Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
} catch (Exception e)
{
e.printStackTrace();
}
}
private static final String CONTENT_TYPE = "text/html; charset=GBK";
//Initialize global variables
public void init() throws ServletException {
}
//Process the HTTP Get request
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String url="jdbc:oracle:thin:@hdwlserver:1521:ldmisdb";
//orcl为数据库的SID
String user="db_ssxxcx";
String password="123456";
response.setContentType(CONTENT_TYPE);
PrintWriter out = response.getWriter();
out.println("<html>");
out.println("<head><title>读书</title></head>");
out.println("<body>");
try{
Connection conn = DriverManager.getConnection(url, user, password);
Statement stmt = conn.createStatement();
String St_sql = new String("select * from tb_cdsssjb where fd_cdxh<10000");
ResultSet dbrest = stmt.executeQuery(St_sql);
int k = 0;
String St_dqsz;
Vector vector=new Vector();
while (dbrest.next()&&k<20)
{
St_dqsz = dbrest.getString(3);
out.println("<p>"+St_dqsz+"</p>");
vector.add(St_dqsz);
k++;
}
ObjectOutputStream oos = new ObjectOutputStream(response.getOutputStream());
oos.writeObject(vector);
oos.close();
dbrest.close();
stmt.close();
conn.close();
}
catch (Exception exp){
exp.printStackTrace();
}
out.println("</body></html>");
}
}
相应访问Servlet的Applet的代码如下:
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
import java.io.*;
import java.net.*;
import javax.sql.*;
import netscape.javascript.*;
import java.util.Enumeration;
import java.util.Vector;
import java.util.TimerTask;
import java.util.Timer;
import oracle.jdbc.rowset.OracleCachedRowSet;
public class ZtuApplet extends Applet
{
private boolean isStandalone = false;
static Graphics g;
static int k = 1;
static String msg="a sinmple banner";
static Graphics offGraphics;
static Image offImage;
static Dimension myDimension;
static URL url;
static URLConnection urlcon;
static InputStream inputstream;
static ObjectInputStream ois;
//Get a parameter value
public String getParameter(String key, String def)
{
return isStandalone ? System.getProperty(key, def) :
(getParameter(key) != null ? getParameter(key) : def);
}
//Construct the applet
public ZtuApplet()
{
}
//Initialize the applet
public void init()
{
try {
jbInit();
g = getGraphics();
myDimension = getSize();
offImage = createImage(500, 500);
offGraphics = offImage.getGraphics();
offGraphics.setColor(Color.red);
g.setColor(Color.red);
url = new URL("http://192.168.0.83:7001/AppletWebapp/getztudataservleturl");
urlcon = url.openConnection();
urlcon.setDoInput(true);
urlcon.setDoOutput(true);
urlcon.setUseCaches(false);
urlcon.setDefaultUseCaches(false);
inputstream = urlcon.getInputStream();
ois=new ObjectInputStream(inputstream); //此行出错,抛出StreamCorruptedException:invalid Stream head 异常
}
catch (Exception e)
{
e.printStackTrace();
}
}
public void paint(Graphics g)
{
g.drawString(msg, 30, 50);
ZtuApplet.invoke();
}
//Component initialization
private void jbInit() throws Exception
{
}
//Get Applet information
public String getAppletInfo()
{
return "Applet Information";
}
//Get parameter info
public String[][] getParameterInfo()
{
return null;
}
public static void invoke()
{
try {
InputStream inputstream = urlcon.getInputStream();
ObjectInputStream ois=new ObjectInputStream(urlcon.getInputStream());
vector = (Vector)ois.readObject();
ois.close();
k = 1;
Enumeration enum = vector.elements();
while(enum.hasMoreElements())
{
String kk = (String)(enum.nextElement());
offGraphics.drawString(kk,20,10*k);
k++;
}
} catch (Exception e)
{
e.printStackTrace();
}
g.drawImage(offImage, 0, 0, null);
}
}
总之:
就是Servlet 用Response取得OutputStream,再用OuputStream 构造一个ObjectOutputStream,再调用ObjectOutputStream的writeObject()把数据库中查询出来的记录写入该输出流。
Applet利用URL和URLConnection建立和上述的Servlet的连接,用URLConnection的
getInputStream得到一个InputStream,再用InputStream构造一个ObjectInputStream,
(就在构造ObjectInputStream时抛出StreamCorruptedException:invalid Stream Header)。
帮帮我啊,先谢拉!