| | |
| |
|
Јава сервлети - Втор дел |
Обработка на форми
Во првиот дел видовме дека секогаш кога некој сервлет требда да обработи некое барање му се предава објект од типот HttpServletRequest кој го содржи комплетниот опис на барањето. Доколку барањето за страната потекнува од испраќање на форма, тогаш барањето (односно објектот од типот HttpServletRequest) ги содржи вредностите кои се испратени во формата, а се содржат во полињата на формата. Во продолжение ќе видиме како тие вредности можат да бидат добиени од барањето, а ќе бидат искористени со цел генерирање на динамичен одговор за клиентот.
Добивањето на параметрите од формата во сервлет е лесно, едноставно се користи методата „getParameter“ кој е член на објектот од тип HttpServletRequest. На пример, за да ја добиеме вредноста на параметератот со име „naslov“ и истата да ја сместиме во променлива од тип String ќе употребиме:
String naslov = req.getParameter("naslov");
Едноставно, нели? Еве еден комплетен пример за конкретна примена на праќање, примање и работа со праметрите:
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class Pozdrav extends HttpServlet {
public void doGet(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
res.setContentType("text/html");
PrintWriter out = res.getWriter();
// Zemi ja vredosta na parametarot "ime"
String ime = req.getParameter("ime");
// Dokolku postoi parametarot "ime" generiral poraka so pozdrav
String pozdrav;
if (ime == null)
pozdrav = "Zdravo!";
else
pozdrav = "Zdravo, " + ime + "!";
out.println("<html>");
out.println("<head><title> Dobrodojde na mojot sajt! </title></head>");
out.println("<body>");
out.println("<p>" + pozdrav + "</p>");
out.println("</body></html>");
}
public void doPost(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
doGet(req,res);
}
}
Кодот горе е конкретен, а верувам во поголема мера и јасен, но ајде да го разделиме на делови кои ќе ги објасниме:
// Zemi ja vredosta na parametarot "ime"
String ime = req.getParameter("ime");
Значи прво ја земаме вредност на параметарот „ime“. Доколку во барањето не постои параметар именуван како „ime“, методата „getParameter“ ќе ни рати null, еквивалентот за НИШТО во Јава. Поради тоа пред да креираме порака со поздрав со вклучено име мораме да се осигураме дека параметарот „ime“ има вредност. Доколку има вредност користиме по конкретен поздрав, за разлика од обичното „Здраво!“
// Dokolku postoi parametarot "ime" generiral poraka so pozdrav
String pozdrav;
if (ime == null)
pozdrav = "Zdravo!";
else
pozdrav = "Zdravo, " + ime + "!";
На крај го печатиме поздравот како дел од страната:
out.println("<p>" + pozdrav + "</p>");
Компајлирај го сервлетот, испорачај го на Tomcat-от и после повик во интернет прелистувачот би требало да добиеш нешто налик на ова:
Очекувано, бидејќи не испративме параметар „ime“ во барањето методата getParameter("ime") како резултат враќа null, поради што се генерира порака без име. За да креираме порака со име (персонализирана) ќе креираме HTML датотека која ќе содржи и форма и би изгледала нешто како:
<form action="/servlet/Pozdrav" method="POST">
Your name: <input type="text" name="ime" /><br />
<input type="submit" value="Pozdravi me!" />
</form>
Секако параметерот може да го пратиме и преку GET методата во самото URL на барањето: http://localhost:8080/servlet/Pozdrav?ime=Ajnstajn.
Сега, наместо да користиме посебна датотека со „<form>“ тагот во неа, може да имаме сервлет кој ќе ја креира формата за корисникот. Следниов сервлет именуван како „Pozdrav2“ е проширена верзија на претходниот „Pozdrav“ сервлет. Но овојпат параметарот „ime“ не е подесен туку се бара од корисникот да го внесе неговото име:
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class Pozdrav2 extends HttpServlet {
public void doGet(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
res.setContentType("text/html");
PrintWriter out = res.getWriter();
// Zemi ja vredosta na parametarot "ime"
String ime = req.getParameter("ime");
// Dokolku postoi parametarot "ime" generiral poraka so pozdrav
String pozdrav;
if (ime == null)
// Soberi go URL-to na ovoj servlet
StringBuffer akcija = HttpUtils.getRequestURL(req);
pozdrav = "<form akcija=\"" + akcija + "\" method=\"POST\">\n";
pozdrav += " Tvoeto ime: ";
pozdrav += " <input type=\"text\" name=\"ime\" /><br />\n";
pozdrav += " <input type=\"submit\" value=\"Pozdravi me!\" />\n";
pozdrav += "</form>\n";
} else pozdrav = "Zdravo, " + ime + "!";
out.println("<html>");
out.println("<head><title> Dobrodojde na mojot sajt! </title></head>");
out.println("<body>");
out.println("<p>" + pozdrav + "</p>");
out.println("</body></html>");
}
public void doPost(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
doGet(req,res);
}
}
Битна промена тука е тоа дека доколку прелистувачот не испрати барање кое ќе го содржи параметарот „ime“ тогаш променливата „ime“ ќе биде со null вредност како претходно. Но сега, наместо да испечати општа порака „Zdravo!“ сервлетот ќе исцрта форма. Бидејќи сакаме истата форма да биде пратена назад кон сервлетот ни треба и URL-то на сервлетот кој после го задаваме како акција на формата (атрибутот „action“ на таг-от „form“).
Нормално се очекува URL-то да биде достапно преку метода од објектот HttpServletRequest, но овој објект содржи само методи кои враќаат делчиња од URL-то, како протоколот или патеката на барањето. Сепак, Servlet API-јата вклучуваат класа HttpUtils, која содржи статични методи со кои може да се изведат различни операции кои се поврзани со сервлети. Методата HttpUtils.getRequestURL прима објект од типот HttpServletRequest како параметар, а го враќа URL-от на барањето:
if (ime == null)
// Soberi go URL-to na ovoj servlet
StringBuffer akcija = HttpUtils.getRequestURL(req);
Интересно овде е што методата го враќа URL-то во StringBuffer наместо во веќе добро познатиот String. Објектите од типот StringBuffer се во основа String-ови кои можат да бидат менувани без да се креира нов објект. Се додека употребата е слична како и во споменатиот пример променливите од тој тип можеш слободно да ги рачунаш како да се String-ови.
pozdrav = "<form akcija=\"" + akcija + "\" method=\"POST\">\n";
Забележуваш дека пред некои од наводниците (скоро сите) стои каракетерот „\“, кој всушност е „терминатор“, одсно го маркира наводникот дека е дел од String-гот, а не дека обележува почеток или крај на String. Терминаторот „\“ се користи и за терминирање на други карактери и во различни ситуации, но за тоа потоа.
Компајлирај, испорачај и изврши го сервлетот Pozdrav2, би требало да добиеш форма во која можеш да го впишеш твоето име за после тоа да бидеш поздравен ;).
|
|
|
|
|
|
| |
|
|
---|
JavaTM и Java-базираните ознаки се трговски марки или регистрирани трговски марки на Sun Microsystems, Inc. во САД и други држави. Java.com.mk никако не соработува со Sun Microsystems, Inc. Сите други трговски марки се сопственост на нивните сопственици. |
|