В этом руководстве рассматривается использование предоставляемых IDE NetBeans 6.0 или 6.1 механизмов веб-служб для анализа веб-службы проверки орфографии Spell Checker и последующее создание взаимодействующего с ним веб-клиента.
Ниже представлен внешний вид клиента со всеми данными, полученными от веб-службы:
В этом руководстве показано, что участие приложения сводится к предоставлению текста для проверки, вызову операции в веб-службе и выводу результата. Весь код, необходимый для взаимодействия с веб-службой и для передачи текста, создается средой IDE. Все остальное выполняется веб-службой проверки орфографии, с помощью которой определяются слова c орфографическими ошибками и предоставляется список возможных вариантов.
Примечание: Используемая в этом руководстве веб-служба проверки орфографии предоставляется CDYNE Corporation. CDYNE разрабатывает, представляет на рынке и поддерживает комплексный набор веб-служб расширения данных, качества данных и анализа данных, а также интеграцию решений по бизнес-информации и аналитике. Веб-служба проверки орфографии является одной из веб-служб, предоставляемых CDYNE. Следует отметить, что стабильность приложений на основе одной или более веб-служб зависит от их доступности и надежности. Однако CDYNE на своей странице FAQ подчеркивает, что эти службы являются "100% ориентированными на доступность", и в случае "стихийного бедствия, террористического акта или другой катастрофы трафик веб-службы переводится на резервный центр обработки данных компании". NetBeans благодарит CDYNE за возможность написания этого руководства и за помощь в его разработке.
Применение веб-службы проверки орфографии
Для использования веб-службы необходимо создать клиент веб-службы. Для создания клиентов веб-служб в среде IDE NetBeans 6.1 и 6.0 имеется средство создания клиента — мастер "Web Service Client", создающий код для поиска веб-службы. Также предоставляются средства для разработки создаваемого клиента веб-службы – рабочая область, состоящую из узлов в окне "Projects". Эти средства входят в стандартный вариант установки среды IDE NetBeans, доступны без какой-либо предварительной подготовки и не требуют установки подключаемых модулей.
Создание клиента
Этот раздел посвящен работе с мастером для создания исходных объектов Java из файла WSDL веб-службы.
Выберите "File > New Project" (Ctrl-Shift-N). В области "Categories" выберите "Web". В области "Projects" выберите "Web Application". Нажмите кнопку "Next". Назовите проект SpellCheckService и убедитесь, что в качестве целевого сервера указан соответствующий сервер. (Обратитесь к разделу "Введение" для получения подробной информации.) Нажмите кнопку "Finish".
В окне "Projects" щелкните правой кнопкой мыши узел проекта SpellCheckService и выберите "New > Other". В мастере создания файла выберите "Web Services > Web Service Client". В мастере "Web Service Client" укажите URL-адрес веб-службы:
Если компьютер защищен брандмауэром, то может потребоваться указать прокси-сервер, т.к. в противном случае файл WSDL не может быть загружен. Для этого выберите "Proxy Settings" в мастере создания клиента веб-службы и укажите адрес прокси-сервера и номер порта.
Название пакета указывать не следует – в среде IDE NetBeans 6.1 это не допустимо. По умолчанию имя пакета класса клиента берется из WSDL. В данном случае это com.cdyne.ws.
В среде 6.1 выберите версию JAX JAX-WS (некоторые более старые службы требуют наличия клиентов JAX-RPC). Нажмите кнопку "Finish".
В окне "Projects" в узле "Web Service References" должно быть представлено следующее:
В окне "Projects" показано, что посредством веб-службы "check" в приложении доступна операция "CheckTextBody". Операция "CheckTextBody" проверяет строку на предмет орфографических ошибок и возвращает данные для обработки клиентом. Эта операция используется в рамках настоящего руководства.
Окно "Files" с развернутым узлом build должно выглядеть следующим образом:
В окне "Files" показаны клиентские заглушки, созданные мастером создания клиента веб-службы JAX-WS.
Разработка клиента
Существует много способов реализации клиента веб-службы. Файл WSDL веб-службы ограничивает тип информации, которую можно передать веб-службе, и тип информации, которую можно ожидать в ответ. Однако файл WSDL не налагает ограничений на то, как передается необходимая информация, и на то, из чего состоит интерфейс пользователя. Формируемая ниже реализация клиента состоит из страницы JSP, позволяющей пользователю вводить текст для проверки, и сервлета, передающего текст в веб-службу и затем отображающего отчет с результатами.
Написание кода страницы JSP
Страница JSP будет состоять из текстовой области, где пользователь может ввести некоторый текст, и из кнопки для передачи текста веб-службе.
В окне "Projects" разверните узел "Web Pages" и дважды щелкните index.jsp для его открытия в редакторе исходного кода.
Скопируйте следующий код и вставьте его поверх тегов <body> в index.jsp:
<body>
<form name="Test" method="post" action="SpellCheckServlet">
<p>Enter the text you want to check:</p>
<p>
<p><textarea rows="7" name="TextArea1" cols="40" ID="Textarea1"></textarea></p>
<p>
<input type="submit" value="Spell Check" name="spellcheckbutton">
</form>
</body>
Этот код указывает, что при нажатии кнопки передачи запроса содержание textarea передается сервлету SpellCheckServlet.
Создание и написание кода сервлета
В этом разделе рассматривается создание сервлета, взаимодействующего с веб-службой. Однако выполняющий взаимодействие код предоставляется IDE. В результате необходимо иметь дело только с рабочей логикой, т.е. подготовкой передаваемого текста и обработкой результата.
Щелкните правой кнопкой мыши узел проекта в окне "Projects", выберите "New > Other", а затем "Web > Servlet". Нажмите кнопку "Next". Назовите сервлет SpellCheckServlet и введите clientservlet в раскрывающемся списке "Package". Нажмите кнопку "Next". Следует отметить, что отображением URL-адреса для этого сервлета является /SpellCheckServlet, что показано ниже:
Нажмите кнопку "Finish". Сервлет открывается в редакторе исходного кода.
Поместите курсор в метод processRequest в редакторе исходного кода, добавьте несколько новых строк прямо в верхней части метода.
Щелкните правой кнопкой мыши в области, созданной в предыдущем действии, и выберите "Web Service Client Resources > Call Web Service Operation". Щелкните операцию CheckTextBody в диалоговом окне "Select Operation to Invoke", как показано ниже:
Нажмите кнопку "OK".
Примечание: Вместо вызова приведенного выше диалогового окна узел операции можно просто перетащить в редактор из окна "Projects".
В верхней части метода processRequest находится фрагмент кода, вызывающий веб-службу:
try { // Call Web Service Operation com.cdyne.ws.CheckSoap port = service.getCheckSoap(); // TODO initialize WS operation arguments here java.lang.String bodyText = ""; java.lang.String licenseKey = ""; // TODO process result here com.cdyne.ws.DocumentSummary result = port.checkTextBody(bodyText, licenseKey); System.out.println("Result = " + result); } catch (Exception ex) { // TODO handle custom exceptions here }
Этого метода вполне достаточно для работы с вызовом операций веб-службы. Кроме того, в верхней части класса объявлены следующие строки кода:
Замените весь метод processRequest на следующий код. Встроенные комментарии в коде объясняют назначение каждой строки. Исправьте операторы импорта после вставки кода (щелкните правой кнопкой мыши в любом месте для открытия контекстного меню и выберите "Fix Imports").
protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
try {
// Call Web Service Operation
String TextArea1 = request.getParameter("TextArea1");
com.cdyne.ws.CheckSoap port = service.getCheckSoap();
// TODO initialize WS operation arguments here
java.lang.String bodyText = TextArea1;
java.lang.String licenseKey = "0";
// TODO process result here
com.cdyne.ws.DocumentSummary doc = port.checkTextBody(bodyText, licenseKey);
String allcontent = doc.getBody();
//Из полученной сводки документа следует определить количество слов с ошибками:
int no_of_mistakes = doc.getMisspelledWordCount();
//Из полученной сводки документа следует определить массив слов с ошибками:
List allwrongwords = doc.getMisspelledWord();
out.println("<html>");
out.println("<head>");
//Вывод названия отчета в строке заголовка обозревателя:
out.println("<title>Spell Checker Report</title>");
out.println("</head>");
out.println("<body>");
//Вывод названия отчета в качестве заголовка в теле отчета:
out.println("<h2><font color='red'>Spell Checker Report</font></h2>");
//Вывод всего содержимого (с ошибками и без ошибок) между кавычками:
out.println("<hr>Your text:</b> \"" + allcontent + "\"" + "<p>");
<b>//Для каждого массива слов с ошибками (один массив на одно слово) следует определить слово с ошибкой, число предлагаемых вариантов исправления и массив таких вариантов. Необходимо вывести на экран слово с ошибкой и количество предлагаемых вариантов исправления, а затем вывести каждый вариант из массива вариантов к текущему слову:
for (int i = 0; i < allwrongwords.size(); i++) {
String onewrongword = ((Words) allwrongwords.get(i)).getWord();
int onewordsuggestioncount = ((Words) allwrongwords.get(i)).getSuggestionCount();
List allsuggestions = ((Words) allwrongwords.get(i)).getSuggestions();
out.println("<hr><p>Wrong word:<font color='red'> " + onewrongword + "</font>");
out.println("<p>" + onewordsuggestioncount + " suggestions:<br>");
for (int k = 0; k < allsuggestions.size(); k++) {
String onesuggestion = (String) allsuggestions.get(k);
out.println(onesuggestion);
}
}
<b>//Вывод линии после каждого массива слов с ошибками: </b>
out.println("<hr>");
<b>//Подведение итога путем указания числа ошибок и вывода ошибок: </b>
out.println("<font color='red'><b>Summary:</b> " + no_of_mistakes + " mistakes (");
for (int i = 0; i < allwrongwords.size(); i++) {
String onewrongword = ((Words) allwrongwords.get(i)).getWord();
out.println(onewrongword);
}
out.println(").");
out.println("</font>");
out.println("</body>");
out.println("</html>");
out.close();
} catch (Exception ex) {
System.out.println("exception" + ex);
out.println("exception" + ex);
}
out.println("</body>");
out.println("</html>");
out.close();
}
Следует отметить, что в приведенный выше код не входит обработка ошибок. Для получения более подробной информации см. Закрепление знаний на практике.
Развертывание клиента
Для сборки и выполнения веб-приложений в среде IDE используется сценарий сборки Ant. Этот сценарий сборки создается средой на основе параметров, указанных при создании проекта. Точную настройку этих параметров можно выполнить в диалоговом окне "Project Properties" (щелкните правой кнопкой мыши узел проекта в окне "Projects" и выберите "Properties").
Щелкните правой кнопкой мыши узел проекта и выберите "Run". Через некоторое время приложение должно развернуть и отобразить страницу JSP, код которой был написан в предыдущем разделе.
Введите произвольный текст, убедившись, что часть текста написана с ошибками:
Нажмите кнопку "Spell Check" и ознакомьтесь с результатом:
Закрепление материала на практике
Теперь, после завершения создания клиента веб-службы в среде IDE, пришло время приобрести дополнительные навыки и сделать из приложения то, ради чего оно задумывалось. Ниже приведены две подходящие для начала задачи.
Добавление в сервлет кода обработки ошибок.
Переработка клиента таким образом, чтобы пользователь мог взаимодействовать с возвращенными из веб-службы данными. В качестве примера см. реализацию клиента на сайте CDYNE. Выглядит это следующим образом:
Оставить комментарии и предложения, обратиться за поддержкой и получить информацию о последних достижениях в области функциональных возможностей разработки для Java EE с помощью среды IDE NetBeans можно в списке рассылки .