Servlet: Cookie Example1

ตัวอย่างนี้เป็นตัวอย่างโปรแกรม cookie ที่เพียงต้องการแสดงให้รู้จักการใช้ cookie เท่านั้น อาจจะไม่ใช่โปรแกรมที่สมเหตุสมผลเท่าไรนะค่ะ

เอาละ มาดูกัน

CookieAdd.java

package com.amadmonster.scwcd.cookies; import java.io.IOException; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * Servlet implementation class CookieAdd */ public class CookieAdd extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse * response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); // add any name to test cookie Cookie cookie = new Cookie("username", "amadmonster"); cookie.setMaxAge(30 * 60); response.addCookie(cookie); RequestDispatcher view = request .getRequestDispatcher("cookies/cookieresult.jsp"); view.forward(request, response); } }


cookie/cookieresult.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <a href="testcookie.do">click</a> </body> </html>

CookieAdd เป็น servlet ที่ใส่ cookie username ไว้ และ forward ต่อให้ cookieresult.jsp แสดงลิงค์ ไปยัง CookieTester (testcookie.do map กับ CookieTester.java) เพื่อแสดงผลค่าของ cookie username ที่เก็บไว้

CookieTester.java

package com.amadmonster.scwcd.cookies; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * Servlet implementation class CookieTester */ public class CookieTester extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse * response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); Cookie[] cookies = request.getCookies(); if (cookies != null) { for (int i = 0; i < cookies.length; i++) { Cookie cookie = cookies[i]; if (cookie.getName().equals("username")) { String userName = cookie.getValue(); out.println("Hello " + userName); break; } } } }


Cookie จะเหมือน attribute ใน session scope ฮับ คือใน session เดียวกันจะเป็นตัวเดียวกัน ในขณะที่อีก session หนึ่งจะไม่เห็นตัวแปรนั้น ลองทดสอบได้ฮับ ถ้าคุณใช้ IE อยู่ หลังจากที่ run CookieAdd แล้ว ให้ลองเปิดอีก tab หนึ่ง (แต่ยังอยู่ใน windows เดียวกันนะ) ให้ run testcookie.do ซึ่งจะแสองผลเหมือนกับยังอยู่ใน tab เดิมอยู่ แต่ถ้าเปิด IE ขึ้นมาอีก 1 ตัว และลอง run testcookie.do (โดยไม่ run CookieAdd ก่อน) จะได้เป็นหน้าว่างๆ ฮับ เนื่องจากไม่มี cookie ที่ชื่อ username ที่จะแสดงผลนั่นเอง

ลองดูนะฮับ ขอให้โชคดี

No comments:

Post a Comment