Java Servlet - ServletContext Kavrami
- Sevdanur GENC

- Mar 6, 2012
- 3 min read
Bu makalemizle Java Servlet’te ServletContext kavramini uygulamalarla birlikte inceleyecegiz.
ServletContext yontemi ; Web uygulamalarinda Javax.Servlet.ServletContext arayuzune ait bir servlet olarak temsil eder. Bu arayuz sayesinde, web uygulama kaynaklarinin olusturdugu verileri ortak bir mekanizma sayesinde veri akisina uyacak seklinde duzenler. Ortak bir veri akisini saglayabilmesi icinde uygulama icerisindeki tum degiskenlere erismesi gerekiyor, bu sebeplede ServletContext arayuzu kullanilmaktadir.
Uygulamamiza gecmeden once var olan projemizde yeni bir servlet sinifi olusturuyoruz. Ve ismini KontrolServlet02 veriyoruz.
Uygulamamizin amaci, sayfamiz KontrolServlet01'de atayacagimiz bir degiskenle servlet1'e yonlendirilcek. Servlet1'den yanit gelerek servlet2'ye ikinci bir degiskenle yonlendirilecektir. Bu uc arayuz icinde doGet metodlari ayni sekildedir, bizim inceleyecegimiz metod ise doPost'dur.
KontrolServlet02'nin doPost metodunda yazan setAttribute ile talebimize herhangi bir oznitelik atayabiliyoruz. Bu atamada iki parametre onemlidir. Birisi ozniteligimize verecegimiz degisken ismi, digeri ise degiskenimizin tasiyacagi object sinifindan bir veri. getRequestDispatcher metodu ile talebi hangi servlet'e gonderecegimizi belirlemis oluyoruz.
Servlet1'in doPost metodunda yer alan komutlarda ise, yine setAttribute ile talebimize bir oznitelik atiyoruz ve bunu getRequestDispatcher metodu ile baska bir servlet sayfasina yonlendiriyoruz. Diger ServletContext yapisi kullanilarak yapilan ornek ise, Proje icerisinde ki uygulamalarinin herhangi birisinden ulasilabilmesi icin atanmis bir degisken olacaktir. Ve bunu Servlet2'den okutturacagiz. Oznitelik atamanin kullanimi yine aynidir, bir degisken ismi ve onun alabilecegi object turunden bir veri.
Hazir ServletContext ile projemizin herhangi bir yerinde tanimlanan degiskenlere ulasabilme konusuna deginmisken bir de Web.Xml icerisinde bir parametre tanimlayalim ve bunu sonrasinda Servlet2'den talep ettirip degiskenin icerigini gorelim.
Web.XML konfigurasyon dosyasi icerisine ServletContext'e gonderecegimiz parametreleri Context-Param taglari icerisinde tanimliyoruz. Bunun icinde param-name taglari icerisinde degisken ismi belirtiyoruz. Ardindan param-value taglari arasinda degiskene verdigimiz verileri yaziyoruz.
Peki bu iki servlet'i de Servlet2'ye yonlendirdik. Sonuc olarak taleplerin hepsine karsilik verebilcek Servlet2'nin doPost metoduna ne yazacagiz? Oncelikle setAttribute ile atamis oldugumuz oznitelikleri karsilayacak ve sunacak olan getAttribute komutunu tanimlamis oldugumuz degisken isimleri ile birlikte yaziyoruz. Ekrana yazdirabilmemiz icinde PrintWriter sinifindan bir nesne uretip istemciye karsilik vermesini istiyoruz. Peki gelelim ServletContext'ler icin olusturdugumuz degiskenlerin yanitlarina ; setServletContext ile tanimladigimiz degiskeni getServletContext ile ServletContext arayuzunun metodlari sayesinde cekiyoruz ve getAttribute ile de setAttribute ile olusturmus oldugumuz degiskenin icerisinde ki verileri okuyabiliyoruz. Web.Xml' de olusturdugumuz Context-Param'i icerisindeki degiskenin sahip oldugu veriyi ise getInitParameter ile birlikte cekiyoruz. Sonuclari ekrana belirtmis oldugumuz yeni degiskenlerle birlikte string formatinda yazdiriyoruz.
KontrolServlet02.Java Komutlari ;
package Servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet(name = "KontrolServlet02", urlPatterns = {"/KontrolServlet02"})
public class KontrolServlet02 extends HttpServlet {
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
try {
} finally {
out.close();
}
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request,response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setAttribute("degisken", "birinci degiskendir ve "
+ "kontrolservlet02'den servlet1'e gonderilir.");
request.getRequestDispatcher("Servlet1").forward(request, response);
}
@Override
public String getServletInfo() {
return "Short description";
}
}
Servlet1.Java Komutlari ;
package Servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet(name = "Servlet1", urlPatterns = {"/Servlet1"})
public class Servlet1 extends HttpServlet {
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
try {
} finally {
out.close();
}
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request,response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
getServletContext().setAttribute("application", "uygulama degiskeni'dir "
+ "servlet1'den servlet2'ye gonderiyor.");
request.setAttribute("degisken2", "ikinci degiskendir ve "
+ "servlet1'den servlet2'ye gonderir.");
request.getRequestDispatcher("Servlet2").forward(request, response);
}
@Override
public String getServletInfo() {
return "Short description";
}
}
Servlet2.Java Komutlari ;
package Servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet(name = "Servlet2", urlPatterns = {"/Servlet2"})
public class Servlet2 extends HttpServlet {
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
try {
} finally {
out.close();
}
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request,response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
PrintWriter writer = response.getWriter();
writer.println(request.getAttribute("degisken").toString());
writer.println(request.getAttribute("degisken2").toString());
String yazilimci = (String)getServletContext().getInitParameter("yazilimci");
writer.println();
writer.write(yazilimci);
String uygulama = (String) getServletContext().getAttribute("application");
writer.println();
writer.write(uygulama);
}
@Override
public String getServletInfo() {
return "Short description";
}
}
Web.Xml Komutlari ;
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0">
<session-config>
<session-timeout>
30
</session-timeout>
</session-config>
<context-param>
<param-name>yazilimci</param-name>
<param-value>xml'den gelen yazilimci degiskeni</param-value>
</context-param>
</web-app>
Index.Jsp Komutlari ;
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP Page</title>
</head>
<body>
<h1>Servlet Konuları...</h1>
<a href="KontrolServlet02?sayfa=Servlet1">Servlet1'den Servlet2'ye Geçiş Yap</a>
</body>
</html>
Ekran Goruntuleri ;
Keyifli Calismalar Dilerim...
Comments