| | |
| |
|
Јава сервлети - Втор дел |
Параметри за иницијализација на сервлет
Како и секое потенцијално комплексно парче софтвер, така и сервлетите може да имаат конфигурациски подесувања и опции кои можат да бидат вклучени или исклучени. Кажано со жаргонот на сервлетите тие подесувања се нарекуваат „параметри за иницијализација“, а се подесуваат во web.xml датотеката.
Честа употреба за параметри за иницијализација е за да се „вклучи“ debug-рањето на апликацијата. На пример при креирањето на сервлет кој се поврзува со база на податоци можеби би сакал да ги видиш SQL прашањата кои се праќаат до DB серверот за да бидеш сигурен дека прашањата се правилно креирани. Но кога апликацијата е испорачана на клиентот, сигурно не би сакал истите пораки (SQL прашањата) да се печатат на стандарниот излез. :) Затоа со користење на параметар за иницијализација можеш многу лесно да го вклучиш/исклучиш печатењето на пораките. Ајде да видиме како ова може да се среди.
Класата HttpServlet која би требало да ја наследуваат сите твоит сервлети содржи методата getInitParameter која враќа вредност на параметар за иницијализација по зададено име на параметар. Бидејќи сите сервлети се подкласи на класата HttpServlet, сите ја наследуваат таа метода. Така да, собирањето на вредност на параметар е многу едноставно:
String parametar = getInitParameter("imeNaParametar");
Во нашиот случај за да вкллучиме/исклучиме печатење на SQL прашања на стандарден излез треба да ја земеме вредноста на параметарот „debug“ секојпат кога треба да провериме дали треба или нетреба да печатиме порака. Но уште поедноставно е (а и заштедува на куцање) да го провериме тој параметар еднаш, на самото иницијализирање на сервлертот и вредноста да ја сместиме во некоја boolean променлива.
За да извршиш некаква акција во моментот кога сервлетот се вчитува треба на сервлетот да му додадеш init метода. Еве еден пример за сервлет кој има boolean променлива на која вредноста и се доделува во init методата:
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class ServletZaDebug extends HttpServlet {
boolean debug;
public void init() throws ServletException {
String parametarZaDebug = getInitParameter("debug");
if (parametarZaDebug != null &&
parametarZaDebug.equalsIgnoreCase("true")) {
debug = true;
} else {
debug = false;
}
}
// ... doGet, doPost, itn. ...
}
Како што гледаш init методата мора да биде декларирана да фрла ServletException. Тој исклучок е тип на грешка која може да му „каже“ на серверот дека нешто тргнало наопаку и да прикаже грешка бидејќи сервлетот не работи како што е очекувано од него. При крајот на написот ќе го демонстрираме тоа, но во овој случај нашиот сервлет нема да креира такви грешки, но сепак, методата „init“ мора да биде така декларирана.
Прво нешто што методата init прави е собирање на параметарот за иницијализација (getIniParameter("debug")). Исто како и претходно споменатата метода getParameter и оваа ќе врати null доколку параметарот не постои. Поради тоа пред да ја искористиме променливата „parametarZaDebug“ мораме да се осигураме дали таа е или не е null (доколку пробаш да повикаш метода на null параметар ќе ти „тресне“ сервлетот со NullPointerException :) )
if (parametarZaDebug != null &&
parametarZaDebug.equalsIgnoreCase("true")) {
Овој исказ го користи AND (&&) операторот. Кажано со зборови истиот вели:
„Доколку parametarZaDebug не е null и parametarZaDebug е еднаков со „true“ (игнорирајќи мали/големи букви)“
Бидејќи повик до методата equalsIgnoreCase би предизвикал NullPointerException доколку parametarZaDebug е null важно е прво да се провери дали истиот е null. Јава-та е бајаги паметна, така да доколку еден израз И (&&) друг израз треба да бидат вистинити (true), а испаѓа дека првиот исказ е неточен (false) тогаш Јава-та нема воопшто да се замара да го проверува следниот исказ. Во случај parametarZaDebug да е null тогаш Јава-та ќе го прескокне вториот услов и ќе го избегне паѓањето на сервлетот, односно креирање на исклучокот NullPointerException.
Доколку IF исказот е вистинит, тогаш ја сетираме вредноста на променливата „debug“ како „true“. Доколку исказот не е вистинит тогаш „debug“ треба да е „false“. После тоа можеме да ја користиме променливата „debug“ за да провериме дали треба да печатиме пораки за дебагирање во методата doGet:
if (debug) out.println("Ova e za debagiranje!");
Следнава варијација на сервлетот TipNaBaranje2 го прикажува типот на барањето само доколку параметарот за иницијализација „debug“ има вредност „true“:
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class TipNaBaranje3 extends HttpServlet {
boolean debug;
public void init() throws ServletException {
String parametarZaDebug = getInitParameter("debug");
if (parametarZaDebug != null &&
parametarZaDebug.equalsIgnoreCase("true")) {
debug = true;
} else {
debug = false;
}
}
public void doGet(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
res.setContentType("text/html");
PrintWriter out = res.getWriter();
String tipNaBaranje = req.getMethod();
out.println("<html>");
out.println("<head><title> Web Strana </title></head>");
out.println("<body>");
if (debug) out.println("<p>Ovaa strana e rezultat na baranje od tipot: " +
tipNaBaranje + " </p>");
out.println("<p>Normalnata sodrzina na stranicata ovde :) ...</p>");
out.println("</body></html>");
}
public void doPost(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
doGet(req,res);
}
}
Како што можеш да видиш, гореспоменатиот изворен код ја користи методата init од нашите примери :)
Е сега, остана прашањето како се подесуваат параметрите за иницијализација? За таа цел ќе тркнеме до web.xml датотеката. Истата можеш да ја најдеш во WEB-INF директориумот (пример: „C:\Program Files\Apache Group\jakarta-tomcat\webapps\ROOT\WEB-INF\web.xml“). Се надевам дека се сеќаваш од првиот дел каде што ги дефиниравме имињата и мапирањата на сервлетите.
Со помош на новиот таг „<init-param>“ можеш да специфицираш параметри за иницијализација на сервлети. Следниов web.xml на пример на сервлетот „TipNaBaranje3“ му го доделува името „tnb3“ и му доделува параметар за иницијализација наречен „debug“ со вредност „true“.
Тагот „<description>“ всушност е опционален, но овде го користиме за да објасниме за што служи параметарот:
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN"
"http://java.sun.com/j2ee/dtds/web-app_2_2.dtd">
<web-app>
<servlet>
<servlet-name>
tnb3
</servlet-name>
<servlet-class>
TipNaBaranje3
</servlet-class>
<init-param>
<param-name>
debug
</param-name>
<param-value>
true
</param-value>
<description>
Podesi na 'true' za debagiranje
</description>
</init-param>
</servlet>
</web-app>
Сега со вчитување на сервлетот TipNabaranje3 со помош на неговото име (http://localhost:8080/servlet/tnb3) би требало да добиеш интересен резултат.
|
|
|
|
|
|
| |
|
|
---|
JavaTM и Java-базираните ознаки се трговски марки или регистрирани трговски марки на Sun Microsystems, Inc. во САД и други држави. Java.com.mk никако не соработува со Sun Microsystems, Inc. Сите други трговски марки се сопственост на нивните сопственици. |
|