欢迎光临
免费的PDF电子书下载网站

Java EE框架技术进阶式教程(第2版) PDF下载

编辑推荐

《Java EE框架技术进阶式教程(第2版)》采用新颖的进阶式教学模式,让学生拾阶而上,攀登知识的高峰。同时采用项目驱动法、任务教学法和实例教学法完成对Java EE框架技术的讲述,让学生提前感知软件开发人员的工作。

  共12个单元,每个单元包含若干个任务。全书贯穿两个大项目,项目1是网上购物系统,项目2是图书管理系统。第1~11单元按知识点展开项目1中的相应部分。项目2的相应部分在各单元后面的习题和实训中讲述。第12单元是网上购物系统的开发,详细阐述了使用Java EE四层模型开发项目1的全过程。

  图文并茂,深入浅出,语言流畅,含大量实例和案例,知识点的展开符合认识规律。既可作为一般高等院校Java类课程的教材,也可供软件开发人员参考。

 ;

内容简介

本书使用新颖的进阶式教学模式,让学生拾阶而上,攀登知识的高峰。同时采用项目驱动法、任务教学法和实例教学法完成对Java EE框架技术的讲述,让学生提前感知软件开发人员的工作。 全书共分12个单元,每个单元包含若干个任务。两个大项目贯穿全书,项目1是网上购物系统,项目2是图书管理系统。第1~11单元按知识点展开项目1中的相应部分。项目2的相应部分在各单元后面的习题和实训中讲述。第12单元是网上购物系统的开发,详细阐述使用Java EE四层模型开发项目1的全过程。 本书图文并茂,深入浅出,语言流畅,富含大量实例和案例,各个知识点的展开符合认识规律,既可作为一般高等院校Java EE课程的教材,又可供软件开发人员参考。

作者简介

暂无

Java EE框架技术进阶式教程(第2版) PDF下载

目录

第一篇基础篇

第1单元Java EE概述31.1任务1Java EE发展历史3
1.2任务2Java EE简介4
1.2.1Java EE的概念4
1.2.2Java EE提出的背景4
1.2.3Java EE的优势4
1.2.4Java EE的四层模型5
1.3任务3Java EE的13种核心技术6
单元总结8
习题8
实训1Java EE概况8
第2单元Java EE运行及开发环境的搭建9
2.1任务1JDK的下载、安装及配置9
2.1.1JDK的下载和安装9
2.1.2JDK的环境变量的配置9
2.2任务2Eclipse的下载与安装10
2.3任务3MyEclipse的下载与安装11
2.3.1MyEclipse插件的下载11
2.3.2MyEclipse插件的安装11
2.3.3启动MyEclipse11
2.4任务4Tomcat服务器的下载、安装及配置12
2.4.1Tomcat的下载和安装13
2.4.2在MyEclipse中配置Tomcat13
2.5任务5进阶式案例——Hello World程序15
单元总结18习题18
实训2搭建Java EE运行及开发环境19
目录◆Java EE框架技术进阶式教程(第2版)第3单元数据库访问技术20
3.1任务1引入性案例20
3.1.1案例分析20
3.1.2解决方案21
3.1.3具体实现21
3.2任务2MySQL数据库21
3.2.1MySQL安装与配置21
3.2.2MySQL的使用23
3.3任务3JDBC26
3.3.1JDBC概述26
3.3.2JDBC驱动程序26
3.3.3使用JDBC连接数据库27
3.3.4常用数据库的JDBC连接代码28
3.3.5JDBC发送SQL语句29
3.3.6获得SQL语句的执行结果30
3.4任务4进阶式案例——添加用户功能的具体实现31
3.4.1功能概述32
3.4.2运行效果32
3.4.3具体实现32
单元总结38
习题39
实训3实现图书管理系统中添加图书信息的功能39

第二篇框架篇

第4单元Struts 2框架技术入门434.1任务1引入性案例43
4.1.1解决方案44
4.1.2具体实现44
4.1.3分析不足之处50
4.2任务2Struts 2简介51
4.2.1Struts 2的发展历史51
4.2.2Struts 2与WebWork 2、Struts 1的关系51
4.3任务3Struts 2的体系结构53
4.3.1Struts 2的体系结构53
4.3.2Struts 2的工作机制53
4.4任务4Struts 2的配置54
4.4.1web.xml的配置55
4.4.2struts.properties的配置55
4.4.3struts.xml的配置56
4.4.4package的配置56
4.4.5命名空间的配置56
4.5任务5进阶式案例——第一个Struts 2程序57
4.5.1解决方案57
4.5.2具体实现57
单元总结60
习题60
实训4使用Struts 2框架实现图书管理系统的用户登录模块61
第5单元Struts 2进阶与提高62
5.1任务1引入性案例62
5.1.1案例分析62
5.1.2设计步骤64
5.1.3具体实现64
5.1.4Struts 2工作流程67
5.1.5分析不足之处68
5.2任务2Struts 2标签库69
5.2.1Struts 2标签分类69
5.2.2表单标签70
5.2.3非表单标签73
5.2.4控制标签73
5.2.5数据标签74
5.3任务3Struts 2国际化74
5.3.1Struts 2中的全局资源文件74
5.3.2在Struts 2中访问国际化信息75
5.3.3对引入性案例实现国际化75
5.4任务4数据类型转换器76
5.4.1传统的类型转换76
5.4.2Struts 2内建的类型转换器77
5.4.3其他转换方式78
5.5任务5数据校验82
5.5.1使用validate方法进行数据校验82
5.5.2使用Validation框架进行数据校验84
5.6任务6进阶式案例——用户注册模块86
5.6.1设计步骤87
5.6.2运行效果88
单元总结89
习题89
实训5图书管理系统的用户登录模块的优化89
第6单元Hibernate框架技术入门91
6.1任务1引入性案例91
6.1.1案例分析91
6.1.2设计步骤92
6.1.3具体实现92
6.1.4分析不足之处97
6.2任务2ORM简介97
6.2.1为什么要使用ORM98
6.2.2具有代表性的ORM框架98
6.3任务3Hibernate简介99
6.3.1Hibernate的发展历史99
6.3.2Hibernate与EJB的关系99
6.3.3Hibernate框架结构100
6.3.4Hibernate的工作原理100
6.4任务4Hibernate的安装与配置101
6.4.1Hibernate的安装101
6.4.2Hibernate配置文件101
6.5任务5Hibernate的核心类103
6.5.1Configuration与SessionFactory103
6.5.2Session类104
6.6任务6对象关联关系104
6.7任务7Hibernate映射104
6.7.1基本数据类型映射105
6.7.2持久化类和数据表映射106
6.8任务8进阶式案例——使用Hibernate框架技术添加商品信息107
6.8.1解决方案107
6.8.2具体实现107
6.8.3运行效果110
单元总结111
习题111
实训6使用Hibernate框架实现图书管理系统中添加图书信息的功能111
第7单元Hibernate查询113
7.1任务1引入性案例113
7.1.1案例分析113
7.1.2设计步骤114
7.1.3具体实现114
7.1.4分析不足之处117
7.2任务2Hibernate的关联查询117
7.2.1一对一关联关系118
7.2.2一对多、多对一关联关系119
7.2.3多对多关联关系121
7.3任务3Hibernate的数据检索策略122
7.3.1立即检索122
7.3.2延迟检索123
7.3.3预先检索123
7.3.4批量检索124
7.4任务4Hibernate的数据查询策略124
7.4.1Hibernate查询方式简介125
7.4.2标准API方式125
7.4.3HQL方式126
7.4.4原生SQL方式127
7.5任务5Hibernate过滤128
7.5.1Session过滤128
7.5.2Filter过滤129
7.6任务6进阶式案例——使用Hibernate框架技术实现多表连接查询129
7.6.1解决方案130
7.6.2具体实现130
7.6.3运行效果134
7.6.4案例解析134
单元总结136
习题137
实训7使用Hibernate框架实现图书管理系统中查询图书详细信息的
功能137
第8单元Hibernate高级特性139
8.1任务1引入性案例139
8.1.1案例分析140
8.1.2设计步骤140
8.1.3具体实现141
8.1.4分析不足之处148
8.2任务2Hibernate的事务管理149
8.2.1事务的基本概念149
8.2.2基于JDBC的事务管理150
8.2.3基于JTA的事务管理151
8.3任务3Hibernate的并发控制152
8.3.1并发的基本概念152
8.3.2悲观锁153
8.3.3乐观锁154
8.4任务4Hibernate的缓存管理155
8.4.1缓存原理156
8.4.2一级缓存156
8.4.3二级缓存157
8.4.4查询缓存158
8.5任务5进阶式案例——使用Hibernate的高级特性优化引入性案例161
8.5.1解决方案162
8.5.2具体实现162
8.5.3运行效果166
8.5.4案例解析166
单元总结167
习题167
实训8使用Hibernate框架实现图书管理系统中借阅、归还图书的功能168
第9单元Spring框架技术入门170
9.1任务1引入性案例170
9.1.1案例分析170
9.1.2设计步骤171
9.1.3具体实现171
9.1.4分析不足之处172
9.2任务2Spring简介172
9.2.1Spring的发展历史172
9.2.2Spring的主要特性173
9.2.3Spring框架的组成173
9.3任务3Spring的下载和配置174
9.3.1下载Spring框架175
9.3.2Spring发布包和软件包175
9.3.3Spring的配置176
9.3.4Bean的配置176
9.4任务4理解Spring的核心模式——IoC178
9.4.1反转控制178
9.4.2依赖注入的3种方式180
9.5任务5BeanFactory与ApplicationContext181
9.5.1BeanFactory182
9.5.2ApplicationContext183
9.6任务6进阶式案例——使用Spring框架实现引入性案例183
9.6.1解决方案183
9.6.2具体实现184
9.6.3运行效果186
单元总结186
习题187
实训9使用Spring框架实现本单元实例1中的情景187
第10单元Spring框架中的AOP技术188
10.1任务1引入性案例188
10.1.1案例分析188
10.1.2设计步骤189
10.1.3具体实现189
10.1.4分析不足之处190
10.2任务2AOP概述190
10.2.1OOP与AOP的关系191
10.2.2AOP的相关概念192
10.2.3Java动态代理与AOP192
10.3任务3Spring AOP中的通知195
10.3.1Spring AOP支持的通知类型195
10.3.2BeforeAdvice196
10.3.3AfterReturningAdvice198
10.3.4MethodInterceptor199
10.3.5ThrowAdvice200
10.4任务4Spring AOP的切入点202
10.4.1静态切入点202
10.4.2动态切入点203
10.4.3静态切入点测试实例203
10.5任务5AOP的代理模式205
10.5.1理解代理205
10.5.2ProxyFactory206
10.5.3ProxyFactoryBean207
10.5.4AOP代理模式测试实例207
10.6任务6进阶式案例——使用Spring框架中的AOP技术实现引入性
案例211
10.6.1解决方案211
10.6.2具体实现211
10.6.3运行效果213
单元总结214
习题214
实训10使用Spring AOP技术模拟图书管理系统中到期提醒信息的输出215
第11单元Spring、Struts、Hibernate框架整合技术216
11.1任务1引入性案例216
11.2任务2Spring与Struts的整合217
11.2.1Spring与Struts 1的整合方式217
11.2.2Spring与Struts 2的整合技术218
11.3任务3Spring与Java EE持久化数据访问技术220
11.3.1获取DataSource的方法220
11.3.2Spring对JDBC的支持222
11.4任务4Spring与Hibernate的整合224
11.4.1Spring对Hibernate的支持224
11.4.2Spring对SessionFactory的管理225
11.4.3Hibernate的DAO实现226
11.4.4使用HibernateTemplate226
11.4.5管理Hibernate事务227
11.5任务5构建SSH整合框架体系229
11.6任务6进阶式案例——使用SSH框架体系实现购物车模块的开发241
11.6.1解决方案241
11.6.2具体实现242
11.6.3运行效果251
单元总结251
习题252
实训11使用SSH框架体系实现图书管理系统中图书添加和查阅模块252

第三篇系统开发篇

第12单元网上购物系统25512.1步骤1网上购物系统需求分析255
12.2步骤2网上购物系统数据库设计256
12.3步骤3网上购物系统框架搭建258
12.3.1工程目录结构解析258
12.3.2创建ShoppingSystem工程259
12.4步骤4网上购物系统的代码实现259
12.4.1数据持久层的实现259
12.4.2数据库连接的实现260
12.4.3用户管理模块的实现261
12.4.4商品浏览模块的实现266
12.4.5购物车管理模块的实现271
12.4.6订单管理模块的实现278
12.4.7主界面的实现281
单元总结284
习题284
实训12图书管理系统285

前沿


前言ForewordJava EE是企业应用的一种软件架构,该技术在逐步发展并日趋成熟,已成为当前Web开发以及大型软件开发的首选方案,受到广大Java爱好者和软件公司的追捧。因此,越来越多的人开始关注并学习Java EE,希望使其成为职场生涯的必胜法宝。本书以网上购物系统和图书管理系统案例为教学背景,采用新型的“进阶式”教学模式,介绍Java EE框架技术和应用系统开发技术,将项目驱动法、任务式教学法和实例教学法融入课堂,让学生提前感知软件开发人员的工作。
本书以框架为主线,选择最先进的版本,采用通俗的语言,循序渐进、由浅入深地讲述MySQL数据库技术、Struts 2框架、Hibernate框架、Spring框架,并详细介绍Tomcat、MyEclipse的使用方法。
本书最大的特点就是采用了进阶式教学模式。
在宏观上,作者根据Java EE的技术规范和应用经验,通过对Java EE知识点的分析,将教学内容分为基础篇、框架篇和系统开发篇,分阶段、分层次地实现了各单元间知识的进阶。在微观上,全书共分为12个单元,每个单元都包含一个引入性案例,即每个单元的主题,首先使用已有知识实现引入性案例;接着对该实现过程进行分析,提出有待解决的问题;然后学习新知识点,解决提出的问题;最后使用新学的知识重新实现引入性案例,也就是完成进阶式案例,达到知识的进阶。
这样的学习过程,不仅可以让学生知道学了什么,还能让学生明白为什么学、学了之后怎么用。
下面详述本书的其他特点,欢迎读者批评指正、共同探讨、提出宝贵意见和建议。
(1) 本书完全按照认识的规律逐步展开,由浅入深讲述每一个知识点。
(2) 全书分为12个单元,每个单元又包含若干个任务。将各个知识点渗透到每个单元的任务中,概念清晰、明确,图文并茂,易于理解。◆Java EE框架技术进阶式教程(第2版)前言(3) 以项目驱动法进行教学,逐步拓展课程内容。两个大项目贯穿全书,项目1是网上购物系统,项目2是图书管理系统。各单元按知识点展开项目1的相应部分,进行针对性的技能训练,同时加强老师的指导作用。项目2的相应部分在各单元后面的习题和实训中讲述,供学生练习,培养学生的探索和创新能力。
(4) 注重理论的可视化,可读性强,便于学生自学。本书中的任何一个案例都由背景介绍、功能演示、实现步骤、代码解释四部分组成。同时,在改进引入性案例的过程中,学生可以对已经学过的内容举一反三,将知识点贯穿于整个教学活动过程中,能够温故而知新。
(5) 通过大量的案例来引导、剖析、阐述各个知识点,每个案例都是最终项目的一部分。
建议用80个学时完成第1~11单元的课程,讲解Java EE框架技术的相关知识点,实现网上购物系统的各个功能。第12单元为系统开发篇,建议放在实训环节中讲述,该单元采用Java EE四层开发模型,使用软件工程的设计理念,以网上购物系统为例讲述项目开发的过程,同时该单元也是前11个单元的综合。
本书既可作为一般高等院校Java EE相关课程的教材,又可供软件开发人员参考。
为了方便教学和读者上机操作,作者提供本书配套的课程标准、教学大纲、教案、教学课件、系统的所有源代码文件和系统所需的JAR包。读者可以到清华大学出版社网站(http://www.tup.com.cn)查询和下载,也可以将有关建议和要求直接发送到作者信箱(flingmonica@163.com)。
本书的第1~4单元由许常青老师编写,第5~6单元由刘丽老师编写,第7~12单元由赵彦老师编写。
在本书的编写过程中,承蒙江苏信息职业技术学院物联网工程学院顾晓燕院长的帮助。感谢我的同事许常青老师、刘丽老师、季云峰老师对该课程的帮助和支持。也由衷地感谢清华大学出版社的关心和帮助。我的每一分收获都渗透了大家的关怀。
最后,我要感谢我的家人对我的理解和支持。感谢第1版的真诚读者,以及所有朋友对我的帮助,是您的支持才有了今天的第2版。

赵彦2018年4月

免费在线读

····························································
第5单元unit5

Struts 2进阶与提高单元描述:
Struts 2完全颠覆了Web编程的传统,在Struts 2的Action类中,完全去掉了request、response等Servlet API。该框架提供了一整套用于简化JSP编程的标签,开发者只需要稍作配置就可以实现各种常用效果;该框架可以自动完成数据转换、赋值,这些对Web编程是革命性的转变;Struts 2同样提供配置式的数据校验功能。本单元将重点介绍该框架在国际化、标签库、数据校验等方面的技术。
单元目标:
 了解Struts 2标签库的配置和使用;
 了解Struts 2在国际化方面的实现;
 熟悉Struts 2数据转换和赋值的相关技术;
 掌握Struts 2数据校验的功能。
5.1任务1引入性案例
任务描述: 使用已经学过的有关Struts 2框架的知识,完成用户注册系统的开发。
任务目标: 本案例的主要任务就是在当前知识体系结构的基础上完成用户注册模块的设计和实现,并分析不足之处。
5.1.1案例分析
一个好的注册模块应该提供完备的数据验证功能。数据验证包括数据格式验证和逻辑验证,其中数据格式验证体现为数据格式的合法性,例如,在填写表单时要求密码不能为空、电话号码必须为8~15位整数、电子邮件地址的合法性等。逻辑验证一般体现为逻辑上的有效性,例如,判断用户注册的用户名是否重复等。
现在根据已学过的Struts 2的相关技术知识,完成用户登录模块。
工程名为RegisterStruts2,工程文件结构图如图51所示。
用户注册页面如图52所示;用户名、密码、邮箱为空时的提示性信息如图53所示;年龄、电话号码和邮箱不合法的提示性信息如图54所示;用户已存在的提示性信息如图55所示;成功提交相关信息后进入欢迎页面,如图56所示。◆Java EE框架技术进阶式教程(第2版)第◆5单元Struts 2进阶与提高图51工程文件结构图
图52用户注册页面
图53用户名、密码、邮箱不能为空
图54年龄、电话号码、邮箱不合法
图55用户名已存在
图56欢迎页面
5.1.2设计步骤
(1) 创建用户注册模块的视图界面: register.jsp、registerSuccess.jsp。
(2) 创建资源信息文件: Application.properties。
(3) 创建Action: RegisterAction.java。
(4) 为解决中文乱码问题,创建过滤器Servlet: CharacterEncodingFilter.java。
(5) 创建配置文件web.xml。
(6) 配置struts.xml。
(7) 配置struts.properties。
(8) 发布工程。
5.1.3具体实现
(1) 创建用户注册模块的视图页面: register.jsp、registerSuccess.jsp。
register.jsp的代码如下:<;%@page contentType="text/html;charset=UTF-8" language="java"%>;
<;%@taglib uri="/struts-tags" prefix="struts"%>;

<;struts:text name="register.jsp.title">;<;/struts:text>;























registerSuccess.jsp的代码如下:<;%@page language="java" pageEncoding="UTF-8"%>;
<;%@taglib uri="/struts-tags" prefix="struts"%>;

<;struts:text name="registerSuccess.jsp.title">;<;/struts:text>;






(2) 创建资源信息文件: Application.properties。
该文件的内容与第4单元的进阶式案例(LoginStruts 2工程)的Application.properties文件类似,在这里不再重复给出。
(3) 创建Action: RegisterAction.java。代码如下:package action;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import com.opensymphony.xwork2.ActionSupport;
public class RegisterAction extends ActionSupport{
private static final long serialVersionUID=1L;
private String userName;
private String psw1;
private String psw2;
private int age;
private String telNum;
private String email;
//省略所有属性的get、set方法
public String execute()throws Exception{
if(getUserName().equals("ZhaoYan")){
addFieldError("error0",getText("username.exist"));
return SUCCESS;
}
else if(validator()){return SUCCESS;}
else return ERROR;
}
private boolean validator(){
boolean flag=true;
if(getUserName()==null||getUserName().length()<;1){//判断用户名是否为空
addFieldError("error1",getText("username.required"));
flag=false;
}
if(getUserName().length()>;20){//用户名不能超过20个字符
addFieldError("error2",getText("psw.maxlength"));
flag=false;
}
if(getPsw1()==null||getPsw1().length()<;1){//判断密码是否为空
addFieldError("error3",getText("psw.required"));
flag=false;
}
if(!getPsw1().equals(getPsw2())){//判断两次输入的密码是否一致
addFieldError("error4",getText("errors.validwhen"));
flag=false;
}
if(getAge()>;200||getAge()<;0){//年龄应该是0~200之间的数字
addFieldError("error5",getText("age.error"));
flag=false;
}
String regTelNum="[0-9]{7,15}$";
Pattern e=Pattern.compile(regTelNum);
Matcher em=e.matcher(telNum);
if(!(getTelNum().equals(""))&;&;!em.matches()){//电话号码应该是8~15位的数字
addFieldError("error6",getText("tel.error"));
flag=false;
}
String regEmail="^([a-z0-9A-Z] [-|\\.]?) [a-z0-9A-Z]@([a-z0-9A-Z]
(-[a-z0-9A-Z] )?\\.) [a-zA-Z]{2,}$";//正则表达式
Pattern p=Pattern.compile(regEmail);//Email地址校验  ;
Matcher m=p.matcher(email);
if(email==""){
addFieldError("error7",getText("email.required"));
flag=false;
}
if(email!=""&;&;!m.matches()){
addFieldError("error7",getText("email.error"));
flag=false;
}
return flag;
}
}(4) 为解决中文乱码问题,创建过滤器Servlet: CharacterEncodingFilter.java。
该文件和之前提到的CharacterEncodingFilter.java的代码相同,文件的配置也相同。
(5) 创建配置文件web.xml。
该文件的配置与第4单元的进阶式案例中有关web.xml的配置相同,只是将默认欢迎页面改为register.jsp。
(6) 配置struts.xml。代码如下:
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
 ; ; ; ; ; ; ; ; "http://struts.apache.org/dtds/struts-2.0.dtd">;
 ;





/register.jsp


 ; ; ; ; ; ; ; ; ; ;

/registerSuccess.jsp




 ;
(7) 配置struts.properties。
  在该文件中,要配置相关的资源信息文件。在本工程中所有的文字信息都来源于资源信息文件,主要是为后面实现国际化做准备,让Struts 2框架识别资源配置文件的代码为“struts.custom.i18n.resources=Application”。该文件的代码如下:struts.action.extension=action
struts.locale=en_GB
struts.custom.i18n.resources=Application(8) 发布工程。
当所有代码输入完成后,启动Tomcat,发布工程,然后在浏览器窗口查看运行效果。
5.1.4Struts 2工作流程
在使用Struts 2框架技术完成了两个案例之后,根据本案例,详细介绍一下Struts 2的工作流程。
Struts 2放弃了request、response等Servlet API,看上去更像普通的Java类。实际上,Struts 2的Action属于被调用的方法。在调用Action的执行方法execute()之前,Struts 2会从request中获取参数,并通过set()方法设置到Action属性中。整个Struts 2框架的工作流程如图57所示。
图57Struts 2工作流程图
register.jsp是一个表单页面,提交表单后,将数据提交到register.action中,这是一个Struts的URI,将会被Struts 2配置在web.xml中的分发器Filter截获。分发器Filter转去查找struts.xml,得知register.action对应的Action为RegisterAction。
然后,Struts 2将生成一个RegisterAction实例,并将提交上来的数据设置到该实例中。
RegisterAction中的execute()方法是Struts 2的主要方法,主要的业务逻辑代码就在其中。本案例中如果输入的用户名为ZhaoYan,则显示该用户已存在的提示性信息;如果用户输入无误,则跳转到成功页面。而具体的页面跳转也已经在struts.xml中配置好了。
5.1.5分析不足之处
通过两个Struts 2案例,读者已经体会到了该框架的优势。尽管Struts 2避开了Servlet API,并且省去了严格的ActionForm,以及JavaBean的定义,但是依据现有的知识来解决复杂的问题还是有一定难度的。在引入性案例设计之初,尽管经过严格的需求分析,还有很多功能难以实现。下面将一一点评。
(1) 一个优秀的注册程序不仅仅是输入用户名和密码,在较为严格的系统中需要录入极为丰富的数据。为了方便用户录入,就需要各种控件帮助用户完成录入工作,如单选按钮、复选框、文件上传按钮、下拉框、日期选择器等。Struts 2丰富的标签库是否可以完成该项工作呢?
(2) 国际化是一个产品应有的支持,在Struts 2中是否也可以解决国际化问题呢?
(3) Struts 2完全放弃了ActionForm,但是由于Java本身的缺陷,比如时间的表示等,前台表单传来的数据转去给后台Java处理时,数据类型的转换往往会加大程序员的工作量,那么Struts 2有没有更好的解决方案呢?
(4) 验证框架可以有效解决数据校验的问题,那么Struts 2如何解决此类问题呢?
下面就带着这些问题来依次找到解决的答案,并改在进阶式案例中完成对用户注册模块的优化。
5.2任务2Struts 2标签库
任务描述: Struts 2提供了大量的标签,Struts 2的标签库用于简化JSP编程,开发者只需要在标签中做少量配置,就可以实现各种常见效果。Struts 2标签与Action联系比较紧密,使用标签后,Struts 2会自动完成JSP层的显示数据、在Action层的采集数据等工作。
任务目标: Struts 2提供了大量的标签,如日期选择器、树形结构、主题、模板等,同时Struts 2还提供了对DWR技术、AJAX技术的支持,使Struts 2可以完成各种AJAX的效果。本任务的主要目标就是认识和了解Struts 2标签。
5.2.1Struts 2标签分类
早期的Java Web程序主要依靠Java代码控制输出,在这种情况下,JSP页面中将嵌入大量的Java代码,使用大量的if、else、for等分割页面中静态和动态的部分,整个页面显得非常凌乱。自JSP 1.1版本以后,增加了标签的功能,从此Java Web框架技术中也提供了丰富的标签。
Struts 1提供的标签已经可以在很大程度上简化JSP页面的编写,Struts 2则提供了更为强大的标签库,使用Struts 2的标签库可以大大简化数据的输出,同时也可以实现更为绚丽的效果。
与Struts 1的标签库不同,Struts 2的标签库提供的标签不依赖于任何表现层技术,也就是说,Struts 2中的大部分标签可以在各种表现层技术中使用,这些表现层技术主要包括JSP、Velocity、FreeMarker等。当然,并不是所有的Struts 2标签都可以在所有的表现层技术中使用,存在极少数的标签,在某些表现层技术中使用时会受到一定的限制。
Struts 1的标签库被分成了5类,分别是html、bean、logic、nested和tiles。Struts 2的标签库没有进行分类,所有的标签都被放到一个标签库中,用户指定前缀名,如s、struts等。
此外,Struts 1的标签在默认情况下不支持表达式语言(EL),如果需要支持的话,要增加strutsel.jar和相应的JSTL库。Struts 2在默认情况下支持OGNL、JSTL、Groovy和Velcity表达式。
Struts 2的标签按照使用方式分为两类,一类是UI标签,另一类是非UI标签。所谓UI标签是指用于生成HTML元素的标签;所谓非UI标签主要是用于数据访问、逻辑控制等操作的标签。
对于UI标签而言,还可以分为表单标签、非表单标签、AJAX标签。其中表单标签是用于生成HTML页面的form标签,以及普通表单元素;非表单标签主要是用于生成HTML页面的其他HTML元素或显示某些信息的标签;AJAX标签就是支持AJAX技术的UI标签。
对于非UI标签可以分为控制标签和数据标签。其中控制标签主要用于实现条件判断、循环控制;而数据标签主要用于输出ValueStack中的值,并完成国际化功能。Struts 2标签库的分类如图58所示。
图58Struts 2标签库的分类
5.2.2表单标签
Struts 2中所有的表单处理类都继承于org.apache.Struts 2.components.UIBean类,在该类中定义了一些通用属性,这些属性在所有的表单标签中都存在,感兴趣的读者可以阅读UIBean类的源代码。在UIBean类中定义的通用属性可分为模板相关属性、JavaScript相关属性、tooltip相关属性、通用属性4大类。表51~表54分别对这四大类通用属性进行了详细描述。表51模板相关属性
属性功 能 描 述templDir指定当前表单所用的模板文件目录theme指定当前表单所用的主题,如simple、xhtml、ajax等template指定当前表单所用的模板表52JavaScript相关属性
属性功 能 描 述onclick指定鼠标单击表单元素时触发的JavaScript函数或代码ondbclick指定鼠标双击表单元素时触发的JavaScript函数或代码onmousedown指定鼠标在表单元素上按下时触发的JavaScript函数或代码onmouseup指定鼠标在表单元素上抬起时触发的JavaScript函数或代码onmouseover指定鼠标在表单元素上悬停时触发的JavaScript函数或代码onmouseout指定鼠标移出表单元素时触发的JavaScript函数或代码续表
属性功 能 描 述onfocus指定表单元素得到焦点时触发的JavaScript函数或代码onblur指定表单元素失去焦点时触发的JavaScript函数或代码onkeypress指定按下键盘某个键时触发的JavaScript函数或代码onkeyup指定松开键盘某个键时触发的JavaScript函数或代码onkeydown指定按下键盘某个键时触发的JavaScript函数或代码onselect该属性用于下拉列表框等表单元素,指定选中该元素时触发的JavaScript函数或代码onchange指定当前表单所用的模板表53tooltip相关属性
属性默认值功 能 描 述tooltip无设置组件的tooltip值jsTooltipEnabledfalse设置是否支持JavaScripttooltipIcon/struts/static/tooltip/tooltip.gif设置tooltip图像的URLtooltipDelay500设置显示tooltip之间需要等待的时间(单位是毫秒)表54通用属性
属性功 能 描 述cssClass设置HTML标签的class属性cssStyle设置HTML标签的style属性title设置HTML标签的title属性disabled设置HTML标签的disabled属性label设置表单元素的label属性,该属性值将根据当前表单元素不同的设置显示在页面的适当位置,系统会在该属性后自动加上冒号“:”labelPosition设置label属性值显示的位置,该属性有上面(top)和左边(left)两个值,默认值为左边requiredposition设置必填字段显示的必填标记(默认是星号“”)的位置,该属性可设置的值为左边和右边(right)2个值,默认值为右边name定义表单元素的name属性,该属性值需要和Action类的相应属性对应required指定当前表单元素是否为必填字段,如果是必填字段,会在该表单元素的相应位置显示必填标记(默认是星号“”)tabIndex设置HTML标签的tabIndex属性value设置HTML标签的value属性

Java EE框架技术进阶式教程(第2版) pdf下载声明

本pdf资料下载仅供个人学习和研究使用,不能用于商业用途,请在下载后24小时内删除。如果喜欢,请购买正版

pdf下载地址

版权归出版社和作者所有,下载链接已删除。如果喜欢,请购买正版!

链接地址:Java EE框架技术进阶式教程(第2版)