Bài 4. Cơ Bản Về JSP Doc - 123doc
Có thể bạn quan tâm
JSP & Servlet trong kiến trúc J2EE 1.2Java Servlet: 1 chương trình Java, mở rộng chức năng 1 web server, sinh nội dung động và tương tác với web clients sử dụng mô hình request-response
Trang 1Bài 4 Cơ bản về JSP
Trang 2Nội dung
Trang 31 JSP trong kiến trúc J2EE
Trang 4JSP & Servlet trong kiến trúc J2EE 1.2
Java Servlet: 1 chương trình Java, mở rộng chức năng 1 web server, sinh nội dung động và tương tác với web clients sử dụng mô hình request-response
Một công nghệ Web mở rộng, kết
hợp với các đối tượng Java, trả về
nội dung động cho client dưới dạng
HTML hoặc XML Client thường là
Web Browser
4
Trang 5Thế nào là Static & Dynamic Contents?
Trang 62 Giới thiệu về JSP
6
Trang 9Kết quả hiển thị
Trang 102.1 JSP và Servlet
10
Trang 11● Very easy to author
● Code is compiled into a servlet
Servlets
Trang 12Ưu điểm của JSP
Tách biệt nội dung & cách trình bày
JSP, JavaBeans và custom tags
(JavaBeans, Custom tags)
Trang 13Ưu điểm của JSP so với Servlet?
Servlets:
Hạn chế trong bảo trì các trang HTML
Khi thay đổi, phải biên dịch lại, (đóng gói lại),
deploy lại
JSP:
Trang 14Nên dùng JSP thay cho Servlet hay ngược lại?
Cần khai thác đồng thời 2 công nghệ
dispatching”
Trong thực tế, cả servlet và JSP được sử
dụng trong mẫu thiết kế MVC Controller)
(Model-View- Servlet xử lý phần Controller
14
Trang 152.2 Kiến trúc JSP
Trang 16Tách biệt xử lý Request với hiển thị (Presentation)
Public class OrderServlet …{
public void doGet(…){
Public class OrderServlet …{
public void doGet(…){
Trang 173 Vòng đời của 1 trang JSP
Trang 18JSP làm việc như thế nào?
File Changed
JSP
18
Trang 19Các giai đoạn trong vòng đời trang JSP
Translation
Compile
Execution
Trang 20Giai đoạn Translation/Compilation
mã này mới được biên dịch tiếp
trang JSP được truy cập (hoặc khi chỉnh sửa)
Trang 21Giai đoạn Translation/Compilation
Dữ liệu tĩnh được chuyển thành mã Java, tác động tới output stream trả dữ liệu về cho
client
Các phần tử JSP được xử lý khác nhau:
Các chỉ dẫn (Directives) được dùng để điều
khiển Web container biên dịch và thực thi trang JSP
tương ứng của trang JSP
Trang 22Các phương thức trong giai đoạn thực thi
22
Trang 23Khởi tạo trang JSP
Có thể khai báo phương thức khởi tạo thực hiện nhiệm vụ
Trang 24Kết thúc trang JSP
Khai báo phương thức thực hiện nhiệm vụ
24
Trang 25private BookDBAO bookDBAO;
public void jspInit() {
// retrieve database access object, which was set once per web application
Trang 264 Các bước phát triển ứng
dụng Web với JSP
26
Trang 27Các bước phát triển và triển khai ứng dụng Web
(Servlet or JSP), các helper classes sử dụng trong web component
dạng chưa đóng gói nhưng triển khai được)
Web clients có thể truy cập ứng dụng qua URL
Trang 28So sánh
Hello1 Servlet & Hello2 JSP
28
Trang 29public class GreetingServlet extends HttpServlet {
public void doGet (HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException{
response.setContentType("text/html");
PrintWriter out = response.getWriter();
// then write the data of the response
out.println("<html>" +
"<head><title>Hello</title></head>");
Trang 30"<input type=\"submit\" value=\"Submit\">" +
"<input type=\"reset\" value=\"Reset\">" +
"</form>");
String username = request.getParameter("username");
// dispatch to another web resource
if ( username != null && username.length() > 0 ) {
RequestDispatcher dispatcher = getServletContext().getRequestDispatcher("/response");
if (dispatcher != null) dispatcher.include(request, response);
Trang 31public class ResponseServlet extends HttpServlet {
public void doGet (HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException{
PrintWriter out = response.getWriter();
String username = request.getParameter("username");
if ( username != null && username.length() > 0 )
out.println("<h2>Hello, " + username + "!</h2>"); }
}
Trang 32<input type="submit" value="Submit">
<input type="reset" value="Reset">
</form>
<%
String username = request.getParameter("username");
if ( username != null && username.length() > 0 ) {
Trang 33<h2><font color="black">Hello,
<%=username%> !</font></h2>
Trang 34JSP “là” Servlet!
34
Trang 35JSP là “Servlet”
Các trang JSP được dịch thành servlet
greeting$jsp.java
Scriptlet (Java code) trong trang JSP sẽ
được chèn vào trong phương thức
jspService() của servlet tương ứng
Các đối tượng Servlet: HTTPSession,
ServletContext… có thể được truy cập từ
Trang 36private static boolean _jspx_inited = false;
public final void _jspx_init()
throws org.apache.jasper.runtime.JspException {
}
36
Trang 37greeting$jsp.java (2)
public void _jspService(HttpServletRequest request,
HttpServletResponse response) throws java.io.IOException, ServletException {
JspFactory _jspxFactory = null;
PageContext pageContext = null;
HttpSession session = null;
ServletContext application = null;
ServletConfig config = null;
JspWriter out = null;
Object page = this;
String _value = null;
Trang 38pageContext = _jspxFactory.getPageContext(this, request,
response,"", true, 8192, true);
Trang 39greeting$jsp.java (4)
// HTML // begin [file="/greeting.jsp";from=(38,4);to=(53,0)]
out.write("\n\n<html>\n<head><title>Hello</title></head>\n<body bgcolor=\"white\">\n<img src=\"duke.waving.gif\"> \n<h2>My name is Duke What is yours?</h2>\n\n<form method=\"get\">\n<input type=\"text\"
name=\"username\" size=\"25\">\n<p></p>\n<input type=\"submit\"
value=\"Submit\">\n<input type=\"reset\" value=\"Reset\">\n</form>\n\n");
// end
// begin [file="/greeting.jsp";from=(53,2);to=(56,0)]
String username = request.getParameter("username");
if ( username != null && username.length() > 0 ) { // end
Trang 40// HTML // begin [file="/greeting.jsp";from=(60,2);to=(63,0)]
out.write("\n</body>\n</html>\n");
// end
} catch (Throwable t) {
if (out != null && out.getBufferSize() != 0) out.clearBuffer();
if (pageContext != null) pageContext.handlePageException(t);
Trang 415 Kỹ thuật sinh nội dung động trong JSP
Trang 425 Kỹ thuật sinh nội dung động với công nghệ JSP
Có thể áp dụng các kỹ thuật khác nhau, tùy các yếu tố sau
Có đầy đủ các kỹ thuật từ đơn giản tới phức tạp
42
Trang 43Kỹ thuật sinh nội dung động với công nghệ JSP
Gọi mã Java trực tiếp trong JSP
Gọi mã Java gián tiếp trong JSP
Sử dụng JavaBeans
Tự phát triển và sử dụng các custom tags
Sử dụng 3rd-party custom tags hoặc JSTL
(JSP Standard Tag Library)
Sử dụng mẫu thiết kế MVC
Trang 44(a) Gọi mã Java trực tiếp
Đặt tất cả mã nguồn Java trong trang JSP
Chỉ phù hợp với ứng dụng Web đơn giản
Trang 45(b) Gọi mã Java gián tiếp
Tái sử dụng, bảo trì tốt hơn so với cách 1
Tuy nhiên, sự tách biệt giữa contents và
presentation vẫn chưa rõ ràng
Trang 46 Dễ sử dụng hơn với người phát triển Web
Dễ tái sử dụng, bảo trì hơn 2 cách đầu
46
Trang 47(d) Phát triển và sử dụng các Custom Tags
Phát triển các components gọi là các custom tags
Mạnh mẽ hơn JavaBeans component
(JavaBeans: chỉ có phương thức getter & setter)
Tái sử dụng, bảo trì tốt hơn, ổn định hơn
Tuy nhiên, phát triển custom tags khó hơn
tạo các JavaBeans
Trang 48(e) Sử dụng 3rd-party custom tags hoặc JSTL
Có nhiều custom tags mã nguồn mở/thương mại
JSTL (JSP Standard Tag Library) chuẩn hóa tập các custom tags tối thiểu cho Java EE
bảo có đủ các custom tags này (Từ phiên bản
J2EE 1.3)
48
Trang 49 Tự thiết kế/tạo mẫu kiến trúc MVC:
Trang 50(g) Sử dụng các MVC Model2 Frameworks đã kiểm chứng
Trang 516 Gọi mã nguồn Java sử
dụng JSP scripting elements
Trang 52JSP Scripting Elements
Cho phép chèn mã nguồn Java vào servlet được sinh tương ứng cho trang JSP
elements trong trang JSP nếu có thể
Trang 53 Expression được tính giá trị và chuyển thành một String
String sau đó được chèn trực tiếp vào output stream của Servlet tương ứng
Kết quả tương đương với lệnh out.println(expression)
Có thể sử dụng các biến định nghĩa trước đó (implicit
objects) trong 1 expression
<%= Expression %> hoặc
Trang 54Ví dụ: Expressions
Current time: <%= new java.util.Date() %>
Random number: <%= Math.random() %>
Trang 55jspService() của Servlet tương ứng
Thiết lập response headers và status codes
Ghi log cho server
Cập nhật CSDL
Thực thi mã nguồn có điều khiển lặp, rẽ nhánh
<% Java code %> hoặc
<jsp:scriptlet> Java code</jsp:scriptlet>
Trang 57Ví dụ: Scriptlet với điều khiển lặp
Trang 58Ví dụ: Scriptlet với điều khiển lặp (2)
58
Trang 60Ví dụ: biên dịch trang JSP
public void _jspService(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException { response.setContentType(“text/html”);
HttpSession session = request.getSession(true);
JSPWriter out = response.getWriter();
// Static HTML fragment is sent to output stream in “as is” form
Trang 61 Được sử dụng để định nghĩa các biến hoặc phương thức (sẽ được chèn vào trong lớp Servlet tương ứng)
Nằm ngoài phương thức _jspSevice()
Declerations không được truy cập các Implicit objects (VD: đối tượng HttpSession)
Thường được sử dụng với Expressions hoặc Scriptlets
Để thực hiện thao tác khởi tạo và dọn dẹp trong trang JSP,
sử dụng declarations để override phương thức jspInit() và jspDestroy()
Cú pháp:
<%! Mã nguồn khai báo biến hoặc phương thức %>
Trang 63Ví dụ (2): Servlet tương ứng
public class xxxx implements HttpJSPPage {
private String randomHeading() {
return(“<H2>” + Math.random() + “</H2>”);
}
public void _jspService(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException { response.setContentType(“text/html”);
HttpSession session = request.getSession(true);
JSPWriter out = response.getWriter();
out.println(“<H1>Some heading</H1>”);
out.println(randomHeading());
Trang 64Ví dụ: Declaration
<%!
private BookDBAO bookDBAO;
public void jspInit() {
Trang 65Tại sao nên sử dụng cú pháp XML?
<jsp:expression>Expression</jsp:expression>
<jsp:scriptlet> Java code</jsp:scriptlet>
<jsp:declaration> declaration code </jsp:declaration>
Lợi ích
XML validation (qua XML schema)
Có sẵn nhiều công cụ XML
editor
Trang 66Include và Forward tới tài
nguyên Web khác
66
Trang 67Include các Contents trong 1 trang JSP
Có 2 kỹ thuật để đính kèm (including) một tài nguyên Web (Web resource) trong 1 trang
JSP
Sử dụng include directive
Trang 68Include Directive
Hoạt động của directive là chèn text chứa trong file khác (hoặc nội dung tĩnh hoặc 1 trang JSP khác) vào trong trang JSP đang xét
banner, copyright, hoặc bất kỳ nội dung nào để tái
Trang 69Phần tử jsp:include
Được xử lý khi thực thi 1 trang JSP
static: Nội dung của resource được chèn vào file JSP
đang xét
dynamic: Một yêu cầu được gửi tới resource cần được đính kèm, trang cần đính kèm (included page) sẽ được thực thi, và kết quả sẽ được đính vào response rồi trả về cho trang JSP ban đầu
<jsp:include page="includedPage" />
Trang 70Sử dụng kỹ thuật nào?
Sử dụng include directive nếu file ít khi thay đổi
Sử dụng jsp:include cho nội dung thay đổi
thường xuyên
Sử dụng jsp:include khi chưa quyết định
được sẽ đính kèm trang nào cho đến khi
main page được request
70
Trang 71Forward tới Web component khác
Cùng cơ chế như trong Servlet
Trang 7272
Trang 73 Directives là các thông điệp (messages)
chuyển đến JSP container, hướng dẫn cách biên dịch trang JSP
Không sinh ra output
Cú pháp
<%@ directive {attr=value}* %>
Trang 743 loại Directives
<%@ page import="java.util.* %>
khi dịch trang JSP thành Servlet
Trang 75Page Directives
trang JSP tương ứng
Import các class nào
<%@ page import="java.util.* %>
Loại MIME sinh ra là gì
<%@ page contentType="MIME-Type" %>
Xử lý đa luồng như thế nào
<%@ page isThreadSafe="true" %> <%! Default %>
<%@ page isThreadSafe="false" %>
Trang 76Implicit Objects
Một trang JSP có thể truy cập tới các implicit objects
Được tạo bởi container
Tương ứng với các lớp định nghĩa trong
Servlet (đã học ở bài trước)
76
Trang 78Scope Objects
78
Trang 79Các loại Scope
Trang 80Session và Application Scope
Trang 81Session, Request, Page Scope
Trang 827 JavaBeans Components
82
Trang 83 Quy định về các thuộc tính của lớp
Quy định về phương thức public get, set của các thuộc tính
truy cập/thiết lập (get/set) các thuộc tính của nó
JavaBeans có thể chứa các xử lý nghiệp vụ/truy
Trang 84Quy ước thiết kế JavaBeans
JavaBeans có các thuộc tính (properties)
Một thuộc tính có thể là
Các thuộc tính được truy cập/thiết lập qua
phương thức getXxx và setXxx
PropertyClass getProperty() { }
PropertyClass setProperty() { }
JavaBeans phải có constructor mặc định
84
Trang 85Ví dụ: JavaBeans
public class Currency {
private Locale locale;
private double amount;
Trang 86Tại sao sử dụng JavaBeans trong các trang JSP?
Một trang JSP có thể tạo và sử dụng bất kỳ đối tượng Java nào trong 1 declaration hoặc
Trang 87Tại sao sử dụng JavaBeans trong các trang JSP?
tổn tại, lưu trữ làm 1 thuộc tính của đối tượng
session
Bean được tạo được truy cập trên toàn session
Trang 88So sánh 2 đoạn code
<%
ShoppingCart cart = (ShoppingCart)session.getAttribute("cart");
// If the user has no cart object as an attribute in Session scope
// object, then create a new one Otherwise, use the existing
Trang 89Tại sao sử dụng JavaBeans trong các trang JSP?
Người thiết kế trang Web không cần học
Java
Tách biệt rõ ràng giữa content và
presentation
Tái sử dụng mã nguồn hiệu quả
Chia sẻ đối tượng dễ dàng (cơ chế built-in )
Thuận tiện khi đọc tham số vào (request
parameters) và chuyển thành các thuộc tính
Trang 91Thiết lập thuộc tính cho JavaBeans
2 cách thiết lập thuộc tính cho bean
Qua scriptlet
Qua JSP:setProperty
<jsp:setProperty name="beanName"
property="propName" value="string constant"/>
tử useBean
Trang 92Thiết lập thuộc tính cho JavaBeans
Trang 93Ví dụ: jsp:setProperty với đầu vào là Request parameter
<jsp:setProperty name="bookDB" property="bookId"/>
tương đương với
<%
//Get the identifier of the book to display
String bookId = request.getParameter("bookId");
bookDB.setBookId(bookId);
Trang 94Ví dụ: jsp:setProperty với đầu vào là 1 Expression
<jsp:useBean id="currency" class="util.Currency"
Trang 95Truy cập các thuộc tính của JavaBeans
2 cách truy cập 1 thuộc tính của bean:
CONVERT giá trị thuộc tính thành String và chèn giá trị vào đối tượng “out” (implicit object)
thành String và chèn vào đối tượng “out”
Trang 96Truy cập thuộc tính của JavaBeans và convert thành String rồi chèn vào out
Trang 97Truy cập thuộc tính của JavaBeans mà không convert thành String
Trang 98Truy cập đối tượng trong trang JSP
98
Trang 998 Xử lý lỗi
Trang 100Tạo trang thông báo lỗi
Xác định ngoại lệ được tung ra
Với mỗi trang JSP, thêm directive sau
<%@ page errorPage="errorpage.jsp" %>
Viết 1 trang thông báo lỗi (error page), nên
có directive sau
<%@ page isErrorPage="true" %>
Trong error page , sử dụng đối tượng
exception để hiển thị thông tin
<%= exception.toString() %>
100
Trang 101Ví dụ: initdestroy.jsp
<%@ page import="database.*" %>
<%@ page errorPage="errorpage.jsp" %>
<%!
private BookDBAO bookDBAO;
public void jspInit() {
// retrieve database access object, which was set once per web application
Từ khóa » Các Bài Tập Về Jsp
-
Bài Tập - Quản Lý Sách & Tác Giả - Lập Trình JSP/Servlet
-
Bài Tập Java Servlet CRUD SQL Sever - Lập Trình Không Khó
-
Lập Trình JSP Servlet - Giải Bài Tập CRUD - Thêm Sửa Xóa Sản Phẩm
-
Học JSP Cơ Bản đến Nâng Cao
-
Tài Liệu Tham Khảo JSP
-
Học Java Web Với JSP Servlet Cơ Bản, Nâng Cao - Ngoc Khuong Blog
-
Hướng Dẫn Lập Trình Java JSP Cho Người Mới Bắt đầu - Openplanning
-
BÁO CÁO BÀI TẬP LỚN LẬP TRÌNH MẠNG - Tài Liệu Text - 123doc
-
JSP Là Gì? - Học JSP Cần Chuẩn Bị Những Gì? - VietTuts
-
Java: Các Trang JSP Mẫu | V1Study
-
JSP Servlet Là Gì? Tìm Hiểu Về JSP Servlet Toàn Tập - Tino Group
-
Java Web Servlet Jsp
-
CẬP NHẬT MỚI -[Cốt Lõi Java Web JSP-SERVLET Core Qua Dự án ...