Xml java web: Java EE | web.xml и маппинг сервлетов
Настройка и описание web.xml в приложении с Spring и JSF
Java веб-приложения используют файл дескриптора развертывания для определения какие URL будут передаваться определенному сервлету, какие URL требуют аутентификации и др. Этот дескриптор развертывания называется web.xml и находится в WAR приложения в WEB-INF/ директории. Web.xml – часть стандарта сервлета для веб-приложений.
О дескрипторе развертывания
Дескриптор развертывания веб-приложений описывает классы, ресурсы и конфигурацию приложения, а так же как сервер будет использовать их для выполнения веб-запросов. Когда сервер получает запрос для приложения, он использует дескриптор развертывания для отображения URL запроса к коду, который должен этот запрос обработать.
Вот пример простого web.xml отображающего все пути URL (т.е. /*) к классу сервлета mysite.server.ComingSoonServlet:
<web-app xmlns=»http://java.sun.com/xml/ns/javaee» version=»2. 5″>
<servlet>
<servlet-name>comingsoon</servlet-name>
<servlet-class>mysite.server.ComingSoonServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>comingsoon</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
</web-app>
<web-app xmlns=»http://java.sun.com/xml/ns/javaee» version=»2.5″> <servlet> <servlet-name>comingsoon</servlet-name> <servlet-class>mysite.server.ComingSoonServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>comingsoon</servlet-name> <url-pattern>/*</url-pattern> </servlet-mapping> </web-app> |
Сервлеты и пути URL
web. xml определяет соответствие между путями URL и сервлетами, которые эти URL будут обрабатывать. Веб-сервер использует эту конфигурацию, чтоб определить сервлет для обработки данного запроса и вызвать метод класса, который соответствует методу запроса (например метод doGet() для HTTP.GET запросов).
Для привязки (“маппинг”) URL к сервлету, необходимо определить элементы <servlet> и <servlet-mapping>.
<servlet>
<servlet-name>redteam</servlet-name>
<servlet-class>mysite.server.TeamServlet</servlet-class>
<init-param>
<param-name>teamColor</param-name>
<param-value>red</param-value>
</init-param>
<init-param>
<param-name>bgColor</param-name>
<param-value>#CC0000</param-value>
</init-param>
</servlet>
<servlet>
<servlet-name>blueteam</servlet-name>
<servlet-class>mysite. server.TeamServlet</servlet-class>
<init-param>
<param-name>teamColor</param-name>
<param-value>blue</param-value>
</init-param>
<init-param>
<param-name>bgColor</param-name>
<param-value>#0000CC</param-value>
</init-param>
</servlet>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | <servlet> <servlet-name>redteam</servlet-name> <servlet-class>mysite.server.TeamServlet</servlet-class> <init-param> <param-name>teamColor</param-name> <param-value>red</param-value> </init-param> <init-param> <param-name>bgColor</param-name> <param-value>#CC0000</param-value> </init-param> </servlet>
<servlet> <servlet-name>blueteam</servlet-name> <servlet-class>mysite. server.TeamServlet</servlet-class> <init-param> <param-name>teamColor</param-name> <param-value>blue</param-value> </init-param> <init-param> <param-name>bgColor</param-name> <param-value>#0000CC</param-value> </init-param> </servlet> |
Элемент <servlet-mapping> определяет шаблон URL и имя сервлета, который будет обрабатывать запросы, соответствующие шаблону. Шаблон должен содержать полный путь URL, включая (/), следующий за именем домена.
<servlet-mapping>
<servlet-name>redteam</servlet-name>
<url-pattern>/red/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>blueteam</servlet-name>
<url-pattern>/blue/*</url-pattern>
</servlet-mapping>
<servlet-mapping> <servlet-name |
Основы XML для Java программиста
XML — очень популярный и гибкий формат в наше время. Каждый программист должен понимать его, это просто must have. Многие технологии завязаны сегодня активно его используют, при чем современные в их числе.
Вступление
Здравствуйте, дорогие читатели моей статьи. Сразу хочу сказать, что это только первая статья в моём цикле из трёх статей. Основная цель всего цикла – посвятить каждого читателя в XML и дать, если не полное разъяснение и понимание, то, хотя бы, хороший такой толчок к нему, объяснив основные моменты и вещи. Весь цикл будет для одной номинации – «Внимание к деталям», а разделение на 3 статьи сделано для того, чтобы вмещаться в лимит символов в постах и разделить большое количество материала на более маленькие порции для большего понимания.
Первая статья будет посвящена самому XML и что это такое, а так же одному из способов составления схемы для XML файлов – DTD.
Для начала, хотелось бы высказать небольшое предисловие для тех, кто вообще еще не знаком с XML: не нужно пугаться. XML не очень сложный и с ним нужно разобраться любому программисту, так как это очень гибкий, эффективный и популярный формат файлов на сегодняшний день для хранения разнообразной информации, какой вы только захотите. XML используется в Ant, Maven, Spring. Любому программисту нужно знание XML.
Теперь, когда вы собрались силами и мотивацией, давайте приступать к изучению. Весь материал я буду пытаться выложить максимально просто, собрав только самое важное и не вдаваться в дебри.
XML
Для более ясного объяснения, правильней будет визуализировать XML примером.
<?xml version="1.0" encoding="UTF-8"?>
<company>
<name>IT-Heaven</name>
<offices>
<office floor="1" room="1">
<employees>
<employee>
<name>Maksim</name>
<job>Middle Software Developer</job>
</employee>
<employee>
<name>Ivan</name>
<job>Junior Software Developer</job>
</employee>
<employee>
<name>Franklin</name>
<job>Junior Software Developer</job>
</employee>
</employees>
</office>
<office floor="1" room="2">
<employees>
<employee>
<name>Herald</name>
<job>Middle Software Developer</job>
</employee>
<employee>
<name>Adam</name>
<job>Middle Software Developer</job>
</employee>
<employee>
<name>Leroy</name>
<job>Junior Software Developer</job>
</employee>
</employees>
</office>
</offices>
</company>
HTML и XML похожи синтаксисом, так как у них общий родитель – SGML. Однако, в HTML есть только фиксированные теги конкретного стандарта, в то время, как в XML вы можете создавать свои собственные теги, атрибуты и, в целом, делать все, что захотите, чтобы хранить данные так, как вам будет удобно.
По сути, XML файлы может прочитать любой человек, знающий английский язык. Изобразить данный пример можно с помощью дерева.
Корень дерева – Company. Он же – корневой (рут) элемент, от которого идут все остальные элементы. В каждом XML файле может быть только один рут элемент. Он должен объявляться после декларации xml файла (первая строчка в примере) и вмещать в себе все другие элементы.
Немного о декларации: она обязательная и нужна для идентификации документа как XML. У неё есть три псевдо-атрибуты (специальные предопределенные атрибуты): version (по стандарту 1.0), encoding (кодировка) и standalone (автономность: если yes и к документу подключаются внешние схемы, то будет ошибка, по умолчанию — no).
Элементы – это сущности, которые хранят данные с помощью других элементов и атрибутов. Атрибуты – это дополнительная информация об элементе, которая указывается при добавлении элемента.
Если перевести объяснение на ООП-поле, то можно привести такой пример: у нас есть машина, у каждой машины есть характеристики (цвет, вместимость, марка и другое) – это атрибуты, и есть сущности, которые внутри машины: двери, окна, двигатель, руль – это другие элементы. Хранить свойства можно как и отдельными элементами, так и атрибутами в зависимости от вашего желания. Как никак, XML – крайне гибкий формат хранения информации про что-либо.
После объяснений, нам достаточно разобрать пример выше, чтобы все встало на свои места.
В примере мы описали простую структуру компании: есть компания, у которой есть имя и офисы, а в офисах есть сотрудники.
Элементы Employees и Offices – элементы-обертки – они служат для того, чтобы собрать в себе элементы одного вида, по сути, соединив их в одно множество для удобства их обработки.
Отдельного внимания заслуживают floor и room. Это – атрибуты офиса (этаж и номер), другими словами – его свойства. Если бы у нас был элемент «картинка», то можно было бы передавать её размеры.
Вы можете заметить, что у компании нет атрибута name, но есть элемент name. Просто вы можете описывать структуры так, как захотите. Никто не обязывает вас все свойства элементов записывать только в атрибуты, вы можете использовать и просто элементы и записывать внутри них какие-то данные. Например, мы можем записывать имя и должность наших работников, как атрибуты:
<?xml version="1.0" encoding="UTF-8"?>
<company>
<name>IT-Heaven</name>
<offices>
<office floor="1" room="1">
<employees>
<employee name="Maksim" job="Middle Software Developer">
</employee>
<employee name="Ivan" job="Junior Software Developer">
</employee>
<employee name="Franklin" job="Junior Software Developer">
</employee>
</employees>
</office>
<office floor="1" room="2">
<employees>
<employee name="Herald" job="Middle Software Developer">
</employee>
<employee name="Adam" job="Middle Software Developer">
</employee>
<employee name="Leroy" job="Junior Software Developer">
</employee>
</employees>
</office>
</offices>
</company>
Как вы видите, теперь имя и должность каждого работника – это его атрибуты. И можно заметить, что внутри сущности (тега) employee ничего нет, все элементы employee – пустые. Тогда можно сделать employee пустым элементом – закрыть его сразу после объявления атрибутов. Это делается довольно просто, достаточно просто поставить слэш:
<?xml version="1.0" encoding="UTF-8"?>
<company>
<name>IT-Heaven</name>
<offices>
<office floor="1" room="1">
<employees>
<employee name="Maksim" job="Middle Software Developer" />
<employee name="Ivan" job="Junior Software Developer" />
<employee name="Franklin" job="Junior Software Developer" />
</employees>
</office>
<office floor="1" room="2">
<employees>
<employee name="Herald" job="Middle Software Developer" />
<employee name="Adam" job="Middle Software Developer" />
<employee name="Leroy" job="Junior Software Developer" />
</employees>
</office>
</offices>
</company>
Как вы можете заметить, закрыв пустые элементы мы сохранили всю целостность информации и намного сократили запись, сделав информацию более сжатой и читабельной.
Для того, чтобы добавить комментарий (текст, который будет пропускаться при парсинге файла) в XML, есть следующий синтаксис:
<!-- Иван недавно уволился, только неделю отработать должен. Не забудьте потом удалить его из списка.-->
И последняя конструкция – это CDATA, означает «символьные данные». Благодаря данной конструкции, можно записывать текст, который не будет интерпретироваться как разметка XML. Это полезно, если внутри XML файла у вас есть сущность, которая хранит в информации XML разметку. Пример:
<?xml version="1.0" encoding="UTF-8" ?>
<bean>
<information>
<![CDATA[<name>Ivan</name><age>26</age>]]>
</information>
</bean>
Особенность XML в том, что вы можете расширять его так, как захотите: использовать свои элементы, свои атрибуты и структурировать его по своему желанию. Вы можете использовать для хранения данных как атрибуты, так и элементы (как это было показано в примере ранее).
Однако нужно понимать, что придумывать свои элементы и атрибуты на ходу и как вы захотите вы можете, но что, если вы будете работать на проекте, где другой программист захочет перенести элемент name в атрибуты, а у вас вся логика программы написана так, чтобы name был элементом? Как же создать свои собственные правила того, какие элементы должны быть, какие атрибуты у них есть и другие вещи, чтобы можно было проводить валидацию XML файлов и быть уверенным, что правила станут стандартными в вашем проекте и никто их нарушать не будет? Для того, чтобы написать все правила вашей собственной XML разметки, есть специальные средства. Самые известные: DTD и XML Schema. В этой статье будет только про первое.
DTD
DTD создан для того, чтобы описывать типы документов. DTD уже устаревает и сейчас от него активно отказываются в XML, однако еще много XML файлов используют именно DTD и, в целом, его полезно понимать.
DTD – это технология валидации XML-документов. DTD объявляет конкретные правила для типа документа: его элементы, какие элементы могут быть внутри элемента, атрибуты, обязательные они или нет, количество их повторений, а так же сущности (Entity).
По аналогии с XML, для более ясного объяснения DTD можно визуализировать примером.
<!-- Объявление возможных элементов -->
<!ELEMENT employee EMPTY>
<!ELEMENT employees (employee+)>
<!ELEMENT office (employees)>
<!ELEMENT offices (office+)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT company (name, offices)>
<!-- Добавление атрибутов для элементов employee и office -->
<!ATTLIST employee
name CDATA #REQUIRED
job CDATA #REQUIRED
>
<!ATTLIST office
floor CDATA #REQUIRED
room CDATA #REQUIRED
>
<!-- Добавление сущностей -->
<!ENTITY M "Maksim">
<!ENTITY I "Ivan">
<!ENTITY F "Franklin">
Вот такой вот простой пример у нас есть. В данном примере, мы объявили всю нашу иерархию из XML примера: работник, работники, офис, офисы, имя, компания.
Для создания DTD файлов служат 3 основные конструкции, чтобы описывать любые XML файлы: ELEMENT (для описания элементов), ATTLIST (для описания атрибутов для элементов) и ENTITY (для подстановки текста сокращенными формами).
ELEMENT
Служит для описания элемента. Элементы, которые можно использовать внутри описанного элемента, перечисляются в скобках в виде списка. Можно использовать квантификаторы для указания количества (они аналогичны с квантификаторами из регулярных выражений):
+
значит 1+
*
значит 0+
?
значит 0
ИЛИ 1
Если квантификаторов не было добавлено, то считается, что должен быть только 1 элемент.
Если бы нам нужен был один из группы элементов, можно было бы написать так:
<!ELEMENT company ((name | offices))>
Тогда выбирался бы один из элементов: name или offices, но если бы внутри company было сразу два их, то валидация бы не проходила.
Так же можно заметить, что в employee есть слово EMPTY – это значит, что элемент должен быть пустым. Есть еще ANY – любые элементы. #PCDATA – текстовые данные.
ATTLIST
Служит для добавления атрибутов к элементам. После ATTLIST следует название нужного элемента, а после словарь вида «название атрибута – тип атрибута», а в конце можно добавить #IMPLIED (не обязателен) или #REQUIRED (обязателен). CDATA – текстовые данные. Есть и другие типы, однако все они строчные.
ENTITY
ENTITY служит для объявления сокращений и текста, который будет на них подстваляться. По сути, мы просто сможем использовать в XML вместо полного текста просто название сущности со знаком & перед и ; после. Например: чтобы отличать разметку в HTML и просто символы, левую угловую скобочку часто экранируют с помощью lt; , только нужно еще выставить & перед lt. Тогда мы будем использовать не разметку, а просто символ Есть два способа использовать их в XML:
1. Внедрение — написание DTD правил внутри самого XML файла, достаточно просто написать корневой элемент после ключевого слова DOCTYPE и заключить наш DTD файл внутри квадратных скобочек.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE company [
<!-- Объявление возможных элементов -->
<!ELEMENT employee EMPTY>
<!ELEMENT employees (employee+)>
<!ELEMENT office (employees)>
<!ELEMENT offices (office+)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT company (name, offices)>
<!-- Добавление атрибутов для элементов employee и office -->
<!ATTLIST employee
name CDATA #REQUIRED
job CDATA #REQUIRED
>
<!ATTLIST office
floor CDATA #REQUIRED
room CDATA #REQUIRED
>
<!-- Добавление сущностей -->
<!ENTITY M "Maksim">
<!ENTITY I "Ivan">
<!ENTITY F "Franklin">
]>
<company>
<name>IT-Heaven</name>
<!-- Иван недавно уволился, только неделю отработать должен. Не забудьте потом удалить его из списка.-->
<offices>
<office floor="1" room="1">
<employees>
<employee name="&M;" job="Middle Software Developer" />
<employee name="&I;" job="Junior Software Developer" />
<employee name="&F;" job="Junior Software Developer" />
</employees>
</office>
<office floor="1" room="2">
<employees>
<employee name="Herald" job="Middle Software Developer" />
<employee name="Adam" job="Middle Software Developer" />
<employee name="Leroy" job="Junior Software Developer" />
</employees>
</office>
</offices>
</company>
2. Импорт — мы записываем все наши правила в отдельный DTD файл, после чего в XML файле используем DOCTYPE-конструкцию из первого способа, только вместо квадратных скобочек нужно написать SYSTEM и указать абсолютный или относительный до текущего местоположения файла путь.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE company SYSTEM "dtd_example1.dtd">
<company>
<name>IT-Heaven</name>
<!-- Иван недавно уволился, только неделю отработать должен. Не забудьте потом удалить его из списка.-->
<offices>
<office floor="1" room="1">
<employees>
<employee name="&M;" job="Middle Software Developer" />
<employee name="&I;" job="Junior Software Developer" />
<employee name="&F;" job="Junior Software Developer" />
</employees>
</office>
<office floor="1" room="2">
<employees>
<employee name="Herald" job="Middle Software Developer" />
<employee name="Adam" job="Middle Software Developer" />
<employee name="Leroy" job="Junior Software Developer" />
</employees>
</office>
</offices>
</company>
Так же можно использовать ключевое слово PUBLIC вместо SYSTEM, однако оно вряд ли вам пригодится. Если интересно, то почитать про него (и про SYSTEM тоже) можно подробно тут: ссылочка.
Теперь мы не можем использовать другие элементы без их объявления в DTD, а весь XML подчиняется нашим правилам. Можете попробовать записать данный код в IntelliJ IDEA в отдельный файл с расширением .xml и попробовать добавить какие-то новые элементы или удалить элемент из нашего DTD и заметите, как IDE будет указывать вам на ошибку.
Однако, у DTD есть свои минусы:
- У него свой собственный синтаксис, отличный от синтаксиса xml.
- В DTD нет проверки типов данных, а содержать он может только строки.
- В DTD нет пространства имён.
О проблеме собственного синтаксиса: вы должны разбираться в двух синтаксисах сразу: в XML и в DTD синтаксисе. Они разные и это может заставлять вас путаться. Так же, из-за этого же сложней отслеживать ошибки в огромных XML файлах в соединении с такими же DTD схемами. Если у вас что-то не заработало, приходится проверять огромное количество текста разных синтаксисов. Это как читать одновременно две книжки: на русском и английском. И если знание у одного языка у вас хуже, то понимать текст будет так же сложней.
О проблеме проверки типов данных: у атрибутов в DTD действительно есть разные типы, но все они, по сути своей, являются строковыми представлениями чего-либо, списками или ссылками. Однако, вы не можете требовать только числа, и, тем более, позитивные или негативные. А про объектные типы можете вообще забыть.
Последняя проблема будет обсуждаться уже в следующей статье, которая будет посвящена пространствам имён и XML схемам, так как обсуждение её тут бессмысленно.
Спасибо всем за внимание, я проделал большую работу и продолжаю её проделывать, чтобы вовремя закончить весь цикл статей. По сути, мне осталось разобраться с XML схемами и придумать их объяснение более ясными словами, чтобы закончить 2-ю статью. Её половина уже сделана, так что можете ожидать её в ближайшее время. Последняя статья будет полностью посвящена работе с XML файлами средствами Java. Удачи всем и успехов в программировании 🙂
Следующая статья: [Конкурс] Основы XML для Java программиста — Часть 2 из 3
Пример загрузки файла в сервлете и JSP
Загрузка файла на сервер с использованием сервлета и JSP — обычная задача в веб-приложении Java. Прежде чем кодировать ваш сервлет или JSP для обработки запроса на загрузку файла, вам нужно немного узнать о поддержке загрузки файлов в протоколах HTML и HTTP. Если вы хотите, чтобы ваш пользователь выбирал файлы из файловой системы и загружал их на сервер, вам нужно использовать <input type = ”file” />. Это позволит выбрать любую файловую систему и загрузить ее на сервер. Следующее, что метод формы должен быть HTTP POST с enctype как multipart / form-data , что делает данные файла доступными частями внутри тела запроса. Теперь, чтобы прочитать эти части файла и создать файл внутри сервлета, можно выполнить с помощью ServletOutputStream. Лучше использовать Apache commons FileUpload , библиотеку с открытым исходным кодом. Apache FileUpload обрабатывает все нижние детали синтаксического анализа HTTP-запроса, которые подтверждаются в RFC 1867 или «Загрузка файлов на основе форм в HTML» , когда вы устанавливаете метод сообщения формы и тип контента как «multipart / form-data».
Важные точки:
- DiskFileItemFactory является классом Factory по умолчанию для FileItem. Когда Apache осуществляет чтение мультикомпонентного содержимого и генерирует FileItem, эта реализация сохраняет содержимое файла либо в памяти, либо на диске как временный файл, в зависимости от размера порога. По умолчанию DiskFileItemFactory имеет пороговый размер 10 КБ и создает временные файлы во временном каталоге, возвращаемом System.getProperty («java.io.tmpdir»). Оба эти значения можно настраивать, и лучше всего их настроить для производственного использования. Вы можете получить проблемы с разрешениями, если у учетной записи пользователя, используемой для запуска Сервера, недостаточно прав для записи файлов во временный каталог.
- Тщательно выбирайте пороговый размер в зависимости от использования памяти. Хранение большого объема в памяти может привести к java.lang.OutOfMemory , в то время как слишком маленькие значения могут привести к появлению большого количества временных файлов.
- Apache Commons File Upload также предоставляет FileCleaningTracker для удаления временных файлов, созданных DiskFileItemFactory. FileCleaningTracker удаляет временные файлы, как только соответствующий экземпляр File собирается мусором. Это достигается с помощью более чистого потока, который создается при загрузке FileCleaner. Если вы используете эту функцию, не забудьте прекратить эту тему, когда закончится ваше веб-приложение.
- Сохраняйте настраиваемые данные, например, каталог загрузки, максимальный размер файла, пороговый размер и т. Д. В файлах конфигурации, и используйте разумные значения по умолчанию, если они не настроены.
- Рекомендуется проверять размер, тип и другие сведения о файлах в соответствии с требованиями вашего проекта, например, вы можете разрешить загрузку только изображений определенного размера и определенных типов, например JPEG, PNG и т. Д.
Пример загрузки файла в сервлете Java и JSP
Вот полный код для загрузки файлов в веб-приложение Java с использованием Servlet и JSP. Этот пример загрузки файла требует четырех файлов:
- index.jsp, который содержит HTML-контент для настройки формы, который позволяет пользователю выбирать и загружать файл на сервер.
- Сервлет FileUploader, который обрабатывает запрос на загрузку файла и использует библиотеку Apache FileUpload для анализа данных многоэлементной формы
- web.xml для настройки сервлета и JSP в веб-приложении Java.
- result.jsp для отображения результата операции загрузки файла.
FileUploadHandler.java
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
|
Модель объектов XML-документов (DOM) | Microsoft Docs
-
000Z» data-article-date-source=»ms.date»>03/30/2017 - Чтение занимает 3 мин
-
В этой статье
Класс XML DOM является представлением XML-документа в памяти.The XML Document Object Model (DOM) class is an in-memory representation of an XML document. Модель DOM позволяет читать, обрабатывать и изменять XML-документ программным образом.The DOM allows you to programmatically read, manipulate, and modify an XML document. Класс XmlReader также читает XML, но предоставляет только последовательный доступ для чтения без поддержки кэширования.The XmlReader class also reads XML; however, it provides non-cached, forward-only, read-only access. Это значит, что XmlReader не позволит изменять значения атрибутов или содержимое элемента, а также вставлять и удалять узлы.This means that there are no capabilities to edit the values of an attribute or content of an element, or the ability to insert and remove nodes with the XmlReader. Изменение — основная функция модели DOM.Editing is the primary function of the DOM. Это стандартизованный, структурированный способ представления XML-данных в памяти, хотя на самом деле данные XML хранятся в файлах и пересылаются из других объектов в строковом виде.It is the common and structured way that XML data is represented in memory, although the actual XML data is stored in a linear fashion when in a file or coming in from another object. Далее приведен пример XML-данных.The following is XML data.
Входные данныеInput
<?xml version="1.0"?>
<books>
<book>
<author>Carson</author>
<price format="dollar">31.95</price>
<pubdate>05/01/2001</pubdate>
</book>
<pubinfo>
<publisher>MSPress</publisher>
<state>WA</state>
</pubinfo>
</books>
Далее показано, какая структура будет создана в памяти, когда эти XML-данные считываются в модель структуры DOM. The following illustration shows how memory is structured when this XML data is read into the DOM structure.
Структура XML-документа XML document structure
Каждый круг на этой иллюстрации представляет собой узел в структуре XML-документа, называемый объектом XmlNode.Within the XML document structure, each circle in this illustration represents a node, which is called an XmlNode object. Объект XmlNode является базовым объектом дерева DOM.The XmlNode object is the basic object in the DOM tree. Класс XmlDocument, расширяющий класс XmlNode, поддерживает методы для операций над документом в целом (например, для загрузки его в память или сохранения XML в файл).The XmlDocument class, which extends XmlNode, supports methods for performing operations on the document as a whole (for example, loading it into memory or saving the XML to a file. Кроме того, XmlDocument предоставляет возможности для просмотра узлов всего XML-документа и выполнения операций над ними. In addition, XmlDocument provides a means to view and manipulate the nodes in the entire XML document. И XmlNode, и XmlDocument обладают улучшенной производительностью, расширенной функциональностью и содержат методы и свойства, которые позволяют следующее.Both XmlNode and XmlDocument have performance and usability enhancements and have methods and properties to:
Получать доступ к DOM-специфичным узлам, например к узлам элементов, узлам ссылок на сущности и т. п., и изменять эти узлы.Access and modify nodes specific to the DOM, such as element nodes, entity reference nodes, and so on.
Получать целые узлы помимо содержащейся в них информации, например текста в узле элемента.Retrieve entire nodes, in addition to the information the node contains, such as the text in an element node.
Примечание
Для приложений, которым не требуется структуризация или изменение, предоставляемые моделью DOM, классы XmlReader и XmlWriter обеспечат последовательный потоковый доступ к XML без поддержки кэширования. If an application does not require the structure or editing capabilities provided by the DOM, the XmlReader and XmlWriter classes provide non-cached, forward-only stream access to XML. Дополнительные сведения см. в разделах XmlReader и XmlWriter.For more information, see XmlReader and XmlWriter.
Объекты Node обладают набором методов и свойств, а также хорошо определенных базовых характеристик.Node objects have a set of methods and properties, as well as basic and well-defined characteristics. Вот некоторые из этих характеристик:Some of these characteristics are:
У каждого узла есть один родительский узел, то есть узел, находящийся непосредственно над данным.Nodes have a single parent node, a parent node being a node directly above them. Единственный узел, не имеющий родителя — корневой узел документа, так как это узел верхнего уровня, содержащий сам документ и его фрагменты.The only nodes that do not have a parent is the Document root, as it is the top-level node and contains the document itself and document fragments.
У большинства узлов может быть несколько дочерних узлов, то есть узлов, расположенных непосредственно под ними.Most nodes can have multiple child nodes, which are nodes directly below them. Далее следует список типов узлов, которые могут иметь дочерние узлы:The following is a list of node types that can have child nodes.
DocumentDocument
DocumentFragmentDocumentFragment
EntityReferenceEntityReference
ЭлементElement
Attribute (XElement Dynamic Property) (Attribute (динамическое свойство XElement))Attribute
Узлы XmlDeclaration, Notation, Entity, CDATASection, Text, Comment, ProcessingInstruction и DocumentType не могут иметь дочерних узлов. The XmlDeclaration, Notation, Entity, CDATASection, Text, Comment, ProcessingInstruction, and DocumentType nodes do not have child nodes.
Узлы, находящиеся на одном уровне наследования, например узлы book и pubinfo на нашей схеме, называются одноуровневыми.Nodes that are at the same level, represented in the diagram by the book and pubinfo nodes, are siblings.
Одна из характеристик модели DOM — способ обработки атрибутов.One characteristic of the DOM is how it handles attributes. Атрибуты не являются узлами, состоящими в родительских, дочерних и одноуровневых связях.Attributes are not nodes that are part of the parent, child, and sibling relationships. Атрибуты считаются собственностью узла элемента и представляют собой пару «имя-значение».Attributes are considered a property of the element node and are made up of a name and a value pair. Например, если XML-данные представляют собой конструкцию format="dollar
, связанную с элементом price
, слово format
является именем атрибута, а значением атрибута format
является dollar
.For example, if you have XML data consisting of format="dollar
» associated with the element price
, the word format
is the name, and the value of the format
attribute is dollar
. Чтобы получить атрибут format="dollar"
узла price, воспользуйтесь методом GetAttribute, когда курсор расположен в узле элемента price
.To retrieve the format="dollar"
attribute of the price node, you call the GetAttribute method when the cursor is located at the price
element node. Дополнительные сведения см. в статье Доступ к атрибутам в модели DOM.For more information, see Accessing Attributes in the DOM.
По мере считывания XML-документа в память создаются узлы.As XML is read into memory, nodes are created. Узлы бывают разных типов. However, not all nodes are the same type. Правила и синтаксис XML-элемента отличаются от правил и синтаксиса инструкции по обработке.An element in XML has different rules and syntax than a processing instruction. Поэтому по мере считывания разнообразных данных каждому узлу присваивается тип.Therefore, as various data is read, a node type is assigned to each node. Тип узла определяет его характеристики и функциональность.This node type determines the characteristics and functionality of the node.
Дополнительные сведения о типах узлов, создаваемых в памяти, см. в статье Типы XML-узлов.For more information on the types of nodes generated in memory, see Types of XML Nodes. Дополнительные сведения об объектах, создаваемых в дереве узлов, см. в статье Сопоставление объектной иерархии с XML-данными.For more information on the objects created in the node tree, see Mapping the Object Hierarchy to XML Data.
Корпорация Майкрософт расширила API-интерфейсы, доступные в DOM уровней 1 и 2 W3C, чтобы облегчить работу с XML-документами.Microsoft has extended the APIs that are available in the World Wide Web Consortium (W3C) DOM Level 1 and Level 2 to make it easier to work with an XML document. Дополнительные классы, методы и свойства полностью совместимы со стандартами W3C и добавляют дополнительную функциональность по сравнению с возможностями W3C XML DOM.While fully supporting the W3C standards, the additional classes, methods, and properties add functionality beyond what can be done using the W3C XML DOM. Новые классы позволяют получить доступ к реляционным данным, предоставляют методы синхронизации с данными ADO.NET, одновременно делая эти данные доступными в виде XML.New classes enable you to access relational data, giving you methods for synchronizing with ADO.NET data, simultaneously exposing data as XML. Дополнительные сведения см. в статье о синхронизации DataSet с XmlDataDocument.For more information, see Synchronizing a DataSet with an XmlDataDocument.
Модель DOM чрезвычайно полезна для считывания XML-данных в память, изменения их структуры, добавления и удаления узлов, изменения данных, принадлежащих узлу (например, текста, содержащегося в документе).The DOM is most useful for reading XML data into memory to change its structure, to add or remove nodes, or to modify the data held by a node as in the text contained by an element. Однако существуют и другие классы, которые в некоторых ситуациях работают быстрее модели DOM.However, other classes are available that are faster than the DOM in other scenarios. Классы XmlReader и XmlWriter предоставляют быстрый последовательный потоковый доступ к XML без поддержки кэширования.For fast, non-cached, forward-only stream access to XML, use the XmlReader and XmlWriter. Если вам нужен произвольный доступ с моделью курсора и XPath, используйте класс XPathNavigator.If you need random access with a cursor model and XPath, use the XPathNavigator class.
См. такжеSee also
Java ME Clients for XML Web Services
Mobile Devices and Web Services
7th WSEAS International Conference on APPLIED COMPUTER SCIENCE, Venice, Italy, November 21-23, 2007 322 Mobile Devices and Web Services TOMAS KOZEL, ANTONIN SLABY Univerzity of Hradec Kralove Department
More information
Mobile Operating Systems. Week I
Mobile Operating Systems Week I Overview Introduction Mobile Operating System Structure Mobile Operating System Platforms Java ME Platform Palm OS Symbian OS Linux OS Windows Mobile OS BlackBerry OS iphone
More information
Development of Java ME
Y39PDA Development of Java ME application České vysoké učení technické v Praze Fakulta Elektrotechnická Content What is Java ME Low Level a High Level API What is JSR LBS Java ME app. life-cycle 2/29 Is
More information
Location-Based Information Systems
Location-Based Information Systems Developing Real-Time Tracking Applications Miguel A Labrador Alfredo J Perez Pedro M Wightman CRC Press Taylor & Francis Group Boca Raton London New York CRC Press Is
More information
1 Mobile Data Mining on Small
1 Mobile Data Mining on Small Devices Through Web Services Domenico Talia and Paolo Trunfio DEIS, University of Calabria Via Pietro Bucci 41C 87036 Rende (CS), Italy 1.1 INTRODUCTION Analysis of data is
More information
Mobile Application Development
Mobile Application Development Development Process and Portability Christoph Denzler University of Applied Sciences Northwestern Switzerland Institute for Mobile and Distributed Systems Learning Target
More information
WEB SERVICES. Revised 9/29/2015
WEB SERVICES Revised 9/29/2015 This Page Intentionally Left Blank Table of Contents Web Services using WebLogic… 1 Developing Web Services on WebSphere… 2 Developing RESTful Services in Java v1.1…
More information
PROGRESS Portal Access Whitepaper
PROGRESS Portal Access Whitepaper Maciej Bogdanski, Michał Kosiedowski, Cezary Mazurek, Marzena Rabiega, Malgorzata Wolniewicz Poznan Supercomputing and Networking Center April 15, 2004 1 Introduction
More information
Mobile and Dynamic Web Services
Mobile and Dynamic Web Services Elena Sánchez-Nielsen, Sandra Martín-Ruiz, Jorge Rodríguez-Pedrianes Dpto. E.I.O. y Computación Escuela Técnica Superior de Ingeniería Informática Universidad de La Laguna,
More information
Developing Java Web Services
Page 1 of 5 Developing Java Web Services Hands On 35 Hours Online 5 Days In-Classroom A comprehensive look at the state of the art in developing interoperable web services on the Java EE platform. Students
More information
Java Web Services Training
Java Web Services Training Duration: 5 days Class Overview A comprehensive look at the state of the art in developing interoperable web services on the Java EE 6 platform. Students learn the key standards
More information
Microsoft.NET Mobile Web
БЪЛГАРСКА АКАДЕМИЯ НА НАУКИТЕ. BULGARIAN ACADEMY OF SCIENCES ПРОБЛЕМИ НА ТЕХНИЧЕСКАТА КИБЕРНЕТИКА И РОБОТИКАТА, 54 PROBLEMS OF ENGINEERING CYBERNETICS AND ROBOTICS, 54 София. 2004. Sofia Microsoft.NET
More information
Introduction to Testing Webservices
Introduction to Testing Webservices Author: Vinod R Patil Abstract Internet revolutionized the way information/data is made available to general public or business partners. Web services complement this
More information
Creating Web Services in NetBeans
Creating Web Services in NetBeans Fulvio Frati [email protected] Sesar Lab http://ra.crema.unimi.it 1 Outline Web Services Overview Creation of a Web Services Server Creation of different Web Services
More information
2sms SMS API Overview
2sms SMS API Overview Do you, or your customers, use any of the following software solutions in your business? If the answer is Yes, then 2sms provides the extensive SMS API Library that gives your software
More information
Server Monitoring Using Android Devices
Server Monitoring Using Android Devices Negar Shakeribehbahani, Nor Azlina Abd Rahman, Kamalanathan Shanmugam, Payam Nami Asia Pacific University of Technology and Innovation Kuala Lumpur, Malaysia [email protected]
More information
NetBeans IDE Field Guide
NetBeans IDE Field Guide Copyright 2005 Sun Microsystems, Inc. All rights reserved. Table of Contents Extending J2EE Applications with Web Services…1 Consuming Existing Web Services…2 Implementing
More information
примеров дескрипторов развертывания web.xml — Mkyong.com
Автор mkyong |
Просмотрено: 282 814 | +180 pv / w
web.xml
— это файл конфигурации, описывающий, как следует развернуть веб-приложение. Вот 5 web.xml
примеров, просто для справки.
1. Дескриптор развертывания сервлета 3.1
XML-схема Java EE 7, пространство имен http://xmlns.jcp.org/xml/ns/javaee/
web.xml
2. Дескриптор развертывания сервлета 3.0
XML-схема Java EE 6, пространство имен — http://java.sun.com/xml/ns/javaee
web.xml
<веб-приложение 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 "
version = "3.0">
3. Дескриптор развертывания сервлета 2.5
XML-схема Java EE 5, пространство имен http://java.sun.com/xml/ns/javaee
web.xml
<веб-приложение 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_2_5.xsd "
version = "2.5">
4. Дескриптор развертывания сервлета 2.4
Схема XML J2EE 1.4, пространство имен http://java.sun.com/xml/ns/j2ee
web.xml
<веб-приложение xmlns = "http://java.sun.com/xml/ns/j2ee"
xmlns: xsi = "http://www.w3.org/2001/XMLSchema-instance"
xsi: schemaLocation = "http: // java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd "
version = "2.4">
Веб-приложение Servlet 2.4
5. Дескриптор развертывания сервлета 2.3
Схема DTD J2EE 1.3. Этот файл web.xml
слишком старый, настоятельно рекомендуется обновить его.
web.xml
Веб-приложение
Веб-приложение Servlet 2.3
Важные изменения в Java Servlet
Посетите эту вики по сервлетам, чтобы получить сводку важных изменений с Servlet 2.3 до 3.0.
Ссылки
- Wikipedia — Дескриптор развертывания
- Wikipedia — Java Servlet Wiki
- Oracle — документация web.xml
- Oracle — схемы XML для дескрипторов развертывания Java EE
- Google App Engine web.xml для Java
- JSR-000315 Сервлет JavaTM 3.0
web.xml
Редактировать на GitHub
Файл дескриптора веб-приложения web.xml
представляет собой ядро веб-приложения Java, поэтому он подходит
что он также является частью ядра фреймворка Struts. В файле web.xml
Struts определяет свой FilterDispatcher,
класс Servlet Filter, который инициализирует структуру Struts и обрабатывает все запросы. Этот фильтр может содержать
параметры инициализации, которые влияют на то, какие дополнительные файлы конфигурации загружаются и как фреймворк
должен вести себя.
Простой пример
Настройка web.xml
для платформы — это вопрос добавления фильтра и сопоставления фильтров.
Пример фильтра (web.xml)
<версия веб-приложения = "2.4"
xmlns = "http://java.sun.com/xml/ns/j2ee"
xmlns: xsi = "http://www.w3.org/2001/XMLSchema-instance"
xsi: schemaLocation = "http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<фильтр>
struts2
орг.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter
struts2
/ *
Изменен пакет фильтров в Struts> = 2.5
Начиная со Struts 2.5 все фильтры были перемещены в верхний пакет, если вы используете старую версию, вы должны использовать старый пакет,
см. пример:
<версия веб-приложения = "2.4 дюйма
xmlns = "http://java.sun.com/xml/ns/j2ee"
xmlns: xsi = "http://www.w3.org/2001/XMLSchema-instance"
xsi: schemaLocation = "http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<фильтр>
struts2
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
...
Изменена структура фильтра в стойках> = 2.1.3
Чтобы разделить фазы диспетчера, FilterDispatcher устарел, начиная с Struts 2.1.3. Если вы работаете со старыми
версии, вам нужно использовать
...
<фильтр>
struts2
org.apache.struts2.dispatcher.FilterDispatcher
...
См. Плагин SiteMesh, чтобы узнать, когда использовать отдельные фильтры для подготовки
и этап исполнения
Исключить определенные URL-адреса
В приведенном выше примере мы сопоставили диспетчер Struts 2 с / *
, поэтому Struts 2 имеет трещину на всех входящих запросах.Это связано с тем, что Struts 2 обслуживает статический контент из своих файлов jar, включая файлы JavaScript Dojo (при использовании S2.0,
или плагин Dojo в S2.1 +) и шаблоны FreeMarker для тегов Struts 2, которые создают HTML.
Если мы изменим отображение фильтра на что-то другое, например /*.html
, мы должны это учесть и извлечь
контент, который обычно обслуживается из jar-файлов Struts 2, или какого-либо другого решения.
Начиная с Struts 2.1.7, вы можете предоставить список шаблонов, разделенных запятыми, для которых при сопоставлении с
URL-адрес запроса, мимо которого будет проходить фильтр.Это делается с помощью параметра конфигурации struts.action.excludePattern,
например, в вашем struts.xml:
<распорки>
...
Taglib, пример
Как правило, настройка библиотеки тегов не требуется и не рекомендуется. Taglib включен в struts-core.jar
, и
контейнер обнаружит это автоматически.
Если по какой-либо причине конфигурация библиотеки тегов необходима в web.xml, извлеките файл TLD из
struts-core.jar
META-INF
и добавьте элементtaglib
вweb.xml
.
/ с
/WEB-INF/struts-tags.tld
Пользовательские реализации FileManager и FileManagerFactory
Если есть необходимость в поддержке определенной файловой системы сервера приложений (например,VFS в JBoss), вы можете реализовать свой собственный
версия FileManager. Но он должен быть зарегистрирован в «начале» для поддержки начальной загрузки всего фреймворка.
Чтобы зарегистрировать свой собственный FileManger, вы можете сделать это с помощью
, как показано ниже:
<фильтр>
struts2
org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter
<имя-параметра> распорки.fileManager
com.company.MyFileManager
Вы также можете зарегистрировать свой собственный FileManagerFactory с
, см. Пример:
<фильтр>
struts2
org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter
<имя-параметра> распорки.fileManagerFactory
com.company.MyFileManagerFactory
Взгляните на реализации по умолчанию — DefaultFileManager.java
и DefaultFileManagerFactory.java
, чтобы понять, как и почему.
Поставщик нестандартной конфигурации
Для программного конфигурирования приложения можно использовать собственный ConfigurationProvider
.Для этого используйте
configProviders
(это может быть список имен классов, разделенных запятыми)
, как показано ниже:
<фильтр>
struts2
org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter
configProviders
com.company.MyConfigurationProvider
Дополнительные сведения см. В разделе «Поставщик конфигурации и конфигурация».
web.xml Справочное руководство для Tomcat
web.xml Справочное руководство для Tomcat
Введение
Файл дескриптора развертывания web.xml описывает, как развернуть веб-приложение в контейнере сервлетов, таком как Tomcat.
Этот файл требуется для каждого приложения , которое вы развертываете на Tomcat. Вы найдете его в jsp-examples, servlet-examples и ROOT-приложениях, представленных на новом веб-сайте Tomcat, а также в каждом загружаемом вами примере веб-приложения, включая файлы WAR.
Расположение файла всегда одно и то же: корень приложения / WEB-INF / web.xml
Как минимум, файл должен содержать дескриптор XML, а также открывающий и закрывающий тег
Вот минимальный пример в стиле XSD для Tomcat 6.0. Для других версий (7.0, 5.5, 5.0 и т. Д.) И для сравнения объявлений XSD и DTD см. Web.xml DTD и XSD.
xml version = "1.0" encoding = "ISO-8859-1"?> <веб-приложение xmlns = "http://java.sun.com/xml/ns/j2ee" 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_2_5.xsd" version = "2.5">
Внутри тега
Подробный справочник — щелкните тег для получения дополнительной информации
xml version = "1.0" encoding = "UTF-8"?>
<веб-приложение xmlns = "http://java.sun.com/xml/ns/j2ee"
xmlns: xsi = «http: // www.w3.org/2001/XMLSchema-instance »
xsi: schemaLocation = «http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd»
version = «2.4»>
<распространяемый />
<конфигурация-сеанса>
не обязательно должен быть дочерним по отношению к
для каждого web.xml ->
<расположение-тега> / WEB-INF / jsp / mytaglib.tld
->
<параметр-контекст>
<описание> Адрес электронной почты администратора, используемый для отправки отчетов об ошибках.
<вход>
<сервлет>
<отображение-сервлета>
<сервлет>
0:00, 6:00, 12:00, 18:00 Этот тег действителен только для смолы ->
<отображение-сервлета>
<сервлет>
<отображение-сервлета>
<отображение-сервлета>
<сервлет>
<отображение-сервлета>
<фильтр>
<фильтр>
<слушатель>
<класс-слушателя> com.metawerx.listener.ContextListener
<слушатель>
<роль-безопасности>
<имя-роли> администратор имя-роли>
<роль-безопасности>
<ограничение-безопасность>
<коллекция веб-ресурсов>
->
<имя-роли> администратор имя-роли>
->
<ограничение-безопасность>
<коллекция веб-ресурсов>
<ограничение-данных-пользователя>
<страница-ошибка>
<расположение> / error404.jsp
<страница-ошибка>
<отображение-кодирования-локального>
<список файлов приветствия>
Дополнительная информация
Web.xml Filter Mapping в JSP Servlet с примером
- Home
Testing
- Back
- Agile Testing
- BugZilla
- Cucumber
- Database Testing
- ETL Testing
- Jmeter
- Jmeter
- Назад
- JUnit
- LoadRunner
- Ручное тестирование
- Мобильное тестирование
- Mantis
- Почтальон
- QTP
- Назад
- Центр качества (ALM)
- RPA
- SAP Testing
- Selenium
- SoapUI
- Управление тестированием
- TestLink
SAP
- Назад
- ABAP
- APO
- Начинающий
- Basis
- BODS
- BI
- BPC
- CO
- Назад
- CRM
- Crystal Reports
- FICO
- HANA
- HR
- QM
- Заработная плата
- Назад
- PI / PO
- PP
- SD
- SAPUI5
- Безопасность
- Менеджер решений
- Successfactors
- SAP Tutorials
Интернет
- Назад
- Apache
- AngularJS
- ASP.Net
- C
- C #
- C ++
- CodeIgniter
- DBMS
- JavaScript
- Назад
- Java
- JSP
- Kotlin
- Linux
- MariaDB
- MS Access
- MYSQL
- Node. js
- Perl
- Назад
- PHP
- PL / SQL
- PostgreSQL
- Python
- ReactJS
- Ruby & Rails
- Scala
- SQL
- SQLite
- Назад
- SQL Server
- UML
- VB.Net
- VBScript
- Веб-службы
- WPF
Обязательно изучите!
- Назад
- Бухгалтерский учет
- Алгоритмы
- Android
- Блокчейн
- Бизнес-аналитик
- Создание веб-сайта
- Облачные вычисления
- COBOL
- Дизайн компилятора
- Назад
- Встроенные системы
- Этический взлом
- Учебники Excel
- Программирование Go
- IoT
- ITIL
- Jenkins
- MIS
- Сеть
- Операционная система
- Назад
- Подготовка
- PMP
- Photoshop
- Управление проектами
- Обзоры
- Salesforce
- SEO
- Разработка программного обеспечения
- VBA
900 79
Big Data
- Назад
- AWS
- BigData
- Cassandra
- Cognos
- Хранилище данных
- DevOps
- HBase
- Назад
- Hivearate
- MongoDB
- NiFi
Luxor
Перейти в Luxor SwiXml
Перейти к SwiXml XUI
Перейти к XUI Графический интерфейс Beryl XML
Перейти к Beryl XML GUI Purnama XUI
Перейти к Purnama XUI SwingML
Перейти к SwingML UIHierarchy
Перейти к UIHierarchy thinlet
Перейти в thinlet jXUL
Перейти к jXUL KoalaGMLПерейти к KoalaGML WidgetServer
Перейти к WidgetServer Laszlo
Go To Laszlo gui4j
Перейти к gui4j XAMJ
Перейти к XAMJ JAXX
Перейти к JAXX wazaabi
Перейти к wazaabi CookSwing
Перейти к CookSwing web.xml — Java-разработка — Community Wikiweb.xml — Java-разработка — Community Wiki Перейти в конец баннера Перейти к началу баннера Перейти к концу метаданных Перейти к началу метаданных
{«serverDuration»: 82, «requestCorrelationId»: «3d3933a9bbaf4772»} |