У овом примеру ћемо научити о отпремању и преузимању датотеке путем ЈСП-а.
Излаз за унос датотека су врло важне операције. Овде ћемо читати и писати датотеку користећи ЈСП.
Отпремање датотеке ЈСП
- Све датотеке можемо да отпремимо помоћу ЈСП-а.
- То може бити текстуална датотека, бинарна датотека, датотека слика или било који други документ.
- Овде ће се у случају отпремања датотека користити само ПОСТ метода, а не ГЕТ метода.
- Атрибут Енцтипе треба поставити на мултипарт / форм-дата.
Пример: Коришћење акције
У овом примеру преносимо датотеку помоћу ИО објекта
Ацтион_филе.јсп
<% @ паге лангуаге = "јава" цонтентТипе = "тект / хтмл; цхарсет = ИСО-8859-1"пагеЕнцодинг = "ИСО-8859-1"%><хтмл><хеад><мета хттп-екуив = "Цонтент-Типе" цонтент = "тект / хтмл; цхарсет = ИСО-8859-1"><титле> Гуру датотека титле>хеад><боди><а> Гуру отпремање датотека: а>Изаберите датотеку: <бр /><форм ацтион = "ацтион_филе_уплоад.јсп" метход = "пост"енцтипе = "мултипарт / форм-дата"><инпут типе = "филе" наме = "филе" сизе = "50" /><бр /><инпут типе = "субмит" валуе = "Уплоад Филе" />форм>боди>хтмл>
Ацтион_филе_уплоад.јсп
<% @ паге лангуаге = "јава" цонтентТипе = "тект / хтмл; цхарсет = ИСО-8859-1"пагеЕнцодинг = "ИСО-8859-1"%><% @ паге импорт = "јава.ио. *, јава.утил. *, јавак.сервлет. *"%><% @ паге импорт = "јавак.сервлет.хттп. *"%><% @ паге импорт = "орг.апацхе.цоммонс.филеуплоад. *"%><% @ паге импорт = "орг.апацхе.цоммонс.филеуплоад.диск. *"%><% @ паге импорт = "орг.апацхе.цоммонс.филеуплоад.сервлет. *"%><% @ паге импорт = "орг.апацхе.цоммонс.ио.оутпут. *"%><хтмл><хеад><мета хттп-екуив = "Цонтент-Типе" цонтент = "тект / хтмл; цхарсет = ИСО-8859-1"><титле> Гуру отпремање датотека титле>хеад><боди><%Датотека датотеке;инт макФилеСизе = 5000 * 1024;инт макМемСизе = 5000 * 1024;Стринг филеПатх = "Е: / гуру99 / дата";Стринг цонтентТипе = рекуест.гетЦонтентТипе ();иф ((цонтентТипе.индекОф ("мултипарт / форм-дата")> = 0)) {ДискФилеИтемФацтори фацтори = нова ДискФилеИтемФацтори ();фацтори.сетСизеТхресхолд (макМемСизе);фацтори.сетРепоситори (нова датотека ("ц: \\ темп"));СервлетФилеУплоад уплоад = нови СервлетФилеУплоад (фабрички);уплоад.сетСизеМак (макФилеСизе);покушати{Листа филеИтемс = уплоад.парсеРекуест (захтев);Итератор и = филеИтемс.итератор ();оут.принтлн ("<хтмл>");оут.принтлн ("<боди>");вхиле (и.хасНект ()){ФилеИтем фи = (ФилеИтем) и.нект ();иф (! фи.исФормФиелд ()) {Низ пољаНаме = фи.гетФиелдНаме ();СтрингНаме датотеке = фи.гетНаме ();боолеан исИнМемори = фи.исИнМемори ();лонг сизеИнБитес = фи.гетСизе ();датотека = нова датотека (филеПатх + "иоурФилеНаме");фи.врите (датотека);оут.принтлн ("Отпремљено име датотеке: + филеПатх + филеНаме + "<бр>");}}оут.принтлн ("боди>");оут.принтлн ("хтмл>");} цатцх (Изузетак ек) {Систем.оут.принтлн (ек);}} остало {оут.принтлн ("<хтмл>");оут.принтлн ("<боди>");оут.принтлн ("<п> Није отпремљена датотека п>");оут.принтлн ("боди>");оут.принтлн ("хтмл>");}%>боди>хтмл>
Објашњење кода:
Ацтион_филе.јсп
Линија кода 12-18: Овде креирамо образац са пољем датотеке, који ће датотеку отпремити на сервер, а акција ће се пренети на ацтион_филе_уплоад.јсп
Ацтион_филе_уплоад.јсп
Кодни ред 20: Овде дајемо пут до датотеке до одређене путање
Линија кода 23-38: Овде проверавамо да ли је врста садржаја вишеделна / образац-подаци. Ако је то случај, онда је садржај типа датотеке и чита се. Након читања датотеке, она се записује у привремену датотеку, а затим се привремена датотека претвара у главну датотеку.
Када извршите горњи код, добићете следећи излаз
Излаз:
Учитавамо датотеку користећи опцију дугмета за одабир датотеке, а дугме за отпремање датотеке ће датотеку отпремити на сервер на предвиђену путању.
Пример: Коришћење ЈСП операција
У овом примеру ћемо отпремити датотеку помоћу ЈСП операција.
Узећемо образац који ће имати дугме „отпреми“ и када кликнете на дугме за отпремање, датотека ће бити отпремљена.
Уплоадинг_1.јсп
<% @ паге лангуаге = "јава" цонтентТипе = "тект / хтмл; цхарсет = ИСО-8859-1"пагеЕнцодинг = "ИСО-8859-1"%><хтмл><хеад><мета хттп-екуив = "Цонтент-Типе" цонтент = "тект / хтмл; цхарсет = ИСО-8859-1"><титле> Гуру отпрема датотеку титле>хеад><боди>Датотека: <бр /><форм ацтион = "гуру_уплоад" метход = "пост"енцтипе = "мултипарт / форм-дата"><инпут типе = "филе" наме = "гуру_филе" сизе = "50" /><бр /><инпут типе = "субмит" валуе = "Уплоад" />форм>боди>хтмл>
Објашњење кода:
Линија кода 11-12: Овде преузимамо образац који делује на сервлет гуру_уплоад који ће проћи кроз методу ПОСТ. Такође, овде енцтипе тј. Атрибут који одређује како подаци обрасца треба да се кодирају и шаљу на сервер и користи се само са ПОСТ методом. Овде постављамо податке са више делова / образаца који су за датотеку (јер ће подаци бити велики).
Линија кода 13: Овде наводимо гуру_филе елемент са датотеком типа и дајемо величину као 50.
Редак кода 15: Ово је дугме типа слања са именом "Отпреми" преко којег ће се позвати сервлет акције, а захтев ће се обрадити у њега, а датотека ће се читати и записати у сервлет.
Гуру_уплоад.јава
пакет демотест;импорт јава.ио.Филе;импорт јава.ио.ИОЕкцептион;импорт јава.утил.Лист;импорт јавак.сервлет.СервлетЕкцептион;импорт јавак.сервлет.хттп.ХттпСервлет;импорт јавак.сервлет.хттп.ХттпСервлетРекуест;импорт јавак.сервлет.хттп.ХттпСервлетРеспонсе;импорт орг.апацхе.цоммонс.филеуплоад.ФилеИтем;импорт орг.апацхе.цоммонс.филеуплоад.диск.ДискФилеИтемФацтори;импорт орг.апацхе.цоммонс.филеуплоад.сервлет.СервлетФилеУплоад;јавна класа гуру_уплоад проширује ХттпСервлет {приватни статички финал лонг сериалВерсионУИД = 1Л;публиц гуру_уплоад () {супер ();// ТОДО Аутоматски генерисани стуб конструктора}заштићена воид доПост (захтев ХттпСервлетРекуест, одговор ХттпСервлетРеспонсе) баца СервлетЕкцептион, ИОЕкцептион {иф (СервлетФилеУплоад.исМултипартЦонтент (захтев)) {покушати {Листа <ФилеИтем> мултипартс = нев СервлетФилеУплоад (нев ДискФилеИтемФацтори ()). ПарсеРекуест (захтјев);фор (ФилеИтем итем: мултипартс) {иф (! итем.исФормФиелд ()) {Име низа = нова датотека (итем.гетНаме ()). ГетНаме ();итем.врите (нова датотека ("ц: / гуру / уплоад" + Филе.сепаратор + име));}}// Датотека је успешно отпремљенарекуест.сетАттрибуте („гурумессаге“, „Успешно отпремљена датотека“);} цатцх (Изузетак ек) {рекуест.сетАттрибуте ("гурумессаге", "Отпремање датотеке није успело због" + ек);}} остало {рекуест.сетАттрибуте ("гурумессаге", "Није пронађена датотека");}рекуест.гетРекуестДиспатцхер ("/ ресулт.јсп"). форвард (захтев, одговор);}}
Објашњење кода:
Редак 12-14: Овде ћемо морати да увозимо библиотеку орг.апацхе.цоммонс у конфигурацију кода. Морамо да увеземо класу за учитавање датотека из библиотеке орг.апацхе.цоммонс.
Линија кода 23: Овде имамо методу доПост (), која ће бити позвана док преносимо ПОСТ методу у ЈСП, а као параметри ће захтевати објекте и одговоре.
Редак 26: Овде креирамо објекат класе СервлетФилеУплоад из пакета филеУплоад из библиотеке орг.апацхе.цоммонс који ће проверити да ли постоје објекти датотека у ЈСП-у. Ако их је пронађено, онда ће се тај објект датотеке преузети из захтева.
Редак 27-32: Поновит ћемо број датотека тако што ћемо провјерити колико је ставки датотеке присутно у објекту с више дијелова који је објект листе (ако отпремимо више датотека) и сачуваћемо га у ц: / гуру / фолдеру са име датотеке које је дато. Датотеку записујемо методом писања предмета у поменуту фасциклу.
Линија 34: Ако не постоји изузетак, тада постављамо атрибут у захтеву као гурумессаге са вредношћу „Датотека је успешно постављена“.
Линија кода 35-36: Ако се догоди изузетак, поставља се порука да „Отпремање датотеке није успело“
Кодни ред 40: Ако датотека није пронађена, тада се поставља порука као „Није пронађена датотека“
Линија кода 42: Прослеђивање захтева помоћу објекта рекуестдиспатцхер на ресулт.јсп са објектима захтева и одговора.
Резултат.јсп
<% @ паге лангуаге = "јава" цонтентТипе = "тект / хтмл; цхарсет = ИСО-8859-1"пагеЕнцодинг = "ИСО-8859-1"%><хтмл><хеад><мета хттп-екуив = "Цонтент-Типе" цонтент = "тект / хтмл; цхарсет = ИСО-8859-1"><титле> Гуру резултат титле>хеад><боди><% Стринг мсг = (Стринг) рекуест.гетАттрибуте ("порука");оут.принтлн (мсг);%>боди>хтмл>
Објашњење кода:
Редак кода 10: Овде добијамо атрибут из објекта захтева са вредношћу гурумессаге у објект низа.
Шифра 11: Овде штампамо ту поруку.
Када извршимо горњи код, добијамо следећи излаз
Излаз:
Добијамо образац у којем постоје поља за одабир датотеке из директоријума. Једном када је датотека изабрана, морамо кликнути на дугме за отпремање.
Када кликнемо на дугме за отпремање, добијамо поруку да је датотека успешно отпремљена.
На дијаграму испод видимо да је датотека отпремљена у ц: / гуру / уплоад фолдер.
Преузимање датотеке:
У овом примеру ћемо преузети датотеку из директоријума кликом на дугме.
Довнлоадинг_1.јсп
<% @ паге лангуаге = "јава" цонтентТипе = "тект / хтмл; цхарсет = ИСО-8859-1"пагеЕнцодинг = "ИСО-8859-1"%><хтмл><хеад><мета хттп-екуив = "Цонтент-Типе" цонтент = "тект / хтмл; цхарсет = ИСО-8859-1"><титле> Преузимање примера гуруа титле>хеад><боди>Гуру преузимање датотеке <а хреф="гуру_довнлоад"> Преузмите овде !!! а>боди>хтмл>
Објашњење кода:
Кодни ред 10: Овде смо дали везу за преузимање датотеке из директоријума ц: / гуру / уплоад користећи сервлет гуру_довнлоад.
Гуру_довнлоад.јава
пакет демотест;импорт јава.ио.ФилеИнпутСтреам;импорт јава.ио.ИОЕкцептион;импорт јава.ио.ПринтВритер;импорт јавак.сервлет.СервлетЕкцептион;импорт јавак.сервлет.хттп.ХттпСервлет;импорт јавак.сервлет.хттп.ХттпСервлетРекуест;импорт јавак.сервлет.хттп.ХттпСервлетРеспонсе;/ *** Класа имплементације сервлета гуру_довнлоад* /јавна класа гуру_довнлоад проширује ХттпСервлет {приватни статички финал лонг сериалВерсионУИД = 1Л;заштићени воид доГет (захтев ХттпСервлетРекуест, одговор ХттпСервлетРеспонсе) баца СервлетЕкцептион, ИОЕкцептион {респонсе.сетЦонтентТипе ("тект / хтмл");ПринтВритер оут = респонсе.гетВритер ();Стринг гуруфиле = "тест.ткт";Стринг гурупатх = "ц: / гуру / уплоад /";респонсе.сетЦонтентТипе ("АППЛИЦАТИОН / ОЦТЕТ-СТРЕАМ");респонсе.сетХеадер ("Цонтент-Диспоситион", "аттацхмент; филенаме = \" "+ гуруфиле + "\" ");ФилеИнпутСтреам филеИнпутСтреам = нови ФилеИнпутСтреам (гурупатх+ гуруфиле);инт и;вхиле ((и = филеИнпутСтреам.реад ())! = -1) {оут.врите (и);}филеИнпутСтреам.цлосе ();оут.цлосе ();}/ *** @сее ХттпСервлет # доПост (Захтев за ХттпСервлетРекуест, ХттпСервлетРеспонсе одговор)* /заштићена воид доПост (захтев ХттпСервлетРекуест, одговор ХттпСервлетРеспонсе) баца СервлетЕкцептион, ИОЕкцептион {// ТОДО Аутоматски генерисани квар методе}}
Објашњење кода:
Линија кода 3-5: Овде увозимо ФилеИнпутСтреам, ИО Екцептион и ПринтВритер из пакета јава.ио.
Редак кода 15: Дефинишемо гуру_довнлоад сервлет који проширује ХттпСервлет.
Редак кода 18: Као што смо дефинисали хреф, који ће бити затворен у УРЛ, тако да ће се ГЕТ метода обрадити (доГет ће бити позван у сервлету) који такође обухвата објекте захтева и одговора.
Линија кода 19-20: Постављамо садржај Садржај унесите у одговор, а из одговора добивамо и објект за писање.
Линија кода 21-22: Дефинисање променљиве као гуруфиле као вредности тест.ткт и гурупатх као ц: / гуру / уплоад /
Редак 23-25: Постављамо тип садржаја помоћу објекта одговора и користимо методу сетХеадер која поставља заглавље у објекат одговора као име датотеке која је отпремљена.
Линија кода 27-28: Стварамо ФилеИнпутСтреам у који ћемо додати гурупатх + гуруфиле.
Линија кода 31-33: Овдје смо узели неко вријеме петље која ће се изводити док се датотека не прочита, стога смо дали услов као! = -1. У овом стању пишемо помоћу принтвритер објекта оут.
Када извршите горњи код, добићете следећи излаз
Излаз:
Излаз:
Морамо да кликнемо на довнлоадинг_1.јсп, добићемо хипервезу као „Преузми овде“. Када кликнете на ову датотеку хипервезе, она ће се преузети у систем.
Резиме:
- Сазнали смо о формулару за регистрацију за регистрацију у било коју апликацију
- Сазнали сте више о томе како функционишу обрасци за пријаву и одјаву.
- Такође научио о отпремању и преузимању датотеке путем ЈСП-а.