Наши телефоны:

+7 (727) 317-16-98 +7 (705) 450-39-16

Что говорят клиенты A-Lux

Мы создаем мощные инструменты ,которые помогают
вашему бизнесу занять лидирующие позиции

Создаём веб-приложение с Java Servlets

Самое большое отличие в Java- это многогранность. Разработка десктопных и мобильных приложений возможно и хорошо, но если вам хочется чего-нибудь более экзотического как например разработка web приложений на Java? Вы будете рады узнать, что в комплекте с языком идёт полноценнный Servlet API с помощью которого Вы без особых усилий сможете разработать надёжное веб-приложение (статья предназначена уже для более продвинутых).

 

СОЗДАНИЕ ПРИЛОЖЕНИЙ НА JAVA С ПОМОЩЬЮ SERVLETS.

Сервлеты- это особенный тип Java-программ, реализованный в области веб-контейнера (второе название «контейнер сервлетов» такие как Tomcat, Java). С их помощью вы можете очень просто и оперативно обрабатывать запросы клиентов и ответы сервера. О сервлете достаточно знать, что они разрабатываются и исчезают их контейнерами, а не программистом. Сервлеты работают как промежуточный уровень между клиентами (веб-браузерами) и другими приложениями, запускаемые на сервере (в частности базами данных).

Помимо всего остального, сервлет может брать данные от клиента, как известно через GET и POST- запросы, взаимодействовать с cookie и настройками сеанса. Также позволяет обрабатывать данные со вспомогательных уровней приложений и передаёт выходящие данные клиенту и в бионарном и в текстовом форматах (HTML? XML? PDF? JPG? GIF и.т.д.) в основном используя Java Server Pages (JSP) файлы. 

Советуем приступать к работе с сервлетами выбирая конкретный пример. Мы будем разрабатывать обычное веб-приложение, которое обеспечит регистрацию клиентам с помощью простой HTML- формы. Все данные которые клиенты предоставят будут набираться сервлетом и сверятся валидаторами.

 

КОНФИГУРАЦИОННЫЕ ФАЙЛЫ

Ниже мы хотим показать вам наглядный пример дальнейшего приложения:

Приступая к разработке приложения необходимо выбрать дескриптор развёртывания. Дескриптор показывает, как приложение должно быть развёрнуто в конкретной сфере. Дескриптор развёртывания представляет из себя обычный XML- файл, именуемый web.xml и является элементом стандартной классификации Java EE.

Ниже демонстрируем наглядный пример:

<?xml version="1.0" encoding="UTF-8"?>

 

<web-app version="3.1"

             xmlns="http://xmlns.jcp.org/xml/ns/javaee"

             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

             xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"

             metadata-complete="false">

 

</web-app>

На примере видно, что web.xml только назначает версию Java Servlet Specification (3.1), которую мы применим в приложении. Следовательно он может включать в себя намного больше содержимого включая директивы сопоставления сервлетовпараметры инициализациисписок приветственных файлов, однако дабы не затрудняться сохраним всё так как есть. 

 

ВНЕШНИЙ ВИД

По двум JSP-файлам будет устанавливаться внешний вид и в контексте MVC они именуются «Представлениями». Первый реагирует за отображение формы регистрации и вероятных ошибок, после контроля внедренных сведений.  Второй реагирует за страницу приветствия где показаны данные заполненные клиентом, после завершения регистрации.  

1-ый JSP-файл:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<!DOCTYPE html>

<html lang="en">

<head>

    <meta charset="UTF-8">

    <title>Регистрация</title>

</head>

<body>

    <h1>Регистрация</h1>

 

    <c:if test="${violations != null}">

        <c:forEach items="${violations}" var="violation">

            <p>${violation}.</p>

        </c:forEach>

    </c:if>

 

    <form action="${pageContext.request.contextPath}/processcustomer" method="post">

        <label for="firstname">Имя : </label>

        <input type="text" name="firstname" id="firstname" value="${firstname}">

        <label for="lastname">Фамилия:

        <input type="text" name="lastname" id="lastname" value="${lastname}">

        <label for="email">Email: </label>

        <input type="text" name="email" id="email" value="${email}">

        <input type="submit" name="signup" value="Sign Up">

    </form>

</body>

</html>

URL: ${pageContext.request.contextPath}/processcustomer показывает на атрибут формы регистрации action. То есть всегда когда клиент хочет пройти регистрацию, данные автоматически передаются в  processcustomer вне зависимости от URL где доступна форма.

Рассмотрим JSP- файл отвечающий за страницу приветствия:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<!DOCTYPE html>

<html lang="en">

<head>

    <meta charset="UTF-8">

    <title>Данные клиента</title>

</head>

<body>

    <h1>Спасибо за регистрацию!</h1>

    <h2>Ваши введённые данные:</h2>

    <p><strong>Имя:</strong> ${firstname}</p>

    <p><strong>Фамилия:</strong> ${lastname}</p>

    <p><strong>Email: </strong>${email}</p>

</body>

</html>

 

Пишем контроллёр

Сервлет который будет принимать данные из формы регистрации можно написать очень легко. Для этого необходимо- написать подкласс для класса HttpServlet и привести его методы к исполнению doGet() или doPost() (или сразу два если понадобится)

Вот так он выглядит:

@WebServlet(name = "CustomerController", urlPatterns = "/processcustomer")

public class CustomerController extends HttpServlet {

 

    @Override

    protected void doPost(

            HttpServletRequest request, HttpServletResponse response)

            throws ServletException, IOException {

 

        RequestCustomer customer = RequestCustomer.fromRequestParameters(request);

        customer.setAsRequestAttributes(request);

        List violations = customer.validate();

 

        if (!violations.isEmpty()) {

            request.setAttribute("violations", violations);

        }

 

        String url = determineUrl(violations);

        request.getRequestDispatcher(url).forward(request, response);

    }

 

    private String determineUrl(List violations) {

        if (!violations.isEmpty()) {

            return "/";

        } else {

            return "/WEB-INF/views/customerinfo.jsp";

        }

    }

 

    private static class RequestCustomer {

 

        private final String firstName;

        private final String lastName;

        private final String email;

 

        private RequestCustomer(String firstName, String lastName, String email) {

            this.firstName = firstName;

            this.lastName = lastName;

            this.email = email;

        }

 

        public static RequestCustomer fromRequestParameters(

            HttpServletRequest request) {

            return new RequestCustomer(

                    request.getParameter("firstname"),

                    request.getParameter("lastname"),

                    request.getParameter("email"));

        }

 

        public void setAsRequestAttributes(HttpServletRequest request) {

            request.setAttribute("firstname", firstName);

            request.setAttribute("lastname", lastName);

            request.setAttribute("email", email);

        }

 

        public List validate() {

            List violations = new ArrayList<>();

            if (!StringValidator.validate(firstName)) {

                    violations.add("Имя является обязательным полем");

            }

            if (!StringValidator.validate(lastName)) {

                    violations.add("Фамилия является обязательным полем");

            }

            if (!EmailValidator.validate(email)) {

                    violations.add("Email должен быть правильно сформирован");

            }

            return violations;

        }

 

    }

 

}

Применение аннотации @WebServlet(name ="CustomerController", urlPatterns = "/processcustomer") – это первое на что собственно стоит направить своё внимание, так как ее задача это сказать контейнеру сервлета применить класс CustomerController для переработки HTTP-запросов по адресу /processcustomer.

В практике применение имени класса сервлета в качестве обозначения атрибута name аннотации @WebServlet считается не плохим решением, вследствие чего мы прозвали сервлет CustomerController, иначе многим контейнерам не удастся выполнить сопоставление, что создаст ошибку 404. Класс CustomerController исполняет обычные команды такие как, сборка данных введённых в форму, применяя реализацию интерфейса HttpServletRequest, содержащий значения согласно полям firstname, lastname и email формы. Далее он вводит эти значения в качестве атрибутов запроса и вследствие чего есть возможность вторично отражать на страничке с результатами, либо в форме. В конце валидаторы выполняют проверку на корректность введённых данных.

Если данные не валидны, клиент перенаправляется через объект RequestDispatcher на страницу регистрации где отражаются ошибки. Если проблем нет, то отражается страничка приветствия.

Таким образом мы разработали полноценное веб-приложение на Java, теперь переходим на его запуск!

 

ЗАПУСКАЕМ ПРИЛОЖЕНИЕ

Необходимо сделать несколько шагов для запуска приложения такие как:

  1. Во первых потребуется Git (удостоверьтесь, что загрузили соответствующую версию), Maven и контейнер сервлета (такие как: Apache Tomcat, Jetty, или JBoss Wildfly). Вы можете применять встроенный вариант, если что-то из этого уже встроено в вашу IDE.
  2. Для того чтобы клонировать репозиторий приложения примените Git и импортируйте в вашу IDE, как проект Maven.
  3. Разверните проект в контейнере сервлета и запустите его. Имеется в виду создайте WAR-файл или exploded WAR и вставьте в папку развёртывания контейнера по умолчанию. После того как вы развернёте проект и запуститесь, должен запускаться браузер по умолчанию с окном регистрации.
  4. Вы увидите, как отобразятся ошибки если не заполнять все поля в форме, в случае заполнения всех полей как надо, вас перенесет на страницу пользователя.

 

ЗАКЛЮЧЕНИЕ

Как ведь хорошо когда вы приобрели все навыки для разработки собственного веб-приложения на Java используя встроенные на Java средства,  Servlet API и технологию JSP для отражения. Замечательно не так ли?

Заметьте, что реализация класса CustomerController кратко демонстрирует легкость обработки параметров запроса и передаёт клиенту ответы в различных форматах. Однако за эту функцию приходится платить по-своему. Реализация интерфейсов  HttpServletResponse и HttpServletResponse являются простыми локаторами служб которые просто содержат данные, но эти реализации всегда буду привязаны к сервлету.

Республика Казахстан, г. Алматы,
Ул. Шевченко 165Б, офис.511

Разработка сайтов в Алматы

При проектировании и развитии наших ключевых сервисов мы старались не брать за основу распространенные решения от коллег, а с нуля проработали базовые принципы взаимодействия как с клиентом, так и со средствами разработки . Выделим ключевые из них:

  • Персональный подход и погружение в каждый проект позволяет закрыть конкретные потребности и создать уникальное решение;
  • Прямая связь со специалистом обеспечивает качественный контакт, который в других компаниях теряет в качестве из-за включения в цепочку посредника (например, оператора на телефоне);
  • В технологическом плане мы обеспечиваем максимальную простоту в управлении, скорость и надежность работы веб-сайта, безопасность и жизнеспособность;
  • В современных условиях для того, чтобы быть победителем, необходимо уже на стадии проектирования прототипов закладывать продающие возможности для достижения максимальной конверсии, то есть коммерческой эффективности продукта.

Ко всему этому стоит добавить стремление компании «А-Люкс» избавляться от второстепенных расходов на сотрудников, задачи которых можно делегировать без потери качества: секретари, тестировщики, call-центр. Таким образом, заказчик получает превосходный код, упакованный в премиум-дизайн за достойные для рынка деньги. Мы занимаемся созданием сайтов в Алматы уже более 12 лет.

Веб-студия №1

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