JSP-JavaBean

JavaBean là một lớp Java được xây dựng đặc biệt được viết bằng Java và được mã hóa theo các thông số kỹ thuật API của JavaBeans.

  • Sau đây là các đặc điểm riêng biệt phân biệt JavaBean với các lớp Java khác −
  • Nó cung cấp một hàm tạo mặc định, không có đối số.
  • Nó phải có thể tuần tự hóa và có thể triển khai giao diện Serializable.
  • Nó có thể có một số thuộc tính có thể đọc hoặc ghi.
  • Nó có thể có một số phương thức “getter” và “setter” cho các thuộc tính.

Thuộc tính JavaBeans

Thuộc tính JavaBean là một thuộc tính được đặt tên mà người dùng đối tượng có thể truy cập. Thuộc tính có thể là bất kỳ kiểu dữ liệu Java nào, bao gồm các lớp mà bạn định nghĩa.

Thuộc tính JavaBean có thể là đọc, ghi, chỉ đọc hoặc chỉ ghi. Thuộc tính JavaBean được truy cập thông qua hai phương thức trong lớp triển khai của JavaBean −

1getPropertyName()
Ví dụ, nếu tên thuộc tính là firstName, tên phương thức của bạn sẽ là getFirstName() để đọc thuộc tính đó. Phương thức này được gọi là accessor.
2setPropertyName()
Ví dụ, nếu tên thuộc tính là firstName, tên phương thức của bạn sẽ là setFirstName() để ghi thuộc tính đó. Phương thức này được gọi là mutator.

Thuộc tính chỉ đọc sẽ chỉ có phương thức getPropertyName() và thuộc tính chỉ ghi sẽ chỉ có phương thức setPropertyName().

Ví dụ JavaBeans

Hãy xem xét một lớp sinh viên có một vài thuộc tính −

public class StudentsBean implements java.io.Serializable {
   private String firstName = null;
   private String lastName = null;
   private int age = 0;

   public StudentsBean() {
   }
   public String getFirstName(){
      return firstName;
   }
   public String getLastName(){
      return lastName;
   }
   public int getAge(){
      return age;
   }
   public void setFirstName(String firstName){
      this.firstName = firstName;
   }
   public void setLastName(String lastName){
      this.lastName = lastName;
   }
   public void setAge(Integer age){
      this.age = age;
   }
}

Truy cập JavaBeans

Hành động useBean khai báo một JavaBean để sử dụng trong JSP. Sau khi khai báo, bean trở thành một biến tập lệnh có thể được truy cập bởi cả các phần tử tập lệnh và các thẻ tùy chỉnh khác được sử dụng trong JSP. Cú pháp đầy đủ cho thẻ useBean như sau −

<jsp:useBean id = "bean's name" scope = "bean's scope" typeSpec/>

Tại đây, các giá trị cho thuộc tính scope có thể là một trang, yêu cầu, phiên hoặc ứng dụng dựa trên yêu cầu của bạn. Giá trị của thuộc tính id có thể là bất kỳ giá trị nào miễn là nó là tên duy nhất trong số các khai báo useBean khác trong cùng một JSP.

Ví dụ sau đây cho thấy cách sử dụng hành động useBean −

<html>
   <head>
      <title>useBean Example</title>
   </head>
   
   <body>
      <jsp:useBean id = "date" class = "java.util.Date" /> 
      <p>The date/time is <%= date %>
   </body>
</html>

Kết quả:

The date/time is Thu Sep 30 11:18:11 GST 2010 

Truy cập Thuộc tính JavaBeans

Cùng với hành động , bạn có thể sử dụng hành động để truy cập các phương thức get và hành động để truy cập các phương thức set. Sau đây là cú pháp đầy đủ

<jsp:useBean id = "id" class = "bean's class" scope = "bean's scope">
   <jsp:setProperty name = "bean's id" property = "property name"  
      value = "value"/>
   <jsp:getProperty name = "bean's id" property = "property name"/>
   ...........
</jsp:useBean>

Thuộc tính name tham chiếu đến id của JavaBean đã được hành động useBean giới thiệu trước đó với JSP. Thuộc tính property là tên của phương thức get hoặc set cần được gọi.

Ví dụ sau đây cho thấy cách truy cập dữ liệu bằng cú pháp trên −

<html>
   <head>
      <title>get and set properties Example</title>
   </head>
   
   <body>
      <jsp:useBean id = "students" class = "com.tutorialspoint.StudentsBean"> 
         <jsp:setProperty name = "students" property = "firstName" value = "Zara"/>
         <jsp:setProperty name = "students" property = "lastName" value = "Ali"/>
         <jsp:setProperty name = "students" property = "age" value = "10"/>
      </jsp:useBean>

      <p>Student First Name: 
         <jsp:getProperty name = "students" property = "firstName"/>
      </p>
      
      <p>Student Last Name: 
         <jsp:getProperty name = "students" property = "lastName"/>
      </p>
      
      <p>Student Age: 
         <jsp:getProperty name = "students" property = "age"/>
      </p>

   </body>
</html>

Kết quả

Student First Name: Zara 

Student Last Name: Ali 

Student Age: 10 

Các Scope trong JSP Servlet. Application, Request, Session, Page scope

1. Scope trong Servlet

Trong Servlet, scope là định nghĩa về thời gian mà dữ liệu của bạn có tồn tại cho người dùng trong ứng dụng web. Có 4 scope trong servlet là: page scope, request scope, session scope và application scope.

Các Scope trong JSP Servlet. Application, Request, Session, Page scope

2. Application / context scope

  • Application scope hay context scope bắt đầu từ khi ứng dụng web được chạy cho tới khi shutdown. Các tham số, giá trị (Parameters/attributes) bên trong application scope sẵn dùng với tất cả các request và session.
  • Application scope được định nghĩa bởi javax.servlet.ServletContext interface.
  • Application object sẵn dùng trong 1 JSP page giống như một object ẩn được gọi bởi application.
  • Trong một servlet, bạn có theer lấy các đối tượng application bằng cách gọi getServletContext() bên trong servlets code một cách trực tiếp hoặc gián tiếp quagetServletConfig().getServletContext().
  • Web container cung cấp một đối tượngServletContext cho mỗi ứng dụng web.

3. Request scope

  • Request scope bắt đầu ngay khi một HTTP request được gửi tới server và kết thúc khi server trả về một HTTP response
  • Các tham số/thuộc tính trong một Request scope có thể được truy cập từ các servlet hoặc jsp cùng phục vụ trong 1 request. Ví dụ bạn gọi 1 servlet/jsp sau đó các servlet/jsp này lại gọi các servlet/jsp khác rồi mới trả về reponse.
  • Request object có sẵn trong JSP page như là 1 object ẩn . Bạn có thể set value cho 1 thuộc tính trong request object từ servlet và lấy nó ra ở JSP (Phải trong cùng 1 request).

4. Session scope

  • Một Session Scope bắt đầu khi một client thành lập kết nối với ứng dụng web cho tới khi hết thời gian timeout hoặc browser bị đóng.
  • Các giá trị bên trong session scope có thể được truy cập từ nhiều request khác nhau của cùng 1 client
  • Một tính năng đáng chú ý của trình duyệt web (browser) là  session được chia sẻ giữa các tab khác nhau. Bạn có thể gửi request từ 1 tab khác mà không cần login lại. Ví dụ bạn login gmail ở 1 tab, sau đó bạn sang tab khác vẫn có thể tải mail, gửi mail mà không cần phải login lại. Do đó, hãy luôn mở một cửa sổ trình duyệt mới khi bạn muốn thực hiện các giao dịch bảo mật.
  • Session object sẵn dùng trong JSP pages giống như một object ẩn
  • Trong Servlet, bạn có thể lấy đối tượng object bằng cách gọi request.getSession().

5. JSP page scope

  • Page scope giới hạn bởi phạm vi và thời gian tồn tại của các thuộc tính trong cùng 1 page nơi mà nó được tạo.
  • Nó sẵn dùng trong một JSP page giống như một object ẩn.

Ví dụ:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>

<head>
    <title>JSP Page Scope Example</title>
</head>

<body>
    <c:set var="name" value="Dinesh" scope="page" />
    Local Variable :
    <c:out value="${name}" />
    <a href="test.jsp">Test Page</a>
</body>

</html>

Kết quả:

Local Variable: Dinesh

test.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>

<head>
    <title>JSP Page Scope Example</title>
</head>

<body>
    Variable From previous page :
    <c:out value="${name}" />
</body>

</html>

Kết quả:

Variable from previous page: