JSP Implicit Objects
หน้าแรก JSP 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
refer: http://www.jarticles.com/jsp/implicitobjs.html
ขึ้นไปด้านบน
