Файл: Особенности алгоритмизации при разработке WEB-приложений (Подходы к построению Web-приложений).pdf
Добавлен: 31.03.2023
Просмотров: 236
Скачиваний: 1
лиотеки классов и будет продемонстрирован пример веб-приложения.
5. Пример построения Web-приложения: Интернет-магазин
Программа представляет собой уже ставший классическим пример —
интернет-магазин. Данный пример упрощен — в нем отсутствуют неко-
торые возможности, необходимые для настоящего интернет-магазина,
Рис.1. MVC Model (Page Centric)
MVC DesignPattern
Рис.2. MVC Model 2(Servlet Centric)
Рис. 3. Список товаров
но зато он иллюстрирует основные возможности сервлетов, библиоте-
ки стандартных тегов, библиотеки Struts и пр.:
• Использование тэгов JSTL для вывода одиночных данных и спис-
ков, передаваемых из сервлета в JSP-страницу.
• Разбиение кода на представления (JSP), обработчики запросов,
формы, модель.
• Выборка данных из БД с использованием JDBC.
• Хранение данных, связанных с пользовательской сессией.
• Работа с формами, в т.ч. проверка правильности заполнения.
5.1. Описание приложения
Магазин позволяет пользователю просмотреть список товаров (рис. 3) и
добавить определенное количество товара в свою корзину (рис. 4).
Рис. 4. Корзина
При вводе в форму неправильного значения (например пустого) пользователю выводится соответствующее сообщение об ошибке и предлагает исправить допущенную ошибку (рис. 5).
5.2. База данных
CREATE TABLE ‘items‘ (
‘id‘ int(11) NOT NULL default ’0’,
‘name‘ varchar(255) default NULL,
‘price‘ float default NULL,
‘quantity‘ int(11) default NULL,
PRIMARY KEY (‘id‘)
);
+----+-----------------------------+---------+----------+
| id | name | price | quantity |
+----+-----------------------------+---------+----------+
| 0 | Monitor Samsung 14’’ | 999.95 | 2 |
| 1 | Sound SB Audigy | 2450 | 5 |
| 2 | Processor Intel Pentium III | 1567.01 | 3 |
| 3 | CD-R TEAC | 3000 | 6 |
| 4 | HDD Seagate 80G | 2800 | 1 |
+----+-----------------------------+---------+----------+
5 rows in set (0.00 sec)
Рисунок 5.Ошибка заполнения формы
5.3. Структура
Уровень представления состоит из JSP-страниц list.jsp — список то-
варов, cart.jsp — содержимое корзины и класса OrderForm — форма
заказа товара.
Уровень логики состоит из классов ListItemsAction — считывает из
базы данных список товаров и передает его для отображения в list.jsp,
OrderItemAction — добавляет товар и количество в корзину, которая яв-
ляется списком видимым на уровне сессии, ShowCartAction — считывает товары и количество из корзины и передает для отображения в cart.jsp.
Уровень модели приложения состоит из класса Item, представляющего собой модель товара.
5.4. Конфигурация
Веб-приложения в Java конфигурируются через специальный дескрип-
тор веб-приложений web.xml. Для использования с библиотекой Struts
берется стандартный дескриптор, входящий в поставку Struts.
Конфигурация библиотеки Struts осуществляется через файл struts-
config.xml. В нем указываются: источники данных для выборки из базы
данных, классы форм и классы действий.
Листинг 1. struts-config.xml
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE struts-config PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 1.1//EN"
"http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd">
<struts-config>
<data-sources>
<data-source>
<set-property property="driverClass" value="com.mysql.jdbc.Driver"/>
<set-property property="url" value="jdbc:mysql://localhost/store"/>
<set-property property="user" value="root"/>
</data-source>
</data-sources>
<form-beans>
<form-bean
name="orderForm"
type="com.koliamorev.OrderForm"/>
</form-beans>
<action-mappings>
<action
path="/listItems"
type="com.koliamorev.ListItemsAction"
scope="session"
input="/list.jsp">
<forward name="success" path="/list.jsp"/>
</action>
<action
path="/orderItem"
type="com.koliamorev.OrderItemAction"
name="orderForm"
scope="session"
input="/list.jsp">
<forward name="success" path="/showCart.do"/>
</action>
<action
path="/showCart"
type="com.koliamorev.ShowCartAction"
input="/list.jsp">
<forward name="success" path="/cart.jsp"/>
</action>
</action-mappings>
<message-resources parameter="resources.application"/>
5.5. Текст серветов
Листинг 2. Item.java
package com.koliamorev;
public class Item {
int id;
String name;
float price;
int quantity;
public int getId() { return id; }
public void setId(int id) { this.id = id; }
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public float getPrice() { return price; }
public void setPrice(float price) { this.price = price; }
public int getQuantity() { return quantity; }
public void setQuantity(int quantity) { this.quantity = quantity; }
};
Листинг 3. ListItemsAction.java
package com.koliamorev;
import javax.servlet.http.*;
import org.apache.struts.action.*;
import java.util.List;
import java.util.ArrayList;
import java.sql.*;
import javax.sql.DataSource;
import com.koliamorev.Item;
public class ListItemsAction extends Action {
private List items;
private Connection connection;
public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
try {
DataSource dataSource = getDataSource(request);
connection = dataSource.getConnection();
populate();
} catch (Exception e) {
}
request.getSession().setAttribute("goods", items);
return mapping.findForward("success");
}
void populate() throws SQLException {
Statement s = connection.createStatement();
String sql = "SELECT id, name, price, quantity FROM items";
ResultSet rs = s.executeQuery(sql);
items = new ArrayList();
while (rs.next()) {
Item item = new Item();
item.setId(rs.getInt(1));
item.setName(rs.getString(2));
item.setPrice(rs.getFloat(3));
18item.setQuantity(rs.getInt(4));
items.add(item);
}
rs.close();
s.close();
}
}
Листинг 4. OrderForm.java
package com.koliamorev;
import org.apache.struts.action.*;
import javax.servlet.http.*;
public class OrderForm extends ActionForm {
private String id;
private String quantity;
public String getId() {
return id;
}
public void setId(String string) {
id = string;
}
public String getQuantity() {
return quantity;
}
public void setQuantity(String string) {
quantity = string;
}
public void reset(ActionMapping mapping, HttpServletRequest request) {
id = null;
quantity = null;
}
public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) {
ActionErrors errors = new ActionErrors();
if (quantity==null || quantity.trim().equals("")) {
errors.add("quantity",
new ActionError("orderItem.quantity.problem"));
}
return errors;
}
Листинг 5. OrderItemAction.java
package com.koliamorev;
import javax.servlet.http.*;
import org.apache.struts.action.*;
import java.util.List;
import java.util.ArrayList;
public class OrderItemAction extends Action {
public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
OrderForm orderForm = (OrderForm) form;
HttpSession session = request.getSession();
List cart = (List)session.getAttribute("cart");
if (cart == null) {
cart = new ArrayList();
}
Item item = new Item();
item.setId(Integer.decode(orderForm.getId()).intValue());
item.setQuantity(Integer.decode(orderForm.getQuantity()).intValue());
cart.add(item);
session.setAttribute("cart", cart);
return mapping.findForward("success");
}
}
Листинг 6. ShowCartAction.java
package com.koliamorev;
import javax.servlet.http.*;
import org.apache.struts.action.*;
import java.util.List;
import java.util.ArrayList;
public class ShowCartAction extends Action {
public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
HttpSession session = request.getSession();
List cart = (List)session.getAttribute("cart");
if (cart == null) {
cart = new ArrayList();
session.setAttribute("cart", cart);
}
request.setAttribute("cart", cart);
return mapping.findForward("success");
}
}
5.6. Текст JSP-страниц
Листинг 7. list.jsp
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
<%@ taglib prefix="html" uri="/tags/struts-html" %>
<%@ taglib prefix="bean" uri="/tags/struts-bean" %>
<html>
<head>
<title>Добро пожаловать в магазин.</title>
</head>
<body>
<h1>Список товаров</h1>
<html:errors />
<table>
<thead>
<tr><c:forEach var="column"
items="Наименование товара,Цена,В наличии на складе,Заказать">
<th><c:out value="${column}"/></th>
</c:forEach>
</tr>
</thead>
<tbody>
<c:forEach var="item" items="${goods}">
<tr><td><c:out value="${item.name}"/></td>
<td><c:out value="${item.price}"/></td>
<td><c:out value="${item.quantity}"/></td>
<td><html:form action="orderItem">
<input type="hidden" name="id" value="<c:out value=’${item.id}’/>"/>
<html:text property="quantity"/>
<html:submit />
</html:form></td>
</tr>
</c:forEach>
</tbody>
</table>
<p><html:link page="/showCart.do">Перейти к корзине</html:link>
</p>
</body>
</html>
Листинг 8. cart.jsp
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
<%@ taglib prefix="html" uri="/tags/struts-html" %>
<%@ taglib prefix="bean" uri="/tags/struts-bean" %>
<html>
<head>
<title>Корзина</title>
</head>
<body>
<h1>Корзина</h1>
<table>
<thead>
<tr><c:forEach var="column"
items="Номер,Заказано">
<th><c:out value="${column}"/></th>
</c:forEach>
</tr>
</thead>
<tbody>
<c:forEach var="item" items="${cart}">
<tr><td><c:out value="${item.id}"/></td>
<td><c:out value="${item.quantity}"/></td>
</tr>
</c:forEach>
</tbody>
</table>
<p><html:link page="/listItems.do">Перейти к списку товаров</html:link>
</p>
</body>
</html>
6. Заключение
В данной работе было проведено исследование средств разработки веб-
приложений и истории их развития, а также приведен пример веб-
приложения на Java, написанного с применением фреймворка Struts,
реализующего паттерн MVC. Хотя рассмотренное приложение не вы-
глядит полностью законченным, оно реализует все основные концепции,
которые могут применяться для создания подобных веб-приложений.
7.Библиография
Список литературы
[1] World Wide Web — Wikipedia, the free encyclopedia.
(http://en.wikipedia.org/wiki/Www, 31.10.2004)
[2] Web application — Wikipedia, the free encyclopedia.
(http://en.wikipedia.org/wiki/Web_application, 31.10.2004)
[3] Greg Murray, Mark Johnson. Designing Enterprise Applications
with the J2EE(TM) Platform, Second Edition. The Web Tier.
(http://java.sun.com/blueprints/guidelines/designing_enterprise_applications_2e/web-
tier/web-tier.html, 2.11.2004)
[4] Neal Ford. Art of Java Web Development: Struts, Tapestry, Commons,
Velocity, JUnit, Axis, Cocoon, InternetBeans, WebWork. Manning,
2004.
[5] Budi Kurniawan. Java for the Web with Servlets, JSP, and EJB: A
Developer’s Guide to J2EE Solutions. New Riders Publishing, 2002.
8.Приложение
Веб-приложения станут Android-подобными
Веб-приложения и JavaScript 2
Создание Web-приложений на платформе "1С:Предприятие 8.0"
ИНСТРУМЕНТАРИЙ
Платформа "1С: Предприятие 8.0" (1СП8) пополнилась еще одним важным технологическим компонентом: в феврале фирма "1С" объявила о выпуске продукта "1С: Предприятие 8.0. Web-расширение 1.0" (1СП8-Web), предназначенного для организации взаимодействия Интернет-пользователей с прикладными решениями на базе 1СП8.
Говоря об 1СП8-Web как о составной части технологической платформы, следует сразу сделать одно замечание. В несколько упрощенном виде платформа 1СП8 состоит из двух основных блоков: среды исполнения ("1С: Предприятие") и инструмента для разработки прикладных решений ("Конфигуратор"). Соответственно, все технологические и функциональные элементы 1СП8 (например, механизмы управления бизнес-процессами, обмена данными, формирования отчетов) реализованы в виде внутренних программных компонентов, входящих в состав первого или второго блока.
Более того, оба эти блока не являются самостоятельными продуктами - они распространяются только в составе тех или иных прикладных, т. е. предназначенных для конечных пользователей, решений. Отличительная же черта 1СП8-Web заключается как раз в том, что он представляет собой автономный продукт, ориентированный на разработчиков прикладных Интернет-решений (рис. 1)*1.
Рис. 1. Положение "1C:Web-расширения" в системе "1С: Предприятие 8.0"
*1 Правда, схема лицензирования продукта по-прежнему ориентирована на конечного пользователя: для эксплуатации Web-приложений, разработанных с помощью Web-расширения, требуется отдельная лицензия на 1СП8-Web.
Существует и еще один важный момент: выпуск 1СП8-Web, судя по всему, отражает начало этапа активного освоения Интернет-технологий пользователями программ "1С" делового назначения.
Здесь нужно отметить тот известный факт, что "1С" отличается весьма прагматичным подходом к использованию технологических новинок в своем ПО: определяющим моментом является реальная готовность заказчиков к их применению, а не соображения моды. В частности, в то время как конкурирующие ERP-решения (в первую очередь зарубежные) все активнее предлагали заказчикам сначала пользовательский Web-интерфейс, а потом и наборы Web-сервисов, разработчики из "1С" придерживались более консервативной стратегии (как наиболее соответствующей потребностям российского рынка) с ориентацией на "толстого" клиента и эволюционное смещение от файл-серверной архитектуры к клиент-серверной.