Servlet如何向客户端传递对象时出错,那位高手帮忙解决???
服务器向客户端传递对象时抛出异常:java.lang.ClassNotFoundException: TestSession.Person
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClassInternal(Unknown Source)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Unknown Source)
at java.io.ObjectInputStream.resolveClass(Unknown Source)
at java.io.ObjectInputStream.readNonProxyDesc(Unknown Source)
at java.io.ObjectInputStream.readClassDesc(Unknown Source)
at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
at java.io.ObjectInputStream.readObject0(Unknown Source)
at java.io.ObjectInputStream.readObject(Unknown Source)
at Acount.Test.<init>(Test.java:21)
at Acount.Test.main(Test.java:42)
服务器MyServlet为:
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class MyServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
resp.setContentType("application/octet-stream");
ServletOutputStream out = resp.getOutputStream();
ObjectOutputStream outObj = new ObjectOutputStream(out);
Person person = new Person("ligo",23);
outObj.writeObject(person);
out.close();
outObj.close();
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
doGet(req, resp);
}
}
客户端为:Test.java
import java.io.IOException;
import java.io.ObjectInputStream;
import java.net.*;
public class Test {
private URL url = null ;
private URLConnection con = null;
Test(){
try {
url = new URL("http://localhost:8080/TestSession/MyServlet");
con = url.openConnection();
//con.setRequestProperty("Content-Type","application/octet-stream");
ObjectInputStream in = new ObjectInputStream(con.getInputStream());
Person person = null;
person = (Person)in.readObject();
in.close();
System.out.println(person.getName()+" "+person.getAge());
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] str){
new Test();
}
}
当然在客户端与服务器端都存在类Person,并继承Serilizable
import java.io.Serializable;
public class Person implements Serializable{
private String name;
private int age;
Person(){}
Person(String name,int age){
this.name = name;
this.age = age;
}
public void setName(String name){
this.name = name;
}
public String getName(){
return name;
}
public void setAge(int age){
this.age = age;
}
public int getAge(){
return age;
}
}
请高手帮忙了。。。 --------------------编程问答-------------------- 找不到类异常…… --------------------编程问答-------------------- TestSession.Person
这个类找不到,还有包名你用要用小写。 --------------------编程问答-------------------- 看看类名称是否写错了,还是导项目中丢了包 --------------------编程问答-------------------- 我已经解决了,就是那个Persion 类,在服务器端与客户端包路径要一致,哈哈。。。没注意这个问题,谢谢大家了!
补充:Java , Web 开发