Электронный магазин на Java и XML

         

Начало кода класса NewsFormatter



Листинг 8.3. Начало кода класса NewsFormatter

package com.XmlEcomBook.Chap08; import com.XmlEcomBook.DOMlibrary ; import java.io.*; import java.util.* ; import javax.servlet.*; import javax.servlet.http.*; import org.w3c.dom.* ; public class NewsFormatter { static String handler ; // the servlet for single item presentation public static void setHandler(String s){handler=s; } // instance variables File newsFile ; String newsFileName ; String newsFilePath ; String headStr, footStr ; Node[] itemNodes ; Element docRoot ; Hashtable nodeHash ; // <Newsitem Elements keyed by tag name int maxNitems, skipNitems; int itemsCount = 0 ; public NewsFormatter( File f ) throws IOException { newsFile = f ; newsFileName = f.getAbsolutePath() ; int p = newsFileName.lastIndexOf( File.separatorChar );
if( p >
0 ){ newsFilePath = newsFileName.substring(0,p);
} else { System.out.println("NewsFormatter path problem");
} DOMlibrary library = DOMlibrary.getLibrary();
Document doc = library.getDOM( newsFileName );
if( doc == null ){ throw new FileNotFoundException( newsFileName );
} docRoot = doc.getDocumentElement();
NodeList newsItemNodes = doc.getElementsByTagName("Newsitem");
int ct = newsItemNodes.getLength();
itemNodes = new Node[ ct ]; for( int i = 0 ; i < ct ; i++ ){ itemNodes[i] = newsItemNodes.item( i );
} }

Вы, должно быть, помните из главы 7, что класс DOMIibrary перезагружал файл XML, если время его последней модификации изменялось. Поскольку в нашем случае объект Document не меняется в результате действия класса NewsFormatter, он может использоваться совместно любым количеством сервлетов и доступ к нему нужно синхронизировать.

У нас имеются две версии метода doNews. Версия, приведенная в листинге 8.4, используется для вывода нескольких сообщений в виде заголовков новостей, краткого и полного форматов изложения. Эта версия метода обеспечивает следующие возможности: выбор сообщений по их тематике и времени появления, пропуск указанного количества сообщений и ограничение общего количества отображаемых сообщений. Строки hs и fs — необязательные параметры, которые обеспечивают некоторые небольшие дополнительные возможности форматирования.

Метод doNews проверяет наличие параметров типа Srting, которые ограничивают выбор сообщений определенными тематическими или временными рамками. Если параметр topstr отличен от null и не пуст, вызывается метод selectNodes, который ограничивает полный список сообщений набором новостей, соответствующим заданной тематике. Аналогично, если указана строка age, вызывается метод limitAge. Если какой-либо из этих методов сокращает список сообщений до нуля, метод doNews сразу же прекращает свое выполнение. Другие параметры контролируют максимальное количество новостей на странице и относительный номер сообщения, с которого начинается их просмотр.



Содержание раздела