Klone – uruchamianie środowiska

Spis treści

 

Uwagi:

dalsze instrukcje są wykonywane na Linux Mint 16
upewnij się, że masz zainstalowanego make – najlepiej w konsoli wydać polecenie: apt-get update && apt-get install build-essential -y

 

Stworzenie początkowego środowiska dla Klone jest bardzo proste. W Linuksie w wybranym przez nas folderze (może być to własny katalog domowy – tutaj wybrałem katalog /opt) tworzymy dodatkowy folder np. o nazwie klone i wchodzimy do tego folderu.

 

 

Następnie tworzymy plik Makefile z następującą zawartością:

 

Zapisz plik i wykonaj w tym folderze komendę 

 

 

Ściągnie to za pierwszym całe środowisko Klone, skompiluje i utworzy przykładową aplikację „Witaj świecie” gotową do dostosowania.

Na końcu kompilacji powinno wygląd mniej więcej tak:

 

 

Teraz wystarczy uruchomić serwer przez wpisanie w konsoli:

Serwer standardowo został uruchomiony na porcie 8080.

Wystarczy teraz uruchomić teraz przeglądarkę i wywołać stronę http://127.0.0.1:8080 lub jeżeli nasza dystrybucja linuksa nie jest standardowo wyposażona w interfejs graficzny, wywołać stronę przez inną przeglądarkę z sieci pod adresem: http://ADRES_IP:8080.

Powinna pojawić się poniższa strona:

 

 

Przyjrzyjmy się najważniejszej strukturze plików Klone.

 

 

  • klapp.mk – zawiera różne zmienne środowiskowe dla Klone, dla nas raczej mało przydatne
  • klone-3.1.0 – zawiera środowisko Klone, może być dystrybowane w projektach
  • kloned – odsyłacz do programu serwera (wywołanie ./kloned)
  • Makefile – plik konfiguracyjny make
  • vars.mk – zawiera zmienne dla Klone, informuje o wersji, ścieżce do Klone, źródeł, katalogu www
  • webapps – katalog zawierający katalogi: etc z konfiguracją klone oraz www ze stronami

Teraz dodajmy nową stronę w czystym kodzie HTML.
W tym celu tworzymy nowy plik w webapp/www o nazwie first.html z następującym kodem:

 

first.html

 

Teraz, aby uruchomić ponownie serwer należy: zabić proces serwera, wyczyść aktualne skompilowane pliki, ponownie skompilować pliki, uruchomić.

 

UWAGA!

Poniższe polecenia należy wpisywać i zatwierdzać w konsoli za każdym razem kiedy chcemy na nowo skompilować serwer.

 

Teraz w przeglądarce wywołaj stronę: http://127.0.0.1:8080/first.html

 

dir1.kl1

 

ZAPAMIĘTAJ!

  • Pliki .kl1 są przetwarzane przez Klone jako pliki C
  • Pliki .klx są przetwarzane przez Klone jako pliki C++

 

Skompiluj, uruchom klone i wywołaj stronę: http://127.0.0.1:8080/dir1.kl1

Powinniśmy otrzymać podobny efekt:

 

 

Omówmy krótko kod programu.

W bloku <%! %> umieszcza się różne deklaracje, załączenia C/C++ #include, zmienne globalne, deklaracje funkcji.

Blok <% %> używany wewnątrz kodu HTML w celu wygenerowania dynamicznego wyjścia z kodu C/C++.

Ważną funkcją, która będzie często używana to io_printf(out,…), która pozwala na wyświetlenie danych z kodu C/C++ do strumienia wyjściowego. Funkcja jest podobna do standardowej funkcji printf(). Funkcja ta przyjmuje argument out, który jest zmienną globalną zdefiniowaną przez Klone, oraz innych zmiennych formatujących tekst.

 

Przykłady użycia io_printf()

io_printf(out, "%s", "this is a string"); this is a string
io_printf(out, "I'm %d years old", 21); I'm 21 years old

const char *text = "hello!";

io_printf(out, "text: %s", text);

hello!
 

 

Plik dir1.kl1 co prawda pozwala na wyświetlanie plików i katalogów, ale nie pozwala na przechodzenie do innych folderów. Tą funkcję poprawia plik dir2.kl1, który dokłada niezbędny kod (nie posiada sprawdzania poprawności błędów).

 

dir2.kl1

 

W tym kodzie należy zwrócić na dwie różne rzeczy odnośnie funkcji. Pierwsza to print_item(), która posiada swoją deklarację w bloku <%! %> (linie: 5-14) i której zadaniem jest wyświetlenie odsyłacza do katalogu lub wyświetlenie nazwy pliku.

Drugą funkcją, która jest funkcją wbudowaną to request_get_arg(request,”variable”). Jej głównym zadaniem jest przyjęcie wartości parametru o nazwie variable przez metodę GET.

W linii 27 wyżej wspomniana funkcja pobiera wartość dla zmiennej dir.

Poniżej znajduje się wynik wyświetlania dla pliku dir2.kl1.

 

 

Uwaga! Podany przykład nie jest zalecany w produkcji aplikacji. Może to grozić bezpieczeństwem systemu i ujawnieniem ważnych danych.