2013-03-11 2 views
1

Я хочу отправить некоторые данные из моего апплета на определенный сервлет, который должен подключаться к базе данных MySQL и хранить переданные данные. В Applet стороны я использовал этот метод для передачи данных из апплета сервлета:Мой апплет не может подключиться к сервлету и передавать данные

public void sendData() { 
     try { 
      URL postURL = new URL("http://localhost:8080/MyApplet/mydb"); 
      HttpURLConnection conn = (HttpURLConnection) postURL.openConnection(); 
      conn.setRequestMethod("POST"); 
      conn.setDoOutput(true); 
      conn.connect(); 

      String param1 = "data1"; 
      String param2 = "data2"; 
      String param3 = "data3"; 

      PrintWriter out = new PrintWriter(conn.getOutputStream()); 
      out.write("param1=" + URLEncoder.encode(param1, "UTF-8") 
        + "&param2=" + URLEncoder.encode(param2, "UTF-8") 
        + "&param3=" + URLEncoder.encode(param3, "UTF-8")); 
      out.flush(); 


     } catch (Exception e) { 
      System.err.println(e.getMessage()); 
      JOptionPane.showMessageDialog(GameApplet.this, e.getMessage(), "Exception", JOptionPane.ERROR_MESSAGE); 
     } 
    } 

Какого MyApplet/MYDB путь моего Selrvet. и в Servlet стороны я написал этот код:

protected void processRequest(HttpServletRequest request, HttpServletResponse response) 
      throws ServletException, IOException { 
     response.setContentType("text/html;charset=UTF-8"); 

     String parameter1 = request.getParameter("param1"); 
     String parameter2 = request.getParameter("param2"); 
     String parameter3 = request.getParameter("param3"); 

     connectToDB(); 
     insert(parameter1, parameter2, parameter3); 
//  insert("X", "Y", "Z"); 
     closeDB(); 
} 

которые processRequest() звонков с doGet() и doPost(). Сервлет правильно работает, когда я вызываю его непосредственно из его http-ссылки и без проблем заполняю базу данных, но когда я вызываю ее из апплета, ничего не происходит и даже без каких-либо исключений! честно говоря, они не могут общаться друг с другом, и я действительно смущен.

+1

Попробуйте использовать 'URLConnection', как показано в примере [здесь] (http://docs.oracle.com/javase/tutorial/networking/urls/readingWriting.html) –

+0

Я пробовал это, но я не могу общаться с сервлет через апплет еще! Кажется, что что-то не так, когда сервлет хочет получить данные или когда Applet хочет отправить, потому что оба класса работают правильно, когда я тестирую их отдельно! : -? –

ответ

0

Я использовал этот код, чтобы отправить более одного параметра, наконец: (это только предложение, а может быть, есть еще лучшее решение, но он работал для меня)

Applet сторона:

URL helloServletURL = new URL(getCodeBase().toString() + "mydb"); 
    URLConnection urlConnection = helloServletURL.openConnection(); 
    urlConnection.setDoInput(true); 
    urlConnection.setDoOutput(true); 
    urlConnection.setUseCaches(false); 

    String param1 = "data1"; 
    String param2 = "data1"; 
    String param3 = "data1"; 

    ObjectOutputStream objOut = new ObjectOutputStream(urlConnection.getOutputStream()); 
    objOut.writeUTF(param1 + "%" + param2 + "%" + param3); 

    objOut.flush(); 

Servlet сторона:

ObjectInputStream dataInput = new ObjectInputStream(request.getInputStream()); 
    String param = dataInput.readUTF(); 

    dataInput.close(); 

    String[] values = param.split("%"); 
Смежные вопросы