Servlet & JSP – 06 – ServletConfig

Merhaba Arkadaslar,
Bu yazimda ServletConfig arabiriminden ve metotlarindan bahsedecegim. Daha iyi anlamak icin kucuk bir uygulama yapacagiz.

ServletConfig

ServletConfig arabirimi/interface,  javax.servlet paketi/package altinda tanimlanmistir ve su metotlara sahiptir.

public String getServletName();
public ServletContext getServletContext();
public String getInitParameter(String name);
public Enumeration<String> getInitParameterNames();

Container, bir servleti ilk kullanima hazirladiginda(initialized) bu servlet icin bir ServletConfig olusturur. Yani her Servlet objesi icin birtane de ServletConfig objesi olusturulur.

ServletConfig objesi, deployment descriptor(web.xml )dosyasinda ilgili servlet icin tanimlanmis bilgilere ulasmak icin kullanilir. Bu bilgiler veritabanina baglanmak icin gereken bilgiler olabilir.

Bu tanimlanmis bilgilere Servlet Init Parameter adi verilir. Bu parametreler Servlet Container tarafindan , servlet lifecycle/yasam dongusunde sadece bir kez okunur.

Servlet Container bir daha bu init parametrelerini bir sonraki deploy islemine kadar okumaz.

Onceki yazida Servlet lifecycle(yasam dongusu) konusundan bahsetmistik. Simdi bu yasam dongusunde ServletConfig icin detaya inelim ;

Adim-1
Container , deployment descriptor(web.xml) dosyasini okur.

Adim-2
Container yeni bir ServletConfig instance/ornegi/objesi olusturur.

01 02

Adim-3
Container, her init parameter icin, String name/value (isim/deger) cifti olusturur. Burada bir tane init parameter oldugunu varsayalim.

Adim-4
ServletConfig objesi bu name/value init parametresi ciftine referansta bulunur.

03 04

Adim-5
Container, ilgili servlet sinifindan bir obje olusturur.

Adim-6
Container, init(ServletConfig) metodunu cagirir ve bu ServletConfig degiskeninin referansini metoda geciririr.

04 05

Daha iyi anlamak adina kucuk bir uygulama yapalim, yeni bir paket ve sinif olusturalim;

_03_ServletConfig
HelloServletConfig

web.xml

	<servlet>
		<servlet-name>HelloServletConfig</servlet-name>
		<servlet-class>_03_ServletConfig.HelloServletConfig</servlet-class>

		<init-param>
			<param-name>driverClassName</param-name>
			<param-value>oracle.jdbc.driver.OracleDriver</param-value>
		</init-param>
		<init-param>
			<param-name>url</param-name>
			<param-value>jdbc:oracle:thin:@localhost:1521:xe</param-value>
		</init-param>
		<init-param>
			<param-name>username</param-name>
			<param-value>levent</param-value>
		</init-param>
		<init-param>
			<param-name>password</param-name>
			<param-value>123456</param-value>
		</init-param>
	</servlet>

	<servlet-mapping>
		<servlet-name>HelloServletConfig</servlet-name>
		<url-pattern>/helloservletconfig</url-pattern>
	</servlet-mapping>

web.xml dosyamiza dikkat edersek <servlet> etiketi icerisinde <init-param> etiketi kullandik. <init-param> etiketi icerisinde ise <param-name> ve <param-value> etiketlerini kullandik. <init-param> etiketindeki name/value alanlariyla HelloServletConfig icin parametreler tanimladik. Simdi ise bu parametrelere nasil ulasacagiz onu inceleyelim.

HelloServletConfig.java

package _03_ServletConfig;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Enumeration;

import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class HelloServletConfig extends HttpServlet {

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {

		PrintWriter pw = resp.getWriter();

		ServletConfig config = getServletConfig();

		String driverClassName = config.getInitParameter("driverClassName");
		String url = config.getInitParameter("url");
		String username = config.getInitParameter("username");
		String password = config.getInitParameter("password");

		String servletName = config.getServletName();

		pw.print("<html><body>");
		pw.print(servletName + "<br>");
		pw.print(driverClassName + "<br>");
		pw.print(url + "<br>");
		pw.print(username + "<br>");
		pw.print(password + "<br>");
		pw.print("</body></html>");

		Enumeration<String> enm = config.getInitParameterNames();
		while (enm.hasMoreElements()) {
			System.out.println(enm.nextElement());
		}
	}
}


getServletConfig()
metodu yardimi ile elde ettigimiz ServletConfig objemiz uzerinden getInitParameter() metodunu kullanabiliriz.Bu metot parametre olarak String bir deger almaktadir ve aldigi degerlere dikkat edersek <param-name> etiketindeki String ifadelere karsilik gelmektedir.

getServletConfig metodu GenericServlet sinifinda tanimlanmistir ;

    @Override
    public ServletConfig getServletConfig() {
        return config;
    }

getServletName() metodu ise adi uzerinde <servlet-name> etiketinde tanimlanan ismi bize getirmektedir.

getInitParameterNames() metodu ise bu Servlet icin tanimladigimiz tum init parametrelerinin isimlerini bize dondurmektedir. Bu degerleri Eclipse’te Console’a yazdirdik.

Servlet sinifimizi calistirdigimizda;

running servlet

Eclipse Console’da init paratmerelerimizin ismi yazilacaktir.

username
driverClassName
password
url

Kodlar: injavawetrust_v3

Yazimi burada sonlandiriyorum.
Herkese Bol Javali Gunler dilerim.
Be an oracle man , import java.*;
Levent Erguder
OCP, Java SE 6 Programmer
OCE, Java EE 6, Web Component Developer

Print Friendly, PDF & Email

Leave a Reply

Your email address will not be published. Required fields are marked *