SlideShare a Scribd company logo
Spring application
Phiên bản: 0.1 2013-12-10
SPRING APPLICATION
XÂY DỰNG DEMO CHO ỨNG DỤNG SPRING
THUỘC TÍNH TÀI LIỆU
Tiêu đề: Xây dựng demo cho ứng dụng Spring
Chủ đề: Spring application
Tác giả: Laptrinh.vn
Từ khóa: Spring, ibatis
Spring application
Phiên bản: 0.1 2013-12-10
TABLE OF CONTENTS
THUẬT NGỮ...................................................................................................................................................3
GIỚI THIỆU.....................................................................................................................................................3
XÂY DỰNG ỨNG DỤNG...............................................................................................................................3
1.1. Dynamic Web project...................................................................................................................3
1.1.1. Create java web application..........................................................................................3
1.1.2. Xây dựng controller......................................................................................................5
1.1.3. Cấu hình thư mục jsp....................................................................................................6
1.1.4. Sử dụng Sitemap...........................................................................................................6
1.2. Connect Database.........................................................................................................................9
1.2.1. Sử dụng iBatis...............................................................................................................9
1.3. Displaytag, jstl & một số thư viện khác.....................................................................................13
Spring application
Phiên bản: 0.1 2013-12-10
THUẬT NGỮ
This section is intentionally left blank
GIỚI THIỆU
XÂY DỰNG ỨNG DỤNG
1.1. Dynamic Web project
1.1.1. Create java web application
Sử dụng thư viện Spring
Download: http://www.springsource.org/spring-framework
Copy vào thư mục lib
Spring application
Phiên bản: 0.1 2013-12-10
Thêm 2 thư viện để ghi log
log4j-1.2.17.jar commons-logging-1.1.1.jar
Chỉnh sửa file WEB-INFweb.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
id="WebApp_ID" version="2.5">
<display-name>Spring</display-name>
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-
class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>*.htm</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
Spring application
Phiên bản: 0.1 2013-12-10
</web-app>
Thêm file WEB-INFdispatcher-servlet.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<context:component-scan base-package="springapp.web.controller" />
</beans>
1.1.2. Xây dựng controller
Tạo package springapp.web.controller
Tạo class: HelloController
package springapp.web.controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
/**
* Description: Hello controller
* @author DatNH
*
* Detail:
* - @: annotation java
*
*/
@Controller
public class HelloController {
/**
* Nhan request /hello, xu ly thong tin
* @return
*/
@RequestMapping("/hello")
public ModelAndView hello(Model model) {
// set session value
model.addAttribute("name", "DatNH");
return new ModelAndView("hello.jsp");
}
Spring application
Phiên bản: 0.1 2013-12-10
@RequestMapping("/helloworld")
public String helloworld(Model model) {
model.addAttribute("name", "DatNH");
return "hello.jsp";
}
}
Tạo file WebContent/hello.jsp
<html>
<head>
<title>Hello World</title>
</head>
<body>
<h1>Ch ngươ trình đ cượ xây d ngự d aự trên framework MVC Sping 3</h1>
<p>Xin chào: <b>${name}</b></p>
</body>
</html>
Kết quả
1.1.3. Cấu hình thư mục jsp
Thêm vào file dispatcher-servlet.xml
<bean id="viewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver"
p:prefix="/WEB-INF/jsp/" p:suffix=".jsp" />
Sửa lại file controller
return new ModelAndView("hello");
Tạo thư mục WEB-INF/jsp và copy file hello.jsp vào
1.1.4. Sử dụng Sitemap
Download: http://www.opensymphony.com/sitemesh
Copy lib sitemesh-2.4.x.jar vào thư mục WEB-INF/lib
Spring application
Phiên bản: 0.1 2013-12-10
Thêm filter vào web.xml
<!-- Sitemesh -->
<filter>
<filter-name>sitemesh</filter-name>
<filter-
class>com.opensymphony.module.sitemesh.filter.PageFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>sitemesh</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
Tạo một số thư mục trong WebContent/
• decorators : Thư mục gồm tất cả các file decorator (e.g. main.jsp, printable.jsp).
• includes: Thư mục gồm tất cả các file sẽ được include tới các file khác (e.g. header.jsp,
footer.jsp, copyright.jsp).
• images: Thư mục bao gồm tất cả các ảnh (e.g. background.gif, logo.gif).
• styles: Thư mục bao gồm tất cả CSS styles (e.g. ie4.css, ns4.css).
• scripts: Thư mục bao gồm tất cả các scripts (JavaScript, VBScript files).
Tạo file WEB-INF/decorators.xml
<?xml version="1.0" encoding="UTF-8"?>
<decorators defaultdir="/decorators">
<decorator name="main" page="main.jsp">
<pattern>/*</pattern>
</decorator>
</decorators>
Tạo file: /includes/header.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
[HEADER]
<hr/>
Tạo file: /includes/footer.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<hr/>
[FOOTER]
Spring application
Phiên bản: 0.1 2013-12-10
Tạo file: /includes/taglibs.jsp
<%@ taglib prefix="decorator" uri="http://www.opensymphony.com/sitemesh/decorator" %>
Tạo 1 file decorator : /decorators/main.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ include file="/includes/taglibs.jsp"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>[springapp] <decorator:title/> </title>
</head>
<body>
<div id="container">
<%@ include file="/includes/header.jsp"%>
<div id="content">
<decorator:body />
</div>
<%@ include file="/includes/footer.jsp"%>
</div>
</body>
</html>
Kết quả
Cấu trúc project
Spring application
Phiên bản: 0.1 2013-12-10
1.2. Connect Database
Tải thư viện JDBC driver phù hợp, ở đây dùng MySQL
Tạo file context.xml trong META-INF
<?xml version="1.0" encoding="UTF-8"?>
<Context>
<Resource
name="jdbc/SpringMySqlDS"
auth="Container"
type="javax.sql.DataSource"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/spring"
removeAbandoned="true"
maxActive="75"
maxIdle="30"
maxWait="-1"
username="root"
password="nguyendat"
validationQuery="select 1 from dual"
/>
</Context>
1.2.1. Sử dụng iBatis
Download: http://code.google.com/p/mybatis/
Spring application
Phiên bản: 0.1 2013-12-10
Project Description Links
MyBatis 3 SQL Mapping Framework for Java download | docs
Generator Code generator for MyBatis and iBATIS download | docs
Trong web.xml, tạo một reference tới resource SpringMySqlDS
<resource-ref>
<description>Chat Datasource</description>
<res-ref-name>jdbc/SpringMySqlDS</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
Tạo các package
• springapp.core.dao
• springapp.core.dao.xml
• springapp.core.model
• springapp.core.service
Copy mybatis-3.2.0-SNAPSHOT.jar vào WEB-INF/lib
Tạo file mybatisConfig.xml trong springapp.core.dao.xml
Cấu hình environments:
<configuration>
<environments default="development">
<environment id="development">
<transactionManager type="MANAGED">
<property name="closeConnection" value="true" />
</transactionManager>
<dataSource type="JNDI">
<property name="data_source"
value="java:comp/env/jdbc/SpringMySqlDS" />
</dataSource>
</environment>
</environments>
</configuration>
Tạo file mapping database table và java class
• Khai báo và mapping column table với thuộc tính trong java
• Thực hiện câu lệnh generator
Spring application
Phiên bản: 0.1 2013-12-10
cd /d C:UsersPhoenixworkspacejunoSpringgenerator (tùy thư mục nhé)
java -jar mybatis-generator-core-1.3.1.jar -configfile generatorConfig.xml -overwrite -tables user
Các class đã được generator
UserMapper.java UserMapper.xml User.java
Xử lý dữ liệu
• Tạo service class
o Interface: UserServiceLocal.java
o Class: UserService
• Tạo bean cho UserService
o File web.xml
Thêm cấu hình applicationContext.xml
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/applicationContext.xml
</param-value>
</context-param>
<listener>
<listener-
class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
o File applicationContext.xml
Application context: Khai báo các bean session sử dụng trong chương trình.
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:jee="http://www.springframework.org/schema/jee"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
http://www.springframework.org/schema/jee
http://www.springframework.org/schema/jee/spring-jee-2.5.xsd">
<bean id="userService" class="springapp.core.service.UserService" />
</beans>
Spring application
Phiên bản: 0.1 2013-12-10
o File myBatisConfig.xml
<mapper resource="springapp/core/dao/xml/UserMapper.xml" />
• Xử lý Controller
o File UserController.java
package springapp.web.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import springapp.core.model.User;
import springapp.core.service.UserServiceLocal;
/**
* User controller
* @author DatNh
*
*/
@Controller
public class UserController {
@Autowired
private UserServiceLocal userService;
@RequestMapping("/user")
public String helloworld(Model model) {
User user = userService.selectByPrimaryKey(1);
model.addAttribute("user", user);
return "user";
}
}
o File user.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<html>
<head>
<title>Hello World</title>
</head>
<body>
<h1>User demo</h1>
<p>Xin chào: <b>${user.username}</b></p>
</body>
</html>
Spring application
Phiên bản: 0.1 2013-12-10
o File UserServiceLocal.java
package springapp.core.service;
import springapp.core.model.User;
/**
*
* @author DatNH
*
*/
public interface UserServiceLocal {
User selectByPrimaryKey(int id);
}
o File UserService.java
package springapp.core.service;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import springapp.core.dao.UserMapper;
import springapp.core.model.User;
/**
* User service
* @author DatNH
*
*/
public class UserService implements UserServiceLocal {
@Override
public User selectByPrimaryKey(int id) {
SqlSessionFactory sqlMapper = MyBatisService.getSessionFactory();
SqlSession sqlSession = sqlMapper.openSession(true);
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
User user = mapper.selectByPrimaryKey(id);
sqlSession.close();
return user;
}
}
1.3. Displaytag, jstl & một số thư viện khác
Copy thư viện
Spring application
Phiên bản: 0.1 2013-12-10
displaytag-1.2.jar
jstl.jar javax.servlet.jsp.jstl-1.2.1.jar javax.servlet.jsp.jstl-api-1.2.1.jar
aopalliance-1.0.jar commons-lang-2.6.jar commons-beanutils-1.8.3.jar
File taglibs.jsp
@RequestMapping("/user/list")
public String list(Model model) {
List<User> userList = userService.getAll();
model.addAttribute("userList", userList);
return "userList";
}
File UserServiceLocal.java
List<User> getAll();
File UserService.java
@Override
public List<User> getAll() {
SqlSessionFactory sqlMapper = MyBatisService.getSessionFactory();
SqlSession sqlSession = sqlMapper.openSession(true);
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
List<User> userList = mapper.getAll();
sqlSession.close();
return userList;
}
File UserMapper.java
List<User> getAll();
File UserMapper.xml
Spring application
Phiên bản: 0.1 2013-12-10
<select id="getAll" resultMap="BaseResultMap">
select
<include refid="Base_Column_List" />
from user
</select>
File userList.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ include file="/includes/taglibs.jsp"%>
<html>
<head>
<title>Hello World</title>
</head>
<body>
<h1>User List</h1>
<div>
<display:table name="${userList}" class="simple wid100" id="user"
requestURI="" pagesize="15">
<display:column title="STT" class="stt" > <c:out value="$
{user_rowNum}"/> </display:column>
<display:column title="Username" property="username" />
<display:column title="Password" property="password"/>
<display:column title="Timestamp" property="timestamp"/>
<display:column title="Create Date" property="createDate"
format="{0,date,dd/MM/yyyy HH:mm:ss}" />
</display:table>
</div>
</body>
</html>
Kết quả

More Related Content

PPTX
Spring mvc
PPTX
Java Server Faces + Spring MVC Framework
PPTX
9. java server faces
ODP
Spring Portlet MVC
PPT
Jsf2.0 -4
PPT
Java Server Faces (JSF) - Basics
PDF
Sun JSF Presentation
PPT
Spring 3.x - Spring MVC
Spring mvc
Java Server Faces + Spring MVC Framework
9. java server faces
Spring Portlet MVC
Jsf2.0 -4
Java Server Faces (JSF) - Basics
Sun JSF Presentation
Spring 3.x - Spring MVC

What's hot (20)

PDF
JEE Programming - 05 JSP
PPT
JSF basics
PDF
Servlets lecture1
ODP
A Complete Tour of JSF 2
PDF
JEE Programming - 04 Java Servlets
ODP
Sprint Portlet MVC Seminar
PPTX
Jsp and Servlets
PDF
SpringMVC
PPT
JSF Component Behaviors
PPT
JSF 2 and beyond: Keeping progress coming
PPT
J2EE - JSP-Servlet- Container - Components
PPT
Component Framework Primer for JSF Users
PDF
JavaEE6 my way
PDF
Lecture 10 - Java Server Faces (JSF)
PPTX
Java Server Pages
PDF
Jsp servlets
PPT
1 java servlets and jsp
PPT
Jsp ppt
PPT
Struts,Jsp,Servlet
PPTX
Ch 04 asp.net application
JEE Programming - 05 JSP
JSF basics
Servlets lecture1
A Complete Tour of JSF 2
JEE Programming - 04 Java Servlets
Sprint Portlet MVC Seminar
Jsp and Servlets
SpringMVC
JSF Component Behaviors
JSF 2 and beyond: Keeping progress coming
J2EE - JSP-Servlet- Container - Components
Component Framework Primer for JSF Users
JavaEE6 my way
Lecture 10 - Java Server Faces (JSF)
Java Server Pages
Jsp servlets
1 java servlets and jsp
Jsp ppt
Struts,Jsp,Servlet
Ch 04 asp.net application
Ad

Recently uploaded (20)

PPTX
20250228 LYD VKU AI Blended-Learning.pptx
PPT
Teaching material agriculture food technology
PDF
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
PPTX
Spectroscopy.pptx food analysis technology
PDF
NewMind AI Weekly Chronicles - August'25 Week I
PPTX
Effective Security Operations Center (SOC) A Modern, Strategic, and Threat-In...
PDF
Approach and Philosophy of On baking technology
PPTX
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
PDF
Encapsulation theory and applications.pdf
PPTX
Detection-First SIEM: Rule Types, Dashboards, and Threat-Informed Strategy
PDF
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
PDF
Encapsulation_ Review paper, used for researhc scholars
PDF
Review of recent advances in non-invasive hemoglobin estimation
PDF
Empathic Computing: Creating Shared Understanding
PDF
Dropbox Q2 2025 Financial Results & Investor Presentation
PDF
Profit Center Accounting in SAP S/4HANA, S4F28 Col11
PDF
Network Security Unit 5.pdf for BCA BBA.
PPTX
Understanding_Digital_Forensics_Presentation.pptx
PPTX
MYSQL Presentation for SQL database connectivity
PPTX
Programs and apps: productivity, graphics, security and other tools
20250228 LYD VKU AI Blended-Learning.pptx
Teaching material agriculture food technology
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
Spectroscopy.pptx food analysis technology
NewMind AI Weekly Chronicles - August'25 Week I
Effective Security Operations Center (SOC) A Modern, Strategic, and Threat-In...
Approach and Philosophy of On baking technology
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
Encapsulation theory and applications.pdf
Detection-First SIEM: Rule Types, Dashboards, and Threat-Informed Strategy
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
Encapsulation_ Review paper, used for researhc scholars
Review of recent advances in non-invasive hemoglobin estimation
Empathic Computing: Creating Shared Understanding
Dropbox Q2 2025 Financial Results & Investor Presentation
Profit Center Accounting in SAP S/4HANA, S4F28 Col11
Network Security Unit 5.pdf for BCA BBA.
Understanding_Digital_Forensics_Presentation.pptx
MYSQL Presentation for SQL database connectivity
Programs and apps: productivity, graphics, security and other tools
Ad

[Laptrinh.vn] lap trinh Spring Framework 3

  • 1. Spring application Phiên bản: 0.1 2013-12-10 SPRING APPLICATION XÂY DỰNG DEMO CHO ỨNG DỤNG SPRING THUỘC TÍNH TÀI LIỆU Tiêu đề: Xây dựng demo cho ứng dụng Spring Chủ đề: Spring application Tác giả: Laptrinh.vn Từ khóa: Spring, ibatis
  • 2. Spring application Phiên bản: 0.1 2013-12-10 TABLE OF CONTENTS THUẬT NGỮ...................................................................................................................................................3 GIỚI THIỆU.....................................................................................................................................................3 XÂY DỰNG ỨNG DỤNG...............................................................................................................................3 1.1. Dynamic Web project...................................................................................................................3 1.1.1. Create java web application..........................................................................................3 1.1.2. Xây dựng controller......................................................................................................5 1.1.3. Cấu hình thư mục jsp....................................................................................................6 1.1.4. Sử dụng Sitemap...........................................................................................................6 1.2. Connect Database.........................................................................................................................9 1.2.1. Sử dụng iBatis...............................................................................................................9 1.3. Displaytag, jstl & một số thư viện khác.....................................................................................13
  • 3. Spring application Phiên bản: 0.1 2013-12-10 THUẬT NGỮ This section is intentionally left blank GIỚI THIỆU XÂY DỰNG ỨNG DỤNG 1.1. Dynamic Web project 1.1.1. Create java web application Sử dụng thư viện Spring Download: http://www.springsource.org/spring-framework Copy vào thư mục lib
  • 4. Spring application Phiên bản: 0.1 2013-12-10 Thêm 2 thư viện để ghi log log4j-1.2.17.jar commons-logging-1.1.1.jar Chỉnh sửa file WEB-INFweb.xml <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"> <display-name>Spring</display-name> <servlet> <servlet-name>dispatcher</servlet-name> <servlet- class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>dispatcher</servlet-name> <url-pattern>*.htm</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.htm</welcome-file> <welcome-file>index.jsp</welcome-file> <welcome-file>default.html</welcome-file> <welcome-file>default.htm</welcome-file> <welcome-file>default.jsp</welcome-file> </welcome-file-list>
  • 5. Spring application Phiên bản: 0.1 2013-12-10 </web-app> Thêm file WEB-INFdispatcher-servlet.xml <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd"> <context:component-scan base-package="springapp.web.controller" /> </beans> 1.1.2. Xây dựng controller Tạo package springapp.web.controller Tạo class: HelloController package springapp.web.controller; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.servlet.ModelAndView; /** * Description: Hello controller * @author DatNH * * Detail: * - @: annotation java * */ @Controller public class HelloController { /** * Nhan request /hello, xu ly thong tin * @return */ @RequestMapping("/hello") public ModelAndView hello(Model model) { // set session value model.addAttribute("name", "DatNH"); return new ModelAndView("hello.jsp"); }
  • 6. Spring application Phiên bản: 0.1 2013-12-10 @RequestMapping("/helloworld") public String helloworld(Model model) { model.addAttribute("name", "DatNH"); return "hello.jsp"; } } Tạo file WebContent/hello.jsp <html> <head> <title>Hello World</title> </head> <body> <h1>Ch ngươ trình đ cượ xây d ngự d aự trên framework MVC Sping 3</h1> <p>Xin chào: <b>${name}</b></p> </body> </html> Kết quả 1.1.3. Cấu hình thư mục jsp Thêm vào file dispatcher-servlet.xml <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver" p:prefix="/WEB-INF/jsp/" p:suffix=".jsp" /> Sửa lại file controller return new ModelAndView("hello"); Tạo thư mục WEB-INF/jsp và copy file hello.jsp vào 1.1.4. Sử dụng Sitemap Download: http://www.opensymphony.com/sitemesh Copy lib sitemesh-2.4.x.jar vào thư mục WEB-INF/lib
  • 7. Spring application Phiên bản: 0.1 2013-12-10 Thêm filter vào web.xml <!-- Sitemesh --> <filter> <filter-name>sitemesh</filter-name> <filter- class>com.opensymphony.module.sitemesh.filter.PageFilter</filter-class> </filter> <filter-mapping> <filter-name>sitemesh</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> Tạo một số thư mục trong WebContent/ • decorators : Thư mục gồm tất cả các file decorator (e.g. main.jsp, printable.jsp). • includes: Thư mục gồm tất cả các file sẽ được include tới các file khác (e.g. header.jsp, footer.jsp, copyright.jsp). • images: Thư mục bao gồm tất cả các ảnh (e.g. background.gif, logo.gif). • styles: Thư mục bao gồm tất cả CSS styles (e.g. ie4.css, ns4.css). • scripts: Thư mục bao gồm tất cả các scripts (JavaScript, VBScript files). Tạo file WEB-INF/decorators.xml <?xml version="1.0" encoding="UTF-8"?> <decorators defaultdir="/decorators"> <decorator name="main" page="main.jsp"> <pattern>/*</pattern> </decorator> </decorators> Tạo file: /includes/header.jsp <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> [HEADER] <hr/> Tạo file: /includes/footer.jsp <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <hr/> [FOOTER]
  • 8. Spring application Phiên bản: 0.1 2013-12-10 Tạo file: /includes/taglibs.jsp <%@ taglib prefix="decorator" uri="http://www.opensymphony.com/sitemesh/decorator" %> Tạo 1 file decorator : /decorators/main.jsp <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ include file="/includes/taglibs.jsp"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>[springapp] <decorator:title/> </title> </head> <body> <div id="container"> <%@ include file="/includes/header.jsp"%> <div id="content"> <decorator:body /> </div> <%@ include file="/includes/footer.jsp"%> </div> </body> </html> Kết quả Cấu trúc project
  • 9. Spring application Phiên bản: 0.1 2013-12-10 1.2. Connect Database Tải thư viện JDBC driver phù hợp, ở đây dùng MySQL Tạo file context.xml trong META-INF <?xml version="1.0" encoding="UTF-8"?> <Context> <Resource name="jdbc/SpringMySqlDS" auth="Container" type="javax.sql.DataSource" driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/spring" removeAbandoned="true" maxActive="75" maxIdle="30" maxWait="-1" username="root" password="nguyendat" validationQuery="select 1 from dual" /> </Context> 1.2.1. Sử dụng iBatis Download: http://code.google.com/p/mybatis/
  • 10. Spring application Phiên bản: 0.1 2013-12-10 Project Description Links MyBatis 3 SQL Mapping Framework for Java download | docs Generator Code generator for MyBatis and iBATIS download | docs Trong web.xml, tạo một reference tới resource SpringMySqlDS <resource-ref> <description>Chat Datasource</description> <res-ref-name>jdbc/SpringMySqlDS</res-ref-name> <res-type>javax.sql.DataSource</res-type> <res-auth>Container</res-auth> </resource-ref> Tạo các package • springapp.core.dao • springapp.core.dao.xml • springapp.core.model • springapp.core.service Copy mybatis-3.2.0-SNAPSHOT.jar vào WEB-INF/lib Tạo file mybatisConfig.xml trong springapp.core.dao.xml Cấu hình environments: <configuration> <environments default="development"> <environment id="development"> <transactionManager type="MANAGED"> <property name="closeConnection" value="true" /> </transactionManager> <dataSource type="JNDI"> <property name="data_source" value="java:comp/env/jdbc/SpringMySqlDS" /> </dataSource> </environment> </environments> </configuration> Tạo file mapping database table và java class • Khai báo và mapping column table với thuộc tính trong java • Thực hiện câu lệnh generator
  • 11. Spring application Phiên bản: 0.1 2013-12-10 cd /d C:UsersPhoenixworkspacejunoSpringgenerator (tùy thư mục nhé) java -jar mybatis-generator-core-1.3.1.jar -configfile generatorConfig.xml -overwrite -tables user Các class đã được generator UserMapper.java UserMapper.xml User.java Xử lý dữ liệu • Tạo service class o Interface: UserServiceLocal.java o Class: UserService • Tạo bean cho UserService o File web.xml Thêm cấu hình applicationContext.xml <context-param> <param-name>contextConfigLocation</param-name> <param-value> /WEB-INF/applicationContext.xml </param-value> </context-param> <listener> <listener- class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> o File applicationContext.xml Application context: Khai báo các bean session sử dụng trong chương trình. <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jee="http://www.springframework.org/schema/jee" xmlns:p="http://www.springframework.org/schema/p" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-2.5.xsd"> <bean id="userService" class="springapp.core.service.UserService" /> </beans>
  • 12. Spring application Phiên bản: 0.1 2013-12-10 o File myBatisConfig.xml <mapper resource="springapp/core/dao/xml/UserMapper.xml" /> • Xử lý Controller o File UserController.java package springapp.web.controller; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; import springapp.core.model.User; import springapp.core.service.UserServiceLocal; /** * User controller * @author DatNh * */ @Controller public class UserController { @Autowired private UserServiceLocal userService; @RequestMapping("/user") public String helloworld(Model model) { User user = userService.selectByPrimaryKey(1); model.addAttribute("user", user); return "user"; } } o File user.jsp <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <html> <head> <title>Hello World</title> </head> <body> <h1>User demo</h1> <p>Xin chào: <b>${user.username}</b></p> </body> </html>
  • 13. Spring application Phiên bản: 0.1 2013-12-10 o File UserServiceLocal.java package springapp.core.service; import springapp.core.model.User; /** * * @author DatNH * */ public interface UserServiceLocal { User selectByPrimaryKey(int id); } o File UserService.java package springapp.core.service; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import springapp.core.dao.UserMapper; import springapp.core.model.User; /** * User service * @author DatNH * */ public class UserService implements UserServiceLocal { @Override public User selectByPrimaryKey(int id) { SqlSessionFactory sqlMapper = MyBatisService.getSessionFactory(); SqlSession sqlSession = sqlMapper.openSession(true); UserMapper mapper = sqlSession.getMapper(UserMapper.class); User user = mapper.selectByPrimaryKey(id); sqlSession.close(); return user; } } 1.3. Displaytag, jstl & một số thư viện khác Copy thư viện
  • 14. Spring application Phiên bản: 0.1 2013-12-10 displaytag-1.2.jar jstl.jar javax.servlet.jsp.jstl-1.2.1.jar javax.servlet.jsp.jstl-api-1.2.1.jar aopalliance-1.0.jar commons-lang-2.6.jar commons-beanutils-1.8.3.jar File taglibs.jsp @RequestMapping("/user/list") public String list(Model model) { List<User> userList = userService.getAll(); model.addAttribute("userList", userList); return "userList"; } File UserServiceLocal.java List<User> getAll(); File UserService.java @Override public List<User> getAll() { SqlSessionFactory sqlMapper = MyBatisService.getSessionFactory(); SqlSession sqlSession = sqlMapper.openSession(true); UserMapper mapper = sqlSession.getMapper(UserMapper.class); List<User> userList = mapper.getAll(); sqlSession.close(); return userList; } File UserMapper.java List<User> getAll(); File UserMapper.xml
  • 15. Spring application Phiên bản: 0.1 2013-12-10 <select id="getAll" resultMap="BaseResultMap"> select <include refid="Base_Column_List" /> from user </select> File userList.jsp <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ include file="/includes/taglibs.jsp"%> <html> <head> <title>Hello World</title> </head> <body> <h1>User List</h1> <div> <display:table name="${userList}" class="simple wid100" id="user" requestURI="" pagesize="15"> <display:column title="STT" class="stt" > <c:out value="$ {user_rowNum}"/> </display:column> <display:column title="Username" property="username" /> <display:column title="Password" property="password"/> <display:column title="Timestamp" property="timestamp"/> <display:column title="Create Date" property="createDate" format="{0,date,dd/MM/yyyy HH:mm:ss}" /> </display:table> </div> </body> </html> Kết quả