30 июля 2008

JavaFX - первое приложение

Для начала необходимо скачать и настроить компилятор.
Скачать последню версию компилятора можно по ссылке : archive.zip(12Мб)

- распакуйте архив в удобную для вас папку
- добавьте полный путь к папке openjfx-compiler\dist\bin\ в перменную PATH

Откройте текстовый редактор и создайте в нём файл HelloWorld.fx

import javafx.application.Frame;
import javafx.application.Stage;
import javafx.scene.text.Text;

Frame {

title: "Hello JavaFX Script"
width: 300
height: 100

stage:Stage {
content: [
Text {
x: 100, y: 30
content: "Hello world"
}
]
}

visible: true
}

Сохраните файл, скомпилируйте и выполните его с помощью следующих команд:

>javafxc HelloWorld.fx
>javafx HelloWorld

Внимание, на вашем компьютере должно быть установлено JDK версии не менее 1.6 для успешного работы Java FX.

Итак, приложение создало окно (Frame) указанных размров c заголовком Hello JavaFX Script и текстом Hello world посреди окна.

Другие римеры на Java FX
Tesla Demo
SVG to Java FX Translator Demo
(примеры загружаются через Java Web Start)

Source:
Open Java FX
JavaFX по русски

16 июля 2008

Бил Гейтс и Стив Джобс

23 июня 2008

Spring MVC

Spring MVC - это реализация шаблона MVC (модель - представление - контроллер) в Spring Framework.
Используется для создания Web приложений.
Для создания приложения первого приложения вам не помешает скачать
необходимые библиотеки из оффициального сайта Spring.
Во время написания заметки самой новой версией была 2.5.4 ею и предлагаю воспользоваться.
Также вам на первых порах не помешают следующие библиотеки:
commons-logging-1.1.jar
jstl.jar, standard.jar
Свой "hello world" я создавать не буду, таких достаточно в интернете, напрмер
можно воспользоваться одним из следующих туториалов:
http://mhimu.wordpress.com/2007/11/27/spring-mvc-tutorial/ (англ.)
http://artamonov.ru/2006/03/15/prostoe-prilozhenie-na-spring/ (рус.)

17 июня 2008

Eclipse IDE и Spring Framework

Для удобства разработки приложений с использованием Spring Framework существует проект Spring IDE.
Проект  занимается разработкой Spring плагинов под Eclipse.
Установить плагины можно посредством добавления в Update Manager ссылки:
http://springide.org/updatesite

Требования плагинов:
  • Eclipse 3.2.x
  • Web Tools 1.5.x
Замечание:
Плагин Spring IDE Dependencies (only for Eclipse 3.2.x) не надо устанвливать на Eclipse 3.3 или более новые версии.

16 июня 2008

Преобразование кодировок

Есть например у нас непонятная строка в непонятной кодировке :
привет
Определить в какой кодировке сейчас находиться строка и пере-конвертировать в
"правильную" кодировку можно с помощью следующего выражения:
строки:
result = new String(new String(some_string.getBytes(),from_enc).getBytes(to_enc));
где
some_string - строка с непонятной кодировкой
from_enc - текущая предположительная кодировка
to_enc - в какую кодировку следует преобразовать строку
например:
result = new String(new String("привет".getBytes(),"ASCII").getBytes("KOI8_R"));

Дополнение 1. Список кодировок, используемых в Java.
"ASCII",
"ISO8859_1","ISO8859_2","ISO8859_3","ISO8859_4","ISO8859_5",
"ISO8859_6","ISO8859_7","ISO8859_8","ISO8859_9",
"Big5",
"Cp037",
"Cp1006" ,"Cp1025","Cp1026","Cp1046","Cp1097","Cp1098",
"Cp1112" ,"Cp1122","Cp1123","Cp1124",
"Cp1250" ,"Cp1251","Cp1252","Cp1253","Cp1254","Cp1255",
"Cp1256" ,"Cp1257","Cp1258","Cp1381","Cp1383",
"Cp273" ,"Cp277" ,"Cp278" ,"Cp280" ,"Cp284" ,"Cp285","Cp297",
"Cp33722","Cp420" ,"Cp424" ,"Cp437" ,"Cp500" ,"Cp737","Cp775",
"Cp838" ,"Cp850" ,"Cp852" ,"Cp855" ,"Cp857" ,
"Cp860" ,"Cp861" ,"Cp862" ,"Cp863" ,"Cp864" ,"Cp865",
"Cp866" ,"Cp868" ,"Cp869" ,"Cp870" ,"Cp871" ,"Cp874","Cp875",
"Cp918" ,"Cp921" ,"Cp922" ,"Cp930" ,"Cp933" ,"Cp935","Cp937","Cp939",
"Cp942" ,"Cp948" ,"Cp949" ,"Cp950" ,"Cp964" ,"Cp970",
"EUC_CN","EUC_JP","EUC_KR","EUC_TW",
"GBK",
"ISO2022CN_CNS","ISO2022JP","ISO2022KR",
"JIS0201","JIS0208","JIS0212",
"KOI8_R",
"MS874",
"MacArabic","MacCentralEurope","MacCroatian","MacCyrillic",
"MacDingbat","MacGreek","MacHebrew","MacIceland","MacRoman",
"MacRomania","MacSymbol","MacThai","MacTurkish","MacUkraine",
"SJIS",
"UTF8","UTF-16","UnicodeBig","UnicodeLittle"



P.s. жду ваших коментариев, а также вариантов, что это за "закодированое" слово.

13 июня 2008

RPM Команды

В данной статье будет рассмотрена утилита rpm (Red Hat Package Manager), незаменимая вешь в Linux.
Программа позволяет устанавливать, удалять и обновлять программное обеспечение.

Установка нового пакета из файла либо удалённого сервера :
# rpm -ivh foo-2.0-4.i386.rpm
# rpm -i ftp://ftp.redhat.com/pub/redhat/RPMS/foo-1.0-1.i386.rpm
# rpm -i http://oss.oracle.com/projects/firewire/dist/files/kernel-2.4.20-18.10.1.i686.rpm
 Обновление пакета (rpm удалит предыдущую версию и установит новую):
# rpm -Uvh foo-1.0-2.i386.rpm
# rpm -Uvh ftp://ftp.redhat.com/pub/redhat/RPMS/foo-1.0-1.i386.rpm
# rpm -Uvh http://oss.oracle.com/projects/firewire/dist/files/kernel-2.4.20-18.10.1.i686.rpm


Удаление пакета:

# rpm -e foo

Получение списка установленных пакетов:

# rpm -qa
Запрос пакета по имени (проверяем установлен ли такой пакет):
# rpm -q foo
Запрос информации о пакете:
# rpm -qi foo
Запрос всех файлов (их местонахождение в файловой системе) относящихся к пакету:

# rpm -ql foo
 Запрос названия пакета к которому относится файл:

# rpm -qf /usr/bin/mysql
mysql-3.23.52-3
Запрос всех файлов, которые находятся в установочном файле (rpm):
# rpm -qpl kernel-2.4.20-18.10.1.i686.rpm
# rpm -qpl ftp://ftp.redhat.com/pub/redhat/RPMS/foo-1.0-1.i386.rpm
# rpm -qpl http://oss.oracle.com/projects/firewire/dist/files/kernel-2.4.20-18.10.1.i686.rpm
 Проверка корректности установленного пакета(результат - список файлов не прошедших тесты:
md5, проверка размера файлов):
# rpm --verify mysql
 Проверка целостности и валидности PGP цифровой подписи пакета:
# rpm --checksig foo

Tips!
Если вы не знаете правильного название пакета, можно найти его по некоторому ключевому
слову (входящему в название), с помощью следующей команды:
rpm -ql | grep java
Выведет все пакеты в названиях которых присутствует слово java.

P.S.: Надеюсь при переходе с Windows на Linux вам это пригодится.

12 июня 2008

Установка Java Plugin для Firefox на Red Hat Linux

Первым делом нам надо установить JRE. Тут ничего сложного нету, скачиваем с сайта Sun выполняемый файл (например: jre-1_5_0_15-linux-i586.bin) и просто выполняем его в той директории, куда вы хотите установить JRE:
./jre-1_5_0_15-linux-i586.bin
Проверим правильность установки java, команда
java -version
должна вывести информацию о версии Java. Если этого не произошло, значит надо создать правильные ссылки:
ln -sf /path/to/installed/jre/bin/java /etc/alternatives/java
ln -sf /path/to/indtalled/jre /etc/alternatives/jre
ещё следует проверить ссылку /usr/bin/java , она должна указывать на /etc/alternatives/java .

С установкой Jre закончили. Переходим к настройке плагина.
Переходим в каталог с firefox plugins (например)
cd /usr/lib64/firefox/plugins
устанавливаем ссылку на библиотеку с плагином:
ln -sfi /path/to/jre/jre1.5.0_15/plugin/i386/ns7/libjavaplugin_oji.so
Внимание, не ставьте 64х битную версию Jre! Непонятно почему, но нужного плагина в той сборке нет.

Перезапускаем firefox.

В about:plugins должен появится Java Plugin.

Thats all,
folks.

02 февраля 2008

Простейший пример JSP

Язык разметки JSP (JavaServer Pages), расширяющий язык HTML тегами вида

<% имя тега атрибуты %>
. С помощью этих тегов можно не только внести описания, выражения и
операторы Java, но и вставить в страницу файл с текстом или
изображение, вызвать объект Java или компонент JavaBean или даже
компонент EJB.

Можно также расширить стандартный набор тегов, своими собственными, custom tags.

Рассмотрим следующий простейший пример JSP страницы:

<head>
</head>
<body>
 <table>
    <tr>
        <td>Hello</td><td><%= new String("world") %></td>
    </tr>
    <tr>
        <td>Дата</td><td><%= new java.util.Date()%></td>
    </tr>
    <tr>
        <td>Хост</td><td> <%out.println( request.getRemoteHost());%></td>
    </tr>
</table>
</body>
</html>


Перед тестированием примера, вам понадобится скачать веб контейнер, например Apache Tomcat и установить его.
Переходим в домашнюю папку Apache Tomcat : \webapps\ROOT\
там создаём файлик my.jsp и сохраняем туда содержимое примера.
Запускаем tomcat сервер. Теперь наши пример доступен по адресу : http://localhost:8080/my.jsp.

Теперь немного про жизненный цикл Jsp страниц.
В веб контейнере есть специальный предпроцессор, который при первом же запросе к странице jsp автоматически обрабатывает её и превращает в обычный сервлет. Полученый в результате работы предпроцессора сервлет тут же компилируется и выполняется. Откомпилированный сервлет храниться в контейнере вместе со всеми остальными сервлетами. При следующих вызовах обращение будет напрямую передаватся скомпилированному сервлету, но если вы внесёте изменения в свою страницу и сохраните её - эти изменения приведут к перекомпиляции сервлета. Вы сможете сразу увидеть результат без перезагрузки сервера.
Для первого примера достаточно.

29 января 2008

Админка на Jsp & Jstl

Создан небольшой пример, который позволит новичкам познакомится с технологиями написания web приложений на java.
Скачать можно тут.
Для работы с примером нам потребуется веб контейнер, например Tomcat6, который можно скачать с официального сайта Apache Tomcat.
После инсталяции Веб контейнера, установите war файл примера на сервер (deploy).
Данный пример состоит из трёх jsp файлов, а также двух вспомогательных классов:
index.jsp - главная страница, проводит авторизацию пользователей, только авторизованные пользователи получают доступ к нашей админке.
users.jsp - список пользователей, которые имеют доступ к админке, лишних пользователей можно удалить.
adduser.jsp - форма, где можно создать нового пользователя.
Список пользователей хранится в хмл файле users.xml. Каждый пользователь имеет свой логин и пароль.
По умолчанию существует пользователь с логином: "admin", пароль: "admin";
замечание! Это учебный пример, поэтому для наглядности реализована минимальная функциональность для корректной работы.
Знакомимся с примером и задаём вопросы, указываем на замечания.

25 января 2008

java.util LinkedList

Решил познакомится поближе с возможностями данного класса.
LinkedList - это реализация интерфейса List, которая реализует все операции списка и позволяет добавлять любые элементы (включая null).  Кроме реализации интерфейса List , LinkedList реализует методы получения, удаления и вставки в начало и конец списка. Такие операции позволяют использовать рассматриваемый класс как стек, очередь и двухсторонняя очередь.
Единственный негативный момент в том, что LinkedList является не синхронизированной. Тоесть при доступе к одному объекту LinkedList из нескольких потоков, необходимо, внешними средствами синхронизовать этот объект. Например создать объект, который будет инкапсулировать наш объект и отвечает за синхронизацию синхронизацию:
List list = Collections.synchronizedList(new LinkedList(...));

Так теперь перейдём к примерам.
1. Создание стека с помощью LinkedList :

import java.util.LinkedList;
public class MainClass {
  public static void main(String[] args) {
    StackL stack = new StackL();
    stack.push("First In");
    stack.push("Second In");
    System.out.println(stack.pop());
    System.out.println(stack.pop());
  }
}
class StackL {
  private LinkedList list = new LinkedList();
  public void push(Object v) {
    list.addFirst(v);
  }   public Object pop() {
    return list.removeFirst();
  }
}

Как известно стек работает по принципу FILO (first in last out), так что результат работы нашего примера:
>Second In
>First In


2. Создание очереди с помощью LinkedList:

import java.util.LinkedList ;
public class Queue {
  private LinkedList list = new LinkedList();
  public void put(Object v) {
   list.addFirst(v);
  }
  public Object get() {
    return list.removeLast();
  }
  public boolean isEmpty() {
    return list.isEmpty();
  }
  public static void main(String[] args) {
    Queue queue = new Queue();
    for(int i = 0; i < 10; i++)
      queue.put(Integer.toString(i));
    while(!queue.isEmpty())
      System.out.println(queue.get());
  }
}

В данном примере реализован принцип очереди: FIFO (first in first out).

Как вы заметили в этих примерах были ограничены возможности класса LinkedList, потому что он (LinkedList) имеет в своём арсенале методы реализующие и стек и очередь и двухсторонню очередь.