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.
|