Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Java.doc
Скачиваний:
2
Добавлен:
01.03.2025
Размер:
791.55 Кб
Скачать

Web-контейнер, Servlet, JSP. Структура, назначение и пример сервлета или JSP.

Контейнер сервлетов  — программа, представляющая собой сервер, который занимается системной поддержкой сервлетов и обеспечивает их жизненный цикл в соответствии с правилами, определёнными в спецификациях. Может работать как полноценный самостоятельный веб-сервер, быть поставщиком страниц для другого веб-сервера, например Apache, или интегрироваться в Java EE сервер приложений. Обеспечивает обмен данными между сервлетом и клиентами, берёт на себя выполнение таких функций, как создание программной среды для функционирующего сервлета, идентификацию и авторизацию клиентов, организацию сессии для каждого из них.

Сервлет является Java-интерфейсом, реализация которого расширяет функциональные возможности сервера. Сервлет взаимодействует с клиентами посредством принципа запрос-ответ.

Хотя сервлеты могут обслуживать любые запросы, они обычно используются для расширения веб-серверов. Для таких приложений технология Java Servlet определяет HTTP-специфичные сервлет классы.

Пакеты javax.servlet и javax.servlet.http обеспечивают интерфейсы и классы для создания сервлетов.

public class MyServlet extends javax.servlet.http.HttpServlet {

protected void service(HttpServletRequest request,

HttpServletResponse response)

throws ServletException, IOException

{}

public void destroy() {

this.log("Servlet destroyed");

}

public void init(ServletConfig cfg) throws ServletException {

this.log("Servlet inited");

}

}

import java.io.IOException;

import java.io.PrintWriter;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import javax.servlet.http.HttpSession;

public class NewServlet extends HttpServlet {

@Override

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

// Параметр

String parameter = request.getParameter("parameter");

// Старт HTTP сессии

HttpSession session = request.getSession(true);

session.setAttribute("parameter", parameter);

response.setContentType("text/html;charset=UTF-8");

PrintWriter out = response.getWriter();

try {

out.println("<html>");

out.println("<head>");

out.println("<title>Заголовок</title>");

out.println("</head>");

out.println("<body>");

out.println("<h1>Пример сервлета"+parameter+"</h1>");

out.println("</body>");

out.println("</html>");

} finally {

out.close();

}

}

@Override

public String getServletInfo() {

return "Пример сервлета";

}

}

HttpServletRequest – класс, экземпляры кот. представляют запрос от браузера

String getContextPath() – возвращает путь к контексту приложения

String getServletPath() – URL вызванного сервлета (JSP)

HttpSession getSession() – Сессия пользователя

Object getAttribute() / void setAttribute(String name, Object value) – Хранение пользовательских атрибутов, связанных с запросом

String getParameter(String value) – Параметр запроса (и для GET и для POST)

void setCharacterEncoding(String enc) – Кодировка значений параметров запроса (windows-1251, UTF-8)

HttpServletResponse – класс, экземпляры кот. представляют ответ браузеру

void setContentType(String contentType) – MIME-тип ответа браузеру

java.io.PrintWriter getWriter() – поток вывода для ответа браузеру

void sendRedirect(String location) – перенаправление на другую страницу

HttpSession – класс, экземпляры кот. хранят состояние сессии клиента

Object getAttribute() / void setAttribute(String key, Object value) – Атрибуты сессии (сохраняются между запросами одного клиента)

HttpServletContext – класс, экземпляры кот. представляют все web-приложение

Object getAttribute() / void setAttribute(String key, Object value) – Атрибуты контекста (общие для всех пользователей и запросов к web-приложению)

Жизненный цикл сервлета

Жизненный цикл сервлета состоит из следующих шагов:

  1. В случае отсутствия сервлета в контейнере.

    1. Класс сервлета загружается контейнером.

    2. Контейнер создает экземпляр класса сервлета.

    3. Контейнер вызывает метод init(). Этот метод инициализирует сервлет и вызывается в первую очередь, до того, как сервлет сможет обслуживать запросы. За весь жизненный цикл метод init() вызывается только однажды.

  2. Обслуживание клиентского запроса. Каждый запрос обрабатывается в своем отдельном потоке. Контейнер вызывает метод service() для каждого запроса. Этот метод определяет тип пришедшего запроса и распределяет его в соответствующий этому типу метод для обработки запроса. Разработчик сервлета должен предоставить реализацию для этих методов. Если поступил запрос, метод для которого не реализован, вызывается метод родительского класса и обычно завершается возвращением ошибки инициатору запроса.

  3. В случае если контейнеру необходимо удалить сервлет, он вызывает метод destroy(), который снимает сервлет из эксплуатации. Подобно методу init(), этот метод тоже вызывается единожды за весь цикл сервлета.

JSP (JavaServer Pages) — технология, позволяющая веб-разработчикам легко создавать содержимое, которое имеет как статические, так и динамические компоненты. По сути, страница JSP является текстовым документом, который содержит текст двух типов: статические исходные данные, которые могут быть оформлены в одном из текстовых форматовHTMLSVGWML, или XML, и JSP элементы, которые конструируют динамическое содержимое. Кроме этого могут использоваться библиотеки JSP тегов, а также EL (Expression Language), для внедрения Java-кода в статичное содержимое JSP-страниц.

Шаблон Модель-Представление-Контроллер. Роли компонент и зависимости между ними. Пример на одной из Java-реализаций.

Задачи mvc

Реализация MVC: Диспетчер, контроллеры, представления Binding (конвертация HTTP-параметров в объекты Java - модели) Validation (проверка данных модели)

Поддержка различных типов представлений (JSP, XSLT, Velocity, Freemarker, Word, Excel)

I18n / L10n

Security (Authorization – проверка прав доступа)

JSP-теги для удобства работы с всеми возможностями, описанными выше

Типовая структура Enterprise приложения. Слои, зоны ответственности и зависимости между слоями. Пример (названия классов и методов слоев).

import org.springframework.web.servlet.mvc.Controller;  import org.springframework.web.servlet.ModelAndView;  import javax.servlet.ServletException;  import javax.servlet.http.HttpServletRequest;  import javax.servlet.http.HttpServletResponse;  import org.apache.commons.logging.Log;  import org.apache.commons.logging.LogFactory;  import java.io.IOException;  public class HelloController implements Controller {      protected final Log logger = LogFactory.getLog(getClass());      public ModelAndView handleRequest(HttpServletRequest request,              HttpServletResponse response) throws ServletException, IOException {          logger.info(«Returning hello view»);          return new ModelAndView(«hello.jsp»);      }  }

Шаблон «Инверсия управления». Назначение и пример.

Представляет собой реестр (контейнер) объектов, которыми управляет

Позволяет декларативно конфигурировать объекты и их свойства

Сам код классов может не зависеть от IoC фреймворка. IoC контейнер является “клеем”

Берет на себя

Управление жизненным циклом объекта (когда и кем создается, когда удаляется)

Управление зависимостями (объект лишь говорит что ему нужно)

public class SetterMessage {

private String message = null;

/**

* Gets message.

*/

public String getMessage() {

return message;

}

/**

* Sets message.

*/

public void setMessage(String message) {

this.message = message;

}

}

public class MessageRunner {

final static Logger logger = LoggerFactory.getLogger(MessageRunner.class);

/**

* Main method.

*/

public static void main(String[] args) {

logger.info("Initializing Spring context.");

ApplicationContext applicationContext = new ClassPathXmlApplicationContext("/application-context.xml");

logger.info("Spring context initialized.");

Message message = (Message) applicationContext.getBean("message");

logger.debug("message='" + message.getMessage() + "'");

}

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]