Bir login sayfası tasarlayalım. Bu işi login.jsp dosyasında yapalım :
login.jsp
Burada bir html iskelet oluşturup charset’i UTF-8 olarak ayarladıktan sonra body bölümüne bir form koyduk. Form metodu POST. Form action’u ile cookiecontrol servlet’ine geçiş yapacağız. Formun 4 parçadan oluştuğunu söyleyebiliriz.
Bu form içerisine girilen username ve password bilgileri doğruymuş gibi alınacak ve kontrolü yapılmayacaktır. Yani ne yazılırsa yazılsın giriş yapılabilir.
Bu sayfada bir kısım daha bulunmakta fakat önce submit butonuna tıklandığında gidilen servlet’i inceleyelim.
Formdan gelen bilgiye göre cookie oluşturmayı CookieControl.java dosyası içerisinde yapacağız. Burası bir çeşit kontrolcü diyebiliriz.
CookieControl.java
Burada öncelikle gerekli importlar yapıldı. Ardından önemli olan WebServlet tanımlaması yapıldı. Bu tanımı zaten form action bölümünde kullanmıştık. Ardından sınıfımız ve yapılandırıcımız , onun altında ise doGet metodu bulunmakta. Bu kısımlarda herhangi bir şey yapılmıyor. Burası bildiğimiz kısım.
CookieControl.java
Şimdi doPost metoduna bakabiliriz. Formdan post metodu seçildiği için burası çalışacaktır.
Başlangıçta RequestDispatcher ile sayfa yönlendirmeleri yapmak için nesne oluşturuyoruz. Nesnemizin adı requestDispatcher ve yönlendirilecek sayfa welcomePages.jsp
Altta bir şart bloğu var. İlk olarak formdaki remember me kutucuğunun işaretli olup olmadığını incelememiz gerektiği için bu blok var.
Formdan veriyi request.getParameter ile ( name’i remember olan ) alıyoruz ve bunun null olup olmadığını kontrol ediyoruz. Eğer null ise kutucuk işaretlenmemiştir. Bu durumda çerez oluşturulmadan sonraki sayfaya geçmeyi sağlayabiliriz.
Eğer null değilse , yani kutucuğun işaretli olduğu durum , o zaman çerez oluşturmamız gerekecek.
Burada çerez oluştururkan username ve password için ayrı ayrı cookie nesneleri oluşturup bunları ekleyebilirdik. Fakat ben bir adet userCookie nesnesi oluşturdum
Cookie key-value şekline oluştuğu için key bölümüne login sayfasında girilen username , value bölümüne ise yine login’de girilen password bilgileri gelmeli.
O yüzden bu bilgileri request.getParameter ile ilgili bölümlerin name’ini vererek alıyoruz.
Ardından response.addCookie ile nesnemizi verip çerezi eklemiş oluyoruz.
Son olarak da sayfa değişim işlemimizi yapıyoruz.
Şimdi welcomePages.jsp içerik sayfasını görelim.
welcomePages.jsp
html iskeleti oluşturuldu ve UTF-8 ayarlandı.
welcomePages.jsp
Şimdi login.jsp kısmında atladığımız bir noktaya tekrar dönelim .
login sayfasında alt kısımda bir kontrol daha yapmaktayız. Bu da cookie kontrolü. Sayfaya ilk geldiğimiz anda zaten daha öncesinden bir çerez oluşturmuşsak login bölümünü atlayıp içeriği görüntüleyebiliyoruz.
Bunun için öncelikle cookie bilgilerini bir listeye alıyoruz. Eğer liste null değilse ve boyutu 1’den büyükse ilgili içeriğe direk olarak ilerliyoruz.
login.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="cookiecontrol" method="post">
<label for="uname"><b>Username</b></label>
<input type="text" placeholder="Enter Username" name="uname" required>
<label for="psw"><b>Password</b></label>
<input type="password" placeholder="Enter Password" name="psw" required>
<button type="submit">Login</button>
<label>
<input type="checkbox" checked="checked" name="remember"> Remember me
</label>
</form>
</body>
</html>
<%
//eğer cookie zaten kaydedildiyse direk olarak giriş yap
Cookie[] cookies = null;
cookies = request.getCookies();
if (cookies != null ){
if(cookies.length > 1){
RequestDispatcher requestDispatcher = request.getRequestDispatcher("welcomePages.jsp");
requestDispatcher.forward(request, response);
}
}
%>
CookieControl.java
import jakarta.servlet.RequestDispatcher;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.Cookie;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
/**
* Servlet implementation class CookieControl
*/
@WebServlet("/cookiecontrol")
public class CookieControl extends HttpServlet {
private static final long serialVersionUID = 1L;
public CookieControl() {
super();
// TODO Auto-generated constructor stub
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
response.getWriter().append("Served at: ").append(request.getContextPath());
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
RequestDispatcher requestDispatcher = request.getRequestDispatcher("welcomePages.jsp");
if(request.getParameter("remember") == null ){
// işaretli olmadığı durumda direk sayfaya gir.
requestDispatcher.forward(request, response);
}
else{ // request.getParameter("remember").equals("on") durumu , yani kutucuk işaretli
// beni hatırla kutucuğu işaretlendi
// yeni cookie oluşturulacak
/*
Cookie cUsername = new Cookie("username", request.getParameter("uname"));
Cookie cPassword = new Cookie("password", request.getParameter("psw"));
// cookie ayarları
cUsername.setMaxAge(60*60*10); // Cookie yaşam süresi saniye cinsinden ifade edilir
cPassword.setMaxAge(60*60*10); // . . .
// cookie eklendi
response.addCookie(cUsername);
response.addCookie(cPassword);
*/
// // key=username , value=password
Cookie userCookie = new Cookie(request.getParameter("uname") , request.getParameter("psw"));
userCookie.setMaxAge(60*60*10);
response.addCookie(userCookie);
// sayfa değişimi
requestDispatcher.forward(request, response); // welcomePages sayfasına gidilir.
}
}
}
welcomePages.jsp
<%@page import="java.io.PrintWriter"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>Hoşgeldin</h1>
<p><%
Cookie[] cookies = null;
cookies = request.getCookies();
// Şimdi cookie oluşturulmuşmu kontrolü yapacağız.
if( cookies != null ){ // eğer cookie null değilse ,
// ve form'a veri girilip cookie oluşturulmuşsa
if(cookies.length > 1){
// Önce isim ve şifre bilgisini alalım.
String name = cookies[1].getName();
String password = cookies[1].getValue();
// Şimdi bu bilgileri sayfaya yansıtalım
out.println("<p>Merhaba <strong>" + name + "</strong> ---- çerez bilgisi kaydedildi </p>");
out.println("username = " + name + "\\npassword = " + password );
/* Eğer çoklu cookie olsaydı bu döngü kullanılabilirdi
for (Cookie c : cookies) {
out.print("[username] : " + c.getName() + " ===== " );
out.print("[password] : " + c.getValue() + "<br/>");
}
*/
}
else{
// burada sadece formdan gelen değer yazdırılır.
out.println("<p>Merhaba <i>" + request.getParameter("uname") + "</i> ---- [çerez kaydedilmedi ] </p>");
}
}else{
// hata durumu
out.println("çerez bulunamadı");
}
%></p>
</body>
</html>