3 курс (заочка) - Кроссплатформенные технологии программирования / Лабы (выполнить первые 4)
.pdfУпулаURLнедолжнобытьмаксимальногоразмера.Дляэтогонужен |
|
|
|||
списокнеобработанныхURL |
|
-адресов,списокужеотсканированн |
ыхURL - |
||
адресовиещеодноп,которомлебудетнапи. саноже |
|
|
|
|
|
2Чтобы. выполнитьвеб |
|
-сканированиенескп ,необтокахль иходимо |
|
||
создклаCrawlerTask,сстькоторыйреализуетинтерфейсRunnableКаждый. |
|
|
|||
экземплярCrawlerTaskдолжиметьссылнаодинэкуз |
|
|
|
емпляркласса |
|
URLPool,котбылописанрыйвыше.Обративнимание( нато,чвсето |
|
|
|||
экземплярыклассаCrawlerTaskиспользединстве!)уПрилютнныйцип |
|
|
|||
работывеб |
-сканеразаключаетсявследующем: |
|
|
||
1)Получение. парыURL |
|
-Depthизпула,ожидаявслучесли, па |
ране |
||
будетсразудоступна. |
|
|
|
|
|
2)Получение. веб |
|
-страницыпоURL |
-адресу. |
|
|
3)Поиск.настраницедругихURL |
|
|
-адресов.Длякаждогонайденного |
|
|
URL-адр,необходимосадобанопарувитьURLую |
|
-DepthкпулуURL |
-адресов. |
||
Новаяпарадолжнаиметьглубинуединицубольш |
|
|
е,чемглубинатекущего |
||
URL-адреса,покоторомупроисходитсканирование. |
|
|
|||
4)Переход. кшагу1. |
|
|
|
|
|
Данныйциклдопрожендотехпорлжаться,покавпулеостанется |
|
|
|||
парURL |
-Depth. |
|
|
|
|
3Так.каквеб |
|
-сканербудетпо неождатькотороеличествопотоков, |
|
|
|
измените программутак,чтобыонапринимтретийпарамчерезла тр |
|
|
|||
команднстр, бтопределятьурыйдетюколичествопорождаемых |
|
|
|||
потоковвеб |
-сканера.Функцияmainдолжнавыполнятьследующиезадачи: |
|
|
||
1)Обработа. аргументыкоманднс .Сь кипобщитьйльзователю |
|
о |
|||
любыхошибкввод. ах |
|
|
|
|
|
2)Создатьэкземпляр. пулаURL |
|
|
-адресовипоместитьуказанный |
|
|
пользователемURL |
-адресвпулг убиной0. |
|
|
|
3)Создатьуказаннпользователем. количествозадач(потоковдляих |
|
||
выполнения)длявеб |
-сканера.Кажзапоисковогодачеойро |
ботанужнодать |
||
ссылкунасозданныйпулURL |
-адресов. |
|
||
|
4)Ожидать. завершениявеб |
-сканирования. |
||
|
5)ВывестиполучспURLисоквшийся |
|
-адрес,котбылионайденыврые. |
|
|
4Синхронизируйте. объектпулаURL |
|
-адресоввовсехкритических |
|
точках,таккактеперькоддолжен |
бытьориентирнамног.опоточностьван |
|||
|
5Веб. |
-сканердолженпостоянноопрашиватьпулURL |
-адресов |
|
случае,еслионпуст.Вместоэтогпустьониожидаютвслучае,когданет |
|
|
||
доступныхURL |
-адр.Ресовализуйэто,использмеwait()твнодеу«getятри |
|
||
URL»вс |
лучае,еслиниодинURL |
-адресвнастоящеевремянедоступен. |
||
Соответственно,метод"addпулаURL" |
|
-адресовдолжениспользовать |
||
функциюnotify()вслучае,когдановыйURL |
|
-адресдобавленкпулу. |
||
|
Обративниманиенато,чптовебтоки |
|
-сканерасамибудут |
|
выполнятькакие |
|
-лиэтихбозопераций |
|
|
синхронизации/ожидания/уведомлен.Потжепричй,чтопулиURLяне |
|
- |
||
адресовскрываетдеталитого,какURL |
|
-адресахранятсяиизвлекаются: |
||
инкапсуляция!Точнотакже, акввашейреализациипользователипула |
|
|
URL-адресовнедолжнызнатьдеталяхреализации,такжеондолжны знатьодеталяхорганизациипотоков.
Советыпопроектированию
Вотнексоветдляторуспешноговыполнениялабораторнойработы
№8:
• Выможетеиспольчастькодаизлабораторнойоватьработы№7с
небольшимизменен.КлассURLDepthPairиемзннужное.нятьОсновные
отличиявтом,чтокзагрузкидURL -адресаисканистраницыование находиттеперьвкла,которыйсреалсеяRunnableикодзуетбудетполучатьи
добавлятьURL -адресавэкземпляреURLPool.
•Выдолжнысинхроквнстнизироватьуполямтренним
URLPool,посколькунимбудутобращатьсясразунесколькопотоков.Самый простойподходзаключаетсявиспользованииметодовсинхронизации.Не
нужсинхроконструкизирURLPool!Подутомвать, райте какие метдолжныбытьдысинхронизированы.
• |
НапишитеметоURLPoolдляиспользованияыметодов |
wait()и |
notify()так,чтобыпотокисканерам глижидатьпоявленияновыхURL |
- |
|
адресов. |
|
|
• |
ПустьURLPoolопределяет,какиеURL |
-адрепопвсаписокдают |
необработанных URL-адрес,исхизглубиныовдякаждогоURL |
-адреса, |
|
добавляемогопул.Ес убинаURL |
-адрмемаксимньшеса,добавльтеной |
|
парувочередьожи.ИначеобавьтенияURL |
-адресвсписокобработанных, |
|
несканируястраницу. |
|
|
• |
Самаясложнаячастьданнойлаборатор |
нойработызаключаетсяв |
поискемомдлявыходаизнтапрограммы,когдабольшенетURL |
-адресовдля |
|
сканирования.Втакомслучаевсепотокибудутрежимеожиданиянового |
|
|
URL-адресавURLPoolДляэтогорекомендуется,чтобы. URLPoolотслеживал, |
|
|
сколькопотоко |
вожидаетновыйURL |
-адрес.Поэтнеобходимодобавитьму |
полетипакотороеint,будв личиватьсянепосредственнопередвызовом |
|
|
wait()иуменьшатьсясразупослевыходаизрежимаожидания.Создавсчетчик, |
|
|
нужнореализмет,котвдватьозвращаетрыйколичест |
воожидающих |
|
потоков.Отслеживаколичествопотоковвыможетефункцииьmain()в |
|
|
случае,еслиобщееколичествопотоковравноколичествупот, рое |
|
|
вернулсоответствующийметнеобходимо, вызватьSystemдля .exit() |
|
|
завершенияработы.Проверкуможно |
выпотаймерулнясин( ьервалом1 |
|
сек),чтоприведэффективнойкболееработепрограммы. |
|
Дополнительноезадание
•ОбновитепаруURL -Depthдляиспокльзованияjavaасса.net.URL
произведитесоответствующиеизмвебнения |
-сканередлятого,чтобыон |
|
соответствовалиотносительнымURL |
-адресам,иабсолютным. |
|
• |
ВыходизпрограммысиспольвызовSystemанием.exit() |
- |
грубаяоперация.Найдитеспосболрректногок бвыходаизпрограммы. |
|
|
• |
РеализуйтесписокURL |
-адрес,котбылиопврыеосмотрены,и |
избегайтев |
озвратакним.ИспользуйтеодинизклассовколлjavaКакойкций. |
- |
тонабор,котпорыйддержипостоянноевремяпоиаетставку,будетка
наиболееподходящим.
•Добавьтедругойдополнительныйпаракомстрокиетранднойдля
того,чтобыопределить,скольковреме |
нипотоквеб |
-сканерадолженжд ть |
сердлявозвратаератребуемойвеб |
-страницы. |
|