Winuser's Blog

17 listopada 2010

Strona internetowa w C++

Filed under: C++,Programowanie,WWW — winuser @ 18:04
Tags: , ,

Osoby obyte w temacie www pewnie w żaden sposób nie zdziwi temat tego wpisu, a inni powiedzą: „co do cholery?”. Ale to prawda, można pisać strony internetowe w języku C++. W języku C też można. Brzmi zachęcająco ? Można też w wielu innych językach które obsługują STDIN i STDOUT (np. Perl, VisualBasic czy Ruby). Ten wpis będzie o pisaniu stron www z użyciem języka C++, resztę sobie podaruję.
Kluczem do odpowiedzi na pytanie „jak to możliwe?” jest słowo „CGI”. Jest to niezmienny standard od 1995 roku. Dawno temu wykorzystywany był do generowania dynamicznie stron, chociaż dziś nadal ma swoją pozycję nieco umniejszoną. Zwykle skrypty CGI pisze się w języku Perl, ale byłoby nudne opisywać tutaj strony www + Perl.
Co wogóle potrzebne jest do tego aby można było tworzyć strony w C++ ? Po pierwsze serwer www z obsługą CGI, jakiś kompilator C++ (ja tutaj użyłem G++). Pliki należy skompilować i wrzucić do folderu cgi-bin. Jeśli z jakiegoś powodu nie uda się uruchomić aplikacji, to najprawdopodobniej serwer wypluje błąd 500. Naturalnie jeśli serwer postawiony jest na systemie Windows to pliki muszą być zbudowane pod tym systemem, jak UNIX to unixowe pliki wykonywalne i tak dalej. Poniżej przedstawiam kod jakiejś prostej strony wypluwającej napis „Jakas tam strona internetowa”.

#include <iostream>
#include <cstdlib>

using namespace std;

int main(int argc, char* argv[])
{
	cout << "Content-type: text/plain" << endl << endl;
	cout << "Jakas tam strona internetowa.";
	
	return EXIT_SUCCESS;
}

Ale co by było gdybyśmy chcieli wyrzucić na wyjście trochę formatowanego kodu HTML ? Trzeba wysłać odpowiednie nagłówki HTTP, a potem kod HTML.

#include <iostream>
#include <cstdlib>

using namespace std;

int main(int argc, char* argv[])
{
	cout << "Content-type: text/plain" << endl << endl;
	cout << "<html><head><title>Tytul strony</title>";
	cout << "</head><body>" << endl;
	cout << "<h1>Jakas tam strona internetowa.</h1>" << endl;
	cout << "A to maly wpisik" << endl;
	cout << "</body></html>";
	
	return EXIT_SUCCESS;
}

Wynikiem wykonania tego programu będzie w przeglądarce :

Niestety pisanie stron w ten sposób jest dosyć uciążliwe i podatne na błędy. Trzeba też się martwić o nagłówki HTTP. Ale przecież zawsze można napisać własną klasę do obsługi tego, co znacznie uprościłoby całość a także zmniejszyła podatność na błędy. Osobiście interesuje mnie sprawa wydajności strony napisanej w C++ w porównaniu z PHP. Jest to nieco bardziej złożony temat, dlatego postanowiłem zostawić sobie go na kolejny wpis.

Reklamy