#java #jsp #applet
#java #веб-сервисы #апплет #клиент-сервер #rmi
Вопрос:
У меня есть апплет, и я должен отправить запрос в веб-приложение, чтобы получить данные с сервера, который находится в базе данных. Я работаю с объектами, и очень полезно, чтобы сервер отвечал мне объектами!!
Как апплет может взаимодействовать с сервером?
Я думаю, что метод веб-сервисов, RMI и … делают меня счастливым, но какой из них лучший и надежный?
Ответ №1:
Пока только ваш апплет взаимодействует с сервером, вы можете использовать сериализованный объект. Вам просто нужно поддерживать одну и ту же версию класса object как в jar апплета, так и на сервере. Это не самый открытый или расширяемый способ, но он быстр с точки зрения времени разработки и довольно надежен.
Вот пример.
Создайте экземпляр соединения с сервлетом
URL servletURL = new URL("<URL To your Servlet>");
URLConnection servletConnect = servletURL.openConnection();
servletConnect.setDoOutput(true); // to allow us to write to the URL
servletConnect.setUseCaches(false); // Write the message to the servlet and not from the browser's cache
servletConnect.setRequestProperty("Content-Type","application/x-java-serialized-object");
Получите выходной поток и напишите свой объект
MyCustomObject myObject = new MyCustomObject()
ObjectOutputStream outputToServlet;
outputToServlet = new ObjectOutputStream(servletConnection.getOutputStream());
outputToServlet.writeObject(myObject);
outputToServlet.flush(); //Cleanup
outputToServlet.close();
Теперь прочитайте в ответе
ObjectInputStream in = new ObjectInputStream(servletConnection.getInputStream());
MyRespObject myrespObj;
try
{
myrespObj= (MyRespObject) in.readObject();
} catch (ClassNotFoundException e1)
{
e1.printStackTrace();
}
in.close();
В вашем сервлете
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
MyRespObject myrespObj= processSomething(request);
response.reset();
response.setHeader("Content-Type", "application/x-java-serialized-object");
ObjectOutputStream outputToApplet;
outputToApplet = new ObjectOutputStream(response.getOutputStream());
outputToApplet.writeObject(myrespObj);
outputToApplet.flush();
outputToApplet.close();
}
private MyRespObject processSomething(HttpServletRequest request)
{
ObjectInputStream inputFromApplet = new ObjectInputStream(request.getInputStream());
MyCustomObject myObject = (MyCustomObject) inputFromApplet.readObject();
//Do Something with the object you just passed
MyRespObject myrespObj= new MyRespObject();
return myrespObj;
}
Просто помните, что оба объекта, которые вы передаете, должны реализовывать serializable
public Class MyCustomObject implements java.io.Serializable
{
Комментарии:
1. спасибо миллион, но могу я спросить, что лучше? веб-сервис для подключения к серверу или сериализованным объектам? я пытаюсь с помощью веб-службы, но у ws-клиента возникла проблема с подключением к серверу (веб-службе)!!!
2. В идеале я бы подумал, что вам нужен веб-сервис, чтобы любые приложения могли получить к нему доступ, не беспокоясь о сохранении текущей копии сериализованного объекта. Если он будет использоваться только вашей группой, я не понимаю, почему вы не могли просто использовать сериализованный объект. Сериализованный объект — проще реализовать, нет синтаксического анализа xml, нет хостинга веб-сервисов. Веб-сервис — более гибкий, возможно, больше времени на разработку. Это действительно вопрос о том, что вам нужно, простой или гибкий.
3. привет, действительно спасибо …, я исправляю проблему подключения к веб-сервису, но у меня проблема, которая приводит меня в уныние, как я могу вернуть arraylist пользовательского объекта -vehicle — из метода веб-службы !!!?? я сделал это, но проблема в том, что на стороне клиента я получаю arraylist объекта!!! если вы знаете, как это решить, пожалуйста, помогите мне…
4. Я не совсем уверен, о чем вы спрашиваете, вы спрашиваете, как использовать arraylist в качестве объекта типа vehicle? На самом деле у вас есть 2 варианта, просто используя общее (транспортное средство) приведение или используя общие функциональные возможности. Чтобы использовать дженерики, вы можете ознакомиться с руководством 1.5 здесь. java.sun.com/j2se/1.5/pdf/generics-tutorial.pdf Если вы используете более старую версию JRE до 1.5, вы не сможете использовать дженерики и вам придется выполнять явные приведения. Если вы можете опубликовать какой-либо код, который поможет понять вашу проблему, пожалуйста, сделайте это.
5. привет, нет, проблема не в этом, проблема не в кастинге, у меня есть веб-сервис, который должен выполнить запрос к БД, чтобы получить информацию о местоположении транспортного средства и создать объект Vehicles и поместить их (объекты Vehicle) в ArrayList… @WebMethod public ArrayList<VehileReport> getVehicles(){ //образец VehileReport v = новый VehileReport(«123″,,»20 км»); ArrayList<VehileReport> список = новый… list.add(v); return list; } на стороне клиента я запускаю это…