servlet 怎么从applet获得数据 。求救我想将一些applet处理的数据在一个servlet中获得,怎么做啊?哪位好心人知道,帮帮我啊

解决方案 »

  1.   

    把Applet处理的结果通过Javascript设定到页面上的Hidden字段里头,然后Servlet中取得这些Hidden的值即可。原因是Applet和Javascript是客户端执行的,Servlet是服务器端执行的。譬如,Applet中如下:
    ----------------Applet----------------
    public void setResult(){String params[] = new String{};
    netscape.javascript.JSObject.getWindow( this ).call( "foo" , params ) ;
    }----------------JSP------------------
    <Script language="javascript">
    function foo(val){
    document.myForm.txtName.value=val;
    }
    </script><INPUT TYPE="HIDDEN" name="txtName" value="">----------------------------SERVLET---------------
    doPost(xx){
    request.getParameter("textName");
    ..
    }
      

  2.   

    用URL编码的方法也可以传(eg. xx.do?a=sd&b=bs),只是需要在doget()里面取
      

  3.   

    applet可以和浏览器中的javascript脚本交互。
    applet处理后的数据交给外部的脚本来处理好了。比如交给form,然后通知浏览者提交。数据少的话可以用get方式,不需要浏览者分心。applet自己开启网络连接也是可以的啊,不过麻烦了点,同时注意安全原则,不要违规就可以。
      

  4.   

    把Applet处理的结果通过Javascript设定到页面上的Hidden字段里头,然后Servlet中取得这些Hidden的值即可。这种方法可以理解这个“用URL编码的方法也可以传(eg. xx.do?a=sd&b=bs),只是需要在doget()里面取”就不太明白了
      

  5.   

    我的代码是这样的:
    /**
     *applet source
     *
     */  import java.net.*;
    import java.io.*;
    import java.awt.*;
    import java.awt.event.*;
    import java.applet.*;public class TestApplet extends Applet {Button send = new Button();
    Button receive = new Button();
    TextArea textarea = new TextArea();
    BorderLayout borderLayout1 = new BorderLayout();public void init() {
    send.setLabel("send");
    send.addActionListener(new Send_Listener());
    receive.setLabel("receive");
    receive.addActionListener(new Receive_Listener());
    this.setLayout(borderLayout1);
    this.add(send, BorderLayout.NORTH);
    this.add(textarea, BorderLayout.CENTER);
    this.add(receive, BorderLayout.SOUTH);
    }void sendObject(){
    try{
    URL url = new URL(getCodeBase(), "/servlets/testservlet");
    URLConnection servletConnection = url.openConnection();
    servletConnection.setDoInput(true);
    servletConnection.setDoOutput(true);
    servletConnection.setUseCaches (false);
    servletConnection.setDefaultUseCaches (false);
    servletConnection.setRequestProperty ("Content-Type", "application/octet-stream");
    ObjectOutputStream outputToServlet = new ObjectOutputStream(servletConnection.getOutputStream());
    outputToServlet.writeObject("some string here");
    outputToServlet.flush();
    outputToServlet.close();
    textarea.append("aplet has send the object to the servlet\n");
    }catch(Exception e){
    textarea.append("EXCEPTION THROWN IN THE APPLET IN SENDOBJECT\n");
    }
    }
    }
      /**
       *
       *servlet source
       */
    import javax.servlet.*;
    import javax.servlet.http.*;
    import java.io.*;public class TestServlet extends HttpServlet {
       public void doPost(HttpServletRequest request, HttpServletResponse response)
          throws ServletException, IOException {
            try {
             ObjectInputStream inputFromApplet = new                                         ObjectInputStream(request.getInputStream());
           String aString = (String) inputFromApplet.readObject();
           request.getSession().setAttribute("ID", aString);
           inputFromApplet.close();
           Syste.out.println("object received from applet:"+aString+"\n");
         }
        catch(Exception e)
       {
         System.out.println("EXCEPTION IN DOPOST\n");
       }
       }
       }servlet也在tomcat的web下配置了,服务器也启动了,并且调用applet的 sendObject()方法也没有什么异常,tomcat的控制台也没什么异常。好像就没任何反应,似乎没调用那servlet 的doPost()方法。为什么会这样啊?
      

  6.   

    应为我要将一个对象发送给servlet,所以必须这样才行啊。
      

  7.   

    既然是传送对象,简单的方法应该是用对象输出流和对象输入流。
    applet发出网络连接,连接到servlet,然后用ObjectOutputStream oos = new ObjectOutputStream(outputStream);
    输出对象;servlet 在输入流的基础上构造对象输入流,然后得到对象。
    //
    如果你要传送的对象支持序列化成文本,那么不妨先序列化成字符串,然后通过传统方法提交这个字符串,而在servlet中收到这个字符串后再生成这个对象的副本。