Struts2

1.什么是Struts2?

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

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

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

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

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

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

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

编写action的三种方法:

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

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

3.继承actionSupport类

@主配置文件

配置文件详解:

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页面

不同包之间的跳转需要配置namespace和action的名字

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

constant标签:

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

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

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

3.action的访问方法

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

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

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

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

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

4.动态结果页面配置

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

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

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

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

@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引用的下面

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

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

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

*    通过<s:debug/>标签来显示值栈内容

*    通过<s:property/>标签来实现取值

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

@ 通过<s:iterator/>迭代标签遍历:三种方法


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.配置全局拦截器(注意一定要显示调用默认的拦截器栈,否则默认功能全部丢失)

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

14.struts常用标签的使用

@表单标签 

@通用标签  (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数据插件包


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,117评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,328评论 1 293
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,839评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,007评论 0 206
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,384评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,629评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,880评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,593评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,313评论 1 243
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,575评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,066评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,392评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,052评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,082评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,844评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,662评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,575评论 2 270

推荐阅读更多精彩内容

  • 概述 什么是Struts2的框架Struts2是Struts1的下一代产品,是在 struts1和WebWork的...
    inke阅读 2,182评论 0 50
  • action中如何接受页面传过来的参数 第一种情况:(同名参数) 例如:通过页面要把id=1 name=tom a...
    清枫_小天阅读 2,860评论 1 22
  • 非本人总结的笔记,抄点笔记复习复习。感谢传智博客和黑马程序猿记笔记啊记笔记 Ognl的简介 Ognl是独立的项目,...
    键盘瞎阅读 484评论 0 2
  • 1.OGNL 1.1 OGNL 概述 OGNL,全称是 Object-Graph Navigation Langu...
    Wizey阅读 349评论 0 0
  • 把自己不清楚的内容记下来,用碎片时间记忆
    胖丁岚阅读 156评论 0 0