struts2复习

本文详细介绍了Struts2框架的基本概念、MVC实现原理、Web应用创建步骤、Action开发方式及参数获取方法等内容,并深入探讨了拦截器的设计思想、自定义拦截器的实现方式、文件上传与下载的实现流程。
摘要由CSDN通过智能技术生成

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的三层结构:表现层    业务层/服务层      持久层/数据层


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值