1. Trang chủ
  2. » Luận Văn - Báo Cáo

Ứng dụng struts framework trong xây dựng website

69 402 1

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 69
Dung lượng 1,8 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Đề tài gồm ba chương: Chương 1 Mô hình Multilayer Chương 2 Các công nghệ Struts 2, Spring và Hibernate Chương 3 Chương trình ứng dụng Chương một sẽ giới thiệu về mô hình Multilayer trong

Trang 1

LỜI MỞ ĐẦU

Hiện nay, đất nước ta đang trên đà phát triển với mong muốn tiến kịp nền kinh tế thế giới Sự gia nhập WTO là một minh chứng, chứng tỏ đất nước ta đang ngày một đổi mới và phát triển cùng bạn bè quốc tế Trong công cuộc đó không thể không kể đến vai trò to lớn của ngành CNTT nước nhà, CNTT được đánh giá xem như là một trong những ngành khoa học mũi nhọn của nước ta trong thời kỳ phát triển hiện nay

CNTT phát triển từng ngày từng giờ và công nghệ hỗ trợ phát triển ứng dụng cũng phát triển kèm theo đó Việc nghiên cứu tìm hiểu các công nghệ là hết sức cần thiết Tích hợp các công nghệ để hỗ trợ xây dựng ứng dụng mang lại hiệu quả kinh tế cao chất lượng tốt Đề tài “Ứng dụng Struts framework trong xây dựng website ” tìm hiểu ba công nghệ mới là Spring, Hibernate, Struts 2 đồng thời tích hợp để xây dựng ứng dụng website bán sách qua mạng một ứng dụng cũng rất phổ biến hiện nay Đề tài gồm ba chương:

Chương 1 Mô hình Multilayer

Chương 2 Các công nghệ Struts 2, Spring và Hibernate

Chương 3 Chương trình ứng dụng

Chương một sẽ giới thiệu về mô hình Multilayer trong ứng dụng, chưng hai và ba

sẽ trình bày về các công nghệ để xây dựng các tầng và chương trình ứng dụng nhằm làm rõ hơn việc sử dụng các công nghệ như thế nào và đạt hiệu quả ra sao

Đề tài hoàn thành nhờ sự động viên giúp đỡ tậ tình của gia đình, bạn bè , đặc biệt là sự chỉ bảo, giúp đỡ tận tình của cô giáo hướng dẫn Th.s Nguyễn Hiền Trinh

Trang 2

CHƯƠNG 1 MÔ HÌNH MULTILAYER

Trong phát triển ứng dụng, để dễ quản lý các thành phần của hệ thống, cũng như không bị ảnh hưởng bởi các thay đổi, người ta hay nhóm các thành phần có cùng chức năng lại với nhau và phân chia trách nhiệm cho từng nhóm để công việc không bị chồng chéo và ảnh hưởng lẫn nhau Trong phát triển phần mềm, người ta cũng áp dụng cách phân chia chức năng này Và kiến trúc đa tầng/nhiều lớp đã được đưa ra, mỗi lớp (layer) sẽ thực hiện một chức năng nào

đó, trong đó mô hình 3 lớp là phổ biến nhất là Presentation, Business Logic, và Data Access và trong java đặc biệt trong những ứng dụng web các layer này sẽ là Presentation, Business Logic và Persistence layer Các lớp này sẽ giao tiếp với nhau thông qua các dịch vụ (services) mà mỗi lớp cung cấp để tạo nên ứng dụng, lớp này cũng không cần biết bên trong lớp kia làm gì mà chỉ cần biết lớp kia cung cấp dịch vụ gì cho mình và sử dụng nó mà thôi

1.1 Presentation Layer

Lớp này làm nhiệm vụ giao tiếp với người dùng để thu thập dữ liệu, hiển thị kết quả dữ liệu… thông qua các thành phần trong giao diện người sử dụng Lớp này sẽ sử dụng các dịch vụ do lớp Business Logic cung cấp Trong ứng dụng web bằng java thì ta có thể dùng jsp, java applet hay các công nghệ hỗ trợ như struts1, struts 2, jsf…Và thường lớp này không sử dụng trực tiếp các dịch vụ của lớp persistence layer mà nên sử dụng thông qua các dịch vụ của lớp Business Logic vì khi sử dụng trực tiếp như vậy, ta có thể bỏ qua các ràng buộc, các logic nghiệp vụ mà ứng dụng cần phải có

1.2 Business Logic Layer

Lớp này là cầu nối giữa Presentation Layer và Persistence layer nó thực hiện các nghiệp vụ chính của hệ thống, sử dụng các dịch vụ do lớp Persistence layer cung cấp, và cung cấp các dịch vụ cho lớp Presentation Lớp này cũng có thể sử dụng các dịch vụ của các nhà cung cấp thứ 3 (3rd parties) để thực hiện

Trang 3

công việc của mình (ví dụ như sử dụng dịch vụ của các cổng thanh toán trực tuyến)

1.3 Persistence layer

Lớp này thực hiện các nghiệp vụ liên quan đến lưu trữ và truy xuất dữ liệu của ứng dụng Thường lớp này sẽ sử dụng các dịch vụ của các hệ quản trị cơ sở

dữ liệu như SQL Server, Oracle,… để thực hiện nhiệm vụ của mình

1.4 Một số lợi ích khi phân tầng:

 Tầng trình bày và tầng giao tác có sự phân chia rõ ràng, cho phép ta thay đổi cảm quan của ứng dụng mà không cần biên dịch lại mã của hai tầng buseness, và persistence

 Chỉ cần có người lập trình cấp thấp phát triển và bảo trì các giao diện người dùng

 Thời gian phát triển có thể giảm đáng kể bởi vì những người lập trình cho phần Controller chỉ tập chung cho phần giao tác, còn những người lập trình cho phần presentation chỉ tập chung vaò phần trình bày

 Việc tách phần trình bày và logic nghiệp vụ cũng khiến phần bảo trì và

sửa đổi một ứng dụng web trở lên dễ dàng hơn

1.5 Tích hợp các công nghệ vào các tầng (layer)

Việc phân chia ứng dụng thành các tầng không phải là chuyện dễ dàng nhất là các ứng dụng lớn không những thế việc quản lý và cung cấp các dịch vụ của một tầng cho các tầng khác là vấn đề hết sức khó khăn Việc tích hợp các công nghệ không những giải quyết được những khó khăn trên mà còn hỗ trợ xây dựng các tầng nhanh chóng, dễ dàng, đạt hiệu suất cao và chất lượng tốt Hiện nay có khá nhiều công nghệ hỗ trợ xây dựng các tầng ví dụ như prentation có thể dùng: struts1, struts 2, JSF, webwork…, tầng persistence có JDBC, Hibernate, iBatis… Nhưng khi tích hợp công nghệ cho các tầng thì người ta không thể bỏ qua bộ ba công nghệ Struts2 – Spring – Hibernate Bộ ba này đã mang lại hiệu quả rất lớn cho các dự án đã được phát triển trên thế giới Ở Việt Nam hiện nay

Trang 4

đây là các công nghệ đang được giới lập trình yêu thích và được các công ty lớn

về java sử dụng Và đây cũng là một điều kiện bắt buộc các lập trình viên java phải biết

CHƯƠNG 2 CÁC CÔNG NGHỆ STRUTS, SPRING VÀ HIBERNATE 2.1 Công nghệ Struts (Struts 2)

2.1.1 Dự án struts

Struts nột dự án mã nguồn mở của Apache Software foundation, là một bản hiện thực Java phía Server của mẫu thiết kế Model – View- Controller (MVC)

Dự án strut được khới xướng bởi Caig McClananha vào tháng 5/2000, thuộc dự

án Apache Jakata Hiện tại dự án Struts trở thành một dự án độc lập dự án Apache Struts

Dự án Struts được thành lập với mục đích cung cấp một bộ khung mã nguồn

mở để tạo các ứng dụng Web, tách phần trình bày ra khỏi tầng giao tác và tầng

dữ liệu Từ khi ra đời dự án Struts nhận được nhiều ủng hộ của các nhà phát triển

và nhanh chóng chiếm ưu thế trong cộng đồng mã nguồn mở

Hiện nay Struts đã có phiên bản thứ 2 (Struts 2) với nhiều tính năng được cải thiện rất đáng kể so với Struts 1 Struts hai là sự kết hợp giữa Struts 1 và Web Work

Trang 5

Controller: Định nghĩa cách thức giao diện người dùng tương tác lại dữ liệu đầu vào Thành phần Controller là đối tượng thao tác thành phần Model

2.1.2 Kiến trúc của Struts 2

.Kiến

- Action ContextCleanUp filter: là một tùy chọn và nó được sử dụng khi tích

hợp với các công nghệ khác như SiteMash Plugin

- FilterDispatcher: tiếp đến, FilterDispatcher (bộ điều khiển lọc) được gọi, nó

quay lại sử dụng ActionMapper để xác định Action nào được triệu gọi Nếu action được yêu cầu được triệu gọi thì FilterDispatcher ủy nhiệm việc điều khiển lại cho ActionProxy

- ActionProxy:ActionProxy nhận sự giúp đỡ từ bộ quản lý cấu hình file

(Configuration Files manager), được khởi tạo từ file struts.xml Sau đó

Trang 6

ActionProxy tạo ra một ActionInvocation, thực thi (implement) từ mẫu lệnh ActionInvocation xử lý triệu gọi bộ chặn (Interceptors) nếu nó được cấu hình và sau đó triệu gọi Action ActionInvocation tìm kiếm kết quả thích hợp, sau đó kết quả được thực thi, nó triệu gọi việc sinh ra trang các JSP hoặc các mẫu Sau đó, các Interceptor được thực thi một lần nữa theo thứ tự ngược lại Việc trả

về kết quả cuối cùng thông qua các bộ lọc được cấu hình trong file web.xml Nếu

bộ lọc ActionContextCleanUp được cấu hình, thì FilterDispatcher không dọn dẹp ThreadLocal ActionContext Nếu bộ lọc ActionContextCleanUp không có thì FilterDispatcher sẽ dọn dẹp tất cả các ThreadLocal tồn tạilà

2.1.3 Một số thành phần quan trọng của struts 2

Struts Configuration file - struts.xml

struts.xml một trong những file quan trọng nhất của Struts nó dùng để thiết lập các giá trị ban đầu cho tài nguyên ứng dụng Tài nguyên đó bao gồm:

Ví dụ về một file struts.xml

<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE struts PUBLIC

"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"

"http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>

<constant name="struts.enable.DynamicMethodInvocation" value="false" />

<constant name="struts.devMode" value="true" />

Trang 7

<package name="roseindia" namespace="/roseindia" extends="struts-default">

<action name="HelloWorld" class="net.roseindia.Struts2HelloWorld">

 Thẻ Package: <package/>Thẻ này dùng để nhóm các actions, results, result

types, interceptors … vào một nhóm

 Thẻ Include: <include /> được dùng để import các file cấu hình khác vào file chính:

 Thẻ Bean: Dùng để cấu hình các đối tượng java bean

 Thẻ Constant: Thẻ này được dùng để:

 Đặt giá trị kích thước lớn nhất của file được upload

 Xác định đối tượng bean nào sẽ được chọn

2.1.4 Struts 2 Tags

Struts 2 xây dựng một thư viện thẻ đồ sộ cho việc xây dựng tầng trình bày Chính nhờ thư viện thẻ này đã làm giảm đán kể thời gian thiết kế tầng trình bày giúp cho lập trình viên có` thời gian tập trung vào tầng khác của tầng ứng dụng

Các thẻ điều khiển bao gồm: if, elseIf, else, append, generator, iterator,

merge, sort, subset

Các thẻ dữ liệu: a, action, bean, date, debug, i18n, include, param, push, set,

text, url, property

Trang 8

Các thẻ Form: autocompleter, checkbox, checkboxlist, combobox,

datetimepicker, doubleselect, head, file, form, hidden, label, optiontransferselect, optgroup, password, radio, reset, select, submit, textarea, textfield, token, updownselect

Các thẻ ngoài form (Non-Form Tags): actionerror actionmessage, component,

div, fielderror, table, tabbedPanel, tree, treenode

Một số thẻ thường dùng:

 iterator Tag : <s:iterator> thẻ này dùng để duyệt qua một mảng các phần

tử hoạc một tập hợp Nó thật sự hữu ích khi ta muốn hiển thị thông tin của các đối tượng trong mảng, hay trong một tập hợp

public class IteratorTestAction extends ActionSupport {

private int[] interests;

private static List<Interest> interestOptions =

new ArrayList<Interest>();

static { interestOptions.add(new Interest(1, "Automotive"));

interestOptions.add(new Interest(2, "Games"));

interestOptions.add(new Interest(3, "Sports"));

private int id;

private String description;

public Interest(int id, String description) {

Trang 10

 append tag: <s:append > Thẻ này dùng để nhóm hai hay nhiều mảng các phần tử vào một nhóm:

Ví dụ:

<s:set var="list1" value="{'one', 'two'}"/>

<s:set var="list2" value="{'1', '2', '3'}"/>

Trang 11

<s:set var="list2" value="{'4', '4', '6'}"/>

Thẻ <s:sort>: Thẻ này dùng để sắp xếp các phần tử trong mảng

<s:set var="mylist" value="{'HP,Dell,Asus,Fujitsu,Toshiba'}"/>

<s:sort comparator="myComparator" source="myList">

<s:textfield name="custname" label="User Name" />

<s:password key="password" label="Password"

<s:submit value="Login"/>

</s:form>

Kết quả:

Trang 12

Các thẻ : Submit, reset tương ứng với submit button và reset button trong html

Ví dụ:

<s:form action="Product_save">

<s:textfield name="custname" label="User Name" />

<s:password key="password" label="Password"

1 Phát triển lớp action class

2 Khai báo action class trong struts.xml

3 Xây dựng trang view tương ứng với action class

Ví dụ phát triển một ứng dụng login:

Trang 13

Phát triển lớp action class:

package net.roseindia;

import com.opensymphony.xwork2.ActionSupport;

import java.util.Date;

public class Login extends ActionSupport {

public String execute() throws Exception {

System.out.println("Validating login");

if(!getUsername().equals("Admin") || !getPassword().equals("Admin")){ addActionError("Invalid user name or password! Please try again!");

private String username = null;

public String getUsername() {

private String password = null;

public String getPassword() {

return password;

}

public void setPassword(String value) {

password = value;

Trang 14

Phát triển trang login form ( login.jsp)

<%@ taglib prefix="s" uri="/struts-tags" %>

<s:textfield name="username" label="Login name"/>

<s:password name="password" label="Password"/>

<s:submit value="Login" align="center"/>

</s:form>

</body>

</html>

Trang 15

Chạy chương trình có kết quả như sau:

Khi người dùng nhập vào name là Admin và mật khẩu là Admin thì chương trình

sẽ chuyển đến file thông báo đăng nhập thành công ngược lại thì chương trình vẫn chuyển sang giao diện đăng nhập

2.2 Công nghệ Spring

2.2.1 Giới thiệu về Spring:

Spring là một application framework mã nguồn mở, được giới thiệu vào năm

2002 Rod Johnson đã đưa ra ý tưởng này từ kinh nghiệm làm việc với kiến trúc J2EE

Ông đã viết cuốn sách “J2EE Develoment without using EJB” để giới thiệu khái niệm trình chứa hạng nhẹ (lightweight container) Với lý luận: EJB thì có giá trị của nó, nhưng không phải lúc nào cũng cần thiết và phù hợp cho tất cả các ứng dụng Như Hibernate chống lại CMP về nguyên lý cơ bản của kỹ thuật ORM, Spring chống lại EJB vì sự phức tạp và không phù hợp cho các unit test Thay vì EJB, Spring sử dụng Java bean, với một vài sự thay đổi để thu được tất cả các thuận lợi mà môi trường EJB đưa ra Do đó Spring là một sự lựa chọn khác so với EJB

Spring không phải là một kỹ thuật persistence nhưng nó cho phép tích hợp với các kỹ thuật khác EJB thì tập trung vào kỹ thuật persistence và bây giờ nó đã cộng tác với Hibernate, một ORM tốt nhất ngày nay Nó đang dự định cộng tác với một kỹ thuật ORM tốt khác là JDO (cung cấp cho Object Database)

Trang 16

Trong Spring, chúng ta có thể sử dụng Java Bean để rút trích các thứ mà trước

đó chỉ có thể với EJB Mục tiêu chính của Spring là đơn giản việc phát triển J2EE và testing

EJB được xuất hiện vào 1988 và là một chuẩn, đặc tả trong thế giới Enterprise Mặc dù có một số kỹ thuật Java gần đây, nhưng không có kỹ thuật nào đáng kể so với EJB về mặc tổng các đặc tính của nó

Theo Rod Johnson thì EJB không phức tạp nhưng nó cố gắng cung cấp cách giải quyết cho các vấn đề phức tạp EJB được phát triển chính cho các giao dịch, đối tượng được phân phát ở trên máy khác Nhưng một số enterprise project không có mức độ phức tạp mà vẫn sử dụng EJB và thậm chí các ứng dụng đơn giản trở nên phức tạp Trong trường hợp này thì Spring là một sự chọn lựa

Từ lúc Spring hỗ trợ các dịch vụ ở mức enterprise, thì nó tuyên bố là một sự lựa chọn khác đối với EJB

Thuận lợi của EJB:

a) Transaction Management

b) Declarative Transaction support

c) Persistence ( CMP & BMP)

d) Declarative Security

e) Distributed Computing (Container managed RPC)

Spring không cố gắng làm mọi thứ nhưng nó hỗ trợ những kỹ thuật tốt nhất cho mỗi yêu cầu.Thay vì CMP & BMP, nó hỗ trợ một vài kỹ thuật persistence khác như JDO, Hiberbate và OJB Các ORM tool này thì có nhiều khả năng cài đặt hơn CMP Để đơn giản coding JDBC, có một tool là iBatis và Spring cũng hỗ trợ nó

Spring sử dụng Acegi, một security framework mã nguồn mở và cung cấp để khai báo security thông qua cấu hình Spring hoặc class metadata, trong khi EJB khai báo security được cấu hình thông qua mô tả demployment Spring cung cấp proxying cho RMI (kỹ thuật remoting đặc biệt như Burlap) JAX-RPC & web-service, trong khi EJB cung cấp lời gọi phương thức ở xa được quản lý bởi container

Trang 17

Spring có thể cung cấp khai báo transaction như EJB Ngoài ra, Spring còn cung cấp khai báo thủ tục rollback cho các phương thức và exception

Do đó, trong khi EJB thì cứng và cố gắng làm mọi thứ, một vài công việc tốt nhưng một số thì không Spring chỉ sử dụng Java Bean và thông qua một số kỹ thuật đặc biệt để cung cấp nhiều chức năng như EJB, bằng cách tích hợp với một số kỹ thuật open source khác

Do đó, nó cung cấp một vài thuận lợi hơn EJB như:

a) Testing dễ dàng hơn - không cần khởi động EJB container để test

b) Spring dựa vào quy ước của chuẩn Java Bean, nên programmer dễ dàng làm việc với nó

c) Nó sử dụng AOP (Aspect-Oriented Programming), mô hình hữu ích để bổ sung vào OOP truyền thống và bảo toàn tính nguyên vẹn của OOP

d) Nó thì uyển chuyển

Mục đích của Spring là trở thành một application framework Các framework phổ biến khác như Struts, Tapestry, JSF, là các framework tốt cho tầng web nhưng khi chúng ta sử dụng các framework này, chúng ta phải cung cấp thêm framework khác

để giải quyết tầng enterprise mà tích hợp tốt với các framework này Spring làm giảm bớt vấn đề này bằng cách cung cấp một framework toàn diện bao gồm:

 Core bean container,

 MVC framework,

 AOP integration framework,

 JDBC integration framework,

 EJB integration framework

2.2.2 Các module của Spring

1 Core Container:

Core container cung cấp chức năng cơ bản của Spring Thành phần chính của nó là Bean Factory, một cài đặt của Factory pattern BeanFactory áp dụng IoC pattern để đặc tả sự phụ thuộc từ code của ứng dụng

2 Spring Context/Application Context:

Trang 18

Spring context là một file cấu hình để cung cấp thông tin ngữ cảnh của Spring Spring context cung cấp các service như JNDI access, EJB integration, e-mail, internalization, validation, và scheduling functionality

3 Spring AOP (Aspect-Oriented):

Spring AOP module tích hợp chức năng lập trình hướng khía cạnh vào Spring framework thông qua cấu hình của nó Spring AOP module cung cấp các dịch vụ quản lý giao dịch cho các đối tượng trong bất kỳ ứng dụng nào sử dụng Spring Với Spring AOP chúng ta có thể tích hợp declarative transaction management vào trong ứng dụng mà không cần dựa vào EJB component

Spring AOP module cũng đưa lập trình metadata vào trong Spring Sử dụng nó chúng ta có thể thêm annotation vào source code để hướng dẫn Spring nơi và làm thế nào để liên hệ với aspect

4 Spring DAO:

Tầng JDBC và DAO đưa ra một cây phân cấp exception để quản lý kết nối đến database, điều khiển exception và thông báo lỗi được ném bởi vendor của database Tầng exception đơn giản điều khiển lỗi và giảm khối lượng code mà chúng ta cần viết như mở và đóng kết nối Module này cũng cung cấp các dịch vụ quản lý giao dịch cho các đối tượng trong ứng dụng Spring

5 Spring ORM:

Spring có thể tích hợp với một vài ORM framework để cung cấp Object Relation tool bao gồm: JDO, Hibernate, OJB và iBatis SQL Maps

6 Spring Web module:

Nằm trên application context module, cung cấp context cho các ứng dụng web Spring cũng hỗ trợ tích hợp với Struts, JSF và Webwork Web module cũng làm giảm bớt các công việc điều khiển nhiều request và gắn các tham số của request vào các đối tượng domain

Trang 19

7 Spring MVC Framework:

MVC Framework cài đặt đầy đủ đặc tính của MVC pattern để xây dựng các ứng dụng Web MVC framework cấu hình thông qua giao diện và chứa được một số kỹ thuật view bao gồm: JSP, Velocity, Tiles và generation of PDF và Excel file

Có một số kỹ thuật tuyệt vời cho tầng web như: Spring MVC framework, Struts, JSF, WebWork, JSP, Tapestry, FreeMarker, Developer sẽ bị lúng túng đối chiếu những điểm mạnh và xấu của tất cả chúng Mỗi khi họ chọn một kỹ thuật và bắt đầu cài đặt, thì sau đó nếu muốn thay đổi một kỹ thuật khác thì rất khó Nhưng Spring đưa

ra các module cho tất cả các kỹ thuật trên, và rất đơn giản để thay đổi file cấu hình Với phương pháp này, nó có khả năng cho cả team thử và test các tất cả các hình thức trên và xem ảnh hưởng cùng tốc độ trước khi quyết định chọn lựa

JSP là một view template mặc định "InternalResouceViewResolver" có thể được

sử dụng cho mục đích này

2.2.3 Các khái niệm chính của Spring:

Các khái niệm chính của Spring là: IoC và Aspect Orient Programming Spring dựa vào Depenecy injection của IoC Chúng ta không trực tiếp kết nối các component

và service lại với nhau trong code mà thông qua file cấu hình Một container thì chịu trách nhiệm móc nối nó Khái niệm này thì tương tự với Declarative Management

1 Dependency Injection:

Depedency injection là một pattern chịu trách nhiệm tạo đối tượng và các liên kết giữa các đối tượng bị loại bỏ ra khỏi các đối tượng và chuyển đến cho factory quản lý Các đối tượng của ứng dụng không chịu trách nhiệm tìm kiếm các resource mà chúng phụ thuộc và vì thế nên sự phụ thuộc được đảo ngược vào trong các đối tượng Theo phương pháp này, các đối tượng có thể được rút trích thông qua Setter Injection (các thuộc tính của Java-Beans) hoặc Constructor Injection (tham số của constructor) Mỗi phương thức có thuận lợi và bất lợi riêng

Trang 20

Bình thường trong Java bean, chúng ta sử dụng phương thức setter và getter để thiết lập và lấy giá trị của thuộc tính như sau:

public class namebean {

<bean id="bean1" class="namebean">

setName("Tom"); => tiến trình này được gọi là setter injection

Ví dụ về constructor injection, chúng ta sử dụng constructor với một tham số: public class namebean {

String name;

public namebean(String a)

{ name = a; }

}

Trang 21

Chúng ta sẽ thiết lập thuộc tính "name" trong khi tạo thể hiện của bean

"namebean" như sau: namebean bean1 = new namebean("Tom");

Ở đây ta sử dụng element <constructor-arg> để thiết lập thuộc tính sử dụng constructor injection như sau:

<bean id="bean1" class="namebean">

Trang 22

Container là khái niệm chính của Spring Để quản lý vòng đời và cấu hình các đối tượng của ứng dụng Chúng ta có thể cấu hình mỗi bean nên được tạo như thế nào hoặc làm thế nào để tạo một instance của bean hoặc làm thế nào kết hợp chúng lại Spring không sử dụng các EJB container hạnh nặng Spring có 2 container phân biệt: Bean Factory được định nghĩa bởi org.springframework beans.factory BeanFactory

là một container đơn giản nhất, cung cấp hỗ trợ dependency injection Application context được định nghĩa bởi org.springframework.context.ApplicationContext, cung cấp các service của application framework

2.2.4 Bean Factory:

Bean factory thì cài đặt factory design pattern và chức năng của nó là tạo và phân phát các bean Bean factory biết về nhiều đối tượng trong ứng dụng, nó có thể tạo mối kết hợp cho các đối tượng khi chúng được khởi tạo điều này sẽ giảm bớt gánh nặng cho bean và client

Có một vài cài đặt của BeanFactory Một cái hữu ích nhất là org.springframework.beans.factory.xml.XmlBeanFactory Nó sẽ load các bean dựa vào định nghĩa trong XML file Để tạo một thể hiện của XmlBeanFactory, hãy chuyển vào constuctor của nó một InputStream Resource này sẽ cung cấp XML cho factory

BeanFactory factory = new XmlBeanFactory(new

myBena bean1 = (myBean)factory.getBean("myBean");

2.2.5 Application Context:

Trong khi Bean Factory được sử dụng cho các ứng dụng đơn giản, thì Application Context là một container nâng cao của Spring Giống như BeanFactory, nó có thể

Trang 23

được sử dụng để load các định nghĩa bean, gắn các bean với nhau và phân phát các bean theo yêu cầu

Nó cũng cung cấp:

1) giải quyết text message, bao gồm hỗ trợ internationlization

2) cách chung để load file resource

3) các sự kiện để bean được đăng ký như các trình lắng nghe

Có 3 cách sử dụng cài đặt Application Context:

1) ClassPathXmlApplicationContext: Load định nghĩa context từ XML file được

đặt trong classpath, xem các định nghĩa context như các tài nguyên của classpath Application context thì được load từ classpath của ứng dụng như sau:

ApplicationContext context = new

ClassPathXmlApplicationContext("bean.xml");

2) FileSystemXmlApplicationContext: Load định nghĩa context từ XML file trong

từ hệ thống file Application Context được load từ hệ thống file như sau:

ApplicationContext context = new

Các bước tạo ứng dụng sử dụng Spring:

1 Một interface định nghĩa các chức năng

2 Một implementation chứa các thuộc tính, các phương thức settter và getter

3 Một file XML gọi là file cấu hình Spring

4 Chương trình client sử dụng chức năng trên

Trang 24

1

public interface Hello {

public String sayHello(String s);

}

2

public class HelloImpl implements Hello{

private String greeting;

public HelloImpl(){

} public HelloImpl(String s){

Trang 25

public class HelloClient {

public static void main(String[] args) { try {

ClassPathResource resource = new ClassPathResource("hello.xml");

BeanFactory factory = new XmlBeanFactory(resource);

HelloImpl bean = (HelloImpl) factory.getBean("hello");

String hello = bean.sayHello("ANH");

System.out.println(hello);

} catch (Exception e) {

e.printStackTrace();

} }

}

Kết quả: Good Morning!ANH

Ở đây, HelloImpl cài đặt giao tiếp Hello Mặc dù không cần thiết phải dấu cài đặt phía sau một giao tiếp HelloImpl có một thuộc tính greeting Thuộc tính này có thể được thiết lập theo 2 cách: bằng phương thức setter hoặc bằng constructor File hello.xml khai báo một thể hiện của HelloImpl trong container của Spring và cấu hình giá trị của thuộc tính greeting là "Good Morning!"

Root của file hello.xml là <beans> element - là root element của bất kỳ file cấu hình nào của Spring Element <bean> được sử dụng để bảo Spring container về lớp và

nó nên được cấu hình như thế nào Ở đây, thuộc tính id là tên của interface và thuộc tính class xác định tên lớp đầy đủ của bean

Trong <element> bean, element <property> được sử dụng để thiết lập thuộc tính, trong trường hợp này là thuộc tính greeting Sử dụng <property>, chúng ta nói với Spring container gọi phương thức setGreeting() Giá trị của greeting được định nghĩa trong element <value>

Trang 26

Container sẽ khởi tạo HelloImpl dựa vào định nghĩa XML như sau:

HelloImpl hello = new HelloImpl ();

hello.setGreeting("Good Morning! ");

Tương tự, thuộc tính greeting có thể được thiết lập thông qua constructor có 1 tham số của

HelloImpl như sau:

<bean id="hello" class=" HelloImpl">

<constructor-arg>

<value>Good Morning! </value>

</constructor-arg>

</bean>

Container khởi tạo HelloImpl dựa vào định nghĩa XML như sau:

HelloImpl hello = new HelloImpl("Good Morning ");

Ở chương trình client, lớp BeanFactory được sử dụng là Spring container Sau đó phương thức getBean() được gọi để lấy tham chiếu đến bean "hello" Với tham chiếu này thì phương thức sayHello() được gọi

Trang 27

2.3 Công nghệ Hibernate

2.3.1 Tổng quan Hibernate framework

Như ta biết ứng dụng được chia một cách logically thành các "layer" và persistence layer là một layer có nhiệm vụ kết nối Relational DBMSs và truy xuất, thao tác trên dữ liệu đã được lưu trữ cũng như lưu trữ dữ liệu mới vào chúng Hibernate framework là một framework cho persistence layer Và có thể thấy rằng nhờ có Hibernate framework mà giờ đây khi phát triển một ứng dụng ta chỉ còn chú tâm vào những layer khác mà không phải bận tâm nhiều về persistence layer nữa Tương tự như vậy nếu đã có một UI framework, ta sẽ không phải bận tâm nhiều về UI layer Và xét đến cùng, việc ta quan tâm duy nhất là business logic layer của ta có đáp ứng yêu cầu của khách hàng không hay thôi

Hibernate là một dịch vụ lưu trữ và truy vấn dữ liệu quan hệ mạnh mẽ và nhanh Hibernate giúp ta phát triển các class dùng để lưu trữ dữ liệu theo cách thức rất là hướng đối tượng: association, inheritance, polymorphism, composition

và collections Hibernate cho phép thực hiện các câu truy vấn dữ liệu bằng cách

sử dụng ngôn ngữ SQL mở rộng của Hibernate (HQL) hoặc là ngôn ngữ SQL nguyên thuỷ cũng như là sử dụng các API

Không giống như các persistence layer khác, Hibernate không ẩn đi sức mạnh của ngôn ngữ SQL mà Hibernate còn đảm bảo cho ta đầu tư vào công nghệ

và tri thức cơ sở dữ liệu quan hệ là luôn luôn chính xác Và điều quan trọng hơn nữa là Hibernate được license theo LGPL (Lesser GNU Public License) Do đó,

ta có thể thoải mái sử dụng Hibernate trong các dự án open source hoặc các dự án thương mại (commercial)

Hibernate là một dự án open source chuyên nghiệp và là một thành phần cốt tuỷ của bộ sản phẩm JBoss Enterprise Middleware System (JEMS) JBoss, là một đơn vị của Red Hat, chuyên cung cấp các dịch vụ 24x7 về hỗ trợ chuyên nghiệp, tư vấn và huyấn luyện sẵn sàng hỗ trong việc dùng Hibernate

Trang 28

2.3.2 Các thành phần của Hibernate project:

1 Hibernate Core: Cung cấp các chức năng cơ bản của một persistence layer

cho các ứng dụng Java với các APIs và hỗ trợ XML mapping metadata

2 Hibernate EntityManager: Sử dụng EJB 3.0 EntityManager API trong JSE

hoặc với bất kỳ JEE server nào

3 Hibernate Tools: Các tool tích hợp với Eclipse và Ant dùng cho việc sinh ra

các persistence object từ một schema có sẵn trong database (reverse-engineering)

và từ các file hbm sinh ra các class java để hiện thực các persistence object, rồi Hibernate tự tạo các object trong database (forward-engineering)

4 NHibernate: Hibernate cho Net framework

5 JBoss Seam: Một Java EE 5.0 framework cho phát triển các ứng dụng JSF,

Ajax và EJB 3.0 với sự hỗ trợ của Hibernate Seam hiện rất mới và tỏ ra rất mạnh

để phát triển các ứng dụng Web 2.0 Nó tích hợp đầy đủ tất cả các công nghệ

"hot" nhất hiện nay

2.3.3 Cơ bản về Hibernate

Cấu hình:

Hibernate được cấu hình theo hai bước:

 Cấu hình service bao gồm: tham số kết nối CSDL, caching và tập các lớp persistent

 Cung cấp cho Hibernate các thông tin về các lớp được persist

Để giải quyết hai bước theo yêu cầu của Hibernate, chúng ta phải thực hiện những công việc sau:

 Tạo file cấu hình hibernate.cfg.xml

 Xây dựng các file định nghĩa ánh xạ để cung cấp cho Hibetnate các thông tin về các lớp persistent

 Các lớp được sử dụng để persist và rút trích các lớp

 Cấu hình nâng cao bao gồm: object caching và quản lý giao dịch

Trang 29

2.3.3.1 Cấu hình cơ bản:

Hibernate cung cấp 2 phương pháp cấu hình: file properties theo chuẩn của Java được gọi là hibernate.properties và file có định dạng XML gọi là hibernate.cfg.xml Chúng ta sẽ sử dụng file cấu hình XML để cấu hình các service của Hibernate Nếu cả hai file hibernate.properties và hibernate.cfg.xml được tìm thấy trong classpath của ứng dụng thì hibernate.cfg.xml sẽ override lên các thiết lập được tìm thấy trong hibernate.properties

Trước khi cấu hình Hibernate, ta phải xác định service giữ kết nối đến CSDL như thế nào Kết nối đến CSDL có thể được cung cấp bởi Hibernate hoặc từ JNDI DataSource Một phương pháp thứ ba là kết nối JDBC được cung cấp bởi người dùng

a) Sử dụng kết nối JDBC được quản lý bởi Hibernate:

`<?xml version="1.0"?>

<!DOCTYPE hibernate-configuration PUBLIC

"-//Hibernate/Hibernate Configuration DTD 3.0//EN"

<mapping resource="com/manning/hq/ Location.hbm.xml"/>

<mapping resource="com/manning/hq/ Speaker.hbm.xml"/>

<mapping resource="com/manning/hq/ Attendee.hbm.xml"/>

</session-factory>

</hibernate-configuration>

Trang 30

Để sử dụng JDBC connection được cung cấp bởi Hibernate, file cấu hình yêu cầu 5 thuộc tính: connection.driver_class, connection.url, connection.username, connection.password, dialect

Thuộc tính dialect báo cho Hibernate biết SQL dialect nào được sử dụng

để thao tác Nó được sử dụng để đảm bảo các câu Hibernate Query Language (HQL) được chuyển đổi đúng với SQL dialect dưới CSDL

Hibernate cũng cần biết vị trí (đường dẫn tương đối so với classpath của ứng dụng) và tên của các mapping file - mô tả persistent classs

b) Sử dụng JNDI DataSource:

Để sử dụng Hibernate với kết nối CSDL được cung cấp bởi JNDI DataSource, ta cần thay đổi một vài chỗ trong file cấu hình như sau:

<?xml version="1.0"?>

<!DOCTYPE hibernate-configuration PUBLIC

"-//Hibernate/Hibernate Configuration DTD 3.0//EN"

Trang 31

Ta chỉ sử dụng loại cấu hình này khi sử dụng Hibernate với application server: Jboss, WebSphere Thuộc tính connection.datasource phải có cùng giá trị với tên của JNDI DataSource trong cấu hình application server

Quy ước đặt tên cho các file ánh xạ là sử dụng tên của persistent class với phần mở rộng hbm.xml

Ví dụ: File ánh xạ cho lớp Customer có tên là Customer.hbm.xml

Trang 32

public void setname(String name){this.name=name;}

public String getaddress(){

public String getphone(){

return phone;

}

public void setphone(String phone){this.phone=phone;} public String getaccount(){

Trang 33

return account;

}

public void setaccount(String account){this.account=account;}

public String getprovince(){

<class name="Customer" table="Customer">

<id name="id" column="custid" type="java.lang.Integer">

Trang 34

<property name="province" column="province"

2.3.3.3 Xây dựng SessionFactory:

Giao tiếp SessionFactory của Hibernate cung cấp các thể hiện của lớp Session để biểu diễn các kết nối đến CSDL Thể hiện của SessionFactory là thread-safe và chia sẻ suốt ứng dụng Các thể hiện Session không phải là thread-safe và chỉ nên được sử dụng cho một transaction hoặc đơn vị làm vị trong ứng dụng

Cấu hình SessionFactory:

a) Lớp Configuration:

Lớp này là sự mở đầu runtime của Hibernate Nó được sử dụng để load các file ánh xạ và tạo SessionFactory cho các file ánh xạ này Mỗi lần 2 chức năng này hoàn tất, lớp Configuration có bị loại bỏ Có 3 cách để tạo và khởi tạo đối tượng Configuration

Đoạn mã sau sẽ load các file property và mapping được định nghĩa trong hibernate.cfg.xml và tạo SessionFactory:

Configuration cfg = new Configuration();

SessionFactory factory = cfg.configure().buildSessionFactory();

Phương thức configure() bảo Hibernate load file hibernate.cfg.xml Nếu như nó không tồn tại thì chỉ hibernate.properties được load từ classpath Lớp Configuration cũng có thể load mapping document:

Configuration cfg = new Configuration();

cfg.addFile("com/manning/hq/ch03/Event.hbm.xml");

Ngày đăng: 08/08/2016, 10:09

HÌNH ẢNH LIÊN QUAN

Bảng 3.1 Mối quan hệ giữa tác nhân và các ca sử dụng. - Ứng dụng struts framework trong xây dựng website
Bảng 3.1 Mối quan hệ giữa tác nhân và các ca sử dụng (Trang 53)
Hình 3.1 Mô hình tổng thể hệ thống bán hàng qua mạng. - Ứng dụng struts framework trong xây dựng website
Hình 3.1 Mô hình tổng thể hệ thống bán hàng qua mạng (Trang 54)
Hình 3.2 Mô hình chi tiết ca sử dụng - Ứng dụng struts framework trong xây dựng website
Hình 3.2 Mô hình chi tiết ca sử dụng (Trang 54)
Bảng 3.2  Luồng sự kiện chính của ca sử dụng đăng ký - Ứng dụng struts framework trong xây dựng website
Bảng 3.2 Luồng sự kiện chính của ca sử dụng đăng ký (Trang 55)
Hình 3.3 Biểu đồ trình tự ca sử dụng Đăng ký - Ứng dụng struts framework trong xây dựng website
Hình 3.3 Biểu đồ trình tự ca sử dụng Đăng ký (Trang 56)
Bảng 3.3 Luồng sự kiện chính ca sử dụng Mua hàng - Ứng dụng struts framework trong xây dựng website
Bảng 3.3 Luồng sự kiện chính ca sử dụng Mua hàng (Trang 58)
Hình 3.6 Biểu đồ lớp ca sử dụng Mua Hàng - Ứng dụng struts framework trong xây dựng website
Hình 3.6 Biểu đồ lớp ca sử dụng Mua Hàng (Trang 59)
Bảng 3.4 Luồng sự kiện chính ca sử dụng quản lý nhà cung cấp. - Ứng dụng struts framework trong xây dựng website
Bảng 3.4 Luồng sự kiện chính ca sử dụng quản lý nhà cung cấp (Trang 60)
Hình 3.8 Biểu đồ công tác ca sử dụng QLNXB - Ứng dụng struts framework trong xây dựng website
Hình 3.8 Biểu đồ công tác ca sử dụng QLNXB (Trang 61)
Bảng 3.5 Luồng sự kiện chính ca sử dụng Quản lý sách. - Ứng dụng struts framework trong xây dựng website
Bảng 3.5 Luồng sự kiện chính ca sử dụng Quản lý sách (Trang 62)
Hình 3.9 Biểu đồ lớp thực thể và mối quan hệ giữa chúng - Ứng dụng struts framework trong xây dựng website
Hình 3.9 Biểu đồ lớp thực thể và mối quan hệ giữa chúng (Trang 64)
Hình 3.13 Biểu đồ triển khai hệ thống bán hàng qua mạng. - Ứng dụng struts framework trong xây dựng website
Hình 3.13 Biểu đồ triển khai hệ thống bán hàng qua mạng (Trang 65)
Hình 3.12 Biểu đồ thành phần hệ thống bán hàng qua mạng. - Ứng dụng struts framework trong xây dựng website
Hình 3.12 Biểu đồ thành phần hệ thống bán hàng qua mạng (Trang 65)

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w