Опубликован: 10.10.2010 | Доступ: свободный | Студентов: 3217 / 301 | Оценка: 4.14 / 3.32 | Длительность: 13:16:00
ISBN: 978-5-9963-0444-8
Специальности: Системный архитектор
Лекция 12:

Web-сервисы. Примеры

< Лекция 11 || Лекция 12: 1234 || Лекция 13 >

Второй пример

Одна из основных идей, лежащих в основе технологии Web -серви-сов, состоит в независимости разрабатываемых на ее основе приложений от используемой платформы. Поэтому, в качестве дополнения к предыдущему примеру, мы реализуем второго клиента для того же самого Web -сервиса, но на основе совершенно другой технологии. В качестве клиента мы будем использовать стандартное Web -приложение, состоящее из набора HTML -страниц с небольшими вкраплениями jsp -кода. Допустим, для автоматизируемой нами сети ресторанов нужно создать Web -сайт, на котором клиенты могли бы просмотреть текущий баланс своих карт, а сотрудники могли бы выполнить некоторые действия с системой - например, создать новую карту. Соответствующий код, реализующий такую функциональность, представлен ниже.

Поскольку мы не ставим своей целью рассмотреть в подробностях процесс Web -программирования, остановимся только на основных деталях. По сути, наше приложение состоит из нескольких jsp -страниц. Поскольку мы разделили страницы, содержащие операции запроса баланса и создания новой карты, их получилось четыре. Для того чтобы jsp -код смог работать с Web -сервисом, необходимо, как и в случае с предыдущим клиентом, сгенерировать вспомогательные классы с помощью утилиты wsimport и разместить их в соответствующей папке ( classes ) Web -приложения.

Итак, реализуем две jsp -страницы, которые содержат формы для ввода параметров: одна для метода просмотра баланса (вводится один параметр - номер просматриваемой карты), вторая для операции заведения новой карты (вводится два параметра - номер карты и персона). Еще две jsp -страницы загружаются первыми при нажатии соответствующих кнопок в форме и содержат код, вызывающий методы Web -сервиса.

Страница ShowBalance.jsp

Содержит форму параметров для вызова метода getCard Web -сервиса (пример 12.5). Вызывает showbalanceresponse.jsp.

<html>
<head><title>BillingService</title></head> 
<h2>Enter card number</h2> 
<form method="get">
<input type="text" name="cardnumber" size="25">
<p></p>
<input type="submit" value="Submit"> 
<input type="reset" value="Reset"> 
</form>
<%
  String cardnumber = request.getParameter("cardnumber"); 
  if ( cardnumber != null && cardnumber.length() > 0 ) {
%>

  <%@include file="showbalanceresponse.jsp" %>
<%
}
%>
</body> 
</html>
Листинг 12.5. Страница ShowBalance.jsp

Страница showbalanceresponse.jsp

Содержит код для обращения к Web -сервису (пример 12.5), для чего подключает классы com.asw.ws.ex1.endpoint.BillingService, com.asw.ws.ex1. endpoint.Billing, com.asw.ws.ex1.endpoint.Card,которые были автоматически сгенерированы утилитой wsimport на основании анализа WSDL файла Web -сервиса. Эти классы должны располагаться в папке classes Web -приложения. Вызывает метод Web -сервиса getCard, передавая ему в качестве аргумента значение, введенное в форме. Поля возвращенного объекта выводятся на странице.

<%@ page import="com.asw.ws.ex1.endpoint.BillingService, 
com.asw.ws.ex1.endpoint.Billing, com.asw.ws.ex1.endpoint.Card" %>
<%
Card resp = null;
try {
  Billing billing = new BillingService().getBillingPort(); 
  resp = billing.getCard(request.getParameter("cardnumber"));
  } catch (Exception ex) { resp = new Card();
  }
%>
<h2>
<font color="black">
<%=resp.getPerson()+"\t"+resp.getBalance()%> 
</font></h2>
Листинг 12.6. Страница showbalanceresponse.jsp

Страница AddCard.jsp

Содержит форму параметров для вызова метода addNewCard Web -сервиса (пример 12.7) (в данном случае страница предназначена для создания одной карты за один раз, в качестве параметров вводятся номер карты и персона). Вызывает addcardresponse.jsp.

<html>
<head><title>BillingService</title></head> 
<h2>Enter card number</h2> 
<form method="get">
<input type="text" name="cardnumber" 
  size="25"> 
<input type="text" name="person" 
  size="25">
<p></p>
<input type="submit" value="Submit"> 
<input type="reset" value="Reset"> 
</form>

<%
 String cardnumber = request.getParameter("cardnumber"); 
 String person = request.getParameter("person"); 
 if ( cardnumber != null && cardnumber.length() > 0 && 
 person != null && person.length() > 0) {
%>
<%@include file="addcardresponse.jsp" %>
<%
}
%>
</body> 
</html>
Листинг 12.7. Страница AddCard.jsp

Страница addcardresponse.jsp

Содержит код для обращения к Web -сервису (пример 12.8), для чего подключает классы com.asw.ws.ex1.endpoint.BillingService, com.asw.ws.ex1. endpoint.Billing, com.asw.ws.ex1.endpoint.Card,которые были автоматически сгенерированы утилитой wsimport на основании анализа WSDL файла Web -сервиса. Эти классы должны располагаться в папке classes Web -приложения. Вызывает метод Web -сервиса addNewCard,для чего создает объект класса Card и устанавливает его поля значениями, введенными в форме. Созданный объект добавляется в вектор, который передается в качестве аргумента методу addNewCard.

<%@ page import="com.asw.ws.ex1.endpoint.BillingService, 
com.asw.ws.ex1.endpoint.Billing, com.asw.ws.ex1.endpoint.Card" %>
<%
  Card card = new Card();
  try {
    Billing billing = new BillingService().getBillingPort(); 
    String _cardnumber = request.getParameter("cardnumber"); 
    String _person = request.getParameter("person");
    
    card.setPerson(_person);
    card.setCardNumber(_cardnumber);
    
   java.util.Vector<Card> v = new java.util.Vector<Card>();
   v.add(card);
   billing.addNewCard(v);

  } catch (Exception ex) {

}
%>
<h2> <font color="black">
<%=card.getPerson()+"\t"+card.getBalance()%>
</font>
</h2>
Листинг 12.8. Страница addcardresponse.jsp
< Лекция 11 || Лекция 12: 1234 || Лекция 13 >
Алмаз Мурзабеков
Алмаз Мурзабеков
Прохожу курс "Построение распределенных систем на Java" в третьей лекции где описывается TCPServer вылетает эта ошибка
"Connection cannot be resolved to a type"


Java version 1.7.0_05