SlideShare a Scribd company logo
1 of 15
Download to read offline
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

What's hot

JSF basics
JSF basicsJSF basics
JSF basicsairbo
 
A Complete Tour of JSF 2
A Complete Tour of JSF 2A Complete Tour of JSF 2
A Complete Tour of JSF 2Jim Driscoll
 
Sprint Portlet MVC Seminar
Sprint Portlet MVC SeminarSprint Portlet MVC Seminar
Sprint Portlet MVC SeminarJohn Lewis
 
Jsp and Servlets
Jsp and ServletsJsp and Servlets
Jsp and ServletsRaghu nath
 
JSF Component Behaviors
JSF Component BehaviorsJSF Component Behaviors
JSF Component BehaviorsAndy Schwartz
 
JSF 2 and beyond: Keeping progress coming
JSF 2 and beyond: Keeping progress comingJSF 2 and beyond: Keeping progress coming
JSF 2 and beyond: Keeping progress comingAndy Schwartz
 
J2EE - JSP-Servlet- Container - Components
J2EE - JSP-Servlet- Container - ComponentsJ2EE - JSP-Servlet- Container - Components
J2EE - JSP-Servlet- Container - ComponentsKaml Sah
 
Component Framework Primer for JSF Users
Component Framework Primer for JSF UsersComponent Framework Primer for JSF Users
Component Framework Primer for JSF UsersAndy Schwartz
 
Lecture 10 - Java Server Faces (JSF)
Lecture 10 - Java Server Faces (JSF)Lecture 10 - Java Server Faces (JSF)
Lecture 10 - Java Server Faces (JSF)Fahad Golra
 
1 java servlets and jsp
1   java servlets and jsp1   java servlets and jsp
1 java servlets and jspAnkit Minocha
 
Ch 04 asp.net application
Ch 04 asp.net application Ch 04 asp.net application
Ch 04 asp.net application Madhuri Kavade
 

What's hot (20)

JEE Programming - 05 JSP
JEE Programming - 05 JSPJEE Programming - 05 JSP
JEE Programming - 05 JSP
 
JSF basics
JSF basicsJSF basics
JSF basics
 
Servlets lecture1
Servlets lecture1Servlets lecture1
Servlets lecture1
 
A Complete Tour of JSF 2
A Complete Tour of JSF 2A Complete Tour of JSF 2
A Complete Tour of JSF 2
 
JEE Programming - 04 Java Servlets
JEE Programming - 04 Java ServletsJEE Programming - 04 Java Servlets
JEE Programming - 04 Java Servlets
 
Sprint Portlet MVC Seminar
Sprint Portlet MVC SeminarSprint Portlet MVC Seminar
Sprint Portlet MVC Seminar
 
Jsp and Servlets
Jsp and ServletsJsp and Servlets
Jsp and Servlets
 
SpringMVC
SpringMVCSpringMVC
SpringMVC
 
JSF Component Behaviors
JSF Component BehaviorsJSF Component Behaviors
JSF Component Behaviors
 
JSF 2 and beyond: Keeping progress coming
JSF 2 and beyond: Keeping progress comingJSF 2 and beyond: Keeping progress coming
JSF 2 and beyond: Keeping progress coming
 
J2EE - JSP-Servlet- Container - Components
J2EE - JSP-Servlet- Container - ComponentsJ2EE - JSP-Servlet- Container - Components
J2EE - JSP-Servlet- Container - Components
 
Component Framework Primer for JSF Users
Component Framework Primer for JSF UsersComponent Framework Primer for JSF Users
Component Framework Primer for JSF Users
 
JavaEE6 my way
JavaEE6 my wayJavaEE6 my way
JavaEE6 my way
 
Lecture 10 - Java Server Faces (JSF)
Lecture 10 - Java Server Faces (JSF)Lecture 10 - Java Server Faces (JSF)
Lecture 10 - Java Server Faces (JSF)
 
Java Server Pages
Java Server PagesJava Server Pages
Java Server Pages
 
Jsp servlets
Jsp servletsJsp servlets
Jsp servlets
 
1 java servlets and jsp
1   java servlets and jsp1   java servlets and jsp
1 java servlets and jsp
 
Jsp ppt
Jsp pptJsp ppt
Jsp ppt
 
Struts,Jsp,Servlet
Struts,Jsp,ServletStruts,Jsp,Servlet
Struts,Jsp,Servlet
 
Ch 04 asp.net application
Ch 04 asp.net application Ch 04 asp.net application
Ch 04 asp.net application
 

Similar to Spring MVC application with iBatis database integration

Oracle Endeca Developer's Guide
Oracle Endeca Developer's GuideOracle Endeca Developer's Guide
Oracle Endeca Developer's GuideKeyur Shah
 
JavaDo#09 Spring boot入門ハンズオン
JavaDo#09 Spring boot入門ハンズオンJavaDo#09 Spring boot入門ハンズオン
JavaDo#09 Spring boot入門ハンズオンharuki ueno
 
Toms introtospring mvc
Toms introtospring mvcToms introtospring mvc
Toms introtospring mvcGuo Albert
 
Building high performance web apps.
Building high performance web apps.Building high performance web apps.
Building high performance web apps.Arshak Movsisyan
 
Getting started with hot towel spa
Getting started with hot towel spaGetting started with hot towel spa
Getting started with hot towel spaparth17290
 
Meteor + Ionic Introduction
Meteor + Ionic IntroductionMeteor + Ionic Introduction
Meteor + Ionic IntroductionLearningTech
 
Django 1.10.3 Getting started
Django 1.10.3 Getting startedDjango 1.10.3 Getting started
Django 1.10.3 Getting startedMoniaJ
 
Trustparency web doc spring 2.5 & hibernate
Trustparency web doc   spring 2.5 & hibernateTrustparency web doc   spring 2.5 & hibernate
Trustparency web doc spring 2.5 & hibernatetrustparency
 
Adding a view
Adding a viewAdding a view
Adding a viewNhan Do
 
TurboGears2 Pluggable Applications
TurboGears2 Pluggable ApplicationsTurboGears2 Pluggable Applications
TurboGears2 Pluggable ApplicationsAlessandro Molina
 
CodeIgniter PHP MVC Framework
CodeIgniter PHP MVC FrameworkCodeIgniter PHP MVC Framework
CodeIgniter PHP MVC FrameworkBo-Yi Wu
 

Similar to Spring MVC application with iBatis database integration (20)

Oracle Endeca Developer's Guide
Oracle Endeca Developer's GuideOracle Endeca Developer's Guide
Oracle Endeca Developer's Guide
 
JavaServer Pages
JavaServer PagesJavaServer Pages
JavaServer Pages
 
JavaDo#09 Spring boot入門ハンズオン
JavaDo#09 Spring boot入門ハンズオンJavaDo#09 Spring boot入門ハンズオン
JavaDo#09 Spring boot入門ハンズオン
 
Toms introtospring mvc
Toms introtospring mvcToms introtospring mvc
Toms introtospring mvc
 
Spring MVC 3.0 Framework (sesson_2)
Spring MVC 3.0 Framework (sesson_2)Spring MVC 3.0 Framework (sesson_2)
Spring MVC 3.0 Framework (sesson_2)
 
Building high performance web apps.
Building high performance web apps.Building high performance web apps.
Building high performance web apps.
 
Rest hello world_tutorial
Rest hello world_tutorialRest hello world_tutorial
Rest hello world_tutorial
 
Servlets
ServletsServlets
Servlets
 
Tomcat + other things
Tomcat + other thingsTomcat + other things
Tomcat + other things
 
Spring MVC 5 & Hibernate 5 Integration
Spring MVC 5 & Hibernate 5 IntegrationSpring MVC 5 & Hibernate 5 Integration
Spring MVC 5 & Hibernate 5 Integration
 
Getting started with hot towel spa
Getting started with hot towel spaGetting started with hot towel spa
Getting started with hot towel spa
 
Meteor + Ionic Introduction
Meteor + Ionic IntroductionMeteor + Ionic Introduction
Meteor + Ionic Introduction
 
Django 1.10.3 Getting started
Django 1.10.3 Getting startedDjango 1.10.3 Getting started
Django 1.10.3 Getting started
 
Trustparency web doc spring 2.5 & hibernate
Trustparency web doc   spring 2.5 & hibernateTrustparency web doc   spring 2.5 & hibernate
Trustparency web doc spring 2.5 & hibernate
 
Nuxtjs cheat-sheet
Nuxtjs cheat-sheetNuxtjs cheat-sheet
Nuxtjs cheat-sheet
 
Adding a view
Adding a viewAdding a view
Adding a view
 
TurboGears2 Pluggable Applications
TurboGears2 Pluggable ApplicationsTurboGears2 Pluggable Applications
TurboGears2 Pluggable Applications
 
Web technologies part-2
Web technologies part-2Web technologies part-2
Web technologies part-2
 
CodeIgniter PHP MVC Framework
CodeIgniter PHP MVC FrameworkCodeIgniter PHP MVC Framework
CodeIgniter PHP MVC Framework
 
code-camp-meteor
code-camp-meteorcode-camp-meteor
code-camp-meteor
 

Recently uploaded

Azure Monitor & Application Insight to monitor Infrastructure & Application
Azure Monitor & Application Insight to monitor Infrastructure & ApplicationAzure Monitor & Application Insight to monitor Infrastructure & Application
Azure Monitor & Application Insight to monitor Infrastructure & ApplicationAndikSusilo4
 
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | DelhiFULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhisoniya singh
 
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersEnhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersThousandEyes
 
SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge GraphSIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge GraphNeo4j
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationSafe Software
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking MenDelhi Call girls
 
How to Remove Document Management Hurdles with X-Docs?
How to Remove Document Management Hurdles with X-Docs?How to Remove Document Management Hurdles with X-Docs?
How to Remove Document Management Hurdles with X-Docs?XfilesPro
 
Maximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxMaximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxOnBoard
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationRidwan Fadjar
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdfhans926745
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024Rafal Los
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreternaman860154
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationRadu Cotescu
 
SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024Scott Keck-Warren
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesSinan KOZAK
 
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...HostedbyConfluent
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking MenDelhi Call girls
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsMark Billinghurst
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxKatpro Technologies
 

Recently uploaded (20)

Azure Monitor & Application Insight to monitor Infrastructure & Application
Azure Monitor & Application Insight to monitor Infrastructure & ApplicationAzure Monitor & Application Insight to monitor Infrastructure & Application
Azure Monitor & Application Insight to monitor Infrastructure & Application
 
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | DelhiFULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
 
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersEnhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
 
SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge GraphSIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 
How to Remove Document Management Hurdles with X-Docs?
How to Remove Document Management Hurdles with X-Docs?How to Remove Document Management Hurdles with X-Docs?
How to Remove Document Management Hurdles with X-Docs?
 
Maximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxMaximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptx
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 Presentation
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen Frames
 
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
Transforming Data Streams with Kafka Connect: An Introduction to Single Messa...
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR Systems
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
 

Spring MVC application with iBatis database integration

  • 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ả