суббота, 23 октября 2010 г.

Apache Tomcat изнутри

Это контейнер сервлетов java и веб-сервер одновременно.

Он состоит из трех основных компонентов:

четверг, 21 октября 2010 г.

Межфреймовое взаимодействие by javascript

Столкнулся с объектом в коде яваскрипта по имени top, как выяснилось это не доморощенный обьект, а обьект в яваскрипте по-умолчанию.

Он(если более точно window.top) означает окно браузера, которое содержит всю иерархию окон(вложенных фреймов) и является корневый окном. К этому объекту можно обратиться из любого вложенного фрейма и получить ссылку на корневое окно.

среда, 20 октября 2010 г.

Jetty and Share libraries

Jetty - сервис и библиотека, которая является веб-сервером и сервлет-контейнером.

Чудо этого приложеница в том, что подключив его библиотеку к нашему ява-приложению, мы можем создавать сервер прямо из нашего приложения.
Откомпилированное приложение можно запускать - так мы получим работающий веб-сервер. Приложение будет работать и выдавать логи наружу, если мы подключили систему логирования.

Но также в систему устанавливается сервис jetty (/etc/init.d/jetty), значит и как-то подругому можно размемещать сервлеты в него, как в контейнер сервлетов.

Во время установки jetty by Synaptic, увидел, где живут shared libraries -- /usr/local/share.

Увидел как  в консоли подключать библиотеки...
При компиляции:
javac /path/to/sources/*.java --classpath /lib/path1:/lib/path2:.
При выполнении:
java /path/to/class/with/main --classpath /lib/path1:/lib/path2:.
Такой ключ я увидел в ман странице явы, а в статье использовался -cp. Ни то не то не проверял, нужно будет как-то по свободе, у меня все ант делал через нетбинс:)

вторник, 19 октября 2010 г.

Параллельное программирование в java

Для этих целей существует класс Thread.

Есть два варианта создания потока:
1) Наследовать класс Thread и перегрузить ему метод run.
2) Реализовать интерфейс Runnable, а потом воспользоваться конструктором класса Thread для создания нового потока:

Thread th = new Thread(new MyRunableImp(), "MyThreadName");

понедельник, 18 октября 2010 г.

log4j

Это библиотека для логирования приложения, разрабатываемая by apache.org. Есть не только для явы -- log4php, log4c, log4python...

Переменные окружения

Устанавливаются переменные окружения для отдельного пользователя тут:
~/.profile    --  юниксовый файл, вызывается при входе в систему пользователя.
~/.bash-profile(bash-login)   --- таже фишка, что и предыдущая но конкретно под баш, этот скрипт вызывается первее за предыдущий.
~/.bashrc   --   а этот скрипт вызывается при каждой новой сессии консоли.

воскресенье, 17 октября 2010 г.

Java ,библиотеки и что за юниттестирование (первое знакомство)

Увидел, что библиотеки написаны с применением шаблонных свойств языка, подобно тому, как написана STL С++. Ну типа Map...


Юниттестирование -- увидел это на практике. Создается класс для тестируемого класса, в котором много директив, как я понял от усатого ява-консультанта монстро'в, java 6 -- @BeforeClass. Там есть методы настройки, которые я пока не понял зачем. А также есть методы тестирования методов класса. Они создают экземпляры класса и пихают туда нужные параметры, выполняют методы и сравнивают с ожидаемым результатом.
Общий результат выводится...

Ну чтоже прикольно!

суббота, 16 октября 2010 г.

Теория сетей наcкоком:)

Ethernet -- канальный сетевой протокол.
Единица передачи информации фрейм. Состоит из 6 байт адресата, 6 байт адрессуемого, 2 байта типа, 54 -- байт под данные (айпи пакет и т.д.), контрольная сумма.
Адреса тут мак-адреса.

среда, 13 октября 2010 г.

Apache mod_rewrite и не только...

-----------------------------------------Регулярные выражения---------------------
Групирование

(abcd)
у него есть прикольная фишка -- запоминать и использовать уже найденные совпадения групировки, их можно использовать в построение динамических регекспов. 
Они сохраняются под номерами:
\1
\2
\3
\4
\5
\6
\7
\8
\9
В некоторых реализациях регекспов и дальше.

Call и apply в Javascript

Это методы объекта function. Их суть передавать в нее параметры и переопределять контекст.
Отличие между ними

func_name.call(context,arg1,arg2,...,argN)

var args = [arg1,arg2,...,argN]
func_name.apply(context,args) -- этот метод для удобства, можно в него передавать зарезервированное поле arguments вызывающего объекта(функции).

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