JAVA复习.docx
《JAVA复习.docx》由会员分享,可在线阅读,更多相关《JAVA复习.docx(23页珍藏版)》请在冰豆网上搜索。
JAVA复习
Struts2
什么是Struts?
是Apache软件基金会赞助的一个开源项目,是一个基于JavaEE的MVC开源实现。
是MVC设计模式中的一个经典产品,它为Servlet/JSP技术的应用提供技术框架
Struts项目的基本组成:
控制组件:
核心控制器和业务控制(Action)
模型组件:
JavaBean、EJB等
视图组件:
JSP、HTML页面等
配置文件:
web.xml、struts.xml等
web.xml文件:
所在目录为WEB-INF,主要用于配置Struts2的核心控制器,配置代码(P165)。
struts.xml文件:
核心配置文件,所在目录为WEB-INF\classes,主要用于负责管理Struts2框架的业务控制器Action,可在其中定义动作包、动作、拦截器等内容。
可以应用include标识将复杂的配置文件分为多个文件,代码如下:
struts-default.xml文件:
是struts2的预定义配置文件,保存在struts2-core类包中,定义了Struts2的各种常用类、动作包和拦截器。
在struts.xml定义动作包时需要使用extends关键字设置指定包名继承struts-default包,例如:
default.properties文件:
保存在struts2-core类包中,用于保存Struts2的各种默认属性。
常用属性如:
struts.action.extension:
定义struts2动作的扩展名,默认为action;
struts.i18n.encoding:
定义struts2的编码机制,默认值为UTF-8
default.properties文件中的所有属性可以通过自定义struts.properties(保存在src目录下)或struts.xml文件的constant标识进行修改,例如:
2.1struts2的控制组件
struts2的控制组件类型:
核心控制器:
过滤器
业务逻辑控制器:
Action
创建业务逻辑控制器步骤:
创建Action类
创建struts.xml配置动作包和动作
1.创建Action类
创建Action类方法:
POJO
实现Action接口
扩展ActionSupport类
扩展ActionSupport类创建动作类语法
•扩展ActionSupport类
•在动作类设置成员变量及对应传入参数的属性的setter和getter方法。
•动作类通过属性的setter方法获取客户端传来的数据,并保存在动作类变量中,客户端则通过属性的getter方法获取动作类的属性值
•动作类被访问后默认执行execute()方法:
publicStringexecute()throwsException
•动作类处理客户端请求后会返回一个字符串,每个字符串对应一个逻辑视图
•当动作类继承了ActionSupport后,通常使用以下一些常量作为动作执行后的返回值:
INPUT、SUCCESS、LOGIN、NONE和ERROR
2.在struts.xml中定义动作包和动作
定义动作包:
使用package标记,可以包含多个动作,常用属性如下:
namenamespaceextends
定义动作:
使用action标记,在动作标记内包含子标记定义结果、异常等内容,常用属性如下
nameclass(指定进行业务逻辑处理的动作类全限定性名称)
method
定义动作结果:
使用result标记,可以在一个标记对中使用一个或多个result标记为动作指定一个或多个视图,常用属性如下
name(定义结果的逻辑视图名字)type
2.2在Struts2项目中应用控制组件
步骤:
①创建web项目
②搭建struts2运行环境
③在web.xml文件中设置核心控制器
④创建一个扩展ActionSupport的动作类
⑤创建结果显示JSP文件,保存目录为WebRoot
⑥创建struts.xml,在其中定义动作包、动作等内容,保存目录为src
2.3执行动作中不同的方法
方法一:
动态方法调用(DMI),格式:
在URL中使用:
动作名!
方法名来调用动作的不同处理方法。
方法二:
通过在struts.xml中的每个动作中指定执行的业务逻辑方法来处理不同情况下的请求
方法三:
使用通配符。
通过在struts.xml中使用通配符可以在不同请求情况下执行不同动作方法。
常用结果类型
属性:
type
dispatcher:
默认结果类型,表示使用的视图技术是JSP,将请求转发给视图页面
redirect:
重定向到视图页面,参数不能传递
redirectAction:
动作转向结果类型,表示将访问转到其他动作
chain:
动作链结果类型,表示请求将转到一系列的其他动作进行处理
freemark:
表示使用freemark视图技术
struts.xml配置(P171)
Struts2标签
Struts2主要使用了Struts2标签库和OGNL表达式语言二项技术来简化表现层方面的开发。
Struts2提供了一个标签库:
struts-tags标签库,几乎所有struts2标签都整合到其中
struts2标签类型
UI标签:
•表单标签:
主要用于生成HTML表单
•非表单标签:
主要包含用于显示信息的标签,如:
actionerror、actionmessage
非UI标签:
•逻辑控制标签:
主要用于条件、循环等流程控制,如if、elseif、iterator
•数据标签:
主要用于数据存储和处理,如property、bean、text
Ajax标签:
主要用于支持Ajax,如显示日期的datetimepicker
struts2表单及其元素标签
•表单标签:
s:
form
常用属性:
method:
定义表单信息提交的方法,默认为post
•按钮标签:
•提交按钮:
s:
submit,用于提交表单数据
•重置按钮:
s:
reset,用于返回表单的默认值
•输入框标签:
•文本框标记:
s:
textfield,用于输入单行文本
•密码框标记:
s:
password,用于输入密码
•文本域标记:
s:
textarea,用于输入多行文本
•选择框标签:
•单选框标签:
s:
radio,用于在一组选项中互斥选择,即一次只能选择一项
•复选框标签:
s:
checkbox,可同时选择多个选项
•复选框集合标签:
s:
checkboxlist,用于选择多个选项,可一次设置多个复选框
value:
定义选择框的默认选中项
listKey:
指定集合元素中的某个属性作为选择框的value。
元素为Java对象,则指定为该对象的某个属性名;元素为Map对象,则指定为该对象的key或value
listValue:
指定集合元素中的某个属性作为选择框的label。
元素为Java对象,则指定为该对象的某个属性名;元素为Map对象,则指定为该对象的value或key
•列表框标签s:
select:
用于创建列表框
value:
定义列表的默认选中项
list:
定义列表的各列表项值,注意:
如果list属性不是一个字符串集合,而是一个Java对象或Map对象,则还须指定listKey和listValue两个属性
•s:
label
只读标签,用于输出指定属性的信息到浏览器
name:
指定需要输出的属性的名字
•常用struts2数据标签:
–s:
property:
用于输出指定属性的值到浏览器
–s:
param:
用于为其他标签提供参数,经常与s:
bean、s:
url等标签一起使用
–s:
bean用于创建一个JavaBean实例对象,经常嵌套使用param标签为该JavaBean实例指定属性值
属性name:
指定该JavaBean类的全限定性名称、
–s:
set:
用于定义一个新的变量
–s:
include:
用于将一个JSP或Servlet等资源包含到当前页面中,可通过param标签向被包含的页面传递参数
–s:
text:
用于显示资源文件中的指定key的属性值
–s:
url:
用于生成一个URL地址,经常使用s:
param标签来提供参数
•常用struts2逻辑标签:
•s:
if:
用于进行条件判断,如果条件为真,则执行该标签体内的代码
•s:
elseif:
用于进行条件判断,如果条件为真,则执行该标签体内的代码
•s:
else:
与s:
if结合使用,如果s:
if不满足条件,则执行s:
else后面的语句
•s:
iterator:
用于循环遍历集合或数组中的所有元素。
一般配合property>标识来输出所遍历到的元素
•常用非表单UI标签:
•s:
fielderror:
用于显示字段校验错误信息
•s:
actionerror:
用于输出动作类级别的校验错误信息
•s:
actionmessage:
用于输出动作类级别中的信息
使用主题模板
•Struts2提供了以下四种主题:
–simple
–xhtml
–css_xhtml
–ajax
•Struts2的默认主题是xhtml,可通过theme属性修改该默认主题,如:
formtheme=“simple”/>
Struts2拦截器
拦截器的作用是动态拦截Action调用的对象。
它提供了一种机制,使开发者可以在一个action执行之前和(或)之后插入需要的代码,也可以在一个action执行前阻止其执行,同时它也提供了一种可以提取Action中可重用代码的方式
拦截器其实就是一个实现了Interceptor接口的JAVA类,其中包含了以下三个方法:
voidinit()
voiddestory()
Stringintercept(ActionInvocationinvocation):
实现拦截功能
拦截器栈(链):
将多个拦截器按一定的顺序联结成一条链,在访问被拦截的方法时,拦截器链中的拦截器会按配置文件中所指定的顺序依次被调用
拦截器的配置
•拦截器在使用之前,必须在配置文件中进行配置。
–定义拦截器:
指定拦截器名字和拦截器类,包括拦截器和拦截器栈的定义
–使用拦截器:
在动作中对已定义好的拦截器的引用
•Struts2框架提供的所有拦截器都在struts-default.xml中配置;自定义的拦截器需要在struts.xml进行配置
•自定义拦截器方法:
–方法一:
实现Interceptor接口,并重写init、intercept和destroy方法;应用ActionInvocation接口的invoke方法执行下一下拦截器或动作
–方法二:
扩展抽象类AbstractInterceptor,并根据需要重写init、intercept和destroy方法;应用ActionInvocation接口的invoke方法执行下一下拦截器或动作
•如何只拦截指定方法?
使用Struts2所提供的拦截器方法过滤特性。
使用拦截器方法过滤特性语法:
–继承MethodFilterInterceptor抽象类,并重写doIntercept(ActionInvocationai)
–在struts.xml中使用拦截器时使用参数”includeMethods”来指定需拦截的方法;使用“excludeMethods”来指定不需拦截的方法。
struts2国际化概述
•国际化主要是指语言的国际化,通俗的讲就是在不修改程序内部代码的前提下,根据客户端所处的地区语言环境显示相应语言的界面。
•Struts2国际化建立在Java国际化的基础上,借助于拦截器和国际化资源文件,使得国际化的实现过程更加简单
struts2国际化资源文件
•在程序获得了客户端地区语言环境后,Struts2会查找struts.xml或struts.properties配置文件或根据资源文件的名称来加载国际化资源文件
国际化资源文件命名规则:
baseName_language_country.properties
•例如:
–message_zh_CN.properties
–message_en_US.properties
资源文件的类型
•全局资源文件:
对整个应用程序有效,必须保存在src目录下,注意:
全局资源文件名称需要在struts.xml中使用如下所示的形式定义:
•包级别的资源文件:
对包中所有类有效,需在包的根目录下新建package_language_country.properties资源文件
•动作类级别资源文件:
只对该动作类有效,需要在动作包下新建
动作类名_language_country.properties的资源文件
•临时的资源文件:
用于视图页面中输出国际化消息临时指定国际化资源的位置,此时需使用在i18nname=“XXX”>来指定资源文件(如:
XXX),可将该标签作为text>或表单标签的父标签。
临时资源文件必须存放在src目录下
资源文件的加载顺序:
•在动作类中访问国际化信息的加载顺序:
动作类级别资源文件>>包级别的资源文件>>全局资源文件
•在JSP页面中访问国际化信息的加载顺序:
•使用i18n>时:
临时资源文件>>全局资源文件
•没有使用i18n>时:
直接全局资文件
•如果在所有的资源文件中都找不到,将输出属性key的字符串值
Struts2文件上传概述
•Struts2使用Commons-FileUpload上传框架从HttpServletRequest请求中解析出所有的表单域,包括文件域和普通表单域
•Common-FileUpload框架是Apache组织下的jakarta-commons项目的一个子项目,借助于Commons-IO项目,该框架可以方便地将使用”multipart/form-data“数据编码的表单域解析出来
•必须将类包commons-fileupload和commons-io保存到WEB-INF\lib目录下
•使用表单File域来上传文件,同时必须设置表单的enctype=“multipart/form-data”以及method=“post”
•在动作中声明以下三个变量:
–FileXXX:
对应上传文件内容的变量
–StringXXXFileName:
对应上传文件的文件名
–StringXXXContentType:
对应上传文件的类型(可选)
设置上传文件的大小和类型
•在文件上传时可以限制文件的大小和类型
•使用Struts2框架所提供的fileUpload拦截器,通过指定以下两个属性可以很容易实现上述功能:
–allowedTypes:
指定允许上传的文件类型
–maximumSize:
指定允许上传的文件大小,单位为字节
•当上传文件不符合要求时,系统自动转到input逻辑视图
Struts2的类型转换
•数据类型转换的必要
•Struts2内置类型转换器
•基于OGNL的类型转换器
•自定义类型转换器
Struts2中的输入校验类型:
–客户端校验:
通过在HTML页面中的JavaScript来校验,方式:
自定义脚本或使用Struts2框架自带的客户端校验机制(设置form的validate属性为true即可)
–服务端校验:
通过后台加入检验代码实现
使用编程方式进行校验
在action类可以通过编程方式实现输入校验,根据校验代码的位置,又可为以下两种:
–使用业务逻辑处理方法校验
–使用validate或validateXxx方法校验
使用Struts2校验框架校验
•该方式是指将校验代码从action代码中剥离出来,以声明的方式放到XML配置文件中,从而简化了action代码。
•使用校验框架校验语法:
–必须定义一个与动作类同名、保存在同一目录下的且后缀为-validation.xml的XML校验配置文件,如动作类名为ValidateAction,则该XML文件名为ValidateAction-validation.xml
–必须在XML校验配置文件中对每个校验属性配置校验器
Struts2校验器的配置方式有两种:
字段型校验器的配置方式
非字段型校验器的配置方式
Hibernate
•ORM框架:
ORM(Object/RelationMapping,对象关系映射),用于将关系型数据库包装成面向对象的模型,即实现Java应用中的对象与关系数据库中的数据进行映射
•主流的ORM框架有hibernate、TopLink等,其中hibernate应用最广泛
映射文件
•用于设置持久化类与数据库表的映射关系,是hibernate的核心所在。
•一般以持久化类名+hbm.xml来命名,如Person.hbm.xml;并保存在与持久化类同目录下
•最主要的元素有:
–:
设置类-表之间的映射
–:
设置主键映射
–:
设置属性-表字段之间的映射
–、、:
设置关联映射
常用主键生成方式:
–assigned:
由应用程序生成
–identity:
使用数据库提供的自增长主键机制,如Mysql
–sequence:
使用数据库提供的sequence机制生成主键,如oracle
–native:
由hibernate根据数据库驱动定义,自动选择主键生成机制
hibernate对象状态
•在hibernate中,Java对象在整个生命周期中存在以下三种状态:
–瞬时状态:
在内存中刚刚创建的对象,数据库中没有数据与之对应,与session也没有关联
–持久化状态:
数据库中有数据与之对应,且与session有关联;持久对象状态发生改变时,事务提交时会自动更新数据库
–游离状态:
数据库中有数据与之对应,但当前没有session与之关联;对象状态发生改变,hibernate不能检测到,必须调用update()才能更新到数据库
Hibernate核心类和接口
•Configuration类:
–负责读取及解析Hibernate的配置信息
–创建SessionFactory实例
Configuratoncfg=newConfiguration();
cfg.configure();//读取配置文件
//创建SessionFactory实例
SessionFactorysf=cfg.buildSessionFactory();
•SessionFactory接口:
–缓存了解析后的配置信息
–在应用初始化时创建,一个应用程序只有一个会话工厂
–用于创建Session实例
Configuratoncfg=newConfiguration();
cfg.configure();//读取配置文件
SessionFactorysf=cfg.buildSessionFactory();
Sessionsession=sf.openSession();
•Session接口:
–Session代表与数据库之间的一系列操作
–所有持久化操作都需要使用该接口
–所有持久化操作完成后,需要关闭会话
Configuratoncfg=newConfiguration();
cfg.configure();//读取配置文件
SessionFactorysf=cfg.buildSessionFactory();
Sessionsession=sf.getCurrentSession();
•Transaction接口:
–使用Hibernate进行持久化操作必须显式开启事务
–使用Session实例开启事务
–持久化操作在事务提交后生效
Configuratoncfg=newConfiguration();
cfg.configure();//读取配置文件
SessionFactorysf=cfg.buildSessionFactory();
Sessionsession=sf.openSession();
//开启事务
Transactiontx=session.beginTransaction();
……//持久化操作
mit();//提交事务
关联映射
•类之间的关联是指一个类可以访问另一个类的属性和方法
•根据关联的导航性,可以分为单向关联和双向关联
•关联方式:
–一对一
–一对多或多对一
–多对多
单向多对一关联
•语法:
–需要在“多”的一方(主动方)的持久化类中声明一个“一”方(被动方)类型的属性
–在“多”的一方的映射文件中使用来声明多对一关联
–需要在中使用column属性设置指向被动方主键的关联外键
单向一对多关联
–需要在“一”的一方(主动方)的持久化类中声明一个元素为“多”方(被动方)类型的集合属性
–在主动方的映射文件中使用设置被动方类型的属性
–在标记对之间必须使用设置被动方映射表中与主动方映射表关联的外键字段名,以及使用来声明一对多关联关系
可在中使用cascade属性设置级联操作
双向一对多关联
–同时应用单向一对多和单向多对一关联的语法
可在一对多关联的设置中设置控制反转:
在中设置属性inverse=“true”可将控制权由“一”方转给“多”方
一对一关联
•一对一关系表在hibernate映射中使用两种处理方式:
–唯一外键:
是多对一的特殊形式,要求在多方映射表中指向一方的外键不能重复出现
–共享主键:
指的是被动方的主键通过外键的方式使用主动方的主键
唯一外键关联
–需要在关联主动方中声明一个被关联类型的属性
–需要在关联主动方的映射文件中使用来声明,并且设置其属性unique=“true”
–如果是双向关联,则在另一个关联方的映射文件中使用来声明
共享主键关联
–需要在每个持久化类中声明一个关联被动方类型的属性
–需要在每个持久类的映射文件中使用