JavaServer Pages (JSP) Part III

  โดย  ประดับเก่ง

 
  JSP Implicit Objects
จากบทที่แล้ว จะเห็นว่าเมื่อไรก็ตามที่เราต้องการเรียกใช้คลาสบางคลาส เราจะต้องทำการ import โดยใช้ page direction แล้วทำการเรียกใน Scriptlet ยกตัวอย่างเช่น

<%@ page import="java.util.Date" %>
...
<% Date rightNow = new Date() %>
...

บางครั้งในการเขียน JSP  จะมีคลาสบางคลาสที่เราใช้บ่อย เช่น XXXOutputStream, HttpSession หรือคลาสบางคลาสที่เราไม่สามารถเรียกใช้ได้โดยตรงจากการ import เช่น HttpServletRequest, HttpServletResponse ดังนั้น JSP จึงช่วยอำนวยความสะดวกโดยให้เราสามารถเรียก object ของคลาสดังกล่าวออกมาใช้ได้เลย โดยไม่ต้องมีการประกาศตัวแปรก่อน (ใช้ได้ใน Scriptlet และ Expression) คลาสพวกนี้เราเรียกว่า predifined variables หรือ implicit objects 
ใน JSP 1.1 Specification มี implicit objects ที่เราสามารถเรียกใช้ได้คือ
 

Implicit Objects
  request javax.servlet.ServletRequest
คือ request ออฟเจคที่เก็บรายละเอียดต่าง ๆ ที่ถูกส่งมาจาก client ซึ่งรวมไปถึง parameters ที่มาจาก GET/POST ในกรณีของ Http ด้วย
  response javax.servlet.ServletResponse
คือ ออฟเจคที่ใช้ส่งผลกลับไปยัง client
  pageContext  javax.servlet.jsp.PageContext
คุณสมบัติต่าง ๆ ของ JSP page จะถูกเปลี่ยนแปลงได้โดยใช้ออฟเจคนี้
  session javax.servlet.http.HttpSession
คือ session ออฟเจคของ client  ที่ส่ง request มา
  application javax.servlet.ServletContext
คือ ออฟเจคที่เก็บรายละเอียดที่เกี่ยวกับ environment ที่ JSP page อยู่ 
  out javax.servlet.jsp.JspWriter
คือ ออฟเจค OutputStream ที่ JSP page ใช้ส่งผลกลับไปยัง client (จะเชื่อมต่อเข้ากับ response ออฟเจคอีกทีหนึ่ง) ซึ่งอาจอยู่ในรูปของ PrintWriter หรือ  JspWriter 
  config javax.servlet.ServletConfig
คือ ออฟเจคที่เก็บค่า setting ต่าง ๆ ของ JSP page
  page คือ ตัว JSP page ออฟเจค ซึ่งก็คือ this คีย์เวร์ดในจาว่านั่นเอง
  exception java.lang.Throwable
คือ uncaught exception ออฟเจคที่ใช้กับ error page ที่ถูกใส่ไว้ใน page directive   เช่น <@page errorPage="myErrorPage.jsp" %>

1) request คือ object ที่เป็น instance ของ ServletRequest ซึ่งถ้าใช้ใน Http ก็จะเป็น HttpServletRequest.    เราสามารถใช้ request ในการอ่านค่า parameters ต่าง ๆ ที่ส่งมาโดย GET หรือ POST จาก client โดยการใช้ request.getParameter(...) หรืออ่านค่าอื่น ๆ เช่น Header โดยใช้ API ที่มีอยู่ใน HttpServletRequest.
2) response คือ ServletResponse ที่ใช้ในการส่งค่าต่าง ๆ กลับไปที่ client โดยผ่านทาง OutputStream ซึ่งอยู่ในรูปของ PrintWriter หรือ JspWriter
3) pageContext คือ object ที่เก็บฟังค์ชั่นต่าง ๆ ที่ใช้ในการเรียก features ของ JSP Container ซึ่งจะไม่เหมือนกันในแต่ละตัว  มาเชื่อมกับ JSP ไฟล์ เพื่อเพิ่มประสิทธิภาพในการรัน
4) session คือ HttpSession ของ client ที่ส่ง request มา ซึ่งจริง ๆ แล้วเราสามารถเรียก object นี้มาโดยผ่านทาง request.getSession(...) ก็ได้
5) applicaion คือ ServletContext ที่เก็บค่าต่าง ๆ ของ environment ที่ไฟล์ JSP นี้อยู่
6) out คือ PrintWriter หรือ JspWriter (Buffered version of PrintWriter) ที่ใช้ในการพิมพ์ text output ออกไปยัง client โดยผ่านทาง response อีกทีหนึ่ง
7) config คือ ServletConfig ที่เก็บค่า setting ต่าง ๆ สำหรับไฟล์ JSP
8) page คือ this ที่ใช้แทนตัวของไฟล์ JSP เอง (ไม่ค่อยมีประโยชน์เท่าไหร่นัก)
9) exception คือ Throwable interface ที่ใช้ส่งค่า error ต่าง ๆ ไปยัง error page

* สำหรับรายละเอียดในการใช้ implicit object แต่ละตัว ให้หาอ่านเพิ่มเติมจาก API ของ object นั้น ๆ

ตัวอย่างการใช้ Implicit objects (implicitobjs.jsp)
<%@ page session="true" %>
<%! public static final String LIGHT_YELLOW = "#d6d6ad"; %>
<%! public static final String VIOLET = "#6d6dda"; %>
<html>
<head><title>Implicit objects</title></head>
<body bgcolor="#FFFFFF">
<% out.println("Query String: " + 
   request.getQueryString()); %>
<br>
You got mail, i got 
<% String milk = request.getParameter("milk"); 
   if ( milk != null ) { %> 
     <b> MILK : )~~~ <b>
<% } else { %>
     <b> Nothing : (  <b>
<% }        %>
<hr>
<p>
<% 
  String bgColor = (String) session.getValue("bgColor");
  if (bgColor == null) {
    bgColor = LIGHT_YELLOW;
  }
%>
<table border="1" cellspacing="0" cellpadding="1">
<tr>
 <td align="center" bgcolor="<%= bgColor %>" width=30%>bgColor=<%= bgColor %></td>
 <td width=70% nowrap>SessionId = <%= session.getId() %></td>
</tr>
</table>
<%
 if (bgColor.equals(LIGHT_YELLOW)) {
   bgColor = VIOLET;
 } else {
   bgColor = LIGHT_YELLOW; 
 }
 session.putValue("bgColor", bgColor);
%> 
</body>
</html> 

เมื่อทำการรัน  ให้ทำการเปรียบเทียบผลที่ได้จาก URL สองอันข้างล่างนี้ และพยายามกด refresh หรือ reload หลาย ๆ ครั้ง  (วิธีการติดตั้ง ให้กลับไปดูที่ part I)

1) http://127.0.0.1:8080/(your context)/jsp/implicitobjs.jsp 
2)* http://127.0.0.1:8080/(your context)/jsp/implicitobjs.jsp?milk=1 

*เพราะไฟล์ JSP ก็คือ Servlet ดังนั้นเราสามารถส่ง query  ไปให้โดยใช้ GET/POST ได้เช่นกัน ซึ่งในกรณีของเรา เราจะส่ง Name-Value pair ที่ชื่อ milk

Next >>


Copyright (C) 2000 www.jarticles.com.