InputStream input = new FileInputStream("c:\\myJSP\\shu.txt"); 这样的读法就不是读服务器上的内容了,是读客户端的C:盘下的文件了,如果要读服务器上的文件要用流的方式来读。构造一个URL,用url就可以获得一个输入流了,后面的IO处理就一样了。另外,如果只是要读服务器上的文件,APPLET是不用做数据签名的,做数字签名一般是解决访问客户机本身的资源或者APPLET服务器之外的WEB站点才用做数字签名的。
调试欢乐多
1、用rmi
2、在服务端建立个socket服务,applet通过socket读取服务器数据也许古老点,可以参考
URLConnection con = url.openConnection();
con.setUseCaches(false);
InputStream in = con.getInputStream();
ObjectInputStream objStream;
objStream = new ObjectInputStream(in);
tmpList = (java.util.List) objStream.readObject();
in.close();
objStream.close();servlet端将你需要传递对象写如输出流
out = response.getOutputStream();
objStream = new ObjectOutputStream(out);objStream.writeObject(...);这时直接运行servlet可以看到一堆乱码,applet读过来就ok了
上的附件啊?
我等去书店查查,好象有人说用url代替“ InputStream input = new FileInputStream("c:\\myJSP\\shu.txt"); “
就行,我试试,servlet我不太懂。要有不懂的我在问。
谢谢各位,行的话给分
//InputStream input = new FileInputStream("c:\\myJSP\\shu.txt");
InputStreamReader reader = new InputStreamReader ( url.openStream( ));
//InputStreamReader reader = new InputStreamReader ( input );
URL url2 = new URL(getCodeBase(),"time.txt");//代替下一句
//InputStream input2 = new FileInputStream("c:\\myJSP\\time.txt");
DataInputStream reader2 = new DataInputStream ( url2.openStream( ));//可以代替下一句?
//DataInputStream input3 =new DataInputStream(input2);
Time = reader2.readLine();
//time = input3.readLine();
在本地运行时通过,压缩成jar文件,然后嵌在html中,
可是在客户端,仍然无法访问,只显示读文件之前的测试点。
怎么回事????????????
//我的代码
import java.io.*;
import java.util.StringTokenizer;
import java.lang.Double;
import java.lang.Integer;
import java.awt.*;
import java.applet.*;
import java.awt.event.*;
import java.net.*;
public class Huatu extends Applet implements MouseMotionListener
{
String msg="";
double mouseX=0,mouseY=0;
Image picture;
public void init()
{
picture=getImage(getCodeBase(),"image.gif");
addMouseMotionListener(this);
this.resize(561,410);
}
public void paint(Graphics g)
{
g.drawImage(picture,0,0,this);
g.fillOval(100,100,5,5);
g.drawString(msg+mouseX+","+mouseY,32,405);
try
{
String delim1 = ",";
String shu,time;
double t,j;
URL url = new URL(getCodeBase(),"shu.txt");//代替下一句
//InputStream input = new FileInputStream("c:\\myJSP\\shu.txt");
InputStreamReader reader = new InputStreamReader ( url.openStream( ));
//InputStreamReader reader = new InputStreamReader ( input );
BufferedReader bufReader = new BufferedReader ( reader );
String name = bufReader.readLine();
StringTokenizer tokenizer;
tokenizer = new StringTokenizer(name, delim1);
URL url2 = new URL(getCodeBase(),"time.txt");//代替下一句
//InputStream input2 = new FileInputStream("c:\\myJSP\\time.txt");
DataInputStream reader2 = new DataInputStream ( url2.openStream( ));//可以代替下一句?
//DataInputStream input3 =new DataInputStream(input2);
Time = reader2.readLine();
//time = input3.readLine();
t=Double.valueOf(time).doublevalue();
for (int i=0;tokenizer.hasMoreTokens();i++)
{
j=(i+1)*(2000/t);//j=10/j=20.....
g.fillOval(200,200,5,5);
shu = tokenizer.nextToken(delim1);
double a,b,e;
int c,m;
a=Double.valueOf(shu).doublevalue();//包装器类Double.valueOf
g.drawString("The t is,"+t,200,200); //a是double出错
b=359-(a*359/1000);
//g.drawString("The data is,"+data,300,300);
c=(int)b;
e=j/4+36;
m=(int)e;
//g.drawString("The value c is,"+b,250,250);
//g.drawString("The value j is,"+e,250,250);
g.fillOval(m,c,3,3);
}
}
catch (IOException ioe)
{
System.out.println ("I/O error : " + ioe);
}
}
public void update(Graphics g)
{
paint(g);
}
public Huatu()
{
}
public void mouseDragged(MouseEvent me)
{
}
public void mouseMoved(MouseEvent me)
{
double aaa,bbb,ccc,ddd;
ccc=me.getX()-36;
mouseX=ccc*4.00;
aaa=-(me.getY()-359);
bbb=aaa/359;
mouseY=bbb*1030;
//mouseY=((-(me.getY()-439+18))/35)*100;
//aaa=(double)(-(me.getY()-400+18));//转化出错
//bbb=aaa/35;
//mouseY=bbb*100;//将me.getY()给int,再转化成double
msg="mouse at";
Graphics g=getGraphics();
repaint();
}
}
一个Huatu.class,一个Huatu.java,一个html:
html:<html>
<head>
<title>shiyan</title>
</head>
<body>
<applet
code="Huatu.class"
ARCHIVE ="monitor.jar"
width=561
height=410
ALIGN = middle>
</applet>
</body>
</html>
//InputStream input = new FileInputStream("c:\\myJSP\\shu.txt");
InputStreamReader reader = new InputStreamReader ( url.openStream( ));
这里的代码应该是正确的,这种表示方法要把TXT文件放在和HTML文件同一目录中。你应该先调试出问题在哪里,是文件没找到,还是读文件出错,还是读出来了文件解析出错。把这个URL打印出来看看正常不正常,再把第一次bufReader.readLine()的内容打印出来看看是读出来没有。
如果有异常,看看异常出在哪里,你不要老盯着后面的描了几个点,这样不知道去哪查问题啊
代码的改变: URL url,url2;
String urla = "http://25.137.183.42:8080/shu.txt";
String urlb = "http://25.137.183.42:8080/time.txt";
url = new URL(urla);
url2 = new URL(urlb);
InputStreamReader reader = new InputStreamReader ( url.openStream( ));
BufferedReader bufReader = new BufferedReader ( reader );
String name = bufReader.readLine();
StringTokenizer tokenizer;
tokenizer = new StringTokenizer(name, delim1);
DataInputStream reader2 = new DataInputStream ( url2.openStream( ));
time = reader2.readLine();
t=Double.valueOf(time).doubleValue();
结果本地开启服务器和异地均无法访问。
若是: String delim1 = ",";
String shu,time;
double t,j;
URL url = new URL(getCodeBase(),"shu.txt");//代替下一句
//InputStream input = new FileInputStream("c:\\myJSP\\shu.txt");
InputStreamReader reader = new InputStreamReader ( url.openStream( ));
//InputStreamReader reader = new InputStreamReader ( input );
BufferedReader bufReader = new BufferedReader ( reader );
String name = bufReader.readLine();
StringTokenizer tokenizer;
tokenizer = new StringTokenizer(name, delim1);
URL url2 = new URL(getCodeBase(),"time.txt");//代替下一句
//InputStream input2 = new FileInputStream("c:\\myJSP\\time.txt");
DataInputStream reader2 = new DataInputStream ( url2.openStream( ));//可以代替下一句?
//DataInputStream input3 =new DataInputStream(input2);
time = reader2.readLine();
//time = input3.readLine();
t=Double.valueOf(time).doubleValue();
结果本地开启服务器(不开)可显示和异地均无法正常显示。
我的jsp文件和两个txt放在“c:/myJSP/”中,在TOMCAT的SERVER.XML中:将其设为主目录
<Context path="/myJSP" docBase="c:\myJSP" debug="0"
reloadable="true" crossContext="true">
</Context>
原始代码:
//ckage huatu;
import java.io.*;
import java.util.StringTokenizer;
import java.lang.Double;
import java.lang.Integer;
import java.awt.*;
import java.applet.*;
import java.awt.event.*;
import java.net.*;
public class Huatu extends Applet implements MouseMotionListener
{
String msg="";
double mouseX=0,mouseY=0;
Image picture;
public void init()
{
picture=getImage(getCodeBase(),"image.gif");
addMouseMotionListener(this);
this.resize(561,410);
}
public void paint(Graphics g)
{
g.drawImage(picture,0,0,this);
g.fillOval(100,100,5,5);
g.drawString(msg+mouseX+","+mouseY,32,405);
try
{
String delim1 = ",";
String shu,time;
double t,j;
InputStream input = new FileInputStream("c:\\myJSP\\shu.txt");
InputStreamReader reader = new InputStreamReader ( input );
BufferedReader bufReader = new BufferedReader ( reader );
String name = bufReader.readLine();
StringTokenizer tokenizer;
tokenizer = new StringTokenizer(name, delim1);
InputStream input2 = new FileInputStream("c:\\myJSP\\time.txt");
DataInputStream input3 =new DataInputStream(input2);
time = input3.readLine();
t=Double.valueOf(time).doubleValue();
for (int i=0;tokenizer.hasMoreTokens();i++)
{
j=(i+1)*(2000/t);//j=10/j=20.....
g.fillOval(200,200,5,5);
shu = tokenizer.nextToken(delim1);
double a,b,e;
int c,m;
a=Double.valueOf(shu).doubleValue();//包装器类Double.valueOf
g.drawString("The t is,"+t,200,200); //a是double出错
b=359-(a*359/1000);
//g.drawString("The data is,"+data,300,300);
c=(int)b;
e=j/4+36;
m=(int)e;
//g.drawString("The value c is,"+b,250,250);
//g.drawString("The value j is,"+e,250,250);
g.fillOval(m,c,3,3);
}
}
catch (IOException ioe)
{
System.out.println ("I/O error : " + ioe);
}
}
public void update(Graphics g)
{
paint(g);
}
public Huatu()
{
}
public void mouseDragged(MouseEvent me)
{
}
public void mouseMoved(MouseEvent me)
{
double aaa,bbb,ccc,ddd;
ccc=me.getX()-36;
mouseX=ccc*4.00;
aaa=-(me.getY()-359);
bbb=aaa/359;
mouseY=bbb*1030;
//mouseY=((-(me.getY()-439+18))/35)*100;
//aaa=(double)(-(me.getY()-400+18));//转化出错
//bbb=aaa/35;
//mouseY=bbb*100;//将me.getY()给int,再转化成double
msg="mouse at";
Graphics g=getGraphics();
repaint();
}
}
好,我试试,
昨天我把url改成“String urla = "http://25.137.183.42:8080/shu.txt"; “
的形式,连本地也不行了
url还是以这种方式构造的好,直接用IP的可能会造成安全限制(不过我也没试过,但没必要那样弄)。你现在是首先要试出来读文件正常不正常,不正常你要看报什么异常才行,这样才能查出问题在哪里。把异常在这里贴出来,把那个构造完的url打印出来,首先检查那个URL你构造的对不对,检查的方式就是:在IE里直接输入那个URL,看看是不是能找到那个TXT文件,看看正确与否。然后再看输入流构造的正确不正确,打印出流读到的东西。不正常有异常就贴出异常
以前是数字签名的问题,做了反而不好。
还有点小问题,再向大家请教。
谢谢