基于Spring+JDBC的用户管理系统

 
2基于Spring+JDBC用户管理系统
前面章节中为读者讲述了Spring的相关知识点,本章主要为读者讲解如何基于Spring进行Web应用程序开发。通过本章的学习,读者可以掌握DisplayTag、Sitemesh、Log4j、PostgreSQL、ehcache和国际化等的使用。
本章知识点
1.      SiteMesh的使用
2.      DisplayTag
3.      支持多种数据库
4.      国际化的试用
5.      Log4j的使用
6.      集成Spring
7.      JDBC的应用
2.1. Spring框架的特点
Spring Web MVC 框架提供了大量独特的功能,包括 :
l         清晰的角色划分:控制器( controller )、验证器( validator )、命令对象( command object )、表单对象( form object )、模型对象( model object )、 Servlet 分发器( DispatcherServlet )、处理器映射( handler mapping )、视图解析器( view resolver )等等。 每一个角色都由一个专门的对象来完成。
l         强大而简单的配置:将框架类和应用类都作为 JavaBean 配置,支持在一个 context 中引用其他 context 的中 JavaBean ,例如,在 web 控制器中对业务对象和验证器( validator )的引用。
l         可适配、非侵入的 controller :你可以根据不同的情况,选择合适的控制器子类( simple 型、 command 型、 form 型、 wizard 型、 multi-action 型或者自定义),而不是从单一控制器(比如 Action/ActionForm )继承。
l         可重用的业务代码:你可以使用现有的业务对象作为命令或表单对象,而不需要在类似 ActionForm 的子类中重复它们的定义。
l         可定制的 binding validation :比如将类型不匹配作为应用级的验证错误,这可以保存错误的值。再比如本地化的日期和数字绑定等等。在其他某些框架中,你只能使用字符串表单对象,需要手动解析它并转换到业务对象。
l         可定制的 handler mapping view resolver Spring 提供从最简单的的 URL 映射,到复杂的、专用的定制策略。某些 MVC 框架强制开发人员使用某一种方法,与之相比, Spring 更加灵活。
l         可定制的本地化和主题( theme )解析:支持在 JSP 中可选择使用 Spring 标签库、支持 JSTL 、支持 Velocity (不需要额外的中间层)等等。
l         简单而强大的标签库(Spring Tag Library):这个库支持诸如数据绑定和主题之类的功能。它提供在标记方面的最大灵活性。
l         新增加的表单标签库:在Spring2.0中刚刚引入的表单标签库,使得在JSP中编写表单更加容易。
l         Spring Bean的生命周期可以被限制在当前的HTTP Request或者HTTP Session。准确的说,这个功能属于Sping MVC用到的 WebApplicationContext 容器,而不属于Spring MVC框架本身。
 
本系统以 Spring+JDBC 来实现 用户管理系统 ,采用模块化设计,包含功能:
2.1.1.1 用户管理
用户管理 功能实现了管理 用户管理系统 用户 功能,如 用户 的增加、修改、删除、按各种方式提供的查询。
2.2 系统界面预览
通过对系统架构和功能的理解,下面为读者提供本系统的相关界面:
2.2.1首页
用户管理的首页,如图 2-2 所示:
 
2-2 用户管理系统 首页
2.2.2用户管理菜单导航栏
单击上图中的用户管理菜单,如图 2-3 所示的界面:
 
2-3 用户管理菜单导航栏
2.2.3按用户编码查询用户
单击上图中的按用户编码查询用户链接,如图 2-4 所示的界面:
 
2-4 用户编码 查询用户界面
2.2.4增加用户
单击增加用户按钮,如图 2-5 所示的界面:
 
2-5 增加用户界面
2.2.5编辑用户
选中列表中的用户,如图 2-6 所示的界面:
 
2-6 编辑用户界面
2.2.6删除用户
选中列表中的用户,单击删除按钮,如图 2-7 所示的界面:
 
2-7 删除用户界面
2.2.7排序
单击列表中的任何列进行用户数据排序,如图 2-7 所示的界面:
 
2-7 排序
2.2.7分页
单击列表中的任何列进行用户数据排序,如图 2-7 所示的界面:
 
2-7 分页
2.2.7数据导出
单击列表中的任何列进行用户数据排序,如图 2-7 所示的界面:
 
2-7 数据导出
  
 
2.3数据库逻辑结构设计
下面为大家分析数据库逻辑结构设计。
2.3.1用户(app_user)
表2-1所示为用户表,主要存储用户信息
字段
类型名称
是否为空
默认值
描述
Id     
Bigint
 
序号
First_name
Varchar(50)
 
Last_name
Varchar(50)
 
Birthday
timestamp
 
 
出生日期
创建app_user 表的SQL 如下:
create table app_user (id bigint not null primary key, first_name varchar(50), last_name varchar(50), birthday timestamp);
2.3.2基于PostGreSQL创建用户表
 
2.4工程目录
上面为读者讲述了如果完整开发一个模块的功能,关于本实例的其他功能和实现,读者参考上面部分,自行光盘中所附代码,下面为大家讲述本实例的目录结构,如图 2-8 所示:
 
2-8 本实例工程目录
其中,
1 .settings 为工程的默认目录,保存工程中的一些设置信息;
2 src 为工程的源代码文件目录,其中
a.           com.my37signals 为本实例的主要包名;
b.           com.my37signals.dao 包中存放所有接口类文件;
c.            com.my37signals.dao.jdbc 包中存放所有 Spring 实现类文件;
d.           com.my37signals.model 包中存放模型类文件;
e.           com.my37signals.service 包中存放服务类文件;
f.             com.my37signals.service.impl 包中存放服务实现类文件;
g.           com.my37signals.web 包中存放 Spring 的控制器类文件;
3 WebContent 为工程的 web 内容目录,主要存放 JSP Lib 和相关配置文件,相关文件如下:
a)      404.jsp 404 错误显示网页;   
b)      dataAccessFailure.jsp  ,数据访问失败网页;
c)       error.jsp ,错误信息网页;
d)      index.jsp ,首页;               
e)      messages.jsp ,信息显示网页;            
f)        taglibs.jsp ,类库引入文件;             
g)      userForm.jsp ,用户表单网页;            
h)      userList.jsp ,用户列表网页;
i)        decorators/default.jsp ,系统布局控制网页;
j)        scripts 下存放系统所需 js 文件;
k)      images 下存放系统所需图片文件;
l)        styles 下存放样式表文件;
m)   WEB-INF/web.xml Web 程序描述符文件;
n)      WEB-INF/action-servlet.xml Spring 的控制配置文件;
o)      WEB-INF/applicationContext-jdbc.xml Spring JDBC 配置文件;
p)      WEB-INF/applicationContext-validation.xml Spring 的客户端检测文件;
q)      WEB-INF/applicationContext.xml Spring 配置文件;
r)        WEB-INF/decorators.xml ,程序布局配置文件;
s)      WEB-INF/sitemesh.xml Sitemesh 配置文件;
t)       WEB-INF/validation.xml ,客户端检测文件;
u)      WEB-INF/validator-rules.xml ,客户端检测规则文件。
v)      WEB-INF/Classes 下存放程序编译后的类文件;
w)    WEB-INF/lib 下存放程序所需类库,如下:
                                     i.              antlr-2.7.6rc1.jar
                                  ii.              asm-1.5.3.jar
                                iii.              cglib-2.1_3.jar
                                iv.              commons-beanutils-1.7.0.jar
                                   v.              commons-collections-3.1.jar
                                vi.              commons-digester-1.5.jar
                              vii.              commons-lang-2.1.jar
                           viii.              commons-logging-1.0.4.jar
                                ix.              commons-validator-1.1.3.jar
                                   x.              displaytag-1.1.jar
                                xi.              dom4j-1.6.1.jar
                              xii.              dwr-1.0.jar
                           xiii.              ehcache-1.1.jar
                            xiv.              geronimo-spec-jta-1.0.1B-rc4.jar
                              xv.              hibernate-3.1.2.jar
                            xvi.              itext-1.3.jar
                         xvii.              jstl-1.1.2.jar
                       xviii.              log4j-1.2.11.jar
                            xix.              postgresql-8.1-404.jdbc3.jar
                              xx.              sitemesh-2.2.1.jar
                            xxi.              spring-1.2.6.jar
                         xxii.              springmodules-validator-0.1.jar
                       xxiii.              standard-1.1.2.jar           
2.5.1使用sitemesh建立复合视图
sitemesh 应用 Decorator 模式,用 filter 截取 request response, 把页面组件 head,content,banner 结合为一个完整的视图。大多数时候,开发人员都是采用 JSP 提供的 include 标签在每个 jsp 页面包含各种 header, stylesheet, scripts and footer ,繁琐而不容易维护。 sitemesh 的出现,让开发人员更方便、更快捷建立系统的复合视图。 [J1] 
2.5.1.1 Sitemesh简介
     Sitemesh 是由一个基于 Web 页面布局、装饰以及与现存 Web 应用整合的框架。它能帮助我们在由大量页面构成的项目中创建一致的页面布局和外观,如一致的导航条,一致的 banner ,一致的版权,等等。它不仅仅能处理动态的 内容 ,如 jsp php asp 等产生的 内容 ,它也能处理静态的 内容 ,如 htm 内容 ,使得它的 内容 也符合你的页面结构的要求。甚至于它能将 HTML 文件象 include 那样将该文件作为一个面板的形式嵌入到别的文件中去。所有的这些,都是 GOF Decorator 模式的最生动的实现。尽管它是由 java 语言来实现的,但它能与其他 Web 应用很好地集成。
2.5.1.2与Strust Tiles比较
   从使用角度来看, Tiles 似乎是 Sitemesh 标签 的一个翻版。其实 sitemesh 最强的一个特性是 sitemesh decorator 模式用在过滤器上。任何需要被装饰的页面都不知道它要被谁装饰,所以它就可以用来装璜来自 php asp CGI 等产生的页面了。你可以定义若干个装饰器,根据参数动态地选择装饰器,产生动态的外观以满足你的需求。它也有一套功能强大的属性体系,它能帮助你构建功能强大而灵活的装饰器。相比较而言,在这方面 Tiles 就逊色许多。
2.5.1.3基本原理
    一个请求到服务器后,如果该请求需要 sitemesh 装饰,服务器先解释被请求的资源,然后根据配置文件获得用于该请求的装饰器,最后用装饰器装饰被请求资源,将结果一同返回给客户端浏览器。
2.5.1.4 sitemesh的filter配置
为读者简单介绍了 sitemesh 的相关内容,下面进行相关配置的讲解。
首先,在 WEB-INF/web.xml 中加入以下 filter 的定义,代码例如清单 2-1 所示:
清单 2-1 web.xml sitemesh filter 配置
< 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 >
       < dispatcher > REQUEST dispatcher >
       < dispatcher > FORWARD dispatcher >
    filter-mapping >
上述代码配置了 sitemesh 的过滤类 com.opensymphony.module.sitemesh.filter.PageFilter ,同时定义了 REQUEST FORWARD 的分发。
2.5.1.5 支持sitemesh运行所需文件
读者访问 http://www.opensymphony.com/sitemesh/download.action ,下载 sitemesh 的最新版本 2.2.1 ,将 sitemesh-2.2.1.jar 复制到 jdbc/WebContent/WEB-INF/lib 即可。
注意:读者只需下载 sitemesh sitemesh-2.2.1.jar 即可。
2.5.1.6 装饰器配置decorators.xml
建立 WEB-INF/decorators.xml 描述各装饰器页面,代码例如 2-2 清单
清单 2-2 HibernateUtil.java
< decorators defaultdir = "/decorators" >
    < decorator name = "default" page = "default.jsp" >
        < pattern > /* pattern >
    decorator >
decorators >
这里定义了缺省的目录装饰器页面目录 decorators ,定义了装饰器网页 default.jsp
2.5.1.7 sitemesh.xml配置文件的实现
sitemesh.xml为sitemesh的核心配置文件,代码例如清单2-3所示
清单 2-3 sitemesh.xml
< sitemesh >
    < property name = "decorators-file" value = "/WEB-INF/decorators.xml" />
    < excludes file = "${decorators-file}" />
    < page-parsers >
        < parser default = "true"
            class = "com.opensymphony.module.sitemesh.parser.HTMLPageParser" />
        < parser content-type = "text/html"
            class = "com.opensymphony.module.sitemesh.parser.HTMLPageParser" />
        < parser content-type = "text/html;charset=ISO-8859-1"
            class = "com.opensymphony.module.sitemesh.parser.HTMLPageParser" />
    page-parsers >
 
    < decorator-mappers >
        < mapper class = "com.opensymphony.module.sitemesh.mapper.ConfigDecoratorMapper" >
            < param name = "config" value = "${decorators-file}" />
        mapper >
    decorator-mappers >
sitemesh >
sitemesh.xml定义了以下内容
1.      装饰器文件,如: decorators-file ,值为 /WEB-INF/decorators.xml
2.      页面解析,如: page-parsers ,包括:
a)      default = "true" ,缺省为 true ,表示所有页面都解析,指向的类为 com.opensymphony.module.sitemesh.parser.HTMLPageParser
b)      content-type = "text/html" ,表示 content-type text/html ,指向的类为 com.opensymphony.module.sitemesh.parser.HTMLPageParser
c)       content-type = "text/html;charset=ISO-8859-1" ,表示 content-type text/html ,同时指定 charset ISO-8859-1 ,指向的类为 com.opensymphony.module.sitemesh.parser.HTMLPageParser
3.      缺省装饰器映射,如: decorator-mappers ,映射类为 com.opensymphony.module.sitemesh.mapper.ConfigDecoratorMapper ,参数为 ${decorators-file} ,也就是 /WEB-INF/decorators.xml
注意:关于 sitemesh 的配置,上面内容读者完全可以照做,根据实际需要,修改 default.jsp 的布局即可。

 [J1]这张图需要替换,其中servlet-api.jar不需要

你可能感兴趣的:(基于Spring+JDBC的用户管理系统)