Struts2

1.什么是Struts2?

2.使用Struts2需要的一些配置环境

@拷jar包,在Struts资源包的apps包下,bank项目

@拷配置文件,在apps包下,bank项目下的src

@拷过滤器配置,在apps包下,bank项目下web.xml

要点:作用相当于spring-mvc中的前端控制器,其中StrutsPrepareAndExecuteFilter为核心类

Struts2_第1张图片

@编写action,并配置到主sturts2配置中

要点:该类的作用相当于spring-mvc中的控制器,用于执行一些逻辑操作;

编写action的三种方法:

1.自定义action类,创建execute方法,在程序进入到action类中时,有相应的方法时执行相应的方法,没有时则执行execute()方法,方法返回值为String;

2.实现action接口,重写execute方法,方法的返回值为SUCCESS,NONE...;返回值为none时,在主配置文件中可以不用配置相应的result标签,其他的值则需要配置相应的标签,没有配置则报错!

3.继承actionSupport类

@主配置文件

Struts2_第2张图片

配置文件详解:

package标签:@ package用来区分多个相同action的name属性名,name为包名, @  同一个配置文件中多个包名不可一致     @namespace属性和action标签中的name属性共同构成url地址,以本图为例url地址则为/hello  @extends属性为默认值struts-default

action标签:@name属性,在浏览器中通过输入相应的值来匹配相应的action  @class属性值为action类的全类名

result标签:@name属性值为逻辑视图,必须和action类中返回的值一致  @type属性可设置是否进行重定向或者转发,redirect和dispatcher可以用来实现jsp页面之间的跳转;action之间的跳转使用redirectAction和chain

 @ 中间的值为该action要控制跳转到的jsp页面

Struts2_第3张图片
不同包之间的跳转需要配置namespace和action的名字

include标签:@用来引入其它配置文件(属性file),适合团队分模块开发

constant标签:

1.第一个为配置编码格式

2.第二个为设置配置文件更改不需要重新加载

3.更改action默认后缀,默认action或者不写

3.action的访问方法

@.传统访问,通过method属性指明

直接在action标签中指明要访问的action类中的方法,缺点是每一个逻辑都需要一个 action标签来实现

@.name属性的值使用通配符*,method属性中大括号+数字代表第几个星号为方法名(减少action类);最好不要直接使用*,在前面加一点标识,防止所有的请求会进入到同一个action中

使用通配符  * 来展现每个action的特有性质,同时可以使代码看起来更加简洁

Struts2_第4张图片

@.动态方法调用 映射路径+!+方法名.后缀,前提是要放开动态方法

4.动态结果页面配置

@在action类中定义一个字符串,不同的方法之中赋予不同的值(需要跳转的页面),在result标签中使用${}符号来取

5.servlet  API的操作,也叫请求参数的获取

@耦合方式 使用ServletActionContext类来获取HttpServletRequest对象

@解耦和方式  ActionContext.getContext().getParamters()来将包装进map集合中的请求参数获取出来

Struts2_第5张图片

@IOC注入:外部导入HttpServletRequest对象,实现ServletRequestAware接口

6.数据校验

@  action类首先继承actionSupport

@  校验全部方法 重写validate 方法;  如只需校验指定方法 自定义方法validate+校验的方法名(注意:方法名首字母大写),如上图

@  校验错误信息:Action类继承actionSupport方法,调用addFiledError方法来传递信息给页面,需要配置配置文件中result标签中的name值为input


7.配置全局视图:

所有的action跳转到同一个页面,使用global-results标签,注意:@一定要放在action配置之前@全局结果只能在同包下才起作用

8.异常处理:

@全局异常处理  :使用global-exception-mappings捕获全局异常;注意:要在全局结果配置之后,当全局异常捕获到某个action中的异常时,首先会在该action下查找对应的页面,找不到则到全局中找

@局部异常处理:通过exception-mapping标签来实现,在action标签下来捕获异常;result属性:表示要跳转的逻辑视图名   exception属性:表示java异常的全路径名

9.参数封装

@属性封装:在action类中定义 与表单中name值一样的属性,并且提供set方法,会自动帮我们把表单中的数据封装到对应的属性中

@对象封装(表达式封装):在action中定义一个对象属性,提供get和set方法,表单中的name属性值为对象点属性

@模型驱动封装:实现接口ModelDriven<需要封装的对象>,重写其中的抽象方法返回要驱动的模型对象,对象要实例化再返回,表单中的name和该对象的属性值一致

@集合,数组的封装和spring-mvc类似

10.如何传递数据到前台界面

@放入request域对象中

@放入值栈中,在页面通过OGNL表达式来取

a.值栈的位置:位于每个acion,在每个action中的值栈唯一,不同的action不一样

b.值栈结构:CompountRoot(对象):root值栈(常用root栈,map栈取值麻烦),底层由list集合实现;OgnlContext : map栈,底层map结构

@map栈中可以取出request,session,application对象的引用,从而调用这些类中的方法和属性

c.如何向root值栈中存值

@ 使用set方法  :会向root栈中压入一个map集合对象,然后把值存入map集合中

@ 使用push方法:直接将对象的引用压入root中

@使用get方法装:不会存入新对象引用,直接存放在当前action引用的下面

Struts2_第6张图片

@从root值栈中取出get方法存入的值

问题:为什么el表达式可以取出root值栈中的数据?

因为值栈是对域对象的增强,会从值栈中取出数据放到域对象中

*    通过标签来显示值栈内容

*    通过标签来实现取值

1.     取出root中集合中的内容的方法

@ 通过迭代标签遍历:三种方法


Struts2_第7张图片
Struts2_第8张图片

2.     取出字符串   

3.     取出对象

@取出set方法压入的值

@取出push方法压入的值

@jstl表达式获取

11.文件的上传

a. 导jar包(commons-io,commons-fileupload);编写前端页面,上传数据的表单

b.编写action  定义三个变量(固定格式)  File  src,上传文件的临时目录;String  srcFileName ;文件名  String srcContentType

c.图片的上传路径配置

1.在web.xml中配置初始参数来配置一个真实的上传路径

2.在action类中取出配置的初始参数值作为上传路径进行配置

12.OGNL表达式     对象导航语言

@ ***获取域对象的值:首先根据域对象的引用取出map值栈中相应的被包装过的域对象的map集合(不能强转成相应的域对象),然后再存入相应的域对象中;通过#号+域对象在map栈中的对象引用 . 域对象中的key

@ 构建map集合

@ %用来标识ognl表达式

@  $ 主要用于国际化验证和配置文件中取数据(例如:动态结构页面的配置)

@投影过滤:获取集合中所有对象的age属性的值

13.拦截器(和spring-mvc拦截器的区别):

概念:

1.理论上可以拦截一切资源

2.拦截器只能拦截方法

定义拦截器:调用invoke方法来给所有的方法放行

a1.自定义类,实现接口Interceptor 接口

a2.继承AbstractInterceptor

a3.继承MethodFilterInterceptor:  可以拦截到具体的方法,最常用

b.声明和使用拦截器

b1.声明拦截器,在package标签下配置

b2.使用拦截器,在action标签下配置(局部拦截器)

c.如何放行不拦截的方法

d.配置全局拦截器(注意一定要显示调用默认的拦截器栈,否则默认功能全部丢失)

Struts2_第9张图片

d1.指明默认使用的action标签,action标签中的类名不写时,默认是ActionSupport类,返回的逻辑视图为success

14.struts常用标签的使用

@表单标签 

Struts2_第10张图片

@通用标签  (if,else if,else; iterator; debug; property)

15.servlet和action的区别:servlet是单实例,action是多实例

16.日期转换器

a   自定义类继承数据转换类  strutsTypeConvert

b   重写抽象方法

c.  编写配置文件:名字固定——   xwork-conversion.properties ; 固定位置——放在src下面

17.产生json数据

a.导入jar包,json数据插件包


Struts2_第11张图片

你可能感兴趣的:(Struts2)