tin tức

Struts 2 helloWorld

22/02/2012 - Xem: 4939

I. Struts:

Trước tiên nhắc lại JSP và Servlet:

Một servlet là một chương trình viết bằng java chạy trên máy ảo Java (JVM) ở phía máy chủ (Web Server). các Servlet nhận và phản hồi từ Web client, thường thường sử dụng giao thức HTTP- Hyper Text Transfer Protocol. Để hiển thị một trang web với định dạng html, nếu chỉ dùng Servlet thì sẽ phải println() các mã html về client.

Khi có một request đến, servlet container sẽ kiểm tra xem có servlet nào đã đăng ký cho request đó chưa. Nếu có, request sẽ chuyển tới servlet. Nếu không, request sẽ trả về HTTP server.

Filter nằm ở giữa client và servlet. Request gửi lên và response trả về sẽ phải đi qua filter . Tương tự như một servlet phụ, filter không thực thi một chức năng điều khiển riêng biệt, mà nó chỉ cùng tham gia vào quá trình xử lý các request.

Công nghệ JSP là một phần mở rộng của công nghệ Java Servlet. Tập tin .jsp có cấu trúc giống như tập tin .html truyền thống, nhưng khác ở chỗ là tập tin .jsp có xen lẫn mã Java. Mã Java được tách biệt với phần HTML thông thường bằng cặp dấu <% và %>. Trang JSP khi chạy, mã Java sẽ được được tách ra khỏi nội dung bình thường của trang JSP biên dịch thành Java Servlet . Kết quả xử lý của Servlet được thay vào chỗ biểu thức JSP trong trang Web ban đầu. Trang Web mà trình duyệt nhận được là trang HTML thuần túy.

Struts:
Nếu tất cả mọi thứ đều gói gọi trong servlet hoặc JSP thì sẽ không phù hợp cho việc phát triển các ứng dụng quy mô lớn do:
- Do các tính năng bị lặp lại -> code lặp lại
- Code mỗi người có một phong cách riêng, không biết đâu mà lần…

–> MVC (Model-View-Control) giải quyết các vấn đề trên do có sự phân tách rõ ràng trong ứng dụng.
Struts là một framework sử dụng mẫu thiết kế MVC, nó có các thư viện tiện ích để làm cho việc phát triển MVC được nhanh hơn và dễ dàng hơn.
Struts2 có nhiều tính năng nổi trội hơn Struts1 (nghe nói vậy :D )
MVC thể hiện trong Struts như thế nào?
View component: presentation logic. Ví dụ như các trang jsp hay html đơn giản….
Model component: business logic và data. Các model component cung cấp một giao diện với dữ liệu và/hoặc các dịch vụ được sử dụng bởi ứng dụng. Theo cách này, các controller component không cần phải chứa code để thao tác với dữ liệu của ứng dụng. Thay vào đó, chúng giao tiếp với các model component để thực hiện truy cập và thao tác dữ liệu. Các model component có thể ở nhiều dạng từ các Java bean đến các EJB hay các Web service.
Controller component: Struts 2 sử dụng filter làm nền tảng cho controller, thay vì dùng servlet. Chúng  nằm trong gói thư viện struts2-core. Controller quản lý sự tương tác giữa Model và View.

II. Struts 2 HelloWorld

HelloWorld exaple:
Vào nguồn link sau để xem hướng dẫn dầy đủ, download source + lib:  http://www.vaannila.com/struts-2/struts-2-example/struts-2-hello-world-example-1.html

Ngó qua ví dụ:

Người dùng ở trang index.jsp, nhập username, nhấn submit, sẽ chuyển đến trang success.jsp hiện ra dòng  “Hello [username]“.

Để làm ví dụ trên, phải có 3 thứ:

  1. Có một trang để hiện message
  2. Tạo Action class để sinh message
  3. Mapping giữa action và message page.

1. Trang hiển thị message: success.jsp

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

2. Action class sinh message: HelloWorld.java

package vaannila;

public class HelloWorld {
private String message;

private String userName;

public HelloWorld() {
}

public String execute() {
setMessage(“Hello ” + getUserName());
return “SUCCESS”;
}
…….
// các hàm get, set cho các thuộc tính message, userName
…….
}

3. Mapping giữa action và message page.




/success.jsp


Sau khi nhập username và submit từ trang “/index.jsp” , sẽ gửi request đến URL “/HellWorld.action” và message “Hello [username]” hiện ra.

Code trên hoạt động thế nào?

(Trích nguyên văn trong bài hướng dẫn, mọi người tự dịch :D )

  1. The container receives from the web server a request for the resource HelloWorld.action. According to the settings loaded from the web.xml, the container finds that all requests are being routed to org.apache.struts2.dispatcher.FilterDispatcher, including the *.action requests. The FilterDispatcher is the entry point into the framework.
  2. The framework looks for an action mapping named “HelloWorld”, and it finds that this mapping corresponds to the class “HelloWorld”. The framework instantiates the Action and calls the Action’s execute method.
  3. The execute method sets the message and returns SUCCESS. The framework checks the action mapping to see what page to load if SUCCESS is returned. The framework tells the container to render as the response to the request, the resource HelloWorld.jsp.
  4. As the page HelloWorld.jsp is being processed, the tag calls the getter getMessage of the HelloWorld Action, and the tag merges into the response the value of the message.
  5. A pure HMTL response is sent back to the browser.

III. Các thành phần config:

Vào đây để xem tài liệu đẩy đủ.

Một web application sử dụng deployment descriptor để khởi tạo các  resources như servlets, taglibs. Deployment descriptor có dạng xml được đặt tên là “web.xml”.

Cũng như vậy, framework struts sử dụng file config để khởi tạo các resources của nó. bao gồm:

  • Interceptors that can preprocess and postprocess a request
  • Action classes that can call business logic and data access code
  • Results that can prepare views, like JavaServer Pages and FreeMarker templates

Trước lúc runtime, configuration được định nghĩa từ 1 hoặc nhiều XML document, bao gồm cả struts.xml. Khi runtime sẽ có một configuration duy nhất cho một application. Có nhiểu element được configure bao gồm packages, namespaces, includes, actions, results, interceptors, and exceptions.

1. web.xml

Trong ví dụ HelloWorld trên:

web.xml :

struts2
org.apache.struts2.dispatcher.FilterDispatcher


struts2
/*

Filter và filter-mapping dùng để  setup filter. Ở đây dùng FilterDispatcher. Ở đây filter được map tới URL pattern “/*” . Có nghĩa tất cả các request tới Struts 2 action sẽ được xử lý bởi FilterDispatcher class.

2. struts.xml

Trong ví dụ HelloWorld trên:

struts.xml :



/success.jsp


a. Administrative Elements

Bean Configuration:



...

Constant Configuration: có thể được khai báo ở nhiều file:

struts.xml



...

struts.properties

struts.devMode = true

web.xml



struts
org.apache.struts2.dispatcher.FilterDispatcher

struts.devMode
true


...

Package Configuration
Namespace Configuration



greeting.jsp


bar1.jsp




moo.jsp




bar2.jsp


Namespace are not hierarchical like a file system path. There is one namespace level. For example if the URL /barspace/myspace/bar.action is requested, the framework will first look for namespace /barspace/myspace. If the action does not exist at /barspace/myspace, the search will immediately fall back to the default namespace "".

Include Configuration:









 

b.Request Handling Elements

Interceptor Configuration:

Interceptors allow you to define code to be executed before and/or after the execution of an Action method. (The “Filter” pattern.) Interceptors can be a powerful tool when developing applications. There are many, many use cases for Interceptors, including validation, property population, security, logging, and profiling.

Registering Interceptors







Action Configuration




/UnderConstruction.jsp

...

 

Wildcard Mappings

“action=Crud_input”
“action=Crud_delete”



/{1}.jsp

Result Configuration:

Most often, results are nested with the action element. But some results apply to multiple actions. In a secure application, a client might try to access a page without being authorized, and many actions may need access to a “logon” result.


/Error.jsp
/Error.jsp
Logon!input

 

c. Error Handling

Exception Configuration:

Interceptor is needed to activate the exception mapping functionality. Điểu này đã được làm mặc định trong struts-default.xml



...

/Login.action
/Exception.jsp





...


SQLExceptionAction
/DataAccess.jsp

...


By default, the ExceptionMappingInterceptor adds the following values to the Value Stack:

exception The exception object itself
exceptionStack The value from the stack trace
Sample JSP using Error and Exception Values

An unexpected error has occurred

Please report this error to your system administrator or appropriate technical support personnel. Thank you for your cooperation.


Error Message


Technical Details

Nguồn: http://i-php.net/

Liên kết

Tin được quan tâm nhất

Quản cáo