Файл: Особенности алгоритмизации при разработке WEB-приложений (Подходы к построению Web-приложений).pdf

ВУЗ: Не указан

Категория: Курсовая работа

Дисциплина: Не указана

Добавлен: 31.03.2023

Просмотров: 204

Скачиваний: 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С" придерживались более консервативной стратегии (как наиболее соответствующей потребностям российского рынка) с ориентацией на "толстого" клиента и эволюционное смещение от файл-серверной архитектуры к клиент-серверной.