скачать рефераты
  RSS    

Меню

Быстрый поиск

скачать рефераты

скачать рефератыРеферат: Организация доступа к базам данных в Интернет

А теперь этаже запись только уже с пояснениями:

00878nam  22002537  4500 – Маркер 24 символа

– словарь 12 символов 1) Метка поля – 3 символа полный список всех меток приведен в Приложении 1.

2) Начальная позиция относительна начала записи -5 символов

3) Размер поля – 4 символа

1 - 001 00000 0033

2 - 005 00033 0017

3 - 245 00050 0244

4 - 260 00294 0015

5 - 300 00309 0009

6 - 650 00318 0063

7 - 650 00381 0045

8 - 653 00426 0024

9 - 653 00450 0019

10- 653 00469 0016

11- 020 00485 0010

12- 091 00495 0008

13- 092 00503 0017

14- 090 00520 0008

15- 852 00528 0022

16- 852 00550 0011

17- 040 00561 0014

18- 041 00575 0008

19- 008 00583 0041

Поля с данными

1 - ‑    BOOK00000876    BOOK00000001 

2 - ‑19981027165203.0

3 - ‑00­aАктуальные вопросы преподавания хореографического искусства­nВып. 7­bМатериалы межвуз. науч.-метод. конф. "Современные технологии обучения в гуманитарном вузе"­cСанкт-Петербургский гуманитарный ун-т профсоюзов; Редкол. А.С.Запесоцкий и др.

4 - ‑0 ­aСПб.­c1994

5 - ‑  ­a22с.

6 - ‑  ­aВысшая школа­xМетодика преподавания­xМатериалы конференции

7 - ‑  ­aХореографическое искусство­xПреподавание

8 - ‑  ­aТехнологии обучения

9 - ‑  ­aФормы обучения

10- ‑  ­aКонференция

11- ‑  ­c2.100

12- ‑  ­aЩ32

13- ‑  ­a14.35.09­a18

14- ‑  ­cЩ32

15- ‑  ­bч/з­t2­hЩ32­iА437

16- ‑  ­bаб.­t3

17- ‑  ­aВСГАКИ-10

18- ‑  ­arus

19- ‑950614s1990    rur           00000 rus d

Программа начинает работать после того когда от клиента приходит запрос на страницу по определенному URL (например: http://www.real.ulan-.ude.ru/serv/SearchEngein), для выполнения запроса пользователя веб-сервер запускает JServ, который в свою очередь обрабатывает запрос  и определяет какой именно сервлет требуется запустить и в какой зоне он находится. Информацию о зонах размещения всех сервлетов Jserv считывает из файла настройки. Чтобы сервлет начал выполняться JServ предварительно запускает виртуальную Java машину и только после этого начинает работать сервлет это значит что запрос пользователя будет обработан и пользователь получит запрошенную страничку. Что же происходит на стороне сервера в этот момент когда пользователь ждет пока загрузится страница. А происходит вот что,  управление по отображению всей информации в окне браучера переходит сервлету, программе написанной на Java. Рассмотрим это более детально. Сервлет инициализируется и начинает передачу данных в формате HTML пользователю. Первое что увидит пользователь это будет поисковая форма  (см. рис. 6) .

Рис. 6

Поисковая форма

Программный код поисковой формы выглядит так:

out.println("<form method=\"get\" action=\"/serv/SearchEngein\">"+

"<table width=\"461\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\">"+

"<tr bgcolor=\"#3399FF\"> "+

"<td width=\"266\" class=\"text\">&nbsp;&nbsp;&nbsp;Запрос</td>"+

"<td width=\"135\" class=\"text\">&nbsp;&nbsp;&nbsp;Каталог</td>  "+

"<td width=\"207\">&nbsp;</td>"+

"</tr>"+

"<tr>"+

"<td width=\"266\" valign=\"top\"> "+

"<input type=\"text\" name=\"Query\" maxlength=\"100\" size=\"38\" value=\"\">"+

"</td>"+

"<td width=\"135\" valign=\"top\"> "+

"<select name=\"select\" size=\"1\">"+

"<option value=\"MARCFILE.Book\" selected>"+ConvertISO(getINIVar("KATALOG.Book"))+"</option>"+

"<option value=\"MARCFILE.Stat\">"+ConvertISO(getINIVar("KATALOG.Stat"))+"</option>"+

"<option value=\"MARCFILE.Periud\">"+ConvertISO(getINIVar("KATALOG.Periud"))+"</option>"+

"<option value=\"MARCFILE.Podpis\">"+ConvertISO(getINIVar("KATALOG.Podpis"))+"</option>"+

"<option value=\"MARCFILE.Ucheb\">"+ConvertISO(getINIVar("KATALOG.Ucheb"))+"</option>"+

"</select>"+

"</td>"+

"<td width=\"207\" valign=\"top\"> "+

"<input type=\"submit\" name=\"Start\" value=\"Поиск\">"+

"</td>"+

"</tr>"+

"</table>"+

"</form>");

Рассмотрим код более пристально.

В тэге <form> присутствуют параметры metod и action.

1)      метод (metod) говорит браузеру о том что данные(запрос) будет отправлены серверу;

2)      действие (action) – в этом параметре находится путь к программе на старое сервера которая примет отправленный запрос для обработки.

Следующий интересующий нас неотъемлемый компонент это тэг <input>, который тоже имеет несколько параметров type, name, value. Этот тэг является строкой ввода, рассмотрим его параметры.

1)      тип (type)  равный “text” говорит о том что это строка ввода;

2)      имя (name) название запроса т.е. имя которое присваивается тексту введенному в строку ввода, в моей программе это Query;

3)      значение (value) значение строки по умолчанию при начальной загрузке.

Еще один значимый тэг формы <select> - это список для выбора базы в которой будет производится поиск. Данный тэг имеет свое имя которое указано в параметре name. Сам же список последовательно указан в тэге <option> относящимся к тэгу <select>. Каждая из строк начинающихся тэгом <option> является элементом списка для выбора. У тэга <option> есть параметр value в котором указан псевдоним выбранного пункта из списка – это нужно для определения какой пункт из списка выбран.

И наконец последний значимый тэг <input>, в отличии от первого тэга <input> у этого тэга параметр тип(type) равен “submit”  - это значит что это кнопка отправки запроса обработчику который указан в тэге <form>. У кнопки тоже есть имя (name) и значение (value) кнопка называется Start. Последним тэгом, всегда является закрывающий тэг </form>.

После того как пользователь ввел запрос и нажал на кнопку “Поиск” в адресная строка браузера приобретет примерно вид :

http://localhost/serv/SearchEngein?Query=%E1%A8%E1%E2%A5%AC%A0&select=MARCFILE.Stat&Start=%8F%AE%A8%E1%AA

К ссылке на сервлет прибавилось три параметра отделенные от адреса сервлета вопросительным знаком первый параметр это Query (запрос), второй select говорящий сервлету в какой базе производить поиск.

Первое что делает программа - это считывает файл настройки db.ini – который находится в папке c:\www\db. В данном файле находятся данные о место нахождении интересующей базы данных или говоря проще локальный путь к базе данных. Определив интересующую базу данных и установив ее место нахождения, программа начинает процесс поиска всех удовлетворяющих запросу данных (библиографических описаний).

Программа считывает всю запись в массив, после чего начинается определение места нахождения полей и их длинны. Разберем код процедуры.

public void dbFileRead(String dbNamePath, PrintStream out, String query) {

Сперва производится инициализация всех переменных используемых при работе процедуры.

Первый блок. Переменные для занесения значений полей

 String mAvtor = null;    // 100

 String msAvtor = null;   // 700

 String mName = null;     // 245

 String mPrinter = null;  // 260

 String mSize = null;     // 300

 String mKey = null;      // 653

 String mSeria = null;    // 490

 String mRubrika = null;  // 650

 String mBBK = null;      // 91

 String mKaIndex = null;  // 90

Второй блок. Файловые переменные для перемещения по файлу

 long fPosMarker = 0, // Позиция относительно начала

      fPosData = 0;   // Начальная позиция данных

 boolean done = false;

Третий блок. Перемнный для работы с данными

int mC =0,            // Счетчик прочитанных записей 

     mE =0;           // Счетчик найденых соответствий

 byte Jumper[] = new byte[5]; // Размер запяси - символьный

 int JIndex = 0, // Размер запяси - числовой

     JTemp  = 0, // Размер данных + словарь

     MIndex = 0, // Счетчик для массива

     MTemp  = 0; // Счетчик полей

Начало выполнени поика. Сперва проверяется имеет ли запрос query занчение неравное пусто, если условие выполняется и запрос имеет не нуливое занчение устанавливается связь с файлом данных. Начальная позиция чтения равна нулю.

if (query != null){

try { RandomAccessFile dbfile = new RandomAccessFile(dbNamePath,"r");

// Цикл чтения файла по маркерам

   while (fPosMarker != dbfile.length()) {

      try { mC++;

            dbfile.seek(fPosMarker);

            dbfile.read(Jumper);

            String jBuf = new String(Jumper);

            JIndex = Integer.parseInt(jBuf,10);

              int b = 0;

Прочитав начальный блок из 5 символов говорящий о длине записи он преобразуется из символьного значенья в числовое. Затем определяется длинная словаря которая равна 12*n, где n – равно количеству заполненных полей в одной записи.

// Поиск конца словаря

               while ( b != MD){

                dbfile.seek(fPosMarker+24+MIndex);

                 b = dbfile.read();

                MTemp++;

                MIndex = MTemp;

                }

                MTemp= MTemp - 1;

Определив конечную позицию словаря производится считывание в массив блока состоящего из данных - метка поля; начальная позиция поля, относительно конца словаря; длинная поля и символах.

// чтение Словаря из файла в отдельный массив

               byte Dic[] = new byte[MTemp];

                dbfile.seek(fPosMarker+24);

                 dbfile.read(Dic);

// чтение полей данных из файла в массив

            fPosData = fPosMarker+24+MTemp;

              String sDic = new String(Dic);

               int DI2 = 0,

                   DI3 = 0,

                   DI4 = 0,

                   DI5 = 0,

               PNum    = 0, // Номер поля числовой

               PLength = 0, // Длинна поля числовая

               PStart  = 0; // Начальная позиция поля чиловая

Получив данные в результате преобразований, это строка, начинается последовательное вычитание метки поля, начальной позиции, размера поля.

// сканирование номеров полей

               while ( DI2 != MTemp){

                DI3=DI2+3;

                String DStr  = sDic.substring(DI2,DI3);// Номер поля

                DI4=DI3+5;

                String DStr2 = sDic.substring(DI3,DI4);// Начальная позиция

                DI5=DI4+4;

                String DStr3 = sDic.substring(DI4,DI5);// Длинна поля

                DI2=DI2+12;

                 PLength = Integer.parseInt(DStr3,10);// Узнаем длинну поля

                 PStart = Integer.parseInt(DStr2,10);// Узнаем начало поля

                 PNum = Integer.parseInt(DStr,10);// Код

                 byte Pole[] = new byte[PLength];

Как только первая запись о первом поле разобрана на составляющие проверяется его метка , которая говорить относится или нет, поле к тому списку полей который нас интересует. Если да то производится считывание его из файла. После того как поле считано над значением поля производится ряд преобразований, таких как, вычитание из поля служебной информации относящейся к формату MARC.

// Чтение поля из файла

                 switch (PNum) {

                  case 100 : {

                   dbfile.seek(fPosData+PStart);

                   dbfile.read(Pole);

                   String Pol = new String(Pole);

                    if (Pol == null) Pol=" ";

 mAvtor    = TagRemove(Pol.substring(5));break;}

                  case 700 : {

                   dbfile.seek(fPosData+PStart);

                   dbfile.read(Pole);

                   String Pol = new String(Pole);

                    if (Pol == null) Pol=" ";

 msAvtor   = TagRemove(Pol.substring(5));break;}

                  case 245 : {

                   dbfile.seek(fPosData+PStart);

                   dbfile.read(Pole);

                   String Pol = new String(Pole);

                    if (Pol == null) Pol=" ";

 mName     = TagRemove(Pol.substring(5));break;}

                  case 490 : {

                   dbfile.seek(fPosData+PStart);

                   dbfile.read(Pole);

                   String Pol = new String(Pole);

                    if (Pol == null) Pol=" ";

 mSeria    = TagRemove(Pol.substring(5));break;}

                  case 91  : {

                   dbfile.seek(fPosData+PStart);

                   dbfile.read(Pole);

                   String Pol = new String(Pole);

                    if (Pol == null) Pol=" ";

 mBBK      = TagRemove(Pol.substring(5));break;}

                  case 90  : {

                   dbfile.seek(fPosData+PStart);

                   dbfile.read(Pole);

                   String Pol = new String(Pole);

                    if (Pol == null) Pol=" ";

 mKaIndex  = TagRemove(Pol.substring(5));break;}

                  case 260 : {

                   dbfile.seek(fPosData+PStart);

                   dbfile.read(Pole);

                   String Pol = new String(Pole);

                    if (Pol == null) Pol=" ";

 mPrinter  = TagRemove(Pol.substring(5));break;}

                  case 300 : {

                   dbfile.seek(fPosData+PStart);

                   dbfile.read(Pole);

                   String Pol = new String(Pole);

                    if (Pol == null) Pol=" ";

 mSize     = TagRemove(Pol.substring(5));break;}

                  case 653 : {

                   dbfile.seek(fPosData+PStart);

                   dbfile.read(Pole);

                   String Pol = new String(Pole);

                    if (Pol == null) Pol=" ";

 mKey      = TagRemove(Pol.substring(5));break;}

                  default  : {}

                 }// switch

               }// конец проверки полей

Получив все данные которые нас интересовали, создается запись состоящая из нескольких полей.

                if ( mAvtor == null)  mAvtor=" ";

                if ( msAvtor == null) msAvtor=" ";

                if ( mName == null)  mName=" ";

                if ( mPrinter == null) mPrinter=" ";

                if ( mSize == null) mSize=" ";

                if ( mKey == null) mKey=" ";

                if ( mKaIndex == null) mKaIndex=" ";

                if ( mBBK == null) mBBK=" ";

                if ( mSeria == null) mSeria=" ";

Это собственно самая запись

                MarcRecord Rec = new MarcRecord( mAvtor,

                                                 msAvtor,

Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17


Новости

Быстрый поиск

Группа вКонтакте: новости

Пока нет

Новости в Twitter и Facebook

  скачать рефераты              скачать рефераты

Новости

скачать рефераты

© 2010.