Java – techniki programowaniausers.uj.edu.pl/~ciesla/java/java_01.pdf · Plan wykładu 2 1....

30
Java – techniki programowania 1 Wykład dla studentów Informatyki Stosowanej i Fizyki Komputerowej UJ 2005/2006 Michał Cieśla pok. 440a, email: [email protected] konsultacje: poniedziałki 13-15 http://users.uj.edu.pl/~ciesla/

Transcript of Java – techniki programowaniausers.uj.edu.pl/~ciesla/java/java_01.pdf · Plan wykładu 2 1....

Page 1: Java – techniki programowaniausers.uj.edu.pl/~ciesla/java/java_01.pdf · Plan wykładu 2 1. Rozpowszechnianie programów napisanych w Javie. 2. Narzędzie przydatne w trakcie tworzenia

Java – techniki programowania

1

Wykład dla studentów Informatyki Stosowanej i Fizyki

Komputerowej

UJ

2005/2006

Michał Cieśla

pok. 440a, email: [email protected]

konsultacje: poniedziałki 13-15

http://users.uj.edu.pl/~ciesla/

Page 2: Java – techniki programowaniausers.uj.edu.pl/~ciesla/java/java_01.pdf · Plan wykładu 2 1. Rozpowszechnianie programów napisanych w Javie. 2. Narzędzie przydatne w trakcie tworzenia

Plan wykładu

2

1. Rozpowszechnianie programów napisanych w Javie.

2. Narzędzie przydatne w trakcie tworzenia aplikacji (ant, junit, log4j).

3. Java i bazy danych.

4. Bibliotekiprzydatne przy tworzeniu aplikacji komercyjnych.

5. Serializacja i Java Beans.

6. Wybrane elementy wprowadzone w wersji JDK 1.5.

.

Page 3: Java – techniki programowaniausers.uj.edu.pl/~ciesla/java/java_01.pdf · Plan wykładu 2 1. Rozpowszechnianie programów napisanych w Javie. 2. Narzędzie przydatne w trakcie tworzenia

Literatura

3

1. http://java.sun.com/.

2. http://www.apache.org/, http://jakarta.apache.org/.

3. Czasopisma: ● Software Developer Journal (http://www.sdjournal.org/),● Java Developers Journal (http://jdj.sys-con.com/).

4. Inne zasoby internetowe (http://www.jguru.com/).

Page 4: Java – techniki programowaniausers.uj.edu.pl/~ciesla/java/java_01.pdf · Plan wykładu 2 1. Rozpowszechnianie programów napisanych w Javie. 2. Narzędzie przydatne w trakcie tworzenia

Rozpowszechnianie programów w Javie

4

1. Format jar

- podpisywanie archiwów

- narzędzia keytool i jarsigner

2. Applety

- uruchamianie dowolnej aplikacji jako applet.

3. Java Web Start

- protokół jnlp

4. Tworzenie wersji instalacyjnych

- IzPack

- IzPack-launcher

Page 5: Java – techniki programowaniausers.uj.edu.pl/~ciesla/java/java_01.pdf · Plan wykładu 2 1. Rozpowszechnianie programów napisanych w Javie. 2. Narzędzie przydatne w trakcie tworzenia

JAR (The Java Archive Format)

Format JAR pozwala umieścić wiele plików w pojedynczym archiwum. Zwykle

archiwa JAR zawierają pliki klas wraz z dodatkowymi zasobami potrzebnymi

do działania apletu czy aplikacji. Podstawowe zalety dystrybucji programów w

postaci plików jar to:● bezpieczeństwo: archiwa mogą być cyfrowo podpisywane – użytkownicy

akceptujący podpis mogą dać aplikacji dodatkowe prawa, które w innym

przypadku nie zostałyby udostępnione,● kompresja: skrócenie czasu ładowania apletu lub aplikacji,● zarządzanie zawartością archiwów z poziomu języka programowania,● zarządzanie wersjami na poziomie pakietów oraz archiwów (Package Sealing,

Package Versioning),● przenośność.

5

Page 6: Java – techniki programowaniausers.uj.edu.pl/~ciesla/java/java_01.pdf · Plan wykładu 2 1. Rozpowszechnianie programów napisanych w Javie. 2. Narzędzie przydatne w trakcie tworzenia

Tworzenie pliku JARArchiwum jar tworzy sie używając komendy jar, np:jar cf archiwum.jar klasa1.class klasa2.class ...Użyte opcje:● c – tworzenie pliku (create),● f – zawartość archiwum zostanie zapisana do pliku archiwum.jar zamiast do

standardowego wyjscia (stdout);

Inne opcje, które mogłyby zostac dodane do cf:● v – informacje o postępie prac (verbose),● 0 (zero) – brak kompresji,● M – domyślny plik manifest nie zostanie dołączony do archiwum● m – do archiwum zostanie dołączony plik manifest z określonej lokalizacji,

np: jar cmf plik_manifest archiwum.jar *,● -C – zmiana katologu w trakcie działania archiwizatora, np: jar cf ImageAudio.jar -C images * -C audio *. 6

Page 7: Java – techniki programowaniausers.uj.edu.pl/~ciesla/java/java_01.pdf · Plan wykładu 2 1. Rozpowszechnianie programów napisanych w Javie. 2. Narzędzie przydatne w trakcie tworzenia

Plik MANIFEST

W archiwum jar zwykle znajduje się katalog META-INF a w nim plik

MANIFEST.MF zawierający dodatkowe informacje o archiwum.

Typowa zawartość:

Manifest-Version: 1.0Created-By: 1.5.0-b64 (Sun Microsystems Inc.)Ant-Version: Apache Ant 1.6.5Main-Class: pl.edu.uj.if.wyklady.java.Wyklad01

mówi, że po uruchomieniu archiwum wykonana zostanie metoda

main(String[] args) zawarta w klasie Wyklad01 znajdującej się w

pakiecie pl.edu.uj.if.wyklady.java.Uruchomienie pliku jar:java -jar archiwum.jar

7

Page 8: Java – techniki programowaniausers.uj.edu.pl/~ciesla/java/java_01.pdf · Plan wykładu 2 1. Rozpowszechnianie programów napisanych w Javie. 2. Narzędzie przydatne w trakcie tworzenia

Przeglądanie zawartości pliku JAR

Archiwum jar przegląda się używając opcji t, np:jar tf archiwum.jarUżyte opcje:

t – przeglądanie pliku (table).

Przykład:jar tf dt.jarMETA-INF/META-INF/MANIFEST.MFjavax/javax/swing/javax/swing/AbstractButtonBeanInfo.classjavax/swing/beaninfo/javax/swing/beaninfo/images/javax/swing/beaninfo/images/AbstractButtonColor16.gifjavax/swing/beaninfo/images/BorderColor16.gifjavax/swing/beaninfo/images/BoxColor16.gif...

8

Page 9: Java – techniki programowaniausers.uj.edu.pl/~ciesla/java/java_01.pdf · Plan wykładu 2 1. Rozpowszechnianie programów napisanych w Javie. 2. Narzędzie przydatne w trakcie tworzenia

Rozpakowanie pliku JAR

Archiwum jar można rozpakować za pomocą opcji x, np:jar xf archiwum.jar [plik(i) do rozpakowania]Użyte opcje:● x – tworzenie pliku (create).

Przykład:

jar xf dt.jar – rozpakuje całe archiwum.jar xf dt.jar javax/swing/AbstractButtonBeanInfo.class –

rozpakuje plik javax/swing/AbstractButtonBeanInfo.class.

UWAGA:

podczas rozpakowywania wszystkie istniejące pliki o ścieżkach takich jak pliki

rozpakowywane zostaną nadpisane.

9

Page 10: Java – techniki programowaniausers.uj.edu.pl/~ciesla/java/java_01.pdf · Plan wykładu 2 1. Rozpowszechnianie programów napisanych w Javie. 2. Narzędzie przydatne w trakcie tworzenia

Aktualizacja pliku JAR

Sposoby modyfikacji pliku jar:jar cmf dodatek-do-manifestu archiwum.jar [plik(i) do spakowania]

jar uf archiwum.jar [plik(i) do aktualizacji]Użyte opcje:● m – dopisanie informacji do pliku manifest,● u – aktualizacja archiwum.

Opcje u i m – mogą być użyte równocześnie. Przykład:

jar xf dt.jar – rozpakuje całe archiwum.jar umf info dt.jar javax/swing/AbstractButtonBeanInfo.class – aktualizuje w pliku dt.jar manifest zawartością info i plik javax/swing/AbstractButtonBeanInfo.class.

10

Page 11: Java – techniki programowaniausers.uj.edu.pl/~ciesla/java/java_01.pdf · Plan wykładu 2 1. Rozpowszechnianie programów napisanych w Javie. 2. Narzędzie przydatne w trakcie tworzenia

Podpisywanie pliku JAR

Cyfrowy podpis to ciąg bitów wyliczony na podstawie podpisywanych danych i

prywatnego klucza osoby (instytucji) podpisującej. Podstawowe cechy podpisu

cyfrowego:● jego autentyczność jest weryfikowana za pomocą klucza publicznego

podpisującego,● nie może zostać podrobiony (dopóki klucz prywatny jest chroniony),● nie może być wykorzystany do podpisu innych danych, ponieważ jest funkcją

podpisywanej treści,● podpisana treść nie może być zmieniona, w przeciwnym wypadku podpis straci

autentyczność.

Aby wygenerować podpis należy posiadać parę odpowiadających sobie kluczy:

prywatny i publiczny. Dodatkowo potrzebny jest certyfikat potwierdzający

autentyczność klucza publicznego.11

Page 12: Java – techniki programowaniausers.uj.edu.pl/~ciesla/java/java_01.pdf · Plan wykładu 2 1. Rozpowszechnianie programów napisanych w Javie. 2. Narzędzie przydatne w trakcie tworzenia

Narzędzie keytool

keytool służy do zarządzania kluczmi i certyfikatami. Wszystkie klucze są

przechowywane w tzw. keystore. Na dysku jest on przechowywany w

domyślnym katalogu użytkownika w pliku o nazwie .keystore lub

keystore. Aby wygenerować nowy klucz należy użyć opcji genkey:

keytool -genkey {-alias alias} {-keyalg keyalg} {-keysize keysize} {-sigalg sigalg} [-dname dname] [-keypass keypass] {-validity valDays} {-storetype storetype} {-keystore keystore} [-storepass storepass] [-provider provider_class_name] {-v} {-Jjavaoption}

Więcej informacji:

http://java.sun.com/j2se/1.4.2/docs/tooldocs/solaris/keytool.html

12

Page 13: Java – techniki programowaniausers.uj.edu.pl/~ciesla/java/java_01.pdf · Plan wykładu 2 1. Rozpowszechnianie programów napisanych w Javie. 2. Narzędzie przydatne w trakcie tworzenia

Narzędzie keytool

C:\jdk1.5.0\bin>keytool -genkey -alias mckeyEnter keystore password: haslo0What is your first and last name? [Unknown]: MichalWhat is the name of your organizational unit? [Unknown]: CieslaWhat is the name of your organization? [Unknown]: IIS UJWhat is the name of your City or Locality? [Unknown]: KrakowWhat is the name of your State or Province? [Unknown]: MalopolskaWhat is the two-letter country code for this unit? [Unknown]: PLIs CN=Michal, OU=Ciesla, O=IIS UJ, L=Krakow, ST=Malopolska, C=PL correct?

[no]: yesEnter key password for <mckey> (RETURN if same as keystore password): haslomckey

13

Page 14: Java – techniki programowaniausers.uj.edu.pl/~ciesla/java/java_01.pdf · Plan wykładu 2 1. Rozpowszechnianie programów napisanych w Javie. 2. Narzędzie przydatne w trakcie tworzenia

Narzędzie jarsigner

14

jarsigner jest wykorzystywany do podpisywania plików jar.

Aby podpisać plik przyklad.jar za pomocą wygenerowanego wcześniej

klucza mckey używamy polecenia:

C:\jdk1.5.0\bin>jarsigner przyklad.jar mckeyEnter Passphrase for keystore: haslo0Enter key password for mckey: haslomckeyWarning: The signer certificate will expire within six months.

Więcej informacji:

http://java.sun.com/j2se/1.4.2/docs/tooldocs/solaris/jarsigner.html

Page 15: Java – techniki programowaniausers.uj.edu.pl/~ciesla/java/java_01.pdf · Plan wykładu 2 1. Rozpowszechnianie programów napisanych w Javie. 2. Narzędzie przydatne w trakcie tworzenia

Applety

15

Applet pozwala na uruchomienie dowolnego programu w javie za pośrednictwem

przeglądarki internetowej. Po wejściu na odpowiednio przygotowaną stronę

internetową następuje pobranie wskazanych plików potrzebnych do

uruchomienia programu. Pliki potrzebne do uruchomienia programu są

automatycznie pobierane po czym następuje uruchomienie wskazanej klasy na

lokalnym komputerze. Aplet nie musi wykonywać się w oknie przeglądarki.

Jak każdy program w javie moze on otworzyć osobne okienko (okienka) do

komunikacji z klientem. Przed uruchomieniem apletu może nastąpić

sprawdzenie podpisów cyfrowych.

Page 16: Java – techniki programowaniausers.uj.edu.pl/~ciesla/java/java_01.pdf · Plan wykładu 2 1. Rozpowszechnianie programów napisanych w Javie. 2. Narzędzie przydatne w trakcie tworzenia

Przykładowy applet

16

package pl.edu.uj.is.javapublic class ExampleApplet extends javax.swing.JApplet { /** Konstruktor. Tworzy instancje apletu */ public ExampleApplet() { getRootPane().putClientProperty(

"defeatSystemEventQueueCheck", Boolean.TRUE);

} /**

* Metoda wykonywana po uruchomieniu appletu * @see java.applet.Applet#init() */ public void init() { ExampleClass.main(null); } }

Page 17: Java – techniki programowaniausers.uj.edu.pl/~ciesla/java/java_01.pdf · Plan wykładu 2 1. Rozpowszechnianie programów napisanych w Javie. 2. Narzędzie przydatne w trakcie tworzenia

Przykładowa strona www

17

<html> <head> <title>Strona zawierająca applet</title> </head> <body> <APPLET CODE ="pl.edu.uj.if.ExampleApplet.class"

WIDTH ="300" HEIGHT ="30"><PARAM NAME ="ARCHIVE"

VALUE ="kat/archiwum1.jar, kat2/lib/biblioteka.jar">alt="Twoja przegladarka obsluguje applety,

jednak z nieznanych przyczyn nie potrafi ich uruchomic.">Twoja przegladarka ignoruje applety !

</APPLET> </body></html>

Page 18: Java – techniki programowaniausers.uj.edu.pl/~ciesla/java/java_01.pdf · Plan wykładu 2 1. Rozpowszechnianie programów napisanych w Javie. 2. Narzędzie przydatne w trakcie tworzenia

Przykładowa strona www – Internet Explorer

18

<html> <head> <title>Strona zawierająca applet</title> </head> <body>

<OBJECT classid = "clsid:CAFEEFAC-0014-0001-0000-ABCDEFFEDCBA" codebase = "http://java.sun.com/products/plugin/autodl/jinstall-1_4_1-windows-i586.cab#Version=1,4,1,0" WIDTH = 300 HEIGHT = 60>

<PARAM NAME ="CODE" VALUE ="pl.edu.uj.if.ExampleApplet.class" >

<PARAM NAME = "type" VALUE = "application/x-java-applet;version=1.4.1">

<PARAM NAME = "ARCHIVE" VALUE = "kat/archiwum1.jar, kat2/lib/biblioteka.jar">

Page 19: Java – techniki programowaniausers.uj.edu.pl/~ciesla/java/java_01.pdf · Plan wykładu 2 1. Rozpowszechnianie programów napisanych w Javie. 2. Narzędzie przydatne w trakcie tworzenia

Przykładowa strona www – Internet Explorer

19

<COMMENT><EMBED

type = "application/x-java-applet;version=1.4.1" CODE = "pl.edu.uj.if.ExampleApplet.class" WIDTH = 300 HEIGHT = 30

pluginspage = "http://java.sun.com/products/plugin/index.html#download">

<NOEMBED> alt="Twoja przegladarka obsluguje applety, jednak z nieznanych przyczyn nie potrafi ich uruchomic."

Twoja przegladarka ignoruje applety ! </NOEMBED>

</EMBED> </COMMENT></OBJECT></html>

Page 20: Java – techniki programowaniausers.uj.edu.pl/~ciesla/java/java_01.pdf · Plan wykładu 2 1. Rozpowszechnianie programów napisanych w Javie. 2. Narzędzie przydatne w trakcie tworzenia

Java Web Start

20

Technologia Java Web Start jest rozwiązaniem dedykowanym do lokalnego

uruchamiania programów w Javie umieszczonych w sieci.

JWS:● jest w pełni niezależna od używanych przeglądarek internetowych,● umożliwia automatyczne pobranie właściwej wersji środowiska JRE,● pobierane są tylko pliki, które zostały zmienione,● obsługuje prawa dostępu do zasobów lokalnego komputera (dysk, sieć, itp.),● do opisu zadania do uruchomienia wykorzystuje pliki jnlp (Java Network

Launch Protocol).

Więcej informacji:

http://java.sun.com/products/javawebstart/index.jsp

Page 21: Java – techniki programowaniausers.uj.edu.pl/~ciesla/java/java_01.pdf · Plan wykładu 2 1. Rozpowszechnianie programów napisanych w Javie. 2. Narzędzie przydatne w trakcie tworzenia

JNLP - przykład

21

<?xml version="1.0" encoding="utf-8"?><jnlp spec="1.0+" codebase="http://www.serwer.w.sieci.pl/katalog" href="plik_jws.jnlp"> <information> <title>Nazwa programu</title> <vendor>Producent programu</vendor> <homepage href="http://www.strona.programu.pl"/> <description kind="short">Krotki opis

programu</description> <icon kind="splash" href="kat/splashscreen.gif"/> <icon href="kat/ikona.gif"/> <offline-allowed/> </information>

Page 22: Java – techniki programowaniausers.uj.edu.pl/~ciesla/java/java_01.pdf · Plan wykładu 2 1. Rozpowszechnianie programów napisanych w Javie. 2. Narzędzie przydatne w trakcie tworzenia

JNLP - przykład

22

<security> <all-permissions/> </security> <resources> <j2se version="1.4+"/> <jar href="kat/archiwum1.jar"/> <jar href=" kat2/lib/biblioteka.jar"/> </resources> <application-desc main-class="pl.edu.uj.if.ExampleApplet"/>

</jnlp>

Więcej:http://java.sun.com/j2se/1.4.2/docs/guide/jws/downloadservletguide.htmlhttp://java.sun.com/j2se/1.4.2/docs/guide/jws/developersguide/overview.html#requirements

Plik jnlp umieszczamy na serwerze www. Często należy skonfigurować

odpowiadający mu typ mime: application/x-java-jnlp-file JNLP

Page 23: Java – techniki programowaniausers.uj.edu.pl/~ciesla/java/java_01.pdf · Plan wykładu 2 1. Rozpowszechnianie programów napisanych w Javie. 2. Narzędzie przydatne w trakcie tworzenia

IzPack

23

Projekt IzPack (http://www.izforge.com/izpack/) służy do tworzenia instalatorów

dla programów w Javie. Jego podstawowe cechy:● opensource udostępniony na licencji GNU GPL,● powszechnie używany,● obsługuje wiele wersji językowych (w tym polską),● wieloplatformowy (testowany w Win32, MacOS X, Linux/i386, FreeBSD/i386),● konfigurowany poprzez dokument XML,● tworzy programy odinstalowujące.

Page 24: Java – techniki programowaniausers.uj.edu.pl/~ciesla/java/java_01.pdf · Plan wykładu 2 1. Rozpowszechnianie programów napisanych w Javie. 2. Narzędzie przydatne w trakcie tworzenia

IzPack - schemat

24

pliki zasoby

Dokument XML

kompilator instalator

Instalator jest opisany za pomocą

dokumentu XML. Dokument ten opisuje

wszelkie zasoby z których korzysta

program. Wynikiem jego kompilacji jest

archiwum jar zawierające instalator. Do

uruchomienia instalatora wymagane jest

środowisko JRE.

Page 25: Java – techniki programowaniausers.uj.edu.pl/~ciesla/java/java_01.pdf · Plan wykładu 2 1. Rozpowszechnianie programów napisanych w Javie. 2. Narzędzie przydatne w trakcie tworzenia

IzPack – dokument XML

25

Dokument XML opisujący program instalacyjny ma następującą strukture:Program.xml<installation version="1.0">

<info> ...</info><guiprefs ...>

...</guiprefs><locale>

...</locale><resources>

...</resources><panels>

...</panels><packs>

...</packs>

</installation>

Page 26: Java – techniki programowaniausers.uj.edu.pl/~ciesla/java/java_01.pdf · Plan wykładu 2 1. Rozpowszechnianie programów napisanych w Javie. 2. Narzędzie przydatne w trakcie tworzenia

IzPack – dokument XML

26

Sekcja info zawiera podstawowe informacje o programie, takie jak nazwa wersja,

autorzy, itp:<info>

<appname>MyApp</appname><appversion>1.2.3</appversion><authors>

<author name="Snoopy" email="[email protected]" /><author name="Foo Bar" email="[email protected]" />

</authors><url>http://www.myapp.org/</url><javaversion>1.4</javaversion>

</info>

Sekcja guiprefs określa natomiast wygląd instalatora:

<guiprefs height="600" resizable="yes" width="800"><laf name="metouia">

<os family="unix" /></laf>

</guiprefs>

Page 27: Java – techniki programowaniausers.uj.edu.pl/~ciesla/java/java_01.pdf · Plan wykładu 2 1. Rozpowszechnianie programów napisanych w Javie. 2. Narzędzie przydatne w trakcie tworzenia

IzPack – dokument XML

27

Sekcja locale definiuje dostępne wersje językowe instalatora:<locale>

<langpack iso3="eng"/><langpack iso3="fra"/><langpack iso3="deu"/><langpack iso3="ita"/><langpack iso3="jpn"/><langpack iso3="spa"/>

</locale>

Sekcja resources pozwala wskazać zasoby wykorzystywane do tworzenia

okienek instalatora:

<resources><res src="install-readme.html" id="HTMLInfoPanel.info"/><res src="Licence.txt" id="LicencePanel.licence"/><res src="langsel.jpg" id="installer.langsel.img"/>

</resources>

Page 28: Java – techniki programowaniausers.uj.edu.pl/~ciesla/java/java_01.pdf · Plan wykładu 2 1. Rozpowszechnianie programów napisanych w Javie. 2. Narzędzie przydatne w trakcie tworzenia

IzPack – dokument XML

28

Instalator bedzie zawierał okienka określone w sekcji panels.<panels>

<panel classname="HelloPanel"/><panel classname="HTMLInfoPanel"/><panel classname="LicencePanel"/><panel classname="PacksPanel"/><panel classname="TargetPanel"/><panel classname="InstallPanel"/><panel classname="SimpleFinishPanel"/>

</panels>

Sekcja packs określa położenie komponentów programu

<packs><pack name="Core" required="yes">

<description>MyApp core files.</description><fileset dir="" targetdir="$INSTALL_PATH">

<include name="*.txt" /><include name="lib/**/*" />

</fileset></pack>

</packs>

Page 29: Java – techniki programowaniausers.uj.edu.pl/~ciesla/java/java_01.pdf · Plan wykładu 2 1. Rozpowszechnianie programów napisanych w Javie. 2. Narzędzie przydatne w trakcie tworzenia

IzPack – kompilacja

29

Aby stworzyć wersje instalacyjną można użyc skryptu compile np:compile install.xml -b . -o install.jar -k standardużyte opcje:

-b podstawowa ścieżka tzw. basepath,

-o nazwa pliku wynikowego,

-k typ instalatora,

Uruchomienie instalatora nastąpi po wydaniu polecenia:java -jar install.jar

Aby uruchomić program nie posiadając środowiska JRE można zastosować

dodatkowo inny program np: izpack-launcher.

Page 30: Java – techniki programowaniausers.uj.edu.pl/~ciesla/java/java_01.pdf · Plan wykładu 2 1. Rozpowszechnianie programów napisanych w Javie. 2. Narzędzie przydatne w trakcie tworzenia

Podsumowanie

30

Aplikacje w javie można dostarczyć odbiorcy na kilka sposobów. Istnieje

możliwość przygotowania klasycznej wersji instalacyjnej jak również

uruchomienia programu umieszczonego w sieci internet. U podstaw wszystkich

tych rozwiązań znajduje się format archiwów javy - jar.