Applet和Servelet通信的问题!!!!!!!Applet给Servelet发送信息(一个字符),Servelet接受到后再给发送回Applet.现在报错如下:java.net.UnknownServiceException: protocol doesn't support output at java.net.URLConnection.getOutputStream(URLConnection.java:679) at applet2.Applet1.jButton1_actionPerformed(Applet1.java:96) at applet2.Applet1_jButton1_actionAdapter.actionPerformed(Applet1.java:117) at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1764) at javax.swing.AbstractButton$ForwardActionEvents.actionPerformed
(AbstractButton.java:1817) at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:419) at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:257)
......................我的Applet程序如下:
 URL servletURL;
                            try {
                                    servletURL = new URL(this.getDocumentBase(),"queryServlet");
                                    URLConnection connection;
                                         connection = servletURL.openConnection();
                                            connection.setUseCaches(false);
                                            connection.setDoOutput(true);
                                            ByteArrayOutputStream byteStream=new ByteArrayOutputStream(1024);
                                            PrintWriter outf=new PrintWriter(byteStream,true);
                                            String postData="NUM"+URLEncoder.encode(jTextField2.getText());
                                            outf.print(postData);
                                            outf.flush();
                                            String lengthString=String.valueOf(byteStream.size());
                                            connection.setRequestProperty("Content-length",lengthString);
                                            connection.setRequestProperty("Content-Type","application/x-www-form-rulencoded");
                                            byteStream.writeTo(connection.getOutputStream());
                                            BufferedReader br=new BufferedReader(new InputStreamReader(connection.getInputStream()));
                                            String resultStr=br.readLine();
                                    } catch (IOException q) {
                                            // TODO Auto-generated catch block
                                        q.printStackTrace();
                                    }
Servelet程序如下:
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    response.setContentType(CONTENT_TYPE);
    PrintWriter out = response.getWriter();
   request.setCharacterEncoding("GBK");   String num= request.getParameter("NUM");
   out.println(num);Web.xml如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
  <servlet>
    <servlet-name>servlet1</servlet-name>
    <servlet-class>applet2.Servlet1</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>servlet1</servlet-name>
    <url-pattern>/servlet1</url-pattern>
  </servlet-mapping>
</web-app>

解决方案 »

  1.   

    servletURL = new URL(this.getDocumentBase(),"queryServlet");我只想知道servletURL 打印出来是什么好像不是Http噢
      

  2.   

    servletURL = new URL("http://127.0.0.1:8080/context/quesrServlet"); 换成实际的servlet url试试
      

  3.   

    http://127.0.0.1:8080/context/servlet1
      

  4.   

    在 connection.setDoOutput(true);  之后加上:
    connection.setDoInput(true);
      

  5.   

    wuyg(平平)的方法我试过了,还是报这个错
      

  6.   

    interpb(曾曾胡)的方法报错如下:
    java.net.SocketException: Socket is not connected: connect
    at java.net.PlainSocketImpl.socketConnect(Native Method)
    at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:305)
    at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:171)我程序里servletURL = new URL(this.getDocumentBase(),"queryServlet");里的queryServlet应该是servlet1是我没改回来,但问题不在这里。
      

  7.   

    protocol doesn't support output
     
    很想知道 servletURL.toString()打印出来结果
      

  8.   

    http://www.blogjava.net/jfy3d/archive/2005/05/11/4173.html
      

  9.   

    interpb(曾曾胡)
    打印结果如下:servletURL = new URL(this.getDocumentBase(),"Servlet1");
    System.out.println("url:" + servletURL.toString());
    打印结果:
    url:file:/C:/Documents and Settings/G/jbproject/Applet3/classes/Servlet1
    connection = servletURL.openConnection();
    System.out.println(connection.toString());
    打印结果:
    sun.net.www.protocol.file.FileURLConnection:file:/C:/Documents and Settings/G/jbproject/Applet3/classes/Servlet1报错:
    java.net.UnknownServiceException: protocol doesn't support output
      

  10.   

    当然不行了,http不直接支持output吧。
      

  11.   

    我晕昨天晚上我就建议你servletURL = new URL("http://ip:port/context/servlet");你那样怎么能访问Servlet呢
    换成实际的servlet1所相应请求的url
      

  12.   

    interpb(曾曾胡)昨天晚上我是按照你说的改写成了servletURL = new URL("http://127.0.0.1:8080/Webmodule1/servlet");这里的 context是不是应该用Webmodule1换写?我的工程里面建的Webmodule就叫Webmodule1.里面是Web-Inf文件夹,再往里是web.xml和classes文件.这个程序要测试的话是不是必须发布到Tomcat下?在JBuilder下是不是可以测试?在JBuilder下测试地址是不是写127.0.0.1:8080?
      

  13.   

    URLConnection 对象经历两个阶段:首先它们被生成,然后被连接。 在生成后和连接这段时间里,可以指定不同的选项 (比如:doInput 和 UseCaches)。如果连接后再试图设置它们就会出错。
      

  14.   

    http://127.0.0.1:8080/Webmodule1/servlet启动Tomcat ,在浏览器地址栏输入http://127.0.0.1:8080/Webmodule1/servlet能访问吗
    首先确保 这个servlet能正常运行还有你是这样得到Applet传过去的String num= request.getParameter("NUM");所以还要这样 : http://127.0.0.1:8080/Webmodule1/servlet?NUM=xxxxx 
      

  15.   

    你把Applet 和Servlet 一起发给我 我帮你试试!
      

  16.   

    我将url改成了
    servletURL = new URL("http://127.0.0.1:8080/WebModule1/WEB-INF/classes/Servlet1");
                                     
    报错如下:java.lang.IllegalStateException: Already connected