2015-12-10 5 views
0

Я сталкиваюсь с проблемой «java.net.UnknownServiceException: протокол не поддерживает выход» при отправке моего имени из апплета в сервлет. Я пробовал Sending object to Servlet throws an error I cant resolve, но это не решило мою проблему. Мой апплет код:Ошибка протокола при попытке передать апплет сервлету

import java.io.*; 

import javax.servlet.ServletException; 
import javax.servlet.http.*; 

public class AppletToServlet extends HttpServlet { 
// Getting a String object from the applet and send it back. 
    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
     try { 
      response.setContentType("application/x-java-serialized-object"); 
      InputStream inputStream = request.getInputStream(); 
      ObjectInputStream inputFromApplet = new ObjectInputStream(inputStream); 
      String string = (String) inputFromApplet.readObject(); 
// getting string value and passing to applet 
OutputStream outputStream = response.getOutputStream(); 
ObjectOutputStream objectOutputStream = new ObjectOutputStream(outputStream); 
objectOutputStream.writeObject(string); 
objectOutputStream.flush(); 
objectOutputStream.close(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 
} 

и код сервлет:

import java.applet.Applet; 
import java.awt.*; 
import java.awt.event.*; 
import java.io.*; 
import java.net.*; 

public class AppletToServletExample extends Applet { 
    private TextField inputField = new TextField(10); 
    private TextField resultField = new TextField(10); 

    public void init() { 
    // add input label, field and send button 
    add(new Label("Input Your Name", Label.RIGHT)); 
    add(inputField); 
    Button sendButton = new Button("Send"); 
    add(sendButton); 
    sendButton.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent e) { 
     SendData(); 
     } 
    }); 
    // add output label as a non editable field 
    add(new Label("Output:", Label.RIGHT)); 
    add(resultField); 
    resultField.setEditable(false); 
    } 

    // Get a connection to the servlet. 
    private URLConnection getServletConnection() throws MalformedURLException, 
     IOException { 
    URL urlServlet = new URL(getCodeBase(), "applettoservlet"); 
    URLConnection con = urlServlet.openConnection(); 
    con.setDoInput(true); 
    con.setDoOutput(true); 
    con.setUseCaches(false); 
    con.setRequestProperty("Content-Type", 
     "application/x-java-serialized-object"); 
    return con; 
    } 

    // Send the inputField data to the servlet and show the result in the 
    // outputField. 
    private void SendData() { 
    try { 
     String input = inputField.getText(); 
     // send data to the servlet 
     URLConnection con = getServletConnection(); 
     OutputStream outputStream = con.getOutputStream(); 
     ObjectOutputStream oos = new ObjectOutputStream(outputStream); 
     oos.writeObject(input); 
     oos.flush(); 
     oos.close(); 
     // receive result from servlet 
     InputStream inputStream = con.getInputStream(); 
     ObjectInputStream inputFromServlet = new ObjectInputStream(
      inputStream); 
     String result = (String) inputFromServlet.readObject(); 
     inputFromServlet.close(); 
     inputStream.close(); 
     // show result 
     resultField.setText(result); 
    } catch (Exception ex) { 
     ex.printStackTrace(); 
    } 
    } 
} 

Я искал практически везде, но не мог решить.

ответ

0

Где вы запускаете апплет? Вы фактически вставляли его на страницу и запрашивали ее через какой-либо веб-сервер?

Код

URL urlServlet = new URL(getCodeBase(), "applettoservlet"); 

будет работать только как ожидается, если вы запускаете апплет со страницы, обслуживаемой веб/приложения-сервера. Попробуйте добавить

System.out.println(urlServlet); 

, чтобы проверить, что URL является неоспоримым используется.

+0

нет Я пытаюсь запустить его на зрителе апплетов. нет в браузере. что делать тогда? – zohaibkhan

+0

это не помогло решить мою проблему. – zohaibkhan

+0

Я полагаю, что есть более элегантные способы сделать это, но я бы жестко запрограммировал URL-адрес сервера для тестирования. Заменить 'URL urlServlet = новый URL (getCodeBase(), "applettoservlet");' с 'URL urlServlet = новый URL ("HTTP: // myappserver/myServletPath/applettoserver");' – fiffy

Смежные вопросы