Transcript spring mvc
SPRING &
SPRING MVC
Giáo viên lý thuyết : Nguyễn Văn Khiết
NHÓM THUYẾT TRÌNH
Lâm Xuân Vinh
Võ Mai Vĩnh Thành
Nguyễn Hoàng Nam
0712039
0712031
0712292
NỘI DUNG TRÌNH BÀY
Giới thiệu Spring
Spring
framework
Spring mvc
Các module chính
Giới thiệu
Spring mvc
Đặc điểm từng phần
của mô hình
Demo
Giới thiệu Spring
Spring
framework
Spring mvc
Các module chính
Giới thiệu
Spring mvc
Đặc điểm từng phần
của mô hình
Demo
SPRING FRAMEWORK
Spring Framework, hay ngắn hơn là Spring, là một cấu
trúc dùng để xây dựng chương trình ứng dụng mã nguồn
mở dành cho ngôn ngữ lập trình java. Phiên bản đầu tiên
của nó do Rod Johnson viết.
Spring là một J2EE application framework được cung
cấp để quản lý các đối tượng nghiệp vụ và sự phụ thuộc
giữa chúng.
Spring cũng cho phép developer viết các
giao tiếp và đơn giản định nghĩa cài đặt
trong XML file. Spring chứa nhiều lớp hỗ
trợ các framework khác (như Hibernate và
Struts) để tạo sự tích hợp dễ dàng hơn.
SPRING FRAMEWORK
Spring hoạt động dựa trên 2 khái niệm chính là IoC (Inversion of control) và AOP
(Aspect Orient Programming) có thể hiểu 1 cách cơ bản 2 khái niệm này như sau :
IoC (hay còn có tên gọi là Dependency Injection)giúp 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ó , có 2 biến thể chính : là
Setter Injection và Constructor Injection.
AOP là kỹ thuật lập trình đưa ra cách phân chia các yêu cầu của hệ thống theo
hướng khía cạnh .Hệ thống được phân ra thành một vài component đảm trách
một chức năng xác định.
Giới thiệu Spring
Spring
framework
Spring mvc
Các module chính
Giới thiệu
Spring mvc
Đặc điểm từng phần
của mô hình
Demo
SPRING FRAMEWORK
SPRING FRAMEWORK
Core & Bean
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.
Java bean đơn giản nó là một lớp java với một mẫu thiết kế đặc biệt một chút
và một quy tắc code. Kiến trúc này hỗ trợ các đặc tính cần có của phần
mềm như tính tái sử dụng, hướng đối tượng hay phân chia để trị.
BeanFactory có một số lớp cài đặt. Một trong số đó thường hay được sử dụng là
org.springframework.beans.factory.xml.XmlBeanFactory. Spring sẽ load các bean dựa
vào định nghĩa trong file XML. Để tạo một thể hiện của XmlBeanFactory, người dùng
chỉ cần truyền vào constructor một inputstream. Resource này sẽ cung cấp XML cho
factory.
SPRING FRAMEWORK
Ví dụ :
<bean id="bean1" class="namebean">
<property name="name" >
<value>Tom</value>
</property>
</bean>
BeanFactory factory = new XmlBeanFactory(new
FileInputStream("myBean.xml"));
namebean bean = (myBean)factory.getBean(“bean1");
SPRING FRAMEWORK
AOP
Aspect-Oriented Programming (AOP) bổ sung cho OOP bằng cách cung cấp một
cách khác để suy nghĩ về cấu trúc chương trình. Trong khi OOP phân tích các ứng
dụng thành một hệ thống các đối tượng, AOP phân tích chương trình vào các khía
cạnh(aspect) hay sự liên quan(concern). Điều này cho phép module hóa các mối
quan tâm như quản lý giao thức mà nếu không sẽ cắt ngang qua nhiều đối tượng
(Sự liên quan như vậy thường được gọi là sự liên quan xuyên suốt).
Các IoC container Spring (BeanFactory và ApplicationContext) không phụ thuộc
vào AOP, có nghĩa là bạn không cần phải sử dụng AOP nếu bạn không muốn, AOP
bổ sung Spring IoC để cung cấp một giải pháp trung gian rất khả thi.
SPRING FRAMEWORK
AOP
Một số khái niệm cần quan tâm trong AOP : Joinpoint , Advice, Pointcut, Aspect ,
Weaving, Target, Introdution , Proxy.
4 loại advice chính của AOP
Around advice: là advice mà bao quanh một
joinpoint như là một lời gọi phương thức.
Đây là loại mạnh mẽ nhất của advice.
Throws advice: là advice được thực thi
nếu một phương thức quăng một exception,
Spring cung cấp việc phân loại throws advice
một cách mạnh mẽ, để bạn có thể viết code
để bắt exception mà bạn quan tâm, mà không
loại bỏ Throwable hay Exception.
Before advice: là một advice mà
thực thi trướcmột joinpoint, nhưng
không có khả năng ngăn chặn dòng
xử lý đến joinpoint(trừ khi nó đưa
ra một exception).
After returning advice: là advice
được thực thi sau khi một joinpoint
hoàn tất một cách bình thường.
SPRING FRAMEWORK
Ví dụ AOP - around advice
public class MessageWriter
{
public void writeMessage()
{
System.out.print("World");
}
}
import org.aopalliance.intercept.MethodInterceptor;
import org.aopalliance.intercept.MethodInvocation;
public class MessageDecorator implements
MethodInterceptor
{
public Object invoke(MethodInvocation
invocation) throws Throwable
{
System.out.println("Hello");
Object rel = invocation.proceed();
System.out.println("!");
return rel;
}
}
SPRING FRAMEWORK
ORM
ORM(Object Realational Mapping) là một cơ chế cho phép người lập
trình thao tác với CSDL một cách hoàn toàn tự nhiên thông qua các đối
tượng mà không quan tâm đến loại CSDL sử dụng như: SQL, Oracle,…
JavaObject
int id;
String name;
String getName()
int getId()
void setName(String)
void setId(int)
SQL Table
id [int] primary key,
name[varchar(50)]
Sự biến đổi xảy ra ở đây
(O/R Mapper – i.e. Hibernate)
SPRING FRAMEWORK
ORM : Ví dụ
public static List getJavaObjectList()
{
SessionFactory factory = HibernateUtil.getSessionFactory();
Session session = factory.openSession();
List<JavaObject> javaObjectList = null;
try
{
org.hibernate.Transaction tx = session.beginTransaction();
Query q = session.createQuery("from JavaObject");
javaObjectList = (List<JavaObject>) q.list();
session.close();
}
catch (Exception e)
{
e.printStackTrace();
}
return javaObjectList;
}
SPRING FRAMEWORK
Application context
Một BeanFactory có thể sử dụng tốt trong những ứng dụng đơn giản, nhưng để tận
dụng lợi thế của tất cả sức mạnh của Spring, bạn sẽ có thể load các bean trong ứng
dụng của bạn sử dụng với container nâng cao của Spring: ApplicationContext.
AppicationContext gần giống với BeanFactory. Cả hai đều load các bean, kết nối và
phân phối chúng theo các yêu cầu. Nhưng ApplicationContext còn có khả năng:
Cung cấp một cách thức để giải quyết các thông điệp text (text messages), bao gồm
hỗ trợ việc quốc tế hóa cho các thông điệp đó.
.
Cung cấp một cách tổng quát để load các file tài nguyên, chẳng hạn file ảnh.
Xuất bản các sự kiện sang các bean.
SPRING FRAMEWORK
Application context
Một số ApplicationContext phổ biến:
STT
Tên
Mô tả
1
ClassPathXmlApplicaitonContext
Load một định nghĩa context từ một file xml
trong class path, xử lý các file định nghĩa
context như là các class path resources
2
FileSystemXmlApplicationContext
Load một định nghĩa context từ một file xml
trong hệ thống
3
XmlWebApplicaitonContext
Load một định nghĩa context từ một file xml
trong ứng dụng web
SPRING FRAMEWORK
Ví dụ :
//file applicationContext.xml config
public class HelloWorld
{
<bean id=“hello1” class=“HelloWorld”>
String Hello;
<property name=“Hello” value=“XinChao”>
public Print()
</bean>
{
System.out(Hello);
//hàm main
}
public static void main(String[] args)
public void
{
Setter(String s)
ApplicationContext context = new
{
ClassPathXmlApplicationContext(/applicationContext.xml”);
Hello = s;
HelloWorld hello1 = context.getBean(“hello1”);
}
}
}
public static void main()
{
HelloWorld hello1 = new HelloWorld();
Hello1.Setter(“XinChao”);
}
SPRING MVC
Giới thiệu Spring
Spring
framework
Spring mvc
Các module chính
Giới thiệu
Spring mvc
Đặc điểm từng phần
của mô hình
Demo
SPRING MVC
SPRING MVC
Ưu điểm
Phát triển phần mềm: Có tính chuyên nghiệp
hóa, có thể chia cho nhiều nhóm được đào tạo
nhiều kỹ năng khác nhau, từ thiết kế mỹ thuật
cho đến lập trình đến tổ chức database.
Bảo trì: Với các lớp được phân chia theo như
đã nói, thì các thành phần của một hệ thống dễ
được thay đổi, nhưng sự thay đổi có thể được
cô lập trong từng lớp, hoặc chỉ ảnh hưởng đến
lớp ngay gần kề của nó, chứ không phát tán náo
loạn trong cả chương trình.
Mở rộng: Với các lớp được chia theo ba lớp
như đã nói, việc thêm chức năng vào cho từng
lớp sẽ dễ dàng hơn là phân chia theo cách khác.
Tiện về bug lỗi, kiểm soát code, workflow dễ
dàng hơn và nhiều người có thể tham gia phát
triển cùng trên 1 module.
Nhược điểm
Đối với dự án nhỏ: Cồng kềnh, tốn
thời gian phát triển.
Performance : do tốn thời gian
trung chuyển DTO (Data Transfer
Object) giữa các layers
SPRING MVC
Bước 1 :
• DispatcherServlet nhận Request.
• DispatcherServlet tra trong HandlerMapping và gọi Controller kết hợp với Request
Bước 2 :
Controller xử lý Request bằng cách gọi những phương thức thích hợp và trả về một đối
tượng ModelAndView cho DispatcherServlet. Đối tượng ModelAndView này chứa dữ
liệu trong đối tượng Model và tên của View.
Bước 3 :
DispatcherServlet gửi tên của View đến cho một ViewResolver. ViewResolver sẽ tìm
View thực sự cần dùng.
Bước 4 :
• DispatcherServlet truyền đối tượng Model đến cho View đã xác định để hiển thị kết quả.
• View lấy dữ liệu trong đối tượng Model và hiển thị kết quả cho người dùng.
Giới thiệu Spring
Spring
framework
Spring mvc
Các module chính
Giới thiệu
Spring mvc
Đặc điểm từng phần
của mô hình
Demo
SPRING MVC
Gồm các lớp java có nhiệm vụ:
• Biểu diễn data và cho phép truy cập tới để get và set
data trong này (JAVABEAN), Thường thì phần layer này
mô phỏng 1 cách đầy đủ đối tượng từ thế giới thực.
• Nhận các yêu cầu từ View và thi hành các yêu cầu đó
(tính toán, kết nối CSDL …).
• Trả về các giá trị tính toán cho View.
SPRING MVC
Bao gồm các mã tương tự
như JSP để hiển thị form
nhập liệu, các kết quả trả
về từ Mô hình…
SPRING MVC
• Đồng bộ hoá giữa View và Model. Tức là với một trang JSP này thì
sẽ tương ứng với lớp java nào để xử lý nó và ngược lại, kết quả sẽ trả
về trang jsp nào.Nó đóng vai trò điều tiết giữa View và Model.
• Như vậy, chúng ta có thể tách biệt được các mã java ra khỏi mã
html. Người thiết kế giao diện và người lập trình java có thể mang
tính chất độc lập tương đối. Việc debug hay bảo trì sẽ dễ dàng hơn,
việc thay đổi các theme của trang web cũng dễ dàng hơn …
CHI TIẾT HƠN VỀ SPRING MVC
DispatcherServlet
Tiếp nhận tất cả các request từ Browser.
Điều khiển luồng xử lý và trung chuyển giữa các thành phần (components)
trong MVC. Hơn thế nữa, nó còn tích hợp các Spring IoC container, cho phép
ta sử dụng đến tất cả các tính năng của Spring.
DispatcherServlet thực sự là một Servlet (nó thừa kế từ lớp cơ sở
HttpServlet), và được khai báo trong tập tin web.xml của ứng dụng web. Các
requests bạn muốn DispatcherServlet xử lý sẽ phải được ánh xạ bằng cách sử
dụng một bộ ánh xạ URL trong cùng một tập tin web.xml.
CHI TIẾT HƠN VỀ SPRING MVC
DispatcherServlet
<web-app>
<servlet>
<servlet-name>example</servlet-name>
<servletclass>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>example</servlet-name>
<url-pattern>*.form</url-pattern>
</servlet-mapping>
</web-app>
Cấu hình của 1 tập tin web.xml
CHI TIẾT HƠN VỀ SPRING MVC
DispatcherServlet
Tất cả các requests có đuôi .form sẽ được DispatcherServlet ‘example’ xử lý.
Khi DispatcherServlet được khởi tạo, framework sẽ gọi file có tên
[tên-servlet]-servlet.xml trong thư mục WEB-INF. Với ví dụ trên, framework
sẽ gọi file example-servlet.xml.
CHI TIẾT HƠN VỀ SPRING MVC
Controllers
Controllers là các thành phần được Dispatcher Servlet gọi để xử lý các
nghiệp vụ Business.
Tất cả các Controller trong Spring đều thực thi phương thức từ giao
tiếp org.springframework.web.servlet.mvc.Controller.
CHI TIẾT HƠN VỀ SPRING MVC
Controllers
public interface Controller {
ModelAndView handleRequest( HttpServletRequest request,
HttpServletResponse response) throws Exception;
}
Controller interface định nghĩa ra 1 phương thức chịu trách nhiệm xử lí 1 request, sau đó trả
về model và view thích hợp.
CHI TIẾT HƠN VỀ SPRING MVC
Controllers
Các Controller được sử dụng trong Spring :
AbstractController
AbstractCommandController
CancellableFormController
AbstractCommandController
MultiActionController
ParameterizableViewController
ServletForwardingController
ServletWrappingController
UrlFilenameViewController
CHI TIẾT HƠN VỀ SPRING MVC
Controllers
AbstractController:
package samples;
public class SampleController extends AbstractController {
public ModelAndView
handleRequestInternal(HttpServletRequest request,
HttpServletResponse response) throws Exception {
ModelAndView mav = new ModelAndView("hello");
mav.addObject("message", "Hello World!");
return mav;
CHI TIẾT HƠN VỀ SPRING MVC
Controllers
AbstractController:
Ta định nghĩa controller này trong ApplicationContext.xml
<bean id="sampleController“
class="samples.SampleController">
<property name="cacheSeconds" value="120"/>
</bean>
Controller này sẽ buộc client cache dữ liệu cứ mỗi 2 phút trước khi
kiểm tra lại. Đồng thời nó cũng trả về một view được code cứng.
CHI TIẾT HƠN VỀ SPRING MVC
Handler mappings
Sử dụng handler mapping bạn có thể ánh xạ từng requests đến
các handler thích hợp.
Chức năng cơ bản của một HandlerMapping là đưa ra một chuỗi
hành động (HandlerExecutionChain), và có thể chứa một số bộ
chặn. Khi requests đến, các DispatcherServlet sẽ trao cho các
handler mapping để nó kiểm tra và xuất ra chuỗi hành động thích
hợp. Sau đó, các DispatcherServlet sẽ gọi các lớp xử lý và bộ chặn
trong hệ thống (nếu có).
CHI TIẾT HƠN VỀ SPRING MVC
Handler mappings
BeanNameUrlHandlerMapping
Một handler mapping đơn giản nhưng rất mạnh mẽ là
BeanNameUrlHandlerMapping, nó ánh xạ các HTTP requests đến tên
của các beans, được định nghĩa trong bối cảnh ứng dụng web.
Ví dụ chúng ta muốn cho phép một người dùng tạo một tài khoản, ở đây ta
đã có một form controller thích hợp và một trang JSP để hiển thị.
CHI TIẾT HƠN VỀ SPRING MVC
Handler mappings
BeanNameUrlHandlerMapping
Khi sử dụng BeanNameUrlHandlerMapping, ta có thể ánh xạ HTTP requests
với địa chỉ http://samples.com/editaccount.form vào form Controller như sau:
<beans>
<bean id="handlerMapping"
class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/> <bean
name="/editaccount.form"
class="org.springframework.web.servlet.mvc.SimpleFormController">
<property name="formView" value="account"/>
<property name="successView" value="account-created"/>
<property name="commandName" value="account"/>
<property name="commandClass" value="samples.Account"/>
</bean></beans>
CHI TIẾT HƠN VỀ SPRING MVC
View resolver
Tất cả Controller trong Spring Web MVC Framework trả về 1
đối tượng gọi là ModelAndView.
View trong Spring được gán cho 1 “view name “ và được phân
giải bởi 1 “view resolver”.
CHI TIẾT HƠN VỀ SPRING MVC
View resolver
Sau đây là các “view resolver” trong Spring:
BeanNameViewResolver
FreeMarkerViewResolver
InternalResourceViewResolver
JasperReportsViewResolver
ResourceBundleViewResolver
UrlBasedViewResolver
VelocityLayoutViewResolver
VelocityViewResolver
XmlViewResolver
XsltViewResolver
CHI TIẾT HƠN VỀ SPRING MVC
View resolver
Internal Resource View Resolver
View Resolver này sẽ ánh xạ Logical name của Resource (ModelAndView
object được trả về bởi Controller) đến một Physical View(myView.jsp,…).
public class MyController {
public void handle(){
if(condition1()){
return new ModelAndView("myView1");
}else if (condition2()){
return new ModelAndView("myView2");
}
return new ModelAndView("myView3");
}
CHI TIẾT HƠN VỀ SPRING MVC
View resolver
Internal Resource View Resolver
Giả sử như Request của người dùng thỏa condition1(), thì view
“myView.jsp”(trong thư mục ” /WEB-INF”) sẽ được hiển thị,nếu không thì
hoặc “myView2.jsp” hoặc “myView3.jsp” sẽ được hiển thị.
Ngoài ra, ta còn phải cấu hình file web.xml :
<bean id="viewResolver" class="org.springframework.web.servlet.view.
InternalResourceViewResolver">
<property name="prefix"><value>/WEB-INF/</value></property>
<property name="suffix"><value>.jsp</value></property>
</bean>
Khi logical View name là myView1, thì view thực sự sẽ là :
prefix + logical View Name + suffix , tức là: /WEB-INF/myView.jsp
NHẬN XÉT SPRING MVC
Ưu điểm
Spring là một framework Java mạnh mẽ được sử dụng trong những
ứng dụng Java có phạm vi lớn.
Cơ chế IoC giúp ứng dụng đạt được sự đơn giản hoá và tăng khả năng
kiểm tra lỗi.
Spring MVC cung cấp một sự phân chia rất rõ ràng, rành mạch giữa
những Controller, Java Bean models và Views.
Spring MVC rất linh hoạt, toàn bộ Spring MVC được xây dựng dựa
trên những interfaces. Mọi phần của Spring MVC framework được cấu
hình thông qua việc lắp ghép những interface, class tiện ích sẵn có, và
thậm chí được tạo bởi người dùng.
NHẬN XÉT SPRING MVC
Ưu điểm
Spring không chỉ sử dụng công nghệ JSP mà còn có thể dễ dàng tích
hợp các công nghệ view khác như Velocity, XSLT, FreeMarker, XL, …
Cung cấp cơ chế che dấu nền công nghệ bên dưới, trang web khi hiển
thị chỉ có extension là .htm, không thể biết được bên dưới ta sử dụng
công nghệ, kỹ thuật gì.
NHẬN XÉT SPRING MVC
Khuyết điểm
Cấu hình phức tạp và cồng kềnh không phát huy được
sức mạnh khi áp dụng cho các ứng dụng quy mô nhỏ mà
có thể ngược lại còn làm cho ứng dụng phức tạp.
Nếu Developer cần xây dựng 1 ứng dụng web mà chưa
biết nhiều về Spring thì họ phải bỏ ra công sức tìm hiểu
nhiều và việc coding cũng phức tạp hơn.
THAM KHẢO
http://www,javavietnam.org
http://static.springsource.org/spring/docs/2.0.7/reference/mvc.html
http://www.vaannila.com/spring/spring-tutorial/spring-tutorial.html
http://netbeans.org/kb/docs/web/quickstart-webapps-spring.html
http://sites.google.com/site/springmvcnetbeans/step-by-step
http://forum.springsource.org/showthread.php?t=16553
http://www.mkyong.com/spring-mvc/spring-mvc-internationalizationexample
Giới thiệu Spring
Spring
framework
Spring mvc
Các module chính
Giới thiệu
Spring mvc
Đặc điểm từng phần
của mô hình
Demo
VIDEO DEMO
SPRING Core & Bean
SPRING AOP
SPRING MVC
QUESTION & ANSWER
Cảm ơn thầy và các bạn đã lắng nghe !