Записки начинающего веб-программиста.
`
     Автору этрих строк довелось освоить основы 
программирования по технологиям Java Servlet и JSP. 
К сожалению, по независящим от автора причинам 
работа осталась незавершённой. Однако рассказ о 
проделанной работе, возможно, может быть интересным 
или полезным для других; реально для меня 
наибольшей сложностью было то, что при огромном 
количестве документации сложно понять, что из этой 
документации имеет отношение к твоей работе, а что 
- нет, и как вообще запустить систему, реализующую 
динамическую генерацию html-страниц. Я старался 
особое внимание уделить деталям, вызвавшим 
трудности у меня лично. Для вопросов и замечаний 
просьба использовать адрес aravidze@yandex.ru .
`
     Принятые решения:
`
 - Решено использовать технологии, связанные с 
языком ява (чтобы иметь возможность задействовать 
сотрудника, ранее работавшего для фирмы);
 - Первоначально работать под Windows XP Home 
Edition, уже установленной на выделенной для работы 
машине, а позже рассмотреть возможность перехода на 
Linux;
 - Для набивки структурных формул использовать 
коммерческую программу ISIS Draw, уже закупленную 
фирмой (мотивировка: партнёры фирмы желают файлы 
именно в формате *.mol, создаваемые этой 
программой);
 - Использовать стандартную систему исполнения 
языка ява от фирмы Sun;
 - Как сервер использовать Tomcat (как 
рекомендуемый для разработки технологий на основе 
явы).
 - Для ведения БД впоследствии перейти на систему 
ведения реляционных баз данных MySQL, но 
первоначальную версию БД делать в собственном 
формате (это решение было принято с целью 
обеспечить аварийное вмешательство в случае 
непонятного поведения СУБД, а также в связи с тем, 
что под Windows XP Professional Edition, 
установленной у разработчика, сервер 
MySQL примерно через полсекунды работы отключался, 
предположительно - за счёт нарушения границ 
отведенной памяти, что затрудняло освоение MySQL).
`
     Ниже описана методика скачивания необходимых 
компонентов системы, их установки и работы с ними, 
а также существенные детали написанного кода.
`
--------
`
     Общие замечания.
`
 - Смысл используемых технологий - Java Servlet и 
JSP (Java Server Pages) - сводится к тому, чтобы 
обеспечить написание программ порождения 
на центральной машине (сервере) 
ответа на запрос пользователя. Пример: пусть 
на сайте хранится база данных по выпускаемым 
соединениям, и пусть пользователя интересует, 
выпускается ли конкретное соединение; 
можно дать пользователю возможность скачать всю 
базу данных и у себя на машине искать, есть ли в 
ней нужное соединение, но это непроизводительно и 
неудобно, и разумнее дать пользователю возможность 
составить запрос - например, указать, что его 
интересуют лишь соединения с заданной 
брутто-формулой - и чтобы на сервере программа сама 
просмотрела базу данных, породила и выдала 
пользователю список соединений с данной формулой. 
     Чтобы разъяснить восприятие технологий Java 
Servlet и JSP с точки зрения программиста и 
различие между ними, вначале разъясним 
представление информации, получаемой пользователем. 
Чтобы выдать пользователю в браузере строку "Hello 
world!", сервер посылает клиенту хранящийся или 
динамически порождаемый текст примерно следующего 
вида:
`
<html>
<head>
<title>Marasmo</title>
</head>
<body>
Hello world!<br>
</body>
</html>
`
. Именно так выглядят документы, сохранённые в 
браузере как *.htm . Так вот, исходник сервлета, 
порождающего такой текст, выглядит по типу
`
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class Test extends HttpServlet {
 public void doGet(HttpServletRequest request,
   HttpServletResponse response)
   throws IOException, ServletException
   {
  PrintWriter out = response.getWriter();
  out.println("<html>");
  out.println("<head>");
  out.println("<title>Marasmo</title>");
  out.println("</head>");
  out.println("<body>");
  out.println("Hello world 1.<br>");
  out.println("</body>");
  out.println("</html>");
 }
 public void doPost(HttpServletRequest request,
   HttpServletResponse response)
   throws IOException, ServletException
   {
  doGet(request, response);
 }
}
`
     Как видим, если отвлечься от шапки (формальных 
указаний на импорт, наследование от класса 
HttpServlet и т.п.), рабочая часть представляет 
собой просто вывод нужных строк ('<html>' и т.п.) в 
поток вывода. (Разумеется, имеются методы, чтобы 
опросить переданные сервлету параметры, и можно 
использовать все конструкции явы, чтобы в 
зависимости от условий выдавать разные результаты). 
В целом это полноценный текст на языке ява; перед 
исполнением он должен быть оттранслирован.
     Технология JSP позволяет избавиться от шапки, 
сохраняя возможность вставлять произвольные 
конструкции языка ява. Приденный выше пример можно 
записать как *.jsp, например, следующим образом:
`
<html>
<head>
<title>Marasmo</title>
</head>
<body>
<%
 out.println("Hello world 2.<br>");
%>
</body>
</html>
`
; при этом возможна ситуация, когда цикл на яве 
открывается в одной вставке, а закрывается в 
другой. Файлы типа *.jsp преобразуются системой в 
файлы типа *.java, те транслируются и исполняются 
подобно сервлетам (но хранятся отдельно, и шапка у 
полученных файлов типа *.java отличается от шапки у 
сервлетов).
     Имеются ещё иные технологии на базе языка ява, 
напр., Java Beans ("яванские бобы" - т.е. кофейные 
зёрна; обыгрывается ассоциация с яванским кофе 
и рисунком чашки со струйками пара над ней как 
символом языка ява и фирмы Sun), но они нам 
пока не понадобились.
`
 - Ниже при обсуждении системы исполнения языка ява 
подчёркнута важность хорошей скорости скачивания из 
интернета; это же относится и к другим пакетам, 
везде скачиваются файлы по >~10 Мб, просто сист. 
исполн. явы с её 52 Mb - рекордсмен.
`
 - Документацию по классам, интерфейсам и их 
методам наиболее удобно получать следующим образом: 
в поисковике (напр., www.google.com/search) задаём: 
sun java method + название интересующего нас 
класса, метода и т.п. - Vector, RandomAccessFile 
и т.п. (Внимание: именно 'method', а 
не 'methods' - там написано 'method summary!'). В 
ответ на первом месте или вблизи него обычно 
оказывается фирменная документация фирмы Sun, 
которую можно сохранить и в дальнейшем использовать 
как справочный материал.
`
 - В каталоге d:\sekirin\p1\izuchen\evm\java\jav\ 
имеется подборка файлов типа *.java от простого к 
сложному, написанных автором в ходе изучения языка; 
в подкаталогах хранятся скачанные из Интернета 
файлы *.java других авторов.
`
 - Система исполнения языка Ява принимает на входе 
текст программы и порождает тексты - например, 
html'евские страницы (для их просмотра браузером 
пользователя) и листинги для отладки. Поэтому для 
работы с ней используются консольные (а не 
графические) оболочки. У нас используется оболочка 
far (d:\sekirin\far\far.exe).
`
 - Для работы системы исполнения языка ява 
требуется задать переменные среды; концепция 
переменных среды широко используется в Линуксе; она 
была реализована в MS DOS (команда set и 
возможность опроса) и в эмуляторах DOS под Windows. 
     Проблема для всех версий MS DOS/Windows - 
недостаточное количество памяти, выделяемой под 
переменные среды по умолчанию. В Win9X, как и в MS 
DOS, увеличить количество выделяемой памяти можно 
по типу: в файл c:\config.sys вставляется строка 
shell=c:\command.com /e:4096 /p ; 
в более поздних версиях Windows, включая WinXP, 
файлы config.sys и autoexec.bat не поддерживаются, 
вместо них используются файлы с именами типа 
c:\windows\system32\config.nt и 
c:\windows\system32\autoexec.nt; их исполнение 
имитируется не при запуске системы, а - насколько 
удалось понять из разъяснений коллег и из 
документации из Интернета - при запуске 
16-разрядных приложений (!). В целом логика - когда 
они запускаются и к чему относятся заданные в них 
параметры - не вполне ясна (в частности, похоже, 
при запуске одного 16-разрядного приложения из 
другого, напр., bat-файла из-под Volkov 
Commander'а, config.nt не имитируется, и 
запускаемому приложению выделяется очень мало 
памяти под переменные среды).
     Ещё одна проблема с указанными файлами *.nt: 
по некоторым данным, вместо '\' в них везде следует 
писать '\\'; экспериментальная проверка не 
проведена, но, во всяком случае, в текущем виде в 
сочетании с d:\sekirin\set_.bat всё работает.
     Рекомендуемый порядок действий, при котором 
эта проблема оказывается решена:
 - В файл c:\windows\system32\config.nt вписывается 
строка
c:\windows\system32\command.com /e:4096 
(именно так - без shell= и без /p !). 
 - После запуска WinXP сочетаниями Ctrl+Esc 
(=Start), Run, c:\windows\system32\cmd (в 
русифицир. версии - Start -> Пуск, Run -> 
Выполнить) запускаем эмулятор DOS. Возникает 
DOS'овский экран с подсказкой '>' и мигающим 
курсором - набираем d:\sekirin\set_.bat - этот 
bat-файл устанавливает необходимые переменные 
среды, после чего запускает оболочку far 
(d:\sekirin\far\far.exe). После этого из-под far 
можно запускать транслятор с явы, bat-файлы 
tomcat'а и т.п. 
     В конце работы следует выйти из far'а нажатием 
с клавиатуры F10, Yes, а затем из cmd - командой 
exit.
     Примечание: при попытке использовать Volkov 
Commander вместо far'а -> сообщ. о нехватке памяти 
под переменные среды, но если выйти из vc в cmd и 
запускать *.bat непосредственно из cmd - проходит. 
Поскольку vc всё равно не поддерживает длинные 
имена, это не принципиально и упоминается лишь как 
предостережение.
     Какие именно переменные нужно задавать - более 
конкретно планируется указать ниже при описании 
отдельных компонентов.
`
 - Для набивки программ использовался встроенный 
редактор far'а. Он позволяет копировать в буфер 
Windows и из него по типу Notepad'а (помечение - 
Shift + движение курсора, Ctrl+X - Cut, Ctrl+C - 
Copy, Ctrl+V - Paste), но, в отличие от Notepad'а, 
позволяет просматривать 16-ичное представление.
`
 - Из имеющихся браузеров (Mozilla и Internet 
Explorer), согласно литературным данным, Mozilla 
предпочтительнее, т.к. Internet Explorer считает, 
что он умнее пользователя и что если он скачал 
страницу, то можно её сохранить и при повторных 
обращениях по тому же адресу выдавать сохранённую 
страницу, а не лазить снова на сервер скачивать её; 
при этом явные указания - не запоминать страницу - 
он, согласно литературе, порой игнорирует; т.о., 
возможна ситуация: мы хотим модифицировать данные в 
базе данных, даём указание записать новые данные - 
и видим, что якобы у нас часть изменений не 
записалась - и мы не знаем, то ли они действительно 
не записались, то ли это Internet Explorer 
демонстрирует нам свою интеллектуальную мощь. К 
сожалению, в случае рисунков Mozilla показывает тот 
же самый эффект, что вынуждает усложнять логику и 
заботиться о том, чтобы разные рисунки имели разные 
имена - даже там, где было бы достаточно иметь один 
файл с именем, например, raboch.bmp .
`
 (Конец общих замечаний).
`
--------
`
     Описание необходимых компонентов - получение, 
установка, запуск.
`
     ISIS.
`
     Коммерческая программа ISIS (ISIS Draw и ISIS 
Base) закуплена фирмой; инсталляционник - у 
директора; установлена на машине для разработчика - 
c:\progra~1\mdlisi~1\idraw32.exe и там же - 
ibase32.exe . О методах работы см. osvoisis.chi .
     В докум. было напис., что из лицензионн. 
сообр. программа порождения названий по 
номенклатуре IUPAC на диск на записана, и её надо 
скачать из Интернета; скачиваем 
(d:\sekirin\p1\programs\isis\autonom\) и 
инсталлируем - в меню появ. пункт порождения 
названий.
     О методах работы см. osvoisis.chi .
`
-----
`
     Система исполнения языка ява.
`
     Система бесплатно скачивается с java.sun.com . 
Следует скачать пакеты J2SE SDK (Java 2 Standard 
Edition, Software Development Kit - транслятор, 
базисные библиотеки) и J2EE SDK 
(аналогично - Enterprise Edition - библиотеки для 
написания серверных приложений). Версии 
периодически обновляются, ссылки - похоже, тоже, 
более того, при разных обращениях в ссылки для 
скачивания вводятся разные буквенно-цифровые 
комбинации, докачка по download не проходит, так 
что скачивать надо на машине с хорошей скоростью 
скачивания из интернета (J2SE SDK занимает >50 Мб).
`
     Установка системы: запускаем 
экзешники-инсталляторы, указываем, в какой каталог 
записать файлы пакетов J2SE и J2EE - инсталлятор их 
записывает. Затем в set_.bat (установка переменных 
и запуск оболочки far) вписываем строки по типу
path d:\j2sdk\bin;%path%
set java_home=d:\j2sdk
set j2ee_home=d:\j2sdkee
set classpath=.;d:\j2sdkee\lib\j2ee.jar;d:\programs\jdbc
; важно в classpath задать среди прочего точку, 
иначе не будет искать файлы *.class в текущем 
каталоге (что важно для отладки подпрограмм и для 
проверки работоспособности); j2ee.jar - библиотека 
методов J2EE, jdbc - Java DataBase Connectivity - 
библиотека для связи с сервером базы данных.
`
     Проверка работоспособности системы - по типу:
`
 - Набиваем файл с именем, напр., Test.java 
нижеприведенного вида.
     Внимание:
  (1) Надо следить за различием прописных и 
строчных букв и в тексте, и в имени!
  (2) Имя файла и имя класса - здесь 'Test' - 
обязаны совпадать!
`
public class Test {
 public static void main(String[] args) {
  System.out.println("Ha-ha-ha.");
 }
}
`
 - Нижеприведенными командами транслируем и 
запускаем этот файл.
     Внимание:
  (1) При обращении к javac (Java Compiler) обязательно 
ПИСАТЬ расширение ('.java');
  (2) При обращении к java (система исполнения 
оттранслированного файла) столь же обязательно НЕ 
ПИСАТЬ расширение (оттранслированный файл имеет 
расширение '.class' - так его надо НЕ ПИСАТЬ).
`
javac Test.java
java Test
`
     Если всё установлено нормально - программа 
должна выдать 'Ha-ha-ha.' и вернуть управление.
-----
`
     Tomcat.
`
     Скачивается бесплатно с 
http://jakarta.apache.org/tomcat/ .
     У нас скачаны версии 3.3.2 и 5.0.25; 
инсталляционники хранятся в 
d:\sekirin\p2\programs\TOMCAT.
jakart~1.zip (7 Мб)  - верс. 3.3.2,
jakart~2.zip (12 Мб) - верс. 5.0.25.
     Инсталлирована версия 3.3.2; расположена в 
d:\tomcat.
     Для инсталляции архив просто распаковывается в 
нужный каталог, и в файле set_.bat или аналогичном 
вписывается
set tomcat_home=d:\tomcat .
`
     Минимальная проверка работоспособности:
`
 - запускаем ДВА экземпляра оболочки (Start, Run, 
cmd, d:\sekirin\set_). Это необходимо в связи с 
необходимостью в случае аварийного останова 
Tomcat'а сохранить сообщение об ошибке; исходно в 
файле tomcat.bat запуск был эквивалентен start java 
с поиском классов в tomcat.jar; при этом 
запускалось отдельное окно, вывод шёл в него, при 
авосте оно закрывалось, и выведенное в него 
сообщение пропадало. Желательно уточнить, но вроде 
при таком запуске переназначение вывода (по типу 
1>3.txt 2>4.txt) не работало, и пришлось вместо 
эквивалента start java сделать эквивалент просто 
java - тогда переназначение удаётся, и сообщение об 
ошибке сохраняется. (Кстати, под Win9X сообщения об 
ошибках вообще не переназначаются - такое есть лишь 
под Win2000 и более поздних версиях, включая 
WinXP). Но за это приходится платить: в окне 
пользователя, из которого мы запускаем tomcat, пока 
он работает, мы видим лишь сообщение о том, что он 
запущен и что его вывод переназначен, и ввести 
команду его останова мы не можем. Для того, чтобы 
остановить tomcat (и заниматься другими делами), и 
нужно второе окно.
`
 - заходим в каталог d:\tomcat\bin и запускаем 
startup.bat . Он запускает упомянутый выше 
tomcat.bat .
`
 - запускаем любой браузер и в нём набираем
http://localhost:8080/ ;
при этом должна запуститься локальная страница с 
аляповатым изображением кота и предложением 
запустить готовые тест-примеры типа сервлетов и 
типа jsp (щёлкая на соответствующих ссылках). Для 
проверки рекомендуется пощёлкать и убедиться, что 
всё работает.
     (Дополнение: если используется прокси, в 
настройках браузера следует найти пункт о том, что 
к определённым адресам следует обращаться, минуя 
прокси, и прописать в этом пункте localhost).
`
 - в конце для остановки tomcat'а в d:\tomcat\bin 
запускаем shutdown.bat .
`
     Проверка трансляции собственного 
web-приложения:
`
     В разных - используя термин с сайта фирмы Sun 
- контейнерах сервлетов и JSP возможны разные 
соглашения о том, где какие файлы размещать; ниже 
изложено, как их размещать в Tomcat'е.
     Отвлекаемся от подкаталога ROOT (вроде он 
позволяет добиться, чтобы пользователь набирал имя 
файла сразу после http://localhost:8080/) и 
рассматриваем web-приложение (т.е. набор 
логически связанных друг с другом статических страниц, 
рисунков, файлов данных, программ для порождения 
динамически генерируемых в ответ на запрос страниц 
и т.п. - утрированно говоря, мини-сайт), 
размещаемое в подкаталоге.
     Вначале в каталоге d:\tomcat\webapps\ создаём 
подкаталог для приложения - назовём его, напр., 
test. Заходим в него и выполняем последовательность 
команд
md WEB-INF
cd WEB-INF
md classes
(именно с указанным сочетанием прописных и строчных 
букв!).
     Далее, берём указанные выше (в предварительных 
рассуждениях, при объяснении технологий Java 
Servlet и JSP) исходники сервлета и *.jsp и 
сохраняем их под именами Test.java и test2.jsp 
соответственно. Файл Test.java транслируем (javac 
Test.java).
     Далее, для сервлетов следует создать таблицу 
соответствия истинных и представляемых имён. 
Делается это весьма громоздким способом, а именно: 
в каталоге WEB-INF создаётся файл web.xml 
следующего содержания:
`
<?xml version="1.0" ?>
<!DOCTYPE web-app 
 PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN"
 
"http://java.sun.com/j2ee/dtds/web-app_2_2.dtd">
<web-app>
 <servlet>
  <servlet-name>hua1</servlet-name>
  <servlet-class>Test</servlet-class>
 </servlet>
 <servlet-mapping>
  <servlet-name>hua1</servlet-name>
  <url-pattern>/test1</url-pattern>
 </servlet-mapping>
</web-app>
`
.
     Внимание:
 (1) Test - это имя класса, test1 - то, что нужно 
набирать в браузере, hua1 - ещё одно имя, нигде 
больше не фигурирующее, а здесь использующееся лишь 
для того, чтобы через него была задана связь имён 
Test и test1;
 (2) Если сервлетов несколько, то в файле web.xml 
вначале перечисляются соответствия name/class, а 
потом - name/pattern; в итоге информация о 
соответствии name/pattern оказывается разнесена по 
далеко отстоящим участкам файла web.xml .
     Есть ли у такого представления информации 
достоинства - автору неизвестно.
`
     Далее запускаем tomcat (как выше).
     Далее набираем в браузере:
http://localhost:80/test/test1
- без расширения в конце; здесь test в середине 
адреса - имя подкаталога; при этом из web.xml 
система должна найти, что имени test1 в конце 
адреса соответствует сервлет Test, запустить его и 
вывести результат. В результате должно вывестись 
'Hello world 1.' .
     Аналогично набираем
http://localhost:80/test/test2.jsp
- теперь с расширением '.jsp'; должно само 
оттранслировать test2.jsp, запустить и вывести 
'Hello world 2.' .
     В конце останавливаем tomcat (как выше).
`
     (Конец проверки трансляции собственного 
web-приложения)
`
     Что касается иных деталей указанных технологий 
(как из *.jsp обратиться к раздельно 
оттранслированному классу на яве, где размещать 
файлы данных для чтения и т.п., как организовать 
диалог с пользователем) - рекомендуется просмотреть 
в d:\sekirin\p1\izuchen\evm\java\java_web\osvoen\ 
подкаталоги s1..s12 - в них от простого к сложному 
приведены собственные примеры работы с этими 
технологиями (созданы в ходе их освоения).
(Примечание: в Интернет автор выставляет s1, s2 и 
s7 - см.
jsp.zip
).
`
-----
`
     MySQL (My + Structured Query Language).
`
     Бесплатно скачивается с www.mysql.com (более 
конкретно: dev.mysql.com/downloads/index.html).
     Скачанные файлы хранятся в 
d:\sekirin\p2\programs\my_sql .
     Проинсталлирована в d:\mysql . При этом 
неясно, которая из версий была проинсталлирована (!). 
Согл. osvomysq.chi, в c:\ записан файл my.ini, но 
первоначальный вариант не подошёл - был найден 
аналог из Интернета, с которым пошло.
     Не пытались задавать автомат. запуск сервера 
MYSQL при запуске WinXP - тк. экспериментировали, 
но случайно установили, и не записали, как; теперь 
сервер MySQL запускается при запуске WinXP и готов 
отвечать на запросы, пока его не снимут 
проинудительно (щёлкнуть левой кнопкой мыши на 
пиктограмме с изобр. светофора и закрыть возникшее 
окно щелчком на крестике в правом верхнем углу). В 
связи с возможными сложностями при его установке 
под WinXP (см. следующий абзац) оставляем его в 
таком состоянии.
     При попытке установить его под WinXP 
Professional (на фирме - WinXP Home Edition) 
обнаружилось, что примерно через полсекунды работы 
сервер MyXQL прекращает отвечать. Предположение - 
по аналогии с другими программами, отказывающимися 
работать под WinXP Prof., напр., Watcom'овским 
транслятором с фортрана версии 10 или 11 - 
нарушаются границы выделенной памяти, и система 
снимает задачу, но для обычных программ выдаётся 
сообщение пользователю, а для сервера, запущенного 
как фоновая задача, сообщений не выдаётся.
`
     Проверка работоспособности:
`
     Заходим в d:\mysql\bin и там набираем:
mysql -u root
show databases;
use mysql;
show tables;
show fields from host;
quit;
     Если всё нормально, в ответ на запросы выводит 
информацию.
`
-----
`
     JDBC (Java DataBase Connectivity)
`
     Найти инсталляционник не удаётся (в т.ч. на 
записанных ранее CD).
     Проинсталлировано в d:\programs\jdbc\ .
На http://java.sun.com/products/jdbc/download.html утв.,
что в J2SE уже есть java.sql и javax.sql, и вроде ничего
с данной страницы скачивать не нужно (и тогда неясно,
зачем эта страница вообще нужна). На всякий случай в 
d:\sekirin\p2\programs\jdbc\ заносим содержимое из
d:\programs\jdbc\ .
     Перед проверкой работоспособности следует 
вначале добиться работы системы выполнения явы и 
MySQL. Затем для проверки собственно JDBC: из 
d:\sekirin\p1\izuchen\evm\java\jdbc\ взять 
Show_db.java, оттранслир. и запустить. Если всё 
нормально, программа должна сообщить, что найдена 
единственная база - mysql. Поскольку исходник 
занимает ~3 кб, здесь его не приводим.
     Prime`anie: a pri wystawlenii w Internet priwodim.

// Zamysel: pokazatx wse dostupnye bazy, dlq kavd. bazy - tablicy,
// dlq kavd. tablicy - `islo zapisej, a esli polu`itsq - imena polej.
// Uve pokazywaet spisok baz dannyh.

import java.sql.Connection;
import java.sql.DriverManager; 
import java.sql.SQLException; 
import java.sql.Statement;
import java.sql.ResultSet;

public class Show_db {

    static Connection conn;
    static Statement stmt; 
    static ResultSet rs; 

    public static void initio() {
        String url;
        System.out.println(" initio poluch. upr.");
        try {
            Class.forName("com.mysql.jdbc.Driver").newInstance();
            System.out.println(" Class.forName otrabotal.");
            url = "jdbc:mysql://localhost/?user=root&password=";
            conn = DriverManager.getConnection(url);
            System.out.println(" DriverManager.getConnection otrab.");
            stmt = conn.createStatement();
        } catch ( Exception ex2) {
            // newInstance movet -> java.lang.InstantiationException .
            System.out.println("Exception ex2: " + ex2.getMessage());
        }
        System.out.println(" initio: wozwr.");
    }

    public static void finali() {
        System.out.println(" finali poluch. upr.");
        try {
            stmt.close();
            conn.close();
            System.out.println(" conn.close otrabotal.");
        } catch (SQLException ex1) {
            // stmt.close i conn.close mogut -> java.sql.SQLException .
            System.out.println("SQLException: " + ex1.getMessage()); 
            System.out.println("SQLState: " + ex1.getSQLState()); 
            System.out.println("VendorError: " + ex1.getErrorCode()); 
        }
        System.out.println(" finali: wozwr.");
    }



    public static void main(String args[]) {
        stmt = null; 
        rs = null; 
        String s0,s,nazw,ispolnitelx;
        boolean gef,g;
        int i,j;

        System.out.println("main poluch. upr.");
        initio();

        try {

            rs = stmt.executeQuery("show databases");
            System.out.println("\n- databases \\");
            while (rs.next()) {
             s = rs.getString(1);
             System.out.println(" ----- " + s);
            }
            System.out.println("- databases /\n");
            rs.close();

        } catch (SQLException ex1) {
            // rs.close movet -> java.sql.SQLException .
            System.out.println("SQLException: " + ex1.getMessage()); 
            System.out.println("SQLState: " + ex1.getSQLState()); 
            System.out.println("VendorError: " + ex1.getErrorCode()); 
        }

        finali();
        System.out.println("main: konec.");
    }

}
`
     Возм., этот пакет вообще не используется.
`
-----
`
     Fujaba.
`
     Угаров говорил о важности UML (Universal 
Modeling Language); по этому названию найден пакет 
Fujaba (From UML to Java And Back Again).
     Инсталляционник - в 
d:\sekirin\p1\programs\fujaba\ ;
проинсталлирована в d:\programs\fujaba .
     Пока лишь убедились, что пакет дышит, но не 
освоили его.
`
-----
`
     (Конец описания необходимых компонентов)

Predydushchaq / Previous
Sledujushchaq / Next
K nachalu razdela / To beginning of section
Na glawnuju stranicu / To main page
Sinonimy kl`uchewyh slow: JSP, Java, servlet, JSP, html, Tomcat, сервер, MySQL
Counter: .
Po pros`be komandy poddervki ot www.hotlog.ru:
http://www.hotlog.ru/cgi-bin/hotlog/buttons.cgi
(Wystawit` kak: / To expose as: http://aravidze.narod.ru/p1/jsp.htm , http://www.geocities.com/sekirin1/p1/jsp.htm . )

Hosted by uCoz