Книга 1 - Начальные сведения
Книга 2 - Более профессиональный подход |
Студенческий отдел кадров Интернет-приложения на JAVA
Когда начинающий программист (я тоже им был и испытывал подобные ощущения) первый раз сталкивается
с программированием для Интернет, то количество информации, которое на него обрушивается настолько
огромно, что может просто напугать. Странные сочетания TCP/IP, IP-адрес, HTTP, HTML, XML, WEB, JSP,
SNMP, SMPP, ICMP, UDP, servlet, proxy, порт, DNS (и это только малая часть всего) могут любого
заставить как минимум задуматься: "А смогу ли я это осилить ?". Смело заверяю вас - сможете :) Сетевые протоколы
Если вы уже знакомы с основными принципами работы Web-сервера, то возможно, что эта часть вам будет
не очень интересна. Но все-таки мне бы хотелось остановиться на некоторых моментах, которые я считаю
важными для понимания того, как писать Web-приложения на Java. В принципе кто-то может сказать - да
и это в общем-то не особо важно, но тем не менее хотелось бы упомянуть. В конце концов это же моя
статья, а не ваша :)
Если расматривать эти понятия очень коротко, то IP адрес - это число, которое говорит о том, какой
адрес в сети у вашей машины. На сегодня наиболее распространненым адресом является 4-х байтное число
- протокол версии 4 (v4). Для удобства его записывают в виде четырех чисел через точку.
Например: 96.34.23.11 Что еще важно отметить в TCP - это его направленность на соединение. Т.е. пытаясь связаться с другим компьютером в сети (а точнее с приложением находящимся на другом компьютере) TCP сначала убедится, что приложение отвечает и после этого сообщит, что соединение установлено и можно посылать пакеты. В какой-то степени TCP это даже не заказная почта, а телефонный звонок. Раз трубку не подняли - значит ничего посылать нельзя. Если подняли - значит все в порядке, можно говорить, обмениваться информацией. Т.е. TCP использует для соединения IP адрес машины и порт, который используется определенным приложением на данном компьютере. Таким образом легко сделать вывод - Web-сервер является специальной программой, которая запускается на компьютере и занимает определенный порт. Как уже упоминалось выше наиболее популярный порт - 80. HTTP - кто это ?
И теперь несколько слов о HTTP. HTTP - это
Hyper Text Transfer Protocol - протокол передачи гипертекста. По большому
счету передается не какой-то загадочный гипертекст, а самый обычный текст, но раз уж назвали так,
значит так тому и быть. Гипертекстом он становиться тогда, когда его пказвает броузер. Именно броузер
в соответсвтии с тэгами (мы о них поговорим чуть позже) форматирует текст, делает ссылки (именно
это делает текст гипертекстом), показывает рисунки и т.д.
GET <URL> HTTP/1.0
<Имя_заголовка_1>:<значение_заголовка_1>
Для 1.1 запрос несколько сложнее
GET <URL> HTTP/1.0
Host: <host>
<Имя_заголовка_1>:<значение_заголовка_1>
URL включает в себя путь до ресурса и параметры, которые передаются после пути. Ставим знак вопроса а потом идут пары <имя>=<значение> через знак &. Что-то вроде GET /rfs/show?showName=direct&secondLetter=123 Как видите, здесь мы запросили ресурс /rfs/show а также передали параметры showName и secondLetter.
Команда POST используется в случае, если параметр в строке не передать. Например, Вы хотите
передать двоичный файл - в этом случае команда GET Вам вряд ли подойдет. Формат ее похоже на
GET, только параметры передаются более сложным образом - не в строке, а уже после заголовков.
Повторю еще раз - после того, как приложения установили между собой TCP соединение они передают
друг другу байты (символы). Как аналог TCP-соединение можно рассматривать как - Вы дозвонились
по нужному телефону и на том конце подняли трубку. Теперь Вы начинаете общаться - и вот это уже
HTTP. Т.е. как говорят "HTTP работает поверх TCP". Первое слово о сервлетах
Что же такое сервлет ? В двух словах описать работу сервлета можно так: Web-сервер, который умеет
работать с сервлетами, запускает Java-машину, которая в свою очередь выполняет сервлет, а сервлет
отдает данные, которые он сформирует. Т.е. при приходе запроса от клиента сервер с помощью
специального конфигурационного файла может определить, какой сервлет выполнить, сервлет выполняется
и создает HTML-страницу, которую сервер отправляет клиенту.
Если же необходимо перехватывать все команды, то проще переопределить метод
service. Именно этот метод вызывается при приходе запроса от клиента.
В HttpServlet происходит разбор запроса и в соответствии с указанной
командой вызывается метод doGet, doPost и т.д. HTML и XMLДля понимания дальнейшего материала вам необходимо иметь некоторые знания о двух языках разметки - HTML (Hyper Text Markup Language) и XML (eXtensible Markup Language).
Рекомендуем: В двух словах - оба языка используют систему "тэгов". Тэг - это набор символов, который заключен в угловые скобки "<", ">". Для примера: <B>Жирный текст</B>
Как видите я "открыл" тэг B и после текста "закрыл" его. В принципе
ничего сложного. Важно, что будет делать броузер (или другое приложение) который встретит такую
последовательность. Для HTML это значит, что текст, который нажодится внутри должен быть выделен
"жирным" шрифтом. Запускаем Web-сервер Tomcat
Загрузить Tomcat можно с сервера - Apache Tomcat.
По сути вы загрузите архив, который надо просто распаковать в какую-либо директорию. Я обычно
создаю отдельную папку JAVA в которую устанавливаю все свои пакеты,
IDE, JDK и прочие штуки. Само собой каждый пакет имеет свою собственную директорию. INFO: Server startup in 8828 ms Количество миллисекунд конечно может быть не таким. Если все прошло успешно запустите броузер и наберите в нем http://localhost:8080/ 8080 - это порт по умолчанию, который занимает Tomcat. Порт 80 он не трогает. Хотя если вам необходимо использовать другой порт - зайдите в директорию <TOMCAT_HOME>\conf и окройте файл server.xml. Поищите в нем строки
<!-- Define a non-SSL HTTP/1.1 Connector on port 8080 -->
<Connector port="8080" maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
Как видите, можно поменять порт 8080 на любой другой, который вам удобен. Не забудьте, что при
изменении файла вам необохдимо перезапустить Tomcat.
В правой верхней части будет успокаивающая надпись If you're seeing this page via a web browser, it means you've setup Tomcat successfully. Congratulations! И примите мои поздравления тоже - вы только что запустили свой личный Web-сервер. Популярнейший сервлет - Hello, World
Как выясняется, просто написать сервлет мало. Его надо скомпилировать и после этого установить на
наш сервер. И надо установить так, чтобы сервер знал, как им пользоваться. package students.web; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class HelloWorldServlet extends HttpServlet { public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { resp.setContentType("text/html;charset=utf-8"); PrintWriter pw = resp.getWriter(); pw.println("<H1>Hello, world! или Привет мир</H1>"); } }
Как видите мы унаследовались от библиотечного класса
HttpServlet и переопределили один метод -
doGet.
В нашем случае мы выводим текст и поэтому получаем Writer. Этот класс позволяет нам писать в него самый обычный HTML текст. Что мы и делаем. Для сборки сервлета вам не хватит стандартной библиотеки JDK - необходимо подключить дополнительные библиотеки. И такая библиотека на наше счастье есть в поставке Tomcat - посмотрите ее в директории <TOMCAT_HOME>\common\lib. Это servlet-api.jar. Давайте подключим ее к строке сборки. Я просто скопировал нужный JAR в каталог с проектом. Наша строка для сборки будет выглядеть следующим образом:
javac -cp .;servlet-api.jar students\web\*.java Итак наш сервлет собран и готов к установке. Для установки нам необходимо проделать еще ряд действий.
<!DOCTYPE web-app PUBLIC '-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN' 'http://java.sun.com/dtd/web-app_2_3.dtd'> <web-app> <servlet> <servlet-name>hello</servlet-name> <servlet-class>students.web.HelloWorldServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>hello</servlet-name> <url-pattern>/hello</url-pattern> </servlet-mapping> </web-app> Стоит выделить несколько моментов:
Файл web.xml должен располагаться в каталоге <TOMCAT_HOME>\webapps\studentsApp\WEB-INF\. Т.е полный путь до файла выглядит так: <TOMCAT_HOME>\webapps\studentsApp\WEB-INF\web.xml Теперь давайте запустим Tomcat и попробуем получить ответ от нашего сервлета. Итак, запускаем Tomcat и в строке броузера набираем: http://localhost:8080/studentsApp/hello Стоит отметить, что т.к. мы разместили наш сервлет в отдельной директории studentsApp, то URL должен включать эту директорию. Если вы не ошиблись при наборе данных, то по идее вы должны увидеть текст, который мы создали в нашем сервлете. Принимайте поздравления. Использование базы данныхДля того, чтобы начать использовать нашу базу данных все, что нам надо - создать еще один каталог и скопировать туда наш JAR для работы с базой данных - mysql-connector-java-3.1.13-bin.jar. Каталог называется <TOMCAT_HOME>\webapps\studetnsApp\WEB-INF\lib Соответственно полный путь до файла будет: <TOMCAT_HOME>\webapps\studetnsApp\WEB-INF\lib\mysql-connector-java-3.1.13-bin.jar Ну и конечно же изменим наш сервлет для того, чтобы он получал данные из базы данных. Новый код для нашего сервлета станет несколько сложнее. package students.web; import java.io.IOException; import java.io.PrintWriter; import java.util.List; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import students.logic.Group; import students.logic.ManagementSystem; public class HelloWorldServlet extends HttpServlet { public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { resp.setContentType("text/html;charset=utf-8"); PrintWriter pw = resp.getWriter(); pw.println("<B>Список групп</B>"); pw.println("<table border=1>"); try { List<Group> l = ManagementSystem.getInstance().getGroups(); for (Group gr : l) { pw.println("<tr>"); pw.println("<td>" + gr.getGroupId() + "</td>"); pw.println("<td>" + gr.getNameGroup() + "</td>"); pw.println("<td>" + gr.getCurator() + "</td>"); pw.println("<td>" + gr.getSpeciality() + "</td>"); pw.println("</tr>"); } } catch (Exception e) { throw new ServletException(e); } pw.println("</table>"); } }
Наша строка для сборки будет выглядеть следующим образом: Теперь мы должны скопировать не только файл HelloWorldServlet.class, но и все class-файлы из каталога students.logic. Таким образом структура каталога <TOMCAT_HOME>\webapps\studetnsApp\WEB-INF\ выглядит теперь так:
WEB-INF
classes
students
logic
-Group.class
-ManagementSystem.class
-Student.class
web
-HelloWorldServlet.class
lib
-mysql-connector-java-3.1.13-bin.jar
-web.xml
Теперь мы можем запустить наш Tomcat и попробовать исполнить обновленную версию сервлета. Я советую вам поэкспериментировать с нашим сервлетом - попробуйте вывести список студентов, студентов для определенной группы и т.п. А впереди нас ждут Java Server Pages - Часть 8 - JSP: расширяем возможности Архив с исходными кодами: Исходный код Содержание |