1 Struts2框架的MVC实现
M:模型,Action组件、拦截器、ActionContext V:视图,Result组件(关联JSP)
C:控制器, StrutsPrepareAndExecuteFilter 控制器(过滤器)由框架提供,模型由Action实现,Action是一个普通的类(遵循一定的规范),视图可由JSP实现,三者结合就是Struts2 Web应用
2创建Struts2支持Web应用
(1)创建Web项目,选择J2EE版本为JavaEE5.0
(2)添加Struts2支持
1)将框架所需的jar包(Struts2组件库)拷贝到项目的lib结点中 2)修改web.xml文件
(3)创建相应的Action模型组件(4)创建JSP视图
(5)在src根目录下创建struts.xml(一般使用Copy改),配置Action及Result
3 Action的创建和开发:
1)、直接创建------必须包含一个public String execute()方法,返回类型为String.
2)、实现Action接口------5个常量字符串(errorinput login none success);接口方法:publicString execute() throws Exception
3)、继承ActionSupport---实现了extends ActionSupport接口;execute()方法只是返回success值。
<packagename="default" namespace="/demo" extends="struts-default">
<actionname="user"class="actions.UserAction" method="login"><resultname="success">/hello1.jsp</result></action></package>
4 Action中获取请求参数
(1)基本类型属性自动填充—使用get***()和set***()方法中寻找。
(2)基于模型的引用类型属性自动填充----创建JAVABean,再Action中private users user gettersetter方法
(1)基于模型驱动的引用类型属性自动填充—实现ModleDriven接口,实现其中getModel()方法。(2)Action中声明模型变量并初始化(3)ModelDriven接口的实现方法中返回模型对象。
5 Action中获取Web元素
1、基于容器的Web元素获取
(1)基于ActionContext获取Map类型的Web元素—方法是:getContext()
(2)基于ServletActionContext获取真实类型Web元素
2、基于框架注入的Web元素获取
(1)Action实现XxxAware接口(2)Action中声明Map类型变量
(3)XxxAware接口的实现方法中为Map类型变量赋值(4)通过put/get方法设置/获取Web元素的属性
6 一个Action中处理多个业务
【struts.xml配置与Action调用的三种方式】
(1)动态方法调用(DMI):action!method-----<s:formaction=“Struts.xml名字!Action中调用的方法名”
(2)逻辑Action定义:method属性---定义一组name不同,class相同。
(3)使用通配符简化action配置---使用*作为通配符。
7拦截器设计思想
(1)AOP,面向方面的编程思想(2)将影响Web请求处理的一些公共行为如:参数提取、类型转换、输入校验等封装成一个个可复用的模块。拦截器是有执行顺序的,是由上而下。
8拦截器定义:
<interceptors>
<interceptor name="..." class="..."/>---拦截器注册
<interceptor-stack name="...">---拦截器栈定义<interceptor-ref name="拦截器名字"/></interceptor-stack>
</interceptors>
9 拦截器的引用
<action ...>
<result...></result> ......
<interceptor-ref name="..."/> ......
<interceptor-ref name="defaultStack"/>
</action>
10 开发自定义自己的拦截器:
(1)拦截器类的创建
实现Interceptor接口、继承AbstractInterceptor类
(2)拦截器类的核心方法
核心方法:public String intercept()、方法中的参数ActionInvocation,该参数的核心方法
invoke()—如果有可调用的拦截器,则调用下一个拦截器。
getActionContext()—获取Action上下文
getActionContext().getSession()—获取Map类型session
(3)拦截器注册与引用
配置拦截器:先创建拦截器,再创建拦截器栈,然后在<Action>中调用拦截器栈。拦截器在后台运行,实现框架注入的条件:1)一个XxxAware接口(自定义)-----public interface UserAwre2)一个实现此接口的Action类3)一个能够完成注入的拦截器。点击登陆延长时间:Thread.sleep(2000);
在Xml中,<param name=”waitTime”>2000</parsm>
11 过滤器和拦截器的区别:
1)过滤器只能对配置的Action起作用,而过滤器可以对所有的请求起作用。2)拦截器可以访问Action上下文、ValueStack的对象,过滤器只能访问与请求与访问相关的对象。3)拦截器可多次调用,过滤器只调用一次。
12 Web请求处理结果数据的存储方式
(1)Value Stack :值栈,每次在Action组件调用之前,框架都会创建一个ValueStack对象。用来存储与Action请求处理相关的Action组件以及模型对象
(2)Stack Context:栈环境,用来存储本次请求相关的Web运行环境信息,如应用上下文、会话和响应等
13 OGNL表达式一般与Struts2标记一起使用,访问Web数据:
(1)对Value Stack中的数据:直接对属性进行访问
(2)对Stack Context中的环境数据:对其属性的访问要求以“#”号开始
14 Struts2标记的使用方法在JSP网页中引入Struts2标记库:
<%@taglib uri="/struts-tags" prefix="s"%>
15常用Struts2标记的属性及用法
1、控制标记
<s:if>、<s:elseif>、<s:else>: if和elseif有一个必选类属性test
<s: iterator>用于遍历集合中的元素:
id:指定集合中元素的ID引用 value:用来指定被迭代输出的集合,通常由OGNL表达式指定
status:代表当前迭代元素的状态,是IteratorStatus实例
2、数据标记
<s:action>:在JSP中引用一个Action
<s:property>
value:指定需要输出的属性值,如果没有指定则默认输出value stack栈顶对象 default:指定默认输出值,当要输出的值为null时输出 escape:是否转义输出内容中的HTML(true)
<s:debug>:生成一个调试链接 <s:bean>:创建一个JavaBean对象 <s:param>:用于设置一个参数,一般作为其它标记的子标记
3、UI标记
如表单标记:<s:form><s:textfield><s:password>等 非表单标记:<s:fielderror><s:text>等
16标记属性特点
struts2标记的属性具有类型,可分为字符串类型和非字符串类型 结论:如果在使用标签时, 忘记了某个属性是字符串类型,还是非字符串类型,那么有一个简单的方法,那就是不考虑它是什么类型,统一使用“%{…}”语法。
17逻辑视图名与物理视图资源映射
在Struts2中,Action处理完用户请求后,将返回一个普通字符串,这个字符串就是一个逻辑的视图名,Struts2通过配置将逻辑视图名与一个物理视图资源进行映射。
18视图类型
在<result>配置中通过type属性指定
dispatcher:请求转发到JSP redirect:请求重定向到其它Action、JSP、HTML chain:请求转发到另一个Action redirectAction:请求重定向到另一个Action stream:文件下载
19文件下载
1、Action配置中
<result type="stream">
<param name="contentType">application/octet-stream</param>
<param name="inputName">inputStream</param>
<paramname="contentDisposition">attachment;filenamea.rar"</param>
</result>
2、Action中必须编写一个方法
public InputStream getInputStream()
20文件下载1 --Action类的定义
public class DownloadAction extends ActionSupport{
private String path; privateString fileName;//此处省略set和get方法
public InputStream getInputStream(){//此方法与struts.xml中的配置对应
InputStream ins=null;
//获取引用服务器逻辑路径文件的输入流
ins=ServletActionContext.getServletContext().getResourceAsStream(path+"/"+fileName);
return ins;
}
}
21文件下载2--struts.xml配置
<actionname="download"class="com.hnjm.action.DownloadAction">
<!– action静态参数,指定下载的文件路径,Web资源路径 -->
<paramname="path">/WEB-INF/uploadfiles</param>
<!-- 使用StreamResult结果类型 -->
<resulttype="stream">
<!-- 指定下载的文件内容类型 -->
<paramname="contentType">application/octet-stream</param>
<!-- Action用于读取文件内容的属性名,如果是inputStream,可以缺省 -->
<paramname="inputName">inputStream</param>
<!-- 下载方式设置(inline-直接打开,attachment-打开对话框),默认文件名 -->
<param name="contentDisposition">attachment;filename=${fileName}</param>
<paramname="bufferSize">1024</param>
</result>
</action>
22【文件上传基本步骤】
1、文件上传表单(upload.jsp)
(1)表单enctype属性必须是:multipart/form-data
(2)文件选择器:
<s:file name="myfile" label="选择上传的文件"/> 选择上传文件:<inputtype="file" name="myfile">
2、实现文件上传的Action(UploadAction.java)
(1)定义与上传文件相关的属性,这些属性由拦截器自动填充
File xxx; //xxx是文件选择器的名称,用于获取上传的文件关连 String xxxFileName; //用于获取上传的文件名 String xxxContentType; //用于获取上传文档类型
(2)定义属性savePath,从配置文件中获取保目标目录(3)execute()方法:实现将临时文件保存到目标目录中
3、Action配置:通过静态参数配置目标目录
23 Struts2中支持的数据类型转换
1、基本数据类型转换(理解转换过程)
2、JavaBean类型转换(理解转换过程)
3、数组类型转换(一组同名参数与一个数组之间的转换)---定义一个数组privatefloat[]scores
4、集合类型转换(一组同名参数与一个集合对象之间的转换)----1)Action中private List<Float> scores;
2)JSP:<s:textfile name=”scores[‘chinese’]”. 3)success.jsp:<s:property name=”key”/><s:propertyname=”value”/>
24 自定义类型转换器(了解)
1、创建类型转换类:
(1)实现TypeConverter接口------实现convertValue()方法
(2)继承DefaultTypeConverter类----重写converValue()方法
(3)继承StrutsTypeConverter类----重写converFromString()、converToString()方法----转换成字符串
2、配置自定义转换器(通过资源文件进行配置)
(1)基于Action的局部配置---------仅对指定的Action起作用
1)在与Action组件同一目录下创建一个名为--------“ActionClassName-conversion.properties ”的资源文件,ActionClassName表示Action类名
2)在该文件中为Action中的对象属性配置相应的转换器类,格式如下:
属性名 = 完整路径的转换类名 ,如:point = com.hnjm.converter.PointConverter的资源文件
(2)基于应用的全局配置
1)在源代码根目录下创建一个名为-------“xwork-conversion.properties ”的资源文件
2)该文件中的配置信息如下:需要转换的自定义类名 = 自定义转换器类名,如:
com.hnjm.bean.Point=com.hnjm.converter.PointConverter
25常用内置校验器
required(必填校验器):字段不能为null requiredstring(必填字符串校验器):字段不能为null,且长度>0
stringlength(字符串长度校验器):字段长度在指定范围内 int (整数校验器):在指定范围内的整数值(类似的还有:long、short、double) date (日期校验器):指定范围内的日期 expression (表达式校验器):满足指定表达式的要求 fieldexpression (字段表达式校验器):要求指定字段满足表达式
email (邮件地址校验器):如果非空,必须是有效的邮件地址 url (网址校验器):如果非空,必须是有效的URL地址 regex (正则表达式校验器):检验字段值是否匹配一个正则表达式
26 校验器类型:字段校验器、非字段校验器
27 校验器的配置与引用
编写校验规则配置文件
(1)验证文件名的格式:Action类名-validation.xml
(2)验证文件内容:头部信息如下
<!DOCTYPE validators PUBLIC
"-//OpenSymphony Group//XWorkValidator 1.0.2//EN"
"http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
(3)正文配置有两种风格:字段校验风格、非字段校验风格
28 自定义校验器(了解)
1、定义校验器实现类,直接或间接实现validator接口
2、注册校验器类---在src根目录下创建一个名为Validators。Xml的文件。
3、引用校验器
29 手工编写校验程序
1、通过继承ActionSupport创建Action,改写其中的validate()方法
2、当校验出错时,调用addFieldError()方法将错误信息添加到错误列表中,框架将自动返回input视图
30 声明式异常处理
在struts.xml中声明异常处理的视图,将Action中抛出的异常在指定的视图中捕获并处理。
31 异常声明的类型
局部声明:在Action内部声明 全局声明:在Action之外声明
<action name="exception" class="com.hnjm.action.ExceptionAction">
<exception-mapping result="nullPointer" exception="java.lang.NullPointerException"/>
<result>/success.jsp</result> <resultname="input">/input.jsp</result>
<resultname="nullPointer">/exception.jsp</result> </action>
32 Java国际化原理
Java国际化主要使用3个类完成:Locale、ResourceBoundle、MessageFormat
33 Struts2框架支持的国际化
1、资源文件级别:Action级、包级、应用级、临时指定
2、JSP中访问国际化消息有三种方法:
(1)<s:text name="keyName"/> (2)<s:propertyvalue="getText('keyName')"/>
(3)Struts2的UI标记中用国际化信息设置label属性时,不直接对label设置,而使用key属性,即:key="keyName"
3、支持国际化的拦截器是i18n
34 Ajax工作原理
1、AJAX技术的核心是XMLHttpRequest对象,通过该对象发送异步请求和处理响应
2、readyState属性
返回当前的请求状态,有5个值,分别是:
0:请求未初始化 1:请求服务器连接已建立,但没有发出 2:请求已发出,服务器处理中
3:请求已处理,正在接收服务器响应信息,但是服务器尚未完成响应 4:响应已完成,可以访问服务器的响应
35 Struts2框架对Ajax的支持
Struts框架对Ajax的支持主要体现在提供了一系列的标记。要使用Struts框架下的Ajax标记,需要以下步骤:
(1)将Struts2框架lib下的dojo插件包添加到Web项目的库路径下。对应Struts2.2.1.1的dojo插件包名称为struts2-dojo-plugin-2.2.1.1.jar
(2)在JSP的顶部引入标记库
<%@ taglib prefix="sx"uri="/struts-dojo-tags"%>
(3)在JSP的head元素间插入<sx:head/>
35 常用的Ajax标记
Head div autocompleter submit a
36 H ibernate是一个开源的对象关系映射(ORM)框架,它对JDBC进行了轻量级的对象封装
37使用Hibernate:2个准备,2个配置,7个步骤
38使用MyEclipse开发工具添加Hibernate?
添加Hibernate支持 Hibernate反向工程 Session接口的常用方法
39 HQL查询语句
1、from子句、 select子句、聚集函数、 where子句、 order by子句、group by子句
2、关联查询 3、分页查询
40 JavaEE的三层结构:表现层 业务层/服务层 持久层/数据层