· Определяет параметры развёртывания web-приложения в контейнере.
· Некоторые из этих параметров даже не могут быть указаны с помощью аннотаций классов, т.к. относятся к web-приложению в целом.
· Указанные в дескрипторе параметры перекрывают параметры, указанные с помощью аннотаций классов.
Пример 11.Дескриптор развертывания web . xml
<? xmlversion ="1.0" encoding =" UTF -8"?>
<web-appversion="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
<listener>
<listener-class>org.tempuri.MyListner</listener-class>
</listener>
<servlet>
<servlet-name>MyServlet</servlet-name>
<servlet-class>org.tempuri.MyServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>MyServlet</servlet-name>
<url-pattern>/MyServlet.html</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>/MyServlet.html</welcome-file>
</welcome-file-list>
</web-app>
Фильтрация
· Получаемые запросы и формируемые отклики могут быть подвергнуты фильтрации.
· API для классов фильтрации определен интерфейсами Filter, FilterConfig, FilterChain пакета javax.servlet.
· Включение фильтров осуществляется с помощью аннотации @WebFilter.
· Фильтры используются в основном для перехвата и изменения запросов и ответов от сервера. Рассмотрим случай, в котором проверяется сессия для каждого запроса пользователя, и если она верна, то только тогда пользователь может получить доступ к странице. Этого можно добиться путем проверки сессий на всех сервлет страницах (страницы JSP), которые запрашивают пользователи, или можно сделать это с помощью фильтра.
Пример 12. Фильтр
public class LogFilter implements Filter {
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) req;
String ipAddress = request.getRemoteAddr();
System.out.println("IP " + ipAddress + ", Time " + new Date());
chain.doFilter(req, res);
}
public void init(FilterConfig config) throws ServletException {
//Get init parameter
String testParam = config.getInitParameter("test-param");
//Print the init parameter
System.out.println("Test Param: " + testParam);
}
public void destroy() {
//add code to release any resource
}
}
• Метод init () используется для инициализации любого кода, который используется фильтром. Также отметим, чтоinit () получит объект FilterConfig, который содержит различную информация уровня фильтров, а также параметры инициализации, который передаются из web.xml (дескриптора развертывания).
• d oFilter() фактически выведет информацию. Можно изменить этот метод и добавить код, который может изменить запрос / состояние сессии / ответ, добавить атрибут в запрос и т.д.
• d estroy() вызывается контейнером, когда он хочет убрать мусор за фильтром. Это обычно делается, когда фильтр не используется в течение длительного времени и сервер хочет выделить память для других приложений.
Пример 13. Маппинг фильтра в web . xml
<filter>
<filter-name>LogFilter</filter-name>
<filter-class>sample.LogFilter</filter-class>
<init-param>
<param-name>test-param</param-name>
<param-value>This parameter is for testing.</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>LogFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
JSP ( JavaServerPages )
JSP – это технология, которая упрощает создание web страниц с динамически изменяющимся (во время генерации страницы) содержимым.
<html>
<body>
<p>HI<%= (request.getParameter("name")!=null) ? ", " + request.getParameter("name"):"" %>!!!</p>
</body>
</html>
JSP файл – это текстовый документ, содержимое которого можно разбить на две части:
l статический текст (каркас) – создается при помощи специальных редакторов.
l динамический (генерируемый во время выполнения страницы) – обычно пишется в среде разработки программирования.
Принцип работы (рис. 6):
Рисунок 6 – Принцип работы
l JSP-файл транслируется в файл java.
l Процесс трансляции управляется директивами (<%@ page […] %>).
l Полученный файл компилируется в класс сервлета.
l Далее с ним идет работа как с сервлетом.
l Конфигурация сервера может включать ряд настроек по работе с jsp-страницами.
Обработка ошибок
• Во время трансляции и компиляции
l поведение зависит от используемого сервера;
l класс сервлета создан не будет.
• Во время выполнения
l если для данной JSP страницы (или приложения) определена «страница на случай ошибки» (errorPage), то будет выведена указанная страница;
l иначе – в зависимости от сервера и его настроек.
Виды JSP:
• JSP-страница
l Это страница из статических и динамических элементов.
l Статическая часть имеет произвольный формат.
• JSP-документ
l XML-файл, содержащий тэги особого вида.
l Имеет ту же функциональность, что и JSP-страница, но требует представления в виде тэгов ряда элементов.
Создание страницы
• Создание статического содержимого. Для этого удобно использовать редакторы HTML, XML и пр.
• Вставка динамических объектов и элементов сценариев JSP. В созданный файл вставляются элементы <%? […] %>
Элементы JSP- страницы
• Статический текст
• Элементы сценариев
l Комментарии <%-- […] --%>
l Объявления <%! […] %>
l Скриптлеты <% […] %>
l Выражения <%= […] %>
l Директивы <%@ ? […]%>
• Стандартные объекты.
Комментарии
• <%-- […] --%>
• Содержат текст, который не будет включен в отклик страницы.
• Содержимое комментария игнорируется транслятором.
• Не путайте с комментариями HTML
<!-- […] -->
Пример 14. JSP- страницаскомментариями
JSP-страница
<html><body>
Hello World!
<%-- This is a JSP comment --%>
<!-- This is a HTML comment -->
</ body ></ html >
Фрагмент примерного кода сервлета
out.write("<html><body>\n Hello World!\n ");
out.write("\n <!-- This is a HTML comment -->"
+ "\ n </ body ></ html >\ n ");
Объявления
• <%! […] %>
• Обычно содержат объявления переменных, методов, классов и интерфейсов.
• При трансляции преобразуются в элементы класса сервлета (поля, методы и вложенные типы).
• Нельзя использовать поля для хранения значений, использующихся в рамках одного запроса.
• При работе с внутренними классами есть особенности.
Пример 15. JSP -страницасобъявлениями
JSP-страница
<%!
private String str = "Message: ";
public String createMessage(String arg) {
returnstr + arg ;
}
%>
Фрагмент примерного кода сервлета
public final class index_jsp extends org.apache.jasper.runtime.HttpJspBase
implements org.apache.jasper.runtime.JspSourceDependent {
private String str = "Message: ";
public String createMessage(String arg) {
return str + arg;
}
Скриптлеты
• <% […] %>
• Содержат динамически выполняемый код.
• Преобразуются во фрагменты методов сервлета, формирующих отклик.
• Синтаксически являются фрагментами обычных Java-методов.
• Каждая завершенная инструкция заканчивается знаком точки с запятой.
Пример 16. JSP -страницасо скриптлетами
JSP-страница
<html><body>
<% String server_name = System.getProperty("os.name");
if (server_name == null)
server_name = "Undefined."; %>
</ body ></ html >
Фрагмент примерного кода сервлета
out.write("<html><body>\n");
String server_name = System.getProperty("os.name");
if (server_name == null)
server_name = "Undefined.";
out.write("\n");
out.write("</body></html>\n");
Выражения
• <%= […] %>
• Содержит выражения, значения которых будут выведены в отклик.
• Синтаксически являются вычислимыми выражениями Java, для которых может быть получено текстовое представление.
• В конце выражений точки с запятой нет!
Пример 17. JSP -страницас выражениями
JSP-страница
<html><body>
OS Name: <%=server_name%>
<br><%=createMessage("It works!")%>
</body></html>
Фрагмент примерного кода сервлета
out . write ("< html >< body >\ n ");
out.write("OS Name: ");
out.print(server_name);
out.write("\n");
out.write("<br>");
out.print(createMessage("It works!"));
out.write("\n");
out.write("</body></html>\n");
Директива page
• <%@ page […] %>
• Позволяет управлять процессом трансляции JSP-страницы в сервлет.
• Часто используемые параметры:
l Тип отклика и кодировка.
l Автоматическая инициализация сессии.
l Импортируемые типы.
l Страница для обработки ошибок:
o Является ли данная страница обработчиком.
o Какая страница используется как обработчик.
Пример 18. Тип отклика, кодировка и импорт типов
JSP-страница
<%@page contentType="text/html; charset=UTF-8"%>
<%@page session="true"%>
<%@page import="java.util.* , java.lang.reflect.* " %>
Фрагмент примерного кода сервлета
importjava . util .*;
import java.lang.reflect.*;
...
response.setContentType("text/html; charset=UTF-8");
session = pageContext.getSession();
...
Дата: 2019-02-19, просмотров: 367.