Программирование апплета с сервлетом в Netbeans

Я создаю программу веб-приложения с использованием Netbeans 7.4, создавая файл jApplet, который взаимодействует с сервлетом с помощью объекта Serializable. Файл сервлета будет связываться с БД и отправлять результаты в апплет, а также апплет должен использовать объект Serializable для отправки и получения данных от сервлета. На самом деле я создал файлы сервлета и JApplet в каталоге исходной папки. Ошибка в том, что я не получаю никакой связи между JApplet и сервлетом и продолжает выдавать мне «протокол не поддерживает вывод». Вот мой код апплета, который подключается к сервлету:

    myObject = new ExpertDataObject();

    ((ExpertDataObject) myObject).setSession("EnterUser");

    ((ExpertDataObject) myObject).setUser(userText.getText());
    ((ExpertDataObject) myObject).setPassword(passText.getText());
    URL currentPage = getCodeBase();
    System.out.println(currentPage);

    String urlSuffix = "Server";
    URL urlServlet = new URL(getCodeBase(), "Server");
    System.out.println(urlServlet);

    URLConnection con = urlServlet.openConnection();

    con.setUseCaches(false);
    con.setDoOutput(true);
    con.setDoInput(true);
    con.setRequestProperty("Content-Type", "application/x-java-serialized-object");

    myOutputStream = new ObjectOutputStream(con.getOutputStream());

    myInputStream = new ObjectInputStream(con.getInputStream());

    myOutputStream.writeObject(myObject);

    myObject = (DataObject) myInputStream.readObject();
    if (myObject.getMessage().equals("success")) {
        dateFormat = new SimpleDateFormat("YYYY-MM-dd HH:mm:ss");

....

Может ли кто-нибудь помочь мне показать шаги создания jApplet, взаимодействующего с сервлетом + mySQL как веб-приложение в Netbeans.

заранее спасибо

Арва

Вот что я нашел в журнале сервера 12 февраля 2014 г., 11:53:23. org.apache.catalina.core.StandardWrapperValve вызывает СЕРЬЕЗНОЕ: Servlet.service() для сервлета [сервер] в контексте с путем [/ExpertToolAppletServlet2] выдал исключение java.io.EOFException в java.io.ObjectInputStream$PeekInputStream.readFully(ObjectInputStream.java:2325) в java.io.ObjectInputStream$BlockDataInputStream.readShort(ObjectInputStream.java:2794) в java.io.ObjectInputStream.readStreamHeader(ObjectInputStream. java:801) в java.io.ObjectInputStream.(ObjectInputStream.java:299) в Server.processRequest(Server.java:73) в Server.doGet(Server.java:177) в javax.servlet.http.HttpServlet.service (HttpServlet.java:621) в javax.servlet.http.HttpServlet.service(HttpServlet.java:728)

А вот мой код сервлета под processRequest

   String contentType = "application/x-java-serialized-object";
   response.setContentType(contentType);
   InputStream inputStream = request.getInputStream();
   ObjectInputStream in = new ObjectInputStream(inputStream);
   myObject = (DataObject) in.readObject();
   String process= ((ExpertDataObject) myObject).getSession();

person Arwa    schedule 12.02.2014    source источник
comment
Каков результат System.out.println(urlServlet); ?   -  person PeterMmm    schedule 12.02.2014
comment
Привет, peeskillet, спасибо за ответ, это файл:/Users/arwawali/Documents/NetBeansProjects/ExpertToolAppletServlet/build/web/WEB-INF/Server, Server — это имя моего класса сервлета, я посмотрел путь и не нашел класс, как мы можем получить путь к классу сервлета на сервере, кроме использования getCodeBase()?   -  person Arwa    schedule 12.02.2014
comment
Протокол file:/ не позволяет писать. Подробнее читайте здесь: stackoverflow.com/questions/4975743/   -  person PeterMmm    schedule 12.02.2014
comment
Спасибо PeterMmm за ответ, я изменил urlServlet на URL urlServlet = new URL(localhost:8080/ExpertToolAppletServlet2/Server); Теперь я получаю эту ошибку: Сервер вернул код ответа HTTP: 500 для URL-адреса: localhost:8080/ExpertToolAppletServlet2   -  person Arwa    schedule 12.02.2014
comment
500 - Internal Server Error поищите причину в журнале сервера.   -  person PeterMmm    schedule 12.02.2014
comment
Спасибо, PeterMmm, я отредактировал сообщение, потому что не мог добавить длинный ответ здесь, в комментарий.   -  person Arwa    schedule 12.02.2014


Ответы (1)


Относительно сообщения об ошибке сервера 500: как говорится в документах для EOFException: This exception is mainly used by data input streams to signal end of stream. вы можете попытаться поймать исключение:

   String contentType = "application/x-java-serialized-object";
   response.setContentType(contentType);
   InputStream inputStream = request.getInputStream();
   ObjectInputStream in = new ObjectInputStream(inputStream);

   myObject = null;
   try {
        myObject = (DataObject) in.readObject();
   } catch (EOFException ignore) {
   }

   if (myObject!=null) { 
      String process= ((ExpertDataObject) myObject).getSession();
   }
person PeterMmm    schedule 13.02.2014
comment
Я поймал исключение, но я действительно не знаю, есть ли другой способ прочитать объект из jApplet. Означает ли это, что мне нужно запускать код только из файла index.jsp, или я могу запустить его из самой исходной папки, зная, что и jApplet, и сервлет находятся в одной папке в проекте веб-приложения? Еще раз спасибо за помощь. - person Arwa; 13.02.2014
comment
Апплеты работают в браузере с подключаемым модулем Java на стороне клиента. - person PeterMmm; 13.02.2014
comment
Это правильный способ ссылаться на jApplet в исходной папке из index.jsp, ‹applet code=localhost:8080/ ExpertToolAppletServlet2/MainScreen width=700 height=500›‹/applet›, (MainScreen — это класс jApplet)? - person Arwa; 13.02.2014
comment
Нет, code — это полное доменное имя класса JApplet. Подробнее читайте здесь: docs.oracle.com/javase/tutorial/deployment/ апплет/html.html - person PeterMmm; 14.02.2014
comment
Большое спасибо PeterMmm. Я постараюсь поймать исключение - person Arwa; 22.02.2014