编辑推荐
适读人群:Java程序开发者,计算机及相关专业本科高年级及研究生在校生
1.软件版本新!计算机图书所涉及软件版本的重要性不言而喻
《轻量级Java EE企业应用实战(第5版)――Struts 2+Spring 5+Hiberna》基于Spring5,Struts2.5.14,Hibernate5.2.12,新增JPA的内容,还介绍了Servlet3.X的新特性以及Tomcat8.5。
增加介绍当前企业开发潮流的配置管理工具:Git。无Git,不企业。
2.名师名家作品
李刚老师一向是品质的保证,所创作的专业著作影响了海峡两岸愈50万读者,所培训的学生有不少入职腾讯、阿里、唯品会等IT名企。
3.图书的附加值超燃
DVD光盘中包含1000分钟超长视频、丰富代码等内容。
为读者提供用于学习交流的配套网站、微信群、QQ群。
附赠107道各大企业JavaEE面试题,覆盖JavaWeb、Struts2、Hibernate、Spring、SpringMVC,助力叩开名企Java开发大门。
4.屡获殊荣
《轻量级Java EE企业应用实战(第5版)――Struts 2+Spring 5+Hiberna》曾荣获中国书刊发行业协会授予的“年度全行业YouXiu畅销品种”奖项,并多次荣获电子工业出版社授予的畅销书奖项,累计印刷40+次。
5.经验丰富,针对性强
作者既担任过软件开发的技术经理,也担任过软件公司的培训导师,还从事过职业培训的专职讲师。这些经验影响了作者写书的目的,这不是一本学院派的理论读物,而是一本实际的开发指南。
6.内容实际,实用性强
《轻量级JavaEE企业应用实战》所介绍的JavaEE应用范例,采用了目前企业流行的开发架构,严格遵守JavaEE开发规范,而不是将各种技术杂乱地糅合在一起。
7.高屋建瓴,启发性强
《轻量级JavaEE企业应用实战》介绍的几种架构模式,几乎是时下常见的多种JavaEE架构模式,有助于提升读者对系统架构设计的把握。
内容简介
《轻量级Java EE企业应用实战(第5版)――Struts 2+Spring 5+Hiberna》是《轻量级JavaEE企业应用实战》的第5版,主要介绍了JavaEE领域的四个开源框架和技术:Struts2、Spring5、Hibernate5和JPA2。
第5版新增介绍了JPA的内容,包括其API的基本用法、JPA查询、JPA动态条件查询等。《轻量级Java EE企业应用实战(第5版)――Struts 2+Spring 5+Hiberna》还全面介绍了Servlet3.1的新特性,以及Tomcat8.5的配置和用法。《轻量级Java EE企业应用实战(第5版)――Struts 2+Spring 5+Hiberna》重点介绍了如何整合Struts2.5+Spring5.0+Hibernate5.2进行JavaEE开发,主要包括三部分。
第一部介绍了JavaEE开发的基础知识,以及如何搭建开发环境。
第二部分详细讲解了Struts2.5、Spring5.0、Hibernate5.2、JPA的用法,在介绍三个框架时,以EclipseIDE的使用来上手,一步步带领读者深入这些技术的核心。这部分内容既包含了笔者多年开发经历的领悟,也融入了丰富的授课经验。
第三部分示范开发了一个包含7个表,表之间具有复杂的关联映射、继承映射等关系,且业务也相对复杂的工作流案例,希望让读者理论联系实际,将三个框架真正运用到实际开发中。该案例采用目前非常流行、规范的JavaEE架构,整个应用分为领域对象层、DAO层、业务逻辑层、MVC层和视图层,各层之间分层清晰,层与层之间以松耦合的方式组织在一起。该案例既提供了与IDE无关的、基于Ant管理的项目源码,也提供了基于EclipseIDE的项目源码,以最大限度地满足读者的需求。
当读者阅读此书遇到技术难题时,也可登录http://www.crazyit.org发帖,笔者将会及时予以解答。
作者简介
李刚,十余年软件开发从业经验,疯狂软件教育中心教学总监。疯狂Java实训营创始人,疯狂Java体系原创图书作者,CSDN特邀讲师。
培训的学生已在腾讯、阿里、华为、IBM、网易、唯品会、电信盈科等名企就职。
国内知名高端IT技术图书作家,已出版《疯狂Java讲义》《疯狂Android讲义》《轻量级JavaEE企业应用实战》《疯狂前端开发讲义》《疯狂HTML5/CSS3/JavaScript讲义》《疯狂iOS讲义(基础篇)(提高篇)》《疯狂XML讲义》《经典JavaEE企业应用实战》《Struts2.xquanwei指南》等著作。
其中疯狂Java体系图书均已沉淀多年,赢得极高的市场认同,多次重印,多部著作印刷数量超过10万册,并被多所“985”“211”院校选作教材,部分图书已被翻译成繁体中文版,授权到中国台湾地区。
目录
第1章 JavaEE应用和开发环境1
1.1 JavaEE应用概述2
1.1.1 JavaEE应用的分层模型2
1.1.2 JavaEE应用的组件3
1.1.3 JavaEE应用的结构和优势4
1.1.4 常用的JavaEE服务器4
1.2 轻量级JavaEE应用相关技术5
1.2.1 JSP、Servlet3.x和JavaBean及替代技术5
1.2.2 Struts2.5及替代技术5
1.2.3 Hibernate5.2及替代技术6
1.2.4 Spring5.0及替代技术6
1.3 Tomcat的下载和安装7
1.3.1 安装Tomcat服务器8
1.3.2 配置Tomcat的服务端口9
1.3.3 进入控制台9
1.3.4 部署Web应用12
1.3.5 配置Tomcat的数据源12
1.4 Eclipse的安装和使用14
1.4.1 Eclipse的下载和安装14
1.4.2 在线安装Eclipse插件15
1.4.3 从本地压缩包安装插件17
1.4.4 手动安装Eclipse插件17
1.4.5 使用Eclipse开发JavaEE应用17
1.4.6 导入Eclipse项目20
1.4.7 导入非Eclipse项目21
1.5 Ant的安装和使用22
1.5.1 Ant的下载和安装23
1.5.2 使用Ant工具23
1.5.3 定义生成文件25
1.5.4 Ant的任务(task)29
1.6 Maven的安装和使用31
1.6.1 下载和安装Maven31
1.6.2 设置Maven32
1.6.3 创建、构建简单的项目33
1.6.4 Maven的核心概念36
1.6.5 依赖管理41
1.6.6 POM文件的元素43
1.7 使用SVN进行协作开发44
1.7.1 下载和安装SVN服务器45
1.7.2 配置SVN资源库45
1.7.3 下载和安装SVN客户端47
1.7.4 将项目发布到服务器47
1.7.5 从服务器下载项目48
1.7.6 提交(Commit)修改48
1.7.7 同步(Update)本地文件48
1.7.8 添加文件和49
1.7.9 删除文件和50
1.7.10 查看文件或的版本变革50
1.7.11 从以前版本重新开始50
1.7.12 创建分支51
1.7.13 沿着分支开发51
1.7.14 合并分支52
1.7.15 使用Eclipse作为SVN客户端52
1.8 使用Git进行软件配置管理(SCM)55
1.8.1 下载和安装Git、TortoiseGit56
1.8.2 创建本地资源库58
1.8.3 添加(Add)文件和59
1.8.4 提交(Commit)修改60
1.8.5 查看文件或的版本变更61
1.8.6 删除文件和62
1.8.7 从以前版本重新开始62
1.8.8 克隆(Clone)项目63
1.8.9 创建分支64
1.8.10 沿着分支开发64
1.8.11 合并分支65
1.8.12 使用Eclipse作为Git客户端65
1.8.13 配置远程中央资源库67
1.8.14 推送(Push)项目69
1.8.15 获取(Fetch)项目和拉取(Pull)项目70
1.9 本章小结72
第2章 JSP/Servlet及相关技术详解73
2.1Web应用和web.xml文件74
2.1.1构建Web应用74
2.1.2配置描述符web.xml75
2.2JSP的基本原理76
2.3JSP的4种基本语法80
2.3.1JSP注释80
2.3.2JSP声明81
2.3.3JSP输出表达式82
2.3.4JSP小脚本83
2.4JSP的3个编译指令85
2.4.1page指令85
2.4.2include指令89
2.5JSP的7个动作指令90
2.5.1forward指令90
2.5.2include指令92
2.5.3useBean、setProperty、getProperty指令93
2.5.4plugin指令96
2.5.5param指令96
2.6JSP脚本中的9个内置对象96
2.6.1application对象98
2.6.2config对象103
2.6.3exception对象105
2.6.4out对象107
2.6.5pageContext对象108
2.6.6request对象109
2.6.7response对象116
2.6.8session对象120
2.7Servlet介绍122
2.7.1Servlet的开发122
2.7.2Servlet的配置124
2.7.3JSP/Servlet的生命周期125
2.7.4load-on-startupServlet126
2.7.5访问Servlet的配置参数127
2.7.6使用Servlet作为控制器129
2.8JSP2的自定义标签133
2.8.1开发自定义标签类133
2.8.2建立TLD文件134
2.8.3使用标签库135
2.8.4带属性的标签136
2.8.5带标签体的标签139
2.8.6以页面片段作为属性的标签141
2.8.7动态属性的标签143
2.9Filter介绍144
2.9.1创建Filter类145
2.9.2配置Filter146
2.9.3使用URLRewrite实现网站伪静态149
2.10Listener介绍150
2.10.1实现Listener类151
2.10.2配置Listener152
2.10.3使用ServletContextAttributeListener153
2.10.4使用ServletRequestListener和ServletRequestAttributeListener154
2.10.5使用HttpSessionListener和HttpSessionAttributeListener155
2.11JSP2特性160
2.11.1配置JSP属性160
2.11.2表达式语言162
2.11.3TagFile支持170
2.12Servlet3新特性172
2.12.1Servlet3的注解172
2.12.2Servlet3的Web模块支持172
2.12.3Servlet3提供的异步处理174
2.12.4改进的ServletAPI177
2.13Servlet3.1新增的非阻塞式IO180
2.14Tomcat8.5的WebSocket支持182
2.15本章小结187
第3章 Struts2的基本用法188
3.1MVC思想概述189
3.1.1传统Model1和Model2189
3.1.2MVC思想及其优势190
3.2Struts2的下载和安装191
3.2.1为Web应用增加Struts2支持191
3.2.2在Eclipse中使用Struts2192
3.2.3增加登录处理193
3.3Struts2的流程196
3.3.1Struts2应用的开发步骤196
3.3.2Struts2的运行流程197
3.4Struts2的常规配置198
3.4.1常量配置198
3.4.2包含其他配置文件204
3.5实现Action204
3.5.1Action接口和ActionSupport基类206
3.5.2Action访问ServletAPI208
3.5.3Action直接访问ServletAPI210
3.5.4使用ServletActionContext访问ServletAPI212
3.6配置Action212
3.6.1包和命名空间213
3.6.2Action的基本配置216
3.6.3使用Action的动态方法调用217
3.6.4指定method属性及使用通配符219
3.6.5配置默认Action224
3.6.6配置Action的默认处理类225
3.7配置处理结果225
3.7.1理解处理结果225
3.7.2配置结果226
3.7.3Struts2支持的结果类型227
3.7.4plainText结果类型229
3.7.5redirect结果类型230
3.7.6redirectAction结果类型231
3.7.7动态结果232
3.7.8Action属性值决定物理视图资源232
3.7.9全局结果234
3.7.10使用PreResultListener235
3.8配置Struts2的异常处理236
3.8.1Struts2的异常处理机制236
3.8.2声明式异常捕捉238
3.8.3输出异常信息239
3.9Convention插件与“约定”支持240
3.9.1Action的搜索和映射约定241
3.9.2按约定映射Result243
3.9.3Action链的约定246
3.9.4自动重加载映射247
3.9.5Convention插件的相关常量247
3.9.6Convention插件相关注解248
3.10使用Struts2的国际化248
3.10.1视图页面的国际化249
3.10.2Action的国际化250
3.10.3使用包范围的国际化资源251
3.10.4使用全局国际化资源252
3.10.5输出带占位符的国际化消息254
3.10.6加载资源文件的顺序256
3.11使用Struts2的标签库256
3.11.1Struts2标签库概述256
3.11.2使用Struts2标签257
3.11.3Struts2的OGNL表达式语言258
3.11.4OGNL中的集合操作260
3.11.5访问静态成员261
3.11.6Lambda(?)表达式261
3.11.7控制标签262
3.11.8数据标签271
3.11.9主题和模板279
3.11.10自定义主题281
3.11.11表单标签282
3.11.12非表单标签294
3.12本章小结297
第4章 深入使用Struts2298
4.1详解Struts2的类型转换299
4.1.1Struts2内建的类型转换器299
4.1.2基于OGNL的类型转换300
4.1.3指定集合元素的类型302
4.1.4自定义类型转换器304
4.1.5注册类型转换器306
4.1.6基于Struts2的自定义类型转换器308
4.1.7处理Set集合308
4.1.8类型转换中的错误处理311
4.2使用Struts2的输入校验316
4.2.1编写校验规则文件316
4.2.2国际化提示信息319
4.2.3使用客户端校验320
4.2.4字段校验器配置风格321
4.2.5非字段校验器配置风格322
4.2.6短路校验器324
4.2.7校验文件的搜索规则325
4.2.8校验顺序和短路327
4.2.9内建校验器327
4.2.10基于注解的输入校验337
4.2.11手动完成输入校验339
4.3使用Struts2控制文件上传342
4.3.1Struts2的文件上传342
4.3.2实现文件上传的Action343
4.3.3配置文件上传的Action345
4.3.4手动实现文件过滤347
4.3.5拦截器实现文件过滤348
4.3.6输出错误提示349
4.3.7文件上传的常量配置350
4.4使用Struts2控制文件下载351
4.4.1实现文件下载的Action351
4.4.2配置Action352
4.4.3下载前的授权控制352
4.5详解Struts2的拦截器机制353
4.5.1拦截器在Struts2中的作用354
4.5.2Struts2内建的拦截器354
4.5.3配置拦截器356
4.5.4使用拦截器的配置语法357
4.5.5配置默认拦截器358
4.5.6实现拦截器类360
4.5.7使用拦截器361
4.5.8拦截方法的拦截器362
4.5.9拦截器的执行顺序365
4.5.10拦截结果的监听器366
4.5.11覆盖拦截器栈里特定拦截器的参数367
4.5.12使用拦截器完成权限控制368
4.6使用Struts2的Ajax支持370
4.6.1使用stream类型的Result实现Ajax370
4.6.2JSON的基本知识372
4.6.3实现Action逻辑375
4.6.4JSON插件与json类型的Result376
4.6.5实现JSP页面377
4.7本章小结378
第5章 Hibernate的基本用法380
5.1ORM和Hibernate381
5.1.1对象/关系数据库映射(ORM)381
5.1.2基本映射方式382
5.1.3流行的ORM框架简介383
5.1.4Hibernate概述383
5.2Hibernate入门384
5.2.1Hibernate下载和安装384
5.2.2Hibernate的数据库操作385
5.2.3在Eclipse中使用Hibernate389
5.3Hibernate的体系结构392
5.4深入Hibernate配置文件393
5.4.1创建Configuration对象393
5.4.2hibernate.properties文件与hibernate.cfg.xml文件396
5.4.3JDBC连接属性396
5.4.4数据库方言397
5.4.5JNDI数据源的连接属性398
5.4.6Hibernate事务属性399
5.4.7二级缓存相关属性399
5.4.8外连接抓取属性399
5.4.9其他常用的配置属性400
5.5深入理解持久化对象400
5.5.1持久化类的要求400
5.5.2持久化对象的状态401
5.5.3改变持久化对象状态的方法402
5.6深入Hibernate映射405
5.6.1映射属性407
5.6.2映射主键415
5.6.3使用Hibernate的主键生成器417
5.6.4映射集合属性418
5.6.5集合属性的性能分析424
5.6.6有序集合映射426
5.6.7映射数据库对象427
5.7 映射组件属性430
5.7.1 组件属性为集合432
5.7.2 集合属性的元素为组件433
5.7.3组件作为Map的索引434
5.7.4组件作为复合主键436
5.7.5多列作为联合主键438
5.8使用传统的映射文件439
5.8.1增加XML映射文件439
5.8.2注解,还是XML映射文件441
5.9本章小结442
第6章 深入使用Hibernate与JPA443
6.1Hibernate的关联映射444
6.1.1单向N-1关联444
6.1.2单向1-1关联449
6.1.3单向1-N关联450
6.1.4单向N-N关联453
6.1.5双向1-N关联455
6.1.6双向N-N关联458
6.1.7双向1-1关联459
6.1.8组件属性包含的关联实体461
6.1.9基于复合主键的关联关系463
6.1.10复合主键的成员属性为关联实体464
6.1.11持久化的传播性467
6.2继承映射468
6.2.1整个类层次对应一个表的映射策略470
6.2.2连接子类的映射策略472
6.2.3每个具体类对应一个表的映射策略475
6.3批量处理策略477
6.3.1批量插入477
6.3.2JPA与Hibernate478
6.3.3JPA的批量插入479
6.3.4批量更新481
6.3.5DML风格的批量更新/删除481
6.3.6JPA的DML支持482
6.4HQL查询和JPQL查询483
6.4.1HQL查询483
6.4.2 JPQL查询485
6.4.3from子句487
6.4.4关联和连接487
6.4.5查询的select子句490
6.4.6HQL查询的聚集函数491
6.4.7多态查询491
6.4.8HQL查询的where子句492
6.4.9表达式493
6.4.10orderby子句495
6.4.11groupby子句495
6.4.12子查询495
6.4.13命名查询496
6.5动态条件查询497
6.5.1执行DML语句501
6.5.2select的用法502
6.5.3元组查询503
6.5.4多Root查询504
6.5.5关联和动态关联505
6.5.6分组、聚集和排序508
6.6原生SQL查询510
6.6.1标量查询510
6.6.2实体查询511
6.6.3处理关联和继承514
6.6.4命名SQL查询515
6.6.5调用存储过程517
6.6.6使用定制SQL518
6.6.7JPA的原生SQL查询520
6.7数据过滤524
6.8事务控制526
6.8.1事务的概念527
6.8.2Session与事务527
6.8.3上下文相关的Session529
6.9二级缓存和查询缓存530
6.9.1开启二级缓存530
6.9.2管理缓存和统计缓存533
6.9.3使用查询缓存534
6.10事件机制537
6.10.1拦截器537
6.10.2事件系统539
6.11本章小结541
第7章 Spring的基本用法542
7.1Spring简介和Spring5.0的变化543
7.1.1Spring简介543
7.1.2Spring5.0的变化544
7.2Spring入门544
7.2.1Spring下载和安装544
7.2.2使用Spring管理Bean545
7.2.3在Eclipse中使用Spring548
7.3Spring的核心机制:依赖注入551
7.3.1理解依赖注入552
7.3.2设值注入553
7.3.3构造注入557
7.3.4两种注入方式的对比558
7.4使用Spring容器559
7.4.1Spring容器559
7.4.2使用ApplicationContext560
7.4.3ApplicationContext的国际化支持562
7.4.4ApplicationContext的事件机制563
7.4.5让Bean获取Spring容器566
7.5Spring容器中的Bean568
7.5.1Bean的基本定义和Bean别名568
7.5.2容器中Bean的作用域569
7.5.3配置依赖572
7.5.4设置普通属性值574
7.5.5配置合作者Bean575
7.5.6使用自动装配注入合作者Bean575
7.5.7注入嵌套Bean578
7.5.8注入集合值579
7.5.9组合属性583
7.5.10Spring的Bean和JavaBean584
7.6Spring提供的Java配置管理585
7.7创建Bean的3种方式588
7.7.1使用构造器创建Bean实例588
7.7.2使用静态工厂方法创建Bean589
7.7.3调用实例工厂方法创建Bean591
7.8深入理解容器中的Bean593
7.8.1抽象Bean与子Bean593
7.8.2Bean继承与Java继承的区别595
7.8.3容器中的工厂Bean595
7.8.4获得Bean本身的id597
7.8.5强制初始化Bean598
7.9容器中Bean的生命周期598
7.9.1依赖关系注入之后的行为599
7.9.2Bean销毁之前的行为601
7.9.3协调作用域不同步的Bean603
7.10高级依赖关系配置606
7.10.1获取其他Bean的属性值607
7.10.2获取Field值609
7.10.3获取方法返回值611
7.11基于XMLSchema的简化配置方式614
7.11.1使用p:命名空间简化配置614
7.11.2使用c:命名空间简化配置615
7.11.3使用util:命名空间简化配置617
7.12Spring提供的表达式语言(SpEL)619
7.12.1使用Expression接口进行表达式求值619
7.12.2Bean定义中的表达式语言支持621
7.12.3SpEL语法详述622
7.13本章小结627
第8章 深入使用Spring628
8.1两种后处理器629
8.1.1Bean后处理器629
8.1.2Bean后处理器的用处633
8.1.3容器后处理器633
8.1.4属性占位符配置器634
8.1.5重写占位符配置器636
8.2Spring的“零配置”支持637
8.2.1搜索Bean类637
8.2.2指定Bean的作用域640
8.2.3使用@Resource和@Value配置依赖640
8.2.4使用@PostConstruct和@PreDestroy定制生命周期行为641
8.2.5使用@DependsOn和@Lazy改变初始化行为642
8.2.6自动装配和精确装配643
8.2.7Spring5新增的注解647
8.2.8使用@Required检查注入648
8.3资源访问648
8.3.1Resource实现类649
8.3.2ResourceLoader接口和ResourceLoaderAware接口653
8.3.3使用Resource作为属性655
8.3.4在ApplicationContext中使用资源656
8.4Spring的AOP660
8.4.1为什么需要AOP660
8.4.2使用AspectJ实现AOP661
8.4.3AOP的基本概念667
8.4.4Spring的AOP支持668
8.4.5基于注解的“零配置”方式669
8.4.6基于XML配置文件的管理方式684
8.5Spring的缓存机制690
8.5.1启用Spring缓存690
8.5.2使用@Cacheable执行缓存693
8.5.3使用@CacheEvict清除缓存696
8.6Spring的事务698
8.6.1Spring支持的事务策略698
8.6.2使用XMLSchema配置事务策略702
8.6.3使用@Transactional708
8.7Spring整合Struts2709
8.7.1启动Spring容器709
8.7.2MVC框架与Spring整合的思考710
8.7.3让Spring管理控制器711
8.7.4使用自动装配715
8.8Spring整合Hibernate717
8.8.1Spring提供的DAO支持717
8.8.2管理Hibernate的SessionFactory718
8.8.3实现DAO组件的基类719
8.8.4HibernateTemplate和HibernateDaoSupport722
8.8.5实现DAO组件725
8.8.6使用IoC容器组装各种组件725
8.8.7使用声明式事务728
8.9Spring整合JPA729
8.9.1管理EntityManagerFactory729
8.9.2实现DAO组件基类732
8.9.3使用声明式事务734
8.10本章小结735
第9章 企业应用开发的思考和策略736
9.1企业应用开发面临的挑战737
9.1.1可扩展性、可伸缩性737
9.1.2快捷、可控的开发738
9.1.3稳定性、高效性738
9.1.4花费最小化,利益最大化739
9.2如何面对挑战739
9.2.1使用建模工具739
9.2.2利用优秀的框架739
9.2.3选择性地扩展741
9.2.4使用代码生成器742
9.3常见设计模式精讲742
9.3.1单例模式743
9.3.2简单工厂744
9.3.3工厂方法和抽象工厂750
9.3.4代理模式753
9.3.5命令模式758
9.3.6策略模式761
9.3.7门面模式763
9.3.8桥接模式766
9.3.9观察者模式769
9.4常见的架构设计策略773
9.4.1贫血模型773
9.4.2领域对象模型776
9.4.3合并业务逻辑组件与DAO组件778
9.4.4合并业务逻辑组件和DomainObject779
9.4.5抛弃业务逻辑层780
9.5本章小结781
第10章 简单工作流系统782
10.1项目背景及系统结构783
10.1.1应用背景783
10.1.2系统功能介绍783
10.1.3相关技术介绍784
10.1.4系统结构785
10.1.5系统的功能模块785
10.2Hibernate持久层786
10.2.1设计持久化实体786
10.2.2创建持久化实体类787
10.3实现DAO层792
10.3.1DAO组件的定义792
10.3.2实现DAO组件795
10.3.3部署DAO层797
10.4实现Service层799
10.4.1业务逻辑组件的设计799
10.4.2实现业务逻辑组件800
10.4.3事务管理805
10.4.4部署业务逻辑组件806
10.5实现任务的自动调度806
10.5.1使用Quartz806
10.5.2在Spring中使用Quartz810
10.6实现系统Web层813
10.6.1Struts2和Spring的整合813
10.6.2控制器的处理顺序图814
10.6.3员工登录814
10.6.4进入打卡816
10.6.5处理打卡818
10.6.6进入申请819
10.6.7提交申请821
10.6.8使用拦截器完成权限管理823
10.7本章小结824前言/序言
?
前言
经过多年沉淀,JavaEE平台已经成为电信、金融、电子商务、保险、证券等各行业的大型应用系统的首选开发平台。在企业级应用的开发选择上,.Net已趋式微,PHP通常只用于开发一些企业展示站点或小型应用,因此这些开发语言、开发平台基本上已无法与JavaEE进行对抗了。
JavaEE开发大致可分为两种方式:以Spring为核心的轻量级JavaEE企业开发平台;以EJB3+JPA为核心的经典JavaEE开发平台。无论使用哪种平台进行开发,应用的性能、稳定性都有很好的保证,开发人群也有很稳定的保证。
《轻量级Java EE企业应用实战(第5版)――Struts 2+Spring 5+Hiberna》介绍的开发平台,就是以Struts2.5+Spring5.0+Hibernate5.2/JPA(在实际项目中可能以MyBatis代替Hibernate/JPA)为核心的轻量级JavaEE,这种组合在保留经典JavaEE应用架构、高度可扩展性、高度可维护性的基础上,降低了JavaEE应用的开发、部署成本,对于大部分中小型企业应用是首选。在一些需要具有高度伸缩性、高度稳定性的企业应用(比如银行系统、保险系统)中,以EJB3+JPA为核心的经典JavaEE应用则具有一定的占有率。《轻量级Java EE企业应用实战(第5版)――Struts 2+Spring 5+Hiberna》姊妹篇《经典JavaEE企业应用实战》主要介绍了后一种JavaEE开发平台。
《轻量级Java EE企业应用实战(第5版)――Struts 2+Spring 5+Hiberna》主要升级了《轻量级JavaEE企业应用实战》的知识。《轻量级Java EE企业应用实战(第5版)――Struts 2+Spring 5+Hiberna》采用最新的Tomcat8.5作为Web服务器,全面而细致地介绍了Servlet3.1的新特性,并将Struts2升级到Struts2.5.14,将Spring升级到5.0.2,将Hibernate升级到5.2.12。《轻量级Java EE企业应用实战(第5版)――Struts 2+Spring 5+Hiberna》详细介绍了Spring和Hibernate的“零配置”特性,并充分介绍了Struts2的Convention(约定)支持。为了顺应技术的改变,《轻量级Java EE企业应用实战(第5版)――Struts 2+Spring 5+Hiberna》介绍的Hibernate持久化映射已经全部升级为注解方式,不再采用传统的XML映射方式。《轻量级Java EE企业应用实战(第5版)――Struts 2+Spring 5+Hiberna》还详细介绍了Spring3.1新增的缓存机制,包括使用@Cacheable执行缓存,使用@CacheEvict清除缓存等,也详细介绍了Spring5.0的改变,包括Spring5.0引入的@NonNull、@NonNullApi、@NonNullFields等新注解。
Hibernate5.x的变化较大,Hibernate进一步向JPA规范靠拢,它的不少API都借用于JPA规范。此外,Hibernate将自身的动态条件查询API标记为过时(未来会删除它们),全面改为使用JPA的动态条件查询API。因此,《轻量级Java EE企业应用实战(第5版)――Struts 2+Spring 5+Hiberna》同时介绍了Hibernate5.2和JPA规范的用法,包括HibernateAPI与JPAAPI之间的对应关系,使用Hibernate与JPA的区别,并详细介绍了JPA的基本用法、JPA批量操作、JPQL查询、JPA动态条件查询等,读者可通过《轻量级Java EE企业应用实战(第5版)――Struts 2+Spring 5+Hiberna》同时掌握Hibernate和JPA的用法。
《轻量级Java EE企业应用实战(第5版)――Struts 2+Spring 5+Hiberna》创作感言
笔者首先要感谢广大读者对《轻量级Java EE企业应用实战(第5版)――Struts 2+Spring 5+Hiberna》前几版的认同,《轻量级Java EE企业应用实战(第5版)――Struts 2+Spring 5+Hiberna》前几版累计发行十几万册,并获得中国书刊发行业协会颁发的“2011年度全行业优秀畅销品种”大奖,且多次获得电子工业出版社颁发的“最畅销图书奖”。是广大读者的选择让“疯狂Java体系”图书大放异彩;是广大读者的支持让我在孤独的技术创作道路上坚持求索;是广大读者的反馈让“疯狂Java体系”图书日臻完美。
广大读者的热情对我来说既是支持,又是责任—“疯狂Java体系”图书有责任必须完美!因此笔者在改进、升级“疯狂Java体系”图书时,有一种如履薄冰的感觉,希望以最大的努力来贡献最好的作品。
另外,《轻量级Java EE企业应用实战(第5版)――Struts 2+Spring 5+Hiberna》还有一本配套的姊妹篇:《经典JavaEE企业应用实战》。学习《轻量级Java EE企业应用实战(第5版)――Struts 2+Spring 5+Hiberna》时可以采用“轻经合参”的方式来学习—“轻”指的是以SSH整合的轻量级JavaEE开发平台,“经”指的是以EJB3+JPA整合的经典JavaEE开发平台;这两种平台本身具有很大的相似性,将两种JavaEE开发平台结构放在一起参考、对照着学习,能更好地理解Spring、Hibernate框架的设计思想,从而更深入地掌握它们。与此同时,也可以深入理解EJB3与Spring容器中的Bean、EJB容器与Spring容器之间的联系和区别,从而融会贯通地掌握EJB3+JPA整合的开发方式。
在介绍非常专业的编程知识之时,笔者总会通过一些浅显的类比来帮助读者更好地理解。“简单、易读”成为笔者一贯坚持的创作风格,也是“疯狂Java体系”图书的特色。另外,“疯狂Java体系”图书的知识也很全面、实用。笔者希望读者在看完“疯狂Java体系”图书之后,可以较为轻松地理解书中所介绍的知识,并切实学会一种实用的开发技术,进而将之应用到实际开发中。如果读者在学习过程中遇到无法理解的问题,可以登录疯狂Java联盟(http://www.crazyit.org)与广大Java学习者交流,笔者也会通过该平台与大家一起交流、学习。
《轻量级Java EE企业应用实战(第5版)――Struts 2+Spring 5+Hiberna》有什么特点
《轻量级Java EE企业应用实战(第5版)――Struts 2+Spring 5+Hiberna》保持了《轻量级JavaEE企业应用实战》前几版简单、实用的优势,同样坚持让案例说话,以案例来介绍知识点的风格。《轻量级Java EE企业应用实战(第5版)――Struts 2+Spring 5+Hiberna》最后同样示范开发了企业工作流案例,希望读者通过该案例真正步入实际企业开发的殿堂。
《轻量级Java EE企业应用实战(第5版)――Struts 2+Spring 5+Hiberna》依然保留了《轻量级JavaEE企业应用实战》前几版的三个特色。
1.经验丰富,针对性强
笔者既担任过软件开发的技术经理,也担任过软件公司的培训导师,还从事过职业培训的专职讲师。这些经验影响了笔者写书的目的,《轻量级Java EE企业应用实战(第5版)――Struts 2+Spring 5+Hiberna》不是一本学院派的理论读物,而是一本实际的开发指南。
2.内容实际,实用性强
《轻量级Java EE企业应用实战(第5版)――Struts 2+Spring 5+Hiberna》所介绍的JavaEE应用范例,采用了目前企业流行的开发架构,绝对严格遵守JavaEE开发规范,而不是将各种技术杂乱地糅合在一起号称JavaEE。读者参考《轻量级Java EE企业应用实战(第5版)――Struts 2+Spring 5+Hiberna》的架构,完全可以身临其境地感受企业实际开发。
3.高屋建瓴,启发性强
《轻量级Java EE企业应用实战(第5版)――Struts 2+Spring 5+Hiberna》介绍的几种架构模式,几乎是时下最全面的JavaEE架构模式。这些架构模式可以直接提升读者对系统架构设计的把握。
《轻量级Java EE企业应用实战(第5版)――Struts 2+Spring 5+Hiberna》写给谁看
如果你已经掌握JavaSE内容,或已经学完了《疯狂Java讲义》一书,那么你非常适合阅读此书。除此之外,如果你已有初步的JSP、Servlet基础,甚至对Struts2、Spring5.0、Hibernate5.2、JPA有所了解,但希望掌握它们在实际开发中的应用,《轻量级Java EE企业应用实战(第5版)――Struts 2+Spring 5+Hiberna》也将非常适合你。如果你对Java的掌握还不熟练,则建议遵从学习规律,循序渐进,暂时不要购买、阅读此书,而是按照《疯狂Java学习路线图》中的建议顺序学习。