Главная » Браузер » Java web выгрузка больших файлов из браузера
Включение поддержки Java Web Start в IDE NetBeans. Java web выгрузка больших файлов из браузера
Study & Dev | Blog Archive
Заметки про java и загрузку файлов с помощью commons fileupload
Введение
Сегодня я расскажу о том, как выполнять загрузку файлов из браузера в ваш сервлет или jsp-файл. Не секрет, что встроенной поддержки загрузки файлов в j2ee нет. Иногда по форумам кочуют самодельные скрипты парсинга http-запроса (несколько лет назад я и сам баловался написанием анализатора http-запросов), но то время прошло и теперь все большее количество java-разработчиков открывают для себя Commons FileUpload.
Напомню, что для того, чтобы html-форма могла отправить файл, необходимо указать для нее метод отправки “method” равный “post” (ну не в адресной же строке передавать содержимое файла…). А также необходимо указать способ кодирования отправляемой информации равным “multipart/form-data” (есть два алгоритма кодирования информации перед отправкой по сети: “multipart/form-data” и “x-www-form-urlencoded”). Для доступа к обычным (текстовым) полям формы мы используем либо вызовы:
Проблема в том, что так добраться до присланных из формы полей можно лишь в случае, если данные были присланы методом “x-www-form-urlencoded”. В случае же метода “multipart/form-data”, мы не можем добраться не только до полей с файлами, но и даже до обычных текстовых полей. Особенность парсинга входящих запросов в java в том, что первое же обращение к присланным веб-приложению параметрам с помощью getParameter приведет к потере “сырых” данных и другие приложения не смогут выполнить повторный парсинг данных (с учетом каких-либо особенностей входного потока). Например, если вы работаете со struts (который сам выполняет парсинг mutipart-запросов), то использование commons fileupload вызывает ряд сложностей. Но хватит слов, давайте напишем немного кода:
Немножко кода
Стадия настройки: в методе init сервлет-а необходимо создать фабрику DiskFileItemFactory. Ее назначение – управлять параметрами обработки запроса. Дело в том, что все входящие переменные (как обычные, так и файловые) сохраняются либо в памяти либо на жестком диске сервера в зависимости от их размера. Откровенно говоря, мне не нравится такой подход, т.к. почти всегда данные пришедшие из текстовых полей приходится помещать в базу данных и эти данные действительно должны находиться в памяти. А вот ситуации с обработкой пришедших файлов (например, изменение размера картинки или конвертация видео-файла являются достаточно редкими) обычно файл просто переносится в определенную папку на сервера. А в базу данных заносится имя этого файла. Возвращаясь к вопросу создания фабрики, вы должны указать в качестве параметров конструктора число (играющее роль порога для принятия решения: сохранять ли входную переменную на диск или в файл), вторым же параметром при создании DiskFileItemFactory выступает путь к каталогу, где будут сохраняться временные файлы. Если вы эти значения не укажите, то в качестве пороговой величины будет принята отметка в 10240 байт, а для каталога с файлами используется значение возвращаемой системной переменной:
System.getProperty("java.io.tmpdir").
Для обеспечения автоматического удаления временных файлов вы можете запустить специальный сервис FileCleanerCleanup. Этот сервлет-слушатель, запускает специальный сервис отслеживания ненужных файлов и уничтожения их, как только все ссылки на подобный файл будут уничтожены (надо сказать, что в документации написано, что поддержка удаления файлов будет выполнена автоматически при выполнении сборки мусора – но оставлять этот вопрос на самотек не желательно). Для регистрации “сборщика мусора” нужно добавить в файл web.xml следующие строки:
После создания фабрики DiskFileItemFactory вы создаете объект, непосредственно отвечающий за процесс парсинга входящего запроса. Делать это нужно в зависимости от того, в какой среде выполняется ваше приложение, если это обычный сервлет или jsp, то используйте вызов:
ServletFileUpload upload = new ServletFileUpload(factory);
Ну а если ваше приложение организовано как портлет, то нужно создать другой объект:
PortletFileUpload upload = new PortletFileUpload (factory);
Все эти два класса являются наследниками от org.apache.commons.fileupload.FileUploadBase. После создания парсер можно настроить указав ряд параметров:
setSizeMax – задает максимальный размер суммарно всех файлов загружаемых на сервер. Для установки предельного значения для файла в отдельности используется вызов setFileSizeMax. Также здесь можно установить с помощью вызова setProgressListener специальный класс-слушатель прогресса загрузки файлов – это может быть полезным для ajax-приложений.
Но перед тем как мы выполним парсинг запроса, необходимо проверить является ли входящий запрос “понятным” для commons fileupload. Для этого вызовите статический метод isMultipartContent, передав ему ссылку на объект входящего запроса ServletRequest.
Если метод вернет false, значит данные пришли будучи закодированными с помощью “x-www-form-urlencoded” и на этом участие commons fileupload заканчивается. Собственно, парсинг выполняется вызовом метода parseRequest. В качестве результат будет возвращен список “элементов” запроса, каждый из этих элементов представляет собой объект, реализующий интерфейс FileItem. В составе этого интерфейса есть методы позволяющие получить подробные сведения об загруженных файлах или обычных полях. Например:
ServletFileUpload upload = new ServletFileUpload(factory);
List items = upload.parseRequest(request);
Iterator iter = items.iterator();
// получили список всех полей из html-формы
while (iter.hasNext()) {
FileItem item = (FileItem) iter.next();
// берем элемент формы и анализируем то, какого он типа
if (item.isFormField()) {
// если обычное поле, то мы можем получить его значение в выбранной кодировке
// с помощью вызова getString(нужная кодировка)
item.getString(usedCharset);
}
else {
// если файл
// так мы получим значение оригинального имени файла
String name = item.getName();
long filelen = item.getSize();
// так мы определим его размер
// а так мы определим его content-type
String cct = item.getContentType()
// а теперь нужно что-то сделать с самим содержимым файла ....
}//else если это обычное текстовое поле, а не файл
} // завершили обработку запроса с помощью mutipart/form-data.
Работа, собственно, с содержимым файла не сильно зависит от того, находится ли он на диске, во временном файле, или в памяти. Фактически мы можем проверить наличие файла в памяти с помощью вызова isInMemory, но практического смысла это не имеет. Вы можете получить сырое содержимое файла в виде массива байтов с помощью вызова:
byte[] data = item.get();
Если файл текстовый и вы знаете его кодировку, то можно сразу прочитать все его содержимое в выбранной кодировке с помощью вызова:
String fcontent = item.getString(“utf-8”)
Надо сказать, что такой же метод getString используется и для получения значения обычного текстового поля.
Или вы можете получить ссылку на байтовый поток с помощью вызова:
InputStream is = item.getInputStream();
Мой велосипед
В целом ничего сложного. Тем не менее, я в свое время создал сервлет-фильтр работающий совместно с fileuploads и решающим одну неприятную проблему: после того как данные были обработаны с помощью fileuploads, вы вынуждены работать с данными только показанным выше способом (через объекты FileItem). Вызов же метода request.getParameter (‘имя_переменной’) ничего не возвращает.
Как работает мой сервлет фильтр? Прежде всего, вы должны скопировать в папку lib вашего веб-приложения библиотеки нужные для работы собственно commons fileuploads, это архивы: commons-fileupload-1.1.1.jar и commons-io-1.2.jar. Затем вы регистрируете в файле web.xml сервлет фильтр и указываете то, какие адреса он должен обрабатывать. В качестве параметров сервлета нужно указать значение кодировки, в которой будут рассматриваться входящие обычные текстовые переменные (этот параметр необходим т.к. стандартная методика с request.setCharacterEncoding не работает: ведь вызов сервлета фильтра будет выполнен до того как управление попадет к вашему сервлету или jsp-файлу). Все обычные переменные будут помещены внутрь объекта request и вы можете обращаться к ним как раньше без какого либо изменения в коде. Фактически ваше приложение вообще не будет догадываться о том, что перед ним работает commons fileuploads и мой фильтр. Относительно загружаемых файлов, то все они помещаются стандартного каталога для временных файлов, а после окончания работы вашего кода будут автоматически удалены. Так что вам необходимо выполнить перемещение этих файлов в какой-то другой каталог (если, конечно, эти файлы вам нужны, в противном случае ничего с ними не делайте и они будут автоматически удалены). Фактически метод работы фильтра очень похож на принятую в php методику загрузки файлов: файлы хранятся во временном каталоге, а в специальной переменной (в атрибуты запроса помещается переменная с именем f$) хранится список описаний загруженных файлов. А вот на формате хранения данных о файлах стоит остановиться попозже подробнее.
Вот пример подключения сервлета-фильтра к вашему веб-приложению:
Обратите внимание на параметры фильтра: force-set-encoding-multipart и force-set-encoding-urlencoded. Они оба указывают на используемую при анализе полученного содержимого формы кодировку. Однако в случае если эти параметры не указаны, то их значения интерпретируются по-разному. В первом случае используется кодировка ISO8859-1, во втором же случае, запрос пропускается без парсинга входящего набора данных. И установка нужного значения кодировки должна быть выполнена пользовательским сервлетом или jsp-файлом.
Итак, доступ к обычным полям формы выполняется так, как вы привыкли (с помощью getParameter), а как быть с выходными данными.
Есть два стиля возвращаемых данных и зависящих от параметров в файле web.xml. Ни в одном из этих случаев, нет доступа к структурам данных, используемым fileuploads: фактически, разработчик может не догадывался об их существовании (плохо это или хорошо – думайте сами). Чем обусловлено существование двух стилей возвращаемых данны? Очевидно удобством работы.
Вот пример формы, которая отправит данные на сервер:
Обратите внимание, что есть два элемента формы, имеющие одинаковые имена, заканчивающиеся на “[]”. Фактически вы можете загрузить на сервер набор файлов с одинаковым именем (это удобно в случае динамической генерации списка полей для загрузки файла).
Элементарная единица информации, которая хранит сведения о файле (оригинальное имя файла, его размер, mime-тип, а также путь к каталогу с временными файлами, где находится загруженный файл) - это карта HashMap . В качестве ключей этой карты выступают предопределенные имена ключей: orig_name, tmp_name, size , content-type . Все сведения об полученных файлах помещаются внутрь еще одной карты вида HashMap . В качестве, ключа этой карты выступают имена переменных формы (foto, pics[]).
В случае если имя поля формы не заканчивается на “[]”, то в качестве значения “карты” находится одиночный HashMap. В противном случае в качетсве значения “карты” выступает список (ArrayList) хранящий сведения об множестве файлов загруженных на сервер под одним и тем же именем. Рассмотрим это на примере:
Примеры работы
В конфигурационный файл приложения необходимо добавить опцию:
Возможно вам покажется громоздким выполнение проверки что же именно хранится в карте “f$”: обычный HashMap (тогда это обычный одиночный файл), или же там хранится ArrayList (когда выполняется загрузка массива файлов). С другой стороны, если вы работаете только с одиночными загружаемыми файлами, то ваш код будет наиболее простым.
А вот как будут выглядеть полученные сведения о файлах в случае использования стиля оформления результата # 1:
foto=[{orig_name=Baza_6_2.png, content-type=image/png, size=13643, tmp_name=E:\Program_Files_2\apache-tomcat-6.0.14\temp\zedzed9822zedzed} ] pics=[{orig_name=Baza_6_1.png, content-type=image/png, size=6012, tmp_name=E:\Program_Files_2\apache-tomcat-6.0.14\temp\zedzed9823zedzed}, {orig_name=Baza_6_3.png, content-type=image/png, size=31879, tmp_name=E:\Program_Files_2\apache-tomcat-6.0.14\temp\zedzed9824zedzed} ] Файлы Получены в качестве параметров несколько файлов ... анализирую... Переменная содержит только один файл ------------- orig_name: Baza_6_2.png tmp_name: E:\Program_Files_2\apache-tomcat-6.0.14\temp\zedzed9829zedzed size: 13643 content-type: image/png ------------- Переменная содержит список файлов ------------- orig_name: Baza_6_1.png tmp_name: E:\Program_Files_2\apache-tomcat-6.0.14\temp\zedzed9830zedzed size: 6012 content-type: image/png ------------- ------------- orig_name: Baza_6_3.png tmp_name: E:\Program_Files_2\apache-tomcat-6.0.14\temp\zedzed9831zedzed size: 31879 content-type: image/png ------------- Во втором случае результаты разбора запроса будут унифицированы и не зависимо от того, передан один файл или их массив, в качестве значения карты “f$” будет храниться список (возможно состоящий из одного элемента). Зато такие данные удобно обрабатывать в циклах:
Вот так будет выглядеть конфигурационный параметр в файле web.xml:
А вот как будут выглядеть полученные сведения о файлах в случае использования стиля оформления результата # 2:foto=[{orig_name=Baza_6_2.png, content-type=image/png, size=13643, tmp_name=E:\Program_Files_2\apache-tomcat-6.0.14\temp\zedzed9850zedzed} ] pics=[{orig_name=Baza_6_1.png, content-type=image/png, size=6012, tmp_name=E:\Program_Files_2\apache-tomcat-6.0.14\temp\zedzed9851zedzed}, {orig_name=Baza_6_3.png, content-type=image/png, size=31879, tmp_name=E:\Program_Files_2\apache-tomcat-6.0.14\temp\zedzed9852zedzed} ] Получены в качестве параметров несколько файлов ... анализирую... Переменная содержит список файлов ------------- orig_name: Baza_6_2.png tmp_name: E:\Program_Files_2\apache-tomcat-6.0.14\temp\zedzed9850zedzed size: 13643 content-type: image/png ------------- Переменная содержит список файлов ------------- orig_name: Baza_6_1.png tmp_name: E:\Program_Files_2\apache-tomcat-6.0.14\temp\zedzed9851zedzed size: 6012 content-type: image/png ------------- ------------- orig_name: Baza_6_3.png tmp_name: E:\Program_Files_2\apache-tomcat-6.0.14\temp\zedzed9852zedzed size: 31879 content-type: image/png -------------
JavaPowUpload - это Java апплет, который позволяет как скачивать файлы с сервера, так и загружать их на сервер. Технология Java позволяет получить полный доступ к файловой системе пользователя, что, в свою очередь, позволяет загружать не только файлы , но и целую структуру папок; отображать локальную файловую систему пользователя прямо в апплете на веб странице; сжимать файлы перед отправкой; скачивать множество файлов одним нажатием и многое другое.
Основные примущества:
Поддержка различных языков. (Английский, Французский, немецкий и другие Более 30 языков ) Новое в v2.0.5
Сжатие файлов перед отправкой на сервер. Новое в v2.1.0
Загрузка на сервер сразу нескольких файлов и папок. Демо
Скачивание сразу множества файлов и папок Демо
Возможность продолжить скачивание или загрузку на сервер с момента разъединения. Новое в v2.0.3 Демо
Загрузка огромных файлов Новое в v2.0.3
Предпросмотрт изображений, создание и загрузка на сервер миниатюр Демо
Загрузка файлов напрямую на сервера Amazon S3 (Simple Storage Service) Новое в v2.1.0
Онлайн демо Screenshots
JavaPowUpload универсальный иснтрумент
JavaPowUpload может работать на 99% браузеров и сайтов. Он поддерживает все популярные браузеры(IE, Firefox, Opera, Safari, и другие). Большинство из пользователей уже имеют установленную Java (и количество таких пользователей постоянно растет), также JRE может быть автоматически установлена в течение нескольких минут. JavaPowUpload может работать на любой системе, где установлена JRE ( Java Runtime Environment) .JavaPowUpload поддерживает все популярные сервера и скрипты для сохранения файлов: PHP, ASP.NET, Perl и другие.
Кому может пригодиться JavaPowUpload?
JavaPowUpload может быть интегрирован на любой веб сайт и на любую веб страницу. При этом веб мастеру не обязательно быть программистом, чтобы сделать это. И, уж тем более, нет никакой необходимости изучать язык Java. Любой, кто хочет предоставить своим посетителям возможность скачивать и загружать множество файлов и и папок, может использовать JavaPowUpload. При этом вашим пользователям не нужно будет устанавливать какие-либо дополнительные программы (например, менеджеры загрузки или ftp клиенты). Большинство задач, связанных с загрузкой и скачиванием фалов, может быть решено с помощью JavaPowUpload.
Основные функции JavaPowUpload
Функции выбора файлов и папок:
Выбор нескольких файлов за раз мышкой или с помощью клавиш Ctrl и Shift.
Выбор нескольких папок (включая подкаталоги) для зарузки на сервер.
Поддержка технологии Drag-n-drop для файлов и папок - можно перетаскивать файлы и папки прямо с рабочего стола.
Дополнительные функции:
Возобновление загрузки если соединение с сервером было разорвано.
Загрузка огромных файлов (10 ГБ проверено).
Загрузка файла целиком или частями (chunked).
Нет зависимости от ограничений сервера на рзмер запроса (настройки в php.ini, web.config, и т.д.)
Функции работы с изображениями:
Просмотр изображений в интерфейсе JavaPowUpload.
Операции с изображениями: поворот, обрезка, изменение размера.
Отправка изображений на сервер, после применения всех операций.
Возможность использовать водяной знак.
Удобный и настраиваемый интерфейс:
Поддержка тем. 45 тем включено.
Отображение информации о процессе загрузки файлов.
Поддержка различных языков. Английский, Французский, немецкий и другие Более 30 языков
Возможность полностью контролировать апплет с помощью JavaScript API. Это позволяет вам использовать ваш собственный интерфейс, основанный на HTML и javaScript и подходящий под дизайн именно вашего сайта.
Загрузка и скачивание файлов в одном продукте, с единым стилем.
Возможность задать ограничения:
Возможность задать ограничения на тип загружаемых файлов, из размер и количество. Например, вы можете разрешить зарзку только изображений.
Возможность задать список игнорируемых файлов. Например, запретить загрузку файлов с расширениями exe, com, bat.
Диалог выбора файлов может настроен для выбора файлов и папок, только файлов или только папок.
Поддержка технологий и стандартов:
Для отправки файлов на сервер JavaPowUpload использует стандарт RFC1867.
Поддреджка протоколов HTTP, SSL/HTTPS, FTP, FTPS.
Поддержка аутентификации (Forms, Basic, Windows ).
JavaPowUpload автоматически подхватит и отправит на сервер Cookies , которые доступны для текущей страницы.
Поддержка прокси (Proxy) серверов. Настройки прокси (Proxy ) сервера автоматически берутся из системы, при этом пользователь может, хадать их вручную в интерфейсе JavaPowUpload.
Не нашли нужной функциональности? Посмотрите другие продукты: основанный на Flash MultiPowUpload , основанный на Silverlight Ultimate Uploader , ActiveX ActiveXPowUpload.
Требования к серверной части:
Любая операционная система и любой веб сервер.
Стандартный скрипт, который будет сохранять файлы на сервере. В дистрибутив включены серверные скрипты для платформ: ASP, ASP.NET, PHP, JSP, ColdFusion и Perl.
Требования для пользовательской части:
Любая операционная система.
Любой браузер.
Java Runtime Environment версии > 1.5 (выпущена в 2004 году). Установлена у большинство пользователей.
www.element-it.com
Включение поддержки Java Web Start в IDE NetBeans
Выполнение действий данного учебного курса позволит изучить способы настройки приложения, позволяющие развернуть его с помощью Java Web Start. Java Web Start представляет собой технологию, используемую для запуска приложений Java из веб-браузера одним щелчком мыши. Другими словами, Java Web Start является еще одним способом развертывания приложений Java.
В этому учебном курсе в качестве примера используется простое приложение на языке Java – "Converter", преобразующее измерения расстояний из метрической системы измерений в систему измерений, принятую в США. Код этого примера доступен для загрузки; возможно, чтобы запустить проект, используя Java Web Start, придется выполнить его настройку. Файлы приложения можно загрузить на любой доступный удаленный веб-сервер.
Изучение материала, представленного в этом учебном курсе, занимает приблизительно 20 минут.
Содержание
Для работы с этим учебным курсом требуются программное обеспечение и материалы, перечисленные в таблице ниже.
Открытие проекта
Откройте приложение Converter в среде IDE. Приложение уже упаковано как проект IDE NetBeans, поэтому пользователю нужно просто открыть проект в среде IDE.
Исходный код демонстрационного примера Converter содержится в учебном курсе Java. Сведения о способах написания этого небольшого приложения приведены в разделе Использование компонентов Swing учебного курса по Java. В данном учебном курсе описана настройка проекта для запуска данного приложения Java в веб-браузере.
В среде IDE выберите команду "Файл" > "Открыть проект" из главного меню. В окне "Проекты" откроется проект ConverterPrj. Для просмотра исходных файлов разверните узел проекта.
Настройка проекта для активации Java Web Start
С помощью Java Web Start пользователь может запустить приложение Java, щелкнув HTML-ссылку на файл JNLP этого приложения в веб-браузере. Файл JNLP, являющийся специальным файлом настройки, дает Java Web Start команду на загрузку, кэширование и запуск приложения Java. Для запуска приложений с помощью Java Web Start необходимо наличие установленной совместимой версии Java Runtime Environment (JRE) на клиентской машине. Установка комплекта для разработчика на языке Java (JDK) не требуется.
Для запуска приложения Java совместно с Java Web Start необходимо настроить свойства создания проекта средой IDE. Если Java Web Start активирован в свойствах проекта, среда IDE вместе с файлом JAR автоматически создает файл JNLP и страницу HTML со ссылкой на файл JNLP.
Настройка проекта для активации Java Web Start
В этом упражнении вы выполните настройку проекта для активации Java Web Start и протестируете ее выполнение локально.
Щелкните правой кнопкой мыши узел проекта ConverterPrj и выберите команду "Свойства".
В группе "Categories" выберите "Web Start" и установите флажок "Enable Web Start".
Выберите параметр "Локальное выполнение" из раскрывающегося списка "Кодовая база", поскольку сначала мы выполним приложение локально. В поле "Codebase Preview" отображается путь к локальным файлам приложения.
Нажмите кнопку "Настроить", чтобы открыть диалоговое окно "Подписывание". Выберите параметр Самоподписание сгенерированным ключом. Файл приложения JAR подписывается сертификатом, генерируемым автоматически при создании проекта. Благодаря самоподписанному сертификату приложение сможет получить доступ к тем же ресурсам компьютера, что и обычное приложение, запускаемое локально. Так, самоподписанные сертификаты дают приложению доступ к локальным файлам и сети.
Оставьте флажок "Включить защиту программного обеспечения" в раскрывающемся списке "Смешанный код", затем нажмите кнопку "ОК".
(Дополнительно) В диалоговом окне 'Свойства проекта' выберите панель 'Приложение' и измените название и поставщика приложения.
Нажмите кнопку "ОК" для закрытия диалогового окна "Свойства проекта".
Компиляция и выполнение приложения Java Web Start из среды IDE
Чтобы скомпилировать и запустить приложения для локального тестирования Java Web Start выполните следующие действия:
Выберите узел проекта ConverterPrj в окне ''Проекты', затем выберите 'Выполнить > Выбрать основной проект > ConverterPrj' в главном меню.
Выберите "Выполнить" > "Выполнить основной проект" или нажмите клавишу F6. Среда IDE скомпилирует исходный код, после чего появится экран запуска Java и предупреждение об опасности выполнения неподписанного приложения.
Установите флажок, подтверждающий, что вы доверяете содержимому приложения, и нажмите кнопку "Выполнить" в окне предупреждения. Приложение Converter будет запущено.
Просмотр файлов Java Web Start
Перейдем к подробному рассмотрению файлов Java Web Start, созданных средой IDE в процессе сборки (Выполнить > Собрать проект).
Для просмотра файлов откройте окно "Файлы" в среде IDE и разверните папку dist.
Для Java Web Start были созданы два дополнительных файла:
launch.jnlp — файл XML со специальными элементами и атрибутами, указывающий браузеру способы выполнения приложения. JNLP означает Java Network Launching Protocol. Атрибуты файлов JNLP могут включать в себя версию спецификации JNLP, заголовок приложения, имя поставщика, ссылку на файл JAR приложения и т.п.;
launch.html — автоматически созданная страница HTML, содержащая ссылку на файл JNLP. Для запуска приложения посредством Java Web Start достаточно щелкнуть эту ссылку. Также этот файл HTML содержит закомментированную ссылку на общедоступный инструментарий Java Deployment Toolkit (deployJava.js), предоставляющий функции JavaScript, позволяющие избежать проблем совместимости. Более подробные сведения по Java Deployment Toolkit приведены по данной ссылке.
Попробуйте сделать следующее: вне среды IDE перейдите к файлу launch.html, откройте его в браузере и щелкните ссылку, запускающую демонстрационное приложение Converter.
Запуск приложения из удаленного местоположения
После успешного запуска приложения с Java Web Start из локального источника попробуем выгрузить его на удаленный сервер и запустить оттуда.
Примечание. Для развертывания приложений с использованием Java Web Start через Интернет, используемый веб-сервер должен поддерживать обработку файлов JNLP. Веб-сервер должен быть настроен на распознавание файлов JNLP в качестве приложений, т.е. в настройки веб-сервера необходимо добавить тип MIME для JNLP. В противном случае файлы JNLP будут обрабатываться сервером как обычные текстовые файлы. Дополнительные сведения по настройке веб-сервера приведены в Руководстве по Java Web Start.
Изменение файла JNLP
Для запуска приложения из Интернета необходимо включить ссылку на файл исходного кода приложения в Интернете в файл JNLP.
Щелкните правой кнопкой мыши узел проекта ConverterPrj и выберите в группе "Категории" пункт "Web Start".
Выберите в списке "Кодовая база" вариант "Пользовательская".
Введите в поле "Предварительный просмотр базы кода" URL-адрес сервера, на который будут выгружены файлы исходного кода. Например, http://mydomain.com/myuser/converter/.
Нажмите кнопку "ОК" в окне "Свойства проекта".
Щелкните правой кнопкой мыши узел ConverterPrj и выберите "Очистить и построить". Эта команда среды IDE удаляет все ранее скомпилированные файлы и результаты сборки, перекомпилирует приложение и создает файл результатов сборки с текущими настройками.
Выгрузка файлов с исходным кодом
Теперь мы выгрузим файлы с исходным кодом на сервер и выполним оттуда приложение. Обратите внимание, что все пользовательские данные и имена проектов, упомянутые в этом примере, необходимо изменить на ваши собственные.
Войдите на веб-сервер и перейдите к области загрузки проекта. В этом случае проект называется "IDE NetBeans Documentation Area"
Выгрузите следующие файлы из локальной папки вашего проекта dist в каталог проекта: ConverterPrj.jar, launch.html и launch.jnlp.
На рисунке ниже показана область загрузок для проекта IDE NetBeans Documentation Area.
Запустите приложение. Введите в окне браузера URL-адрес файла launch.html и перейдите по ссылке "Запустить приложение".
Приложение Converter будет запущено с помощью Java Web Start.
Заключение
В этом коротком учебном курсе описывается простое создание приложения Java, которое может быть развернуто через Интернет с помощью IDE NetBeans. Это только один из способов развертывания приложений Java.
Дополнительные сведения
Для получения дополнительных сведений о технологиях Java Web Start можно воспользоваться следующими материалами:
Руководство по Java Web Start — руководство по использованию технологии Java Web Start;
Урок: Java Web Start из учебного курса по Java — практические примеры использования Java Web Start для создания приложений.