C, PHP, VB, .NET

Дневникът на Филип Петров


* Въведение в Java Server Pages

Публикувано на 31 януари 2015 в раздел Уеб JSP.

Java Server Pages е технология, която ще ви позволи да създавате динамични уеб сайтове. Тя е много подобна като принцип на действие на PHP (споменавам това само защото PHP е много популярен, а не за да започвам с някакви аналогии и сравнения) - миксирате обикновен HTML код със сорс код написан на Java и копирате файлчето в webroot директорията на сървъра, който използвате. Това е - когато заредите този файл през уеб браузър, java кода ще се компилира до servlet (специален вид програми на Java, с които ще се запознаем в детайли по-късно), който от своя страна ще генерира изходен html код, който финално ще бъде предаден на уеб браузъра на клиента.

Преди да започнете трябва да отбележа, че е нужно преди всичко да имате добри познания в HTML и да имате поне базови познания за работа с Java. При писането на примерен код ще действам предимно процедурно, затова няма да е нужно да сте запознати в детайли с принципите на ООП, но определено ще е задължително да ги знаете, ако ще пожелаете прочетеното от вас да излезе извън рамките на обикновеното любопитство.

Преди да започнете ще трябва да си изтеглите две неща:

  • Компилатор за Java - добре познатия JDK;
  • Уеб сървър, който да поддържа JSP - аз лично ще използвам за примерите си Jetty, защото е преносим (portable) и много лесен за конфигуриране. Написаните уеб страници обаче са независими като код от сървъра - те би трябвало да работят достатъчно добре и на други сървъри, например Tomcat и т.н.

Jetty всъщност е едно Java приложение (което е HTTP сървър с поддръжка на JSP). То не се инсталира като прогама - просто се изпълнява (т.е. то е portable). След като инсталирате JDK и разархивирате Jetty (да речем, че сте го направили в C:\Jetty - приемам, че сте с Windows, но разлика с Linux освен в пътищата няма да има), вие сте почти готови да започнете. Отворете директорията, където е инсталиран Jetty (C:\Jetty\ от примера) и вътре в нея създайте нова поддиректория с име "mybase" (вашата базова директория с каквото име ви харесва, не е задължително да е точно mybase). Копирайте файла start.ini от главната директория в поддиректория mybase. След това вътре в поддиректория mybase създайте поддиректория webapps, а пък вътре в нея поддиректория ROOT. Тази директория - C:\Jetty\mybase\webapps\ROOT - ще бъде основната за вашия уебсайт от тук нататък.

Накрая, за да стартирате Jetty, отворете Command Prompt и напишете следните команди:

cd \Jetty\mybase
java -jar ../start.jar

При първото стартиране най-вероятно ще получите съобщение от Windows Firewall, в което ще пише, че трябва да разрешите на java.exe да отвори порт 8080 (това е порта, който се използва по подразбиране - може да се смени от start.ini, но за това после). Позволете отварянето на порта и ще получите изход подобен на следния:

2015-01-31 00:00:00.554:INFO::main: Logging initialized @348ms
2015-01-31 00:00:00.697:INFO:oejs.Server:main: jetty-9.2.7.v20150116
2015-01-31 00:00:00.712:INFO:oejdp.ScanningAppProvider:main: Deployment 
monitor [file:/C:/Jetty/mybase/webapps/] at interval 1
2015-01-31 00:00:00.759:INFO:oejs.ServerConnector:main: Started 
ServerConnector@1888ff2c{HTTP/1.1}{0.0.0.0:8080}
2015-01-31 00:00:00.759:INFO:oejs.Server:main: Started @557ms

Вече сте готови да напишете вашата първа JSP програма! Оставете командния прозорец отворен (ако го затворите, Jetty ще спре) и отворете любимия си текстови редактор (например Notepad++), след което напишете следния код с UTF8 кодировка:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
    "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<%@ page contentType="text/html;charset=UTF-8" language="java" pageEncoding="UTF8" %>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="bg">
<head>
	<title>Моята първа JSP страница</title>
</head>
<body>
<p>Това е статичен текст</p>
<%
	out.println("<p>А това е динамичен</p>");
%></body>
</html>

Вторият ред от файла (този след DOCTYPE) указва, че документа ще трябва да третира от сървъра и от браузъра на клиента като UTF-8 кодиран. Нататък следва съвсем стандартен HTML код. В един момент в body тага се достига до <% и %> - именно това са отварящия и затварящия таг за JSP кода. Всичко написано между тези два тага ще бъде интерпретирано като сорс код на Java и съответно ще бъде компилирано като такъв. В един документ можете да отваряте и затваряте на множество места такива тагове. Ще видите повече и по-смислени примери по-нататък в следващи статии.

Запишете файла с име index.jsp (напомням от нашия пример C:\Jetty\mybase\webapps\ROOT\index.jsp) и... това е. Отворете произволен уеб браузър - Firefox, Chrome, IE, Opera или каквото друго поискате - и отворете следния адрес:

http://localhost:8080/index.jsp

Това ще укаже на вашия браузър да се свърже на порт 8080 с локалната (вашата собствена) машина и ще поиска да отвори вашия файл - index.jsp. Ако всичко работи както трябва, ще трябва да видите следното:

1

Вашата първа динамична уеб-страница работи!

Сега остава да отбележа първата голяма особеност спрямо това, с което са свикнали начинаещите програмисти на Java - има разлика между печатането в уеб браузъра и това, което вие знаехте като печатане в конзолата. Динамично генерираният код от горния пример е следния:

out.println("<p>А това е динамичен</p>");

Забележете, че използваме out.println и това е стандартния обект, който се използва за "изход към браузъра". Това е съвсем различен от познатия ви System.out.println обект. Нека го демонстрираме с пример като добавим още един ред в примерния код:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
    "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<%@ page contentType="text/html;charset=UTF-8" language="java" pageEncoding="UTF8" %>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="bg">
<head>
	<title>Моята първа JSP страница</title>
</head>
<body>
<p>Това е статичен текст</p>
<%
	out.println("<p>А това е динамичен</p>");
 	System.out.println("А това е печат в конзолата!");
%></body>
</html>

Ако отворите вашата JSP страница през уеб браузъра, ще видите, че няма да има разлика с това, което беше преди. На първо четене ще изглежда така, че System.out.println не е направило нищо. Но всъщност то е направило нещо - отпечатало е съобщението в конзолата, в която сте стартирали сървъра! Върнете се към вашия command prompt, в който стартирахте сървъра, и ще видите вашето съобщение от сайта:

2

E, това е първата особеност, с която трябва да свикнете. Вече нямате един, а имате два стандартни изхода - стандартен изход към браузъра на клиента (out) и стандартен изход в конзолата на сървъра (System.out). Второто ще го позлзвате изключително рядко - предимно за бърз debug на вашия бъдещ код. Едва ли ще ви се наложи да го използвате при реално действащи сайтове - тези съобщения са невидими за крайния потребител.

Накрая (за тази статия), за да спрете сървъра просто отидете в конзолата и натиснете CTRL+C. Това ще го изключи (нежно). Направете го, защото... споменах ли, че докато сървъра е включен, това което програмирате е налично за целия интернет с http://<вашият IP адрес>:8080? Е вече знаете. Хубаво е да си настроите защитната стена (firewall) малко по-подобаващо, а не както ви казах в статията (просто да натиснете "OK" по "юзърски").

 



Добави коментар

Адресът на електронната поща няма да се публикува


*