bài 4: jsp cơ bản - lập trình mạng nâng cao
DESCRIPTION
Lập Trình Mạng Nâng Cao - JSP Cơ BảnTRANSCRIPT
Java Server Page - JSP
ThS Văn Thiên Hoàng
Gi i thi uớ ệ
� Java Server Pages (JSP) là công ngh khác cho ệvi c phát tri n ng d ng web. ệ ể ứ ụ
� JSP đ c công b và s d ng đ ng th i v i servlet. ượ ố ử ụ ồ ờ ớ� JSP là m r ng c a servlet. Trong th c t jsp và ở ộ ủ ự ế
servlet đ c s d ng đ ng th i đ phát tri n ng ượ ử ụ ồ ờ ể ể ứd ng web. ụ
Servlet y u đi m gì?ế ể
� Vi t th HTML không tách bi t v i code ế ẻ ệ ớ s a đ i giao di n ph c t p.ử ổ ệ ứ ạ
� JSP là công ngh đ c Sun phát tri n đ ệ ượ ể ểkh c ph c nh c đi m này nh :ắ ụ ượ ể ư� Tách bi t vi c trình bày v i logic cài đ t code.ệ ệ ớ ặ� H tr hai ki u thêm n i dung: script ho c tag. ỗ ợ ể ộ ặ
JSP làm vi c nh th nào?ệ ư ế
WEB SERVER
JSP ENGINE DatabaseClient
JSP Files
HTTP
JSPs are processed here
Các b c x lý trang JSPướ ử
WebClient
WebServer
JSPFile
Servlet
HTMLFile
Sends a request
Request is sent to JSP Engine
Output is sent backResponse is
sent to the client
ng d ng Web đ n gi nỨ ụ ơ ả
<HTML>
<TITLE> A Simple HTML file with HTML extension </TITLE>
<BODY>
<H1> Hello JSP Programmer! </H1>
</BODY>
</HTML>
HelloWorld.html
ng d ng Web đ n gi nỨ ụ ơ ả – (1)
<HTML>
<TITLE> A Simple HTML file with JSP extension </TITLE>
<BODY>
<H1> Hello JSP Programmer! </H1>
</BODY>
</HTML>
HelloWorld.jsp
ng d ng Web đ n gi nỨ ụ ơ ả – (2)
<HTML>
<TITLE> A Simple JSP file </TITLE>
<BODY>
<H1>
<% out.println("Hello JSP Programmer!");%>
</H1>
</BODY>
</HTML>
HelloWorld2.jsp
Thu n l i c a JSPậ ợ ủ
� Tách bi t vi c phát sinh n i dung v i vi c trình bày. ệ ệ ộ ớ ệ� HTML/XML tags� Scriptlets, JavaBeans
� H tr các thành ph nỗ ợ ầ� JavaBeans, EJBs
� Phát tri n trang web đ n gi n s d ng tag. ể ơ ả ử ụ� Easy-to-use, JSP technology specific tags
� Tích h p v i J2EE và Enterprise JavaBeansợ ớ
Các thành ph n chính c a JSPầ ủ
� Có 3 thành ph n JSP :ầ� D n h ng – Directẫ ướ
• Cho phép đi u khi n c u trúc servlet.ề ể ấ� Các ph n t k ch b n – Script Element. ầ ử ị ả
• Đ c dùng đ vi t code Java.ượ ể ế� Hành đ ng – Actionộ
• Specific tags that affect the runtime behavior of the JSPs
Ví dụ
<HTML><HEAD><TITLE>MyFirstProgram.jsp</TITLE></HEAD> <BODY><!-- MyFirstProgram.JSP -->
<%@ page import = "java.util.Date" %>
<% out.println("Hello there!"); %> <Br>
<%= "Current date is " + new Date() %></BODY> </HTML>
Fixed Template data
JSP Directive
JSP Expressio
n
JSP Script let
Chi ti t v x lý trang JSP ế ề ử
User Request
Web Server/ Servlet Engine
JSP Handler Servlet (Page Compilation Servlet)
New ormodified file?
Compile intoServlet
ExecuteServlet
Yes
No
Các ph n t Scriptingầ ử
� Expressions� Scriptlets� Declarations
Scripting là cơ chế cho phép nhúng code trực tiếp vào trong trang HTML. Có 3 cách nhúng:
Các ph n t Scriptingầ ử – (1)
Expressions được tính và đổi sang dạng chuỗi: java.lang.String.
Evaluated to produce 4
<HTML><BODY> 2 + 2 equals <%= 2 + 2 %> </BODY></HTML>
Ví dụ:
Cú pháp: <%= expression %>
Các ph n t Scriptingầ ử – (2)
Scriptlets chứa code java.
Scriptlet<HTML> <BODY> <% out.println("HELLO WORLD!!"); %> </BODY> </HTML>
Ví dụ:
Cú pháp: <% scriptlet_source; %>
Giống expression, scriptlet truy cập tới các biến không tường minh.
Các ph n t Scriptingầ ử – (3)
<% String queryData = request.getQueryString();out.println("Attached GET data: "+queryData);%>
Scriptlets không cần một câu lệnh đầy đủ và khối mở có thể chứa thẻ HTML bên ngoài scriptlets.
Các ph n t Scriptingầ ử – (4)
<% if (Math.random() > 0.5) { %> Have a <B> happy </B> birthday!!<% } else {%> Have a <B> nice </B> day!! <% } %>
Các ph n t Scriptingầ ử – (5)
Declarations là định nghĩa biến hoặc phương thức trong JSP.
Declaration
<%! private static int count_access = 0; %> This page has been accessed<%= ++count_access %> time(s) since the server was rebooted.
Ví dụ:
Cú pháp: <%! Declaration; %>
Các đ i t ng không t ng minhố ượ ườ
� Các đ i t ng phía server đ c đ nh nghĩa trong ố ượ ượ ịJSP container
� Các đ i t ng này đ c đ nh nghĩa s n trong ố ượ ượ ị ẵJSP.
Các đ i t ng không t ng minh–(1)ố ượ ườ
Tên biến Type Miêu tả Phạm
application javax.servlet.ServletContext
Servlet context nhận được bằng lời gọi hàm: getServletConfig().getContext()
Application
config javax.servlet.ServletConfig
Là đối tượng th ểhi n c a l p ệ ủ ớ ServletConfig
Page
out javax.servlet.jsp.JspWriter
Là đối tượng thể hiện của lớp JspWriter cho luồng xuất.
Page
Các đ i t ng không t ng minh–ố ượ ườ (2)
page java.lang.Object Thể hiện đối tượng this của Servlet.
Page
pageContext javax.servlet.jsp.PageContext
Đối tượng thể hiện của Page Context của JSP.
Page
request Protocol-dependent subtype of either javax.servlet.ServletRequest or javax.servlet.http.HttpServletRequest
Đối tượng thể hiện của ServletRequest.
Request
Các đ i t ng không t ng minh–ố ượ ườ (3)
response Protocol-dependent subtype of either javax.servlet.ServletResponse or javax.servlet.http.HttpServletResponse
Đối tượng thể hiện của lớp ServletResponse
Page
session javax.servlet.http.HttpSession
Đối tượng thể hiện của lớp HTTPSession quản lý dữa liệu Session.
Session
Các đ i t ng không t ng minh–ố ượ ườ (4)
exception java.lang.Throwable Quản lý ngoại lệ ném ra trong trang web.
Page
Ví d : đ i t ng không t ng minh. ụ ố ượ ườ
<HTML><TITLE> A JavaServer Page using JSP Tags </TITLE><BODY><H2> An example using different session objects </H2><UL>
<LI> <B> Expression - </B> <BR> Your hostname is: <%= %><LI> <B> Scriptlet - </B> <BR>
<% out.println("attached GET data:" + %>
request.getRemoteHost()
request.getQueryString());
<LI> <B> Declaration - </B> <BR> <%! private int accessCount = 0; %>
This page has been accessed <%= ++accessCount %> time(s) since the server was last restarted <LI> <B> Directive - </B> <BR><%@ page import = "java.util.*" %>Today's Date is: <%= new Date() %></UL></BODY></HTML>
Ví d : đ i t ng không t ng minhụ ố ượ ườ
Ví d :ụ<HTML><HEAD><TITLE>JSP Expressions</TITLE><META NAME="keywords"CONTENT="JSP,expressions,JavaServer Pages"><META NAME="description"CONTENT="A quick example of JSP expressions."><LINK REL=STYLESHEETHREF="JSP-Styles.css"TYPE="text/css"></HEAD>
Ví d :ụ
<BODY><H2>JSP Expressions</H2><UL><LI>Current time: <%= new java.util.Date() %><LI>Server: <%= application.getServerInfo() %><LI>Session ID: <%= session.getId() %><LI>The <CODE>testParam</CODE> form parameter:<%= request.getParameter("testParam") %></UL></BODY></HTML>
Thành ph n D n h ngầ ẫ ướ
� page� Đ nh nghĩa thông tin toàn c c cho trang JSP. ị ụ
� include� S d ng đ chèn văn b n và code vào JSP t i đi m ử ụ ể ả ạ ể
biên d ch. ị� taglib
• Đ nh nghĩ c ch m r ng c a t p th JSP hi n t i. ị ơ ế ở ộ ủ ậ ẻ ệ ạ
Các thu c tính D n Pageộ ẫ
Attribute Definit ion
language = ”<scriptingLanguage>”
Báo Server biết ngôn ngữ hiện dùng để biên dịch trang JSP – chỉ có ngôn ngữ Java.
extends = ”<className>"
Cho biết lớp cha mà servlet sẽ kết thừa.
import = ”<importList>"
Định nghĩa danh sách gói thư viện cần dùng trong trang JSP. Tên mỗi gói cách nhau bởi dấu phẩy.
session = "true | false"
Xác đinh dữ liệu phiên là có sẵn cho trang. Mặc định là true.
buffer = "none | <size in kb>"
Xác định kích thước bộ đệm luồng xuất dữ liệu. Mặc định là 8 kb.
Các thu c tính D n h ng khác-(1)ộ ẫ ướ
Attribute Definit ion
autoFlush = "true | false"
Xác định bộ đệm có tự động đưa dữ liệu về client hoặc sẽ phát sinh ngoại lệ khi bộ đệm đầy. Mặc định là true.
isThreadSafe = "true | false"
Chỉ ra trang có thể có nhiều yêu cầu tại một thời điểm. Mặc định là True.
info = ”<text>" Đặc tả thông tin về trang JSP. Và có thể truy cấp bằng hàm Servlet.getServletInfo() .
errorPage = ”<error_URL>"
Liên qua đến xử lý ngoại lệ URL.
isErrorPage = "true | false"
Xác định trang JSP là trang errorPage. Mặc định là false.
contentType = ”<ctinfo>"
Trình bày thông tin kiểu MIME và tập ký tự liên quan của việc đáp trả.
Ví d - S d ng thu c tínhụ ử ụ ộ
<%@ page language = "java" import = "java.rmi.*, java.util.*" session = "true" buffer = "12kb" autoFlush = "true" info = "page directive jsp" errorPage = "Error.jsp"
isErrorPage = "false" isThreadSafe = "false" %><HTML> <TITLE> JSP Elements </TITLE><HEAD> <H1> JSP Elements </H1> </HEAD><BODY> </BODY> </HTML>
Ví dụ
//SimpleClass.javapackage myPackage;
public class SimpleClass{ int height; public void SimpleClass() { height = 100; } public void setHeight(int h) { height = h; } public int getHeight() { return height; }}
Ví d – (1)ụ
<!-- UseClass.jsp -->
<%@ page language = "java" %><%@ page import = "myPackage.SimpleClass" %>
<%! SimpleClass myObj = new SimpleClass(); %>
<%= myObj.getHeight() %><% myObj.setHeight(10); %>
<% out.println(myObj.getHeight()); %>
D n h ng khácẫ ướ
� include� Cú pháp <%@ include file = “relativeURLspec” %>
� taglib� Cú pháp
<%@ taglib uri = “tagLibraryURI” prefix = “tagPrefix” %>
Ghi nhớ
� Khi s d ng d n h ng c n ghi nh sau:ử ụ ẫ ướ ầ ơ
� H ng là các thông đi p g i t i JSP Container.ướ ệ ở ớ
� H ng không l u b t kỳ k t qu trong b đ m xu t. ướ ư ấ ế ả ộ ệ ấ
� H ng đ c x lý khi JSP đ c thi t l p. ướ ượ ử ượ ế ậ
Dẫn hướng JSP action cung cấp phương pháp để đóng gói các tác vụ hiệu quả. Dẫn hướng này tạo hoặc thao tác trên đối tượng, thường là JavaBeans.
Các JSP Action chu nẩ
� <jsp:useBean>� <jsp:setProperty>� <jsp:getProperty>� <jsp:param>� <jsp:include>� <jsp:forward>� <jsp:plugin>
Các JSP Action chu n – (1)ẩ
� <jsp:useBean>� K t h p v i JavaBean đ nh nghĩa tr c v i ph m vi và ID. ế ợ ớ ị ướ ớ ạ
� <jsp:setProperty>� Thi t l p giá tr thu c tính c a Bean. ế ậ ị ộ ủ
� <jsp:getProperty>� Truy c p giá tr thu c tính đ c t c a th hi n Biean. ậ ị ộ ặ ả ủ ể ệ� Bi n đ i nó sang d ng đ i t ng chu i java.lang.String.ế ổ ạ ố ượ ỗ� Đ t nó trong đ i t ng không t ng minh ặ ố ượ ườ out.
Các JSP Action chu n – (2)ẩ
� <jsp:param>� Is used to provide the tag/value pairs of information� Đ c s d ng là thu c tính con c a các action: ượ ử ụ ộ ủ
jsp:include, jsp:forward, and jsp:plugin.� Cú pháp nh sau:ư
<jsp:param name = "pName" value = "pValue"></jsp:param>
<jsp:param name = "pName" value = "pValue"/>
Các JSP Action chu n – (3)ẩ
� <jsp:include>� Cung c p c ch đ thêm các ngu n tài nguyên đ ng ấ ơ ế ể ồ ộ
ho c tĩnh vào trang JSP. ặ� Cú pháp nh sau:ư
<jsp:include page = "urlSpec" flush = "true"/>
<jsp:include page = "urlSpec" flush = "true"><jsp:param .../></jsp:include>
Ví d : S d ng <jsp:include>ụ ử ụ
<!-- Emplheader.jsp --><!-- Get employee’s name from the request --><% out.println("Employee: " + request.getParameter("employee")); %> <!-- Get employee’s title from the request --><% out.println("Title: " + request.getParameter("title")); %>
Trang JSP sẽ tìm nhân viên với tên và tựa đề. Được gọi dùng trong trang Employeeinfo.jsp
Ví d : S d ng <jsp:include>-(1)ụ ử ụ
<HTML><TITLE> Employee Information </TITLE> <BODY>
<jsp:param name= "employee" value= "Martha" /><jsp:param name= "title" value= "Doctor"/></jsp:include> </BODY> </HTML>
<jsp:include page= "Emplheader.jsp" flush= "true" >
Employeeinfo. jsp
<jsp:include>
Employeeinfo.jsp
Emplheader.jsp
<jsp:include page = “Empl…
Các JSP Action chu n – (4)ẩ
� <jsp:forward>� Cho phép JSP engine g i request trang hi n t i t i m t ngu n ở ệ ạ ớ ộ ồ
tĩnh, servlet ho c m t trang JSP khác trong th i gian ch y. ặ ộ ờ ạ� Cú pháp nh sau:ư
<jsp:forward page = "relativeURLSpec" />
<jsp:forward page = "relativeURLSpec" ><jsp:param .../></jsp:forward>
Ví d : S d ng <jsp:forward>ụ ử ụ
<HTML><TITLE> Using the JSP Forward action </TITLE> <BODY><!-- Checks whether the "company id" is equal to 1 --><% if ((request.getParameter("companyID")).equals("1")) {%> <jsp:param name= "employee" value= "Martha" /> <jsp:param name= "title" value= "Doctor" /> </jsp:forward><%} else { out.println("Sorry, no matching values found"); }%></BODY> </HTML>
<jsp:forward page= "MarthaHome.jsp">
Forward.jsp
Ví d : s d ng <jsp:forward> – (1)ụ ử ụ
<HTML>..<BODY><% out.println("Employee:" + request.getParameter("employee"));out.println("Title:" + request.getParameter("title")); %> </BODY> </HTML>
MarthaHome.jsp
<jsp:forward>
Forward.jsp
MarthaHome.jsp
<jsp:forward page = “Martha…
Các JSP Action chu n – (5)ẩ
� <jsp:plugin>� Phát sinh HTML phù h p v i trình duy t Client nh OBJECT ợ ớ ệ ở ư
hay EMBED. � Cú pháp nh sau:ư
<jsp:plugin type = "pluginType" code = "classfilename" codebase = "relativeURLpath" ><jsp:params> <jsp:param …/>......</jsp:params> </jsp:plugin>
Ví dụ
� V i Appletớ<APPLET CODE=“MyApplet.class” WIDTH=457 HEIGHT=350></APPLET>
� Ta s d ng th ử ụ ẻ jsp:plugin nh sau:ư<jsp:plugin type=“applet” code=“MyApplet.class” width=“457” height=“350” />
Câu h iỏ