struts2小记

1 Struts2与Struts1的联系与区别 为什么要用Struts2

Struts2不是从Struts1升级而来,而是有WebWork改名而来,

区别:
Struts2核心控制器是过滤器,面向切面编程,Struts1核心控制器是Servlet

具体区别可以看图形,点击这里

2.Struts2的核心是什么,体现了什么思想

Struts2的核心是拦截器,基本上核心功能都是由拦截器完成,拦截器的实现体现了AOP(面向切面编程)思想 

3 为何继承ActionSupport

答:因为ActionSupport实现了Action接口,提供了国际化,校验功能。

4 Struts2 如何定位action中的方法

答:
1 感叹号定位方法(动态方法)。
2 在xml配置文件中通过配置多个action,使用action的method指定方法。
3 使用通配符(*)匹配方法。

5 模型驱动与属性驱动是什么 模型驱动使用时注意什么问题

答:模型驱动与属性驱动都是用来封装数据的。
1.模型驱动:在实现类中实现ModelDriven<T>接口使用泛型把属性类封装起来,重写getModel()方法,
2.属性驱动:在实现类里定义属性,生成get与set方法,通过属性来拿值。

3.Struts2是怎样进行值封装的?

struts2的值封装实际上是采用了ognl表达式.以压栈的方式封装数据

6 Struts2如何进行校验

编程校验
1 继承ActionSupport,重写validate方法(针对所有方法)(服务器端编程,不推荐)。
2 校验框架

每个Action类有一个校验文件,命名 Action类名-validation.xml,且与Action类同目录,这是对action里面所有的方法进行校验。

7 谈谈Struts2 的国际化

答:
在struts2中是使用了拦截器来实现国际化。一般用全局范围
struts2的国际化分为三部分:
1.Action范围,
2.包范围,
3.全局范围,一般属性文件的名字是 前缀__语言名称_国家地区名(大写).properties。

8 OGNL是什么? 你在项目中如何使用它

OGNL是:对象图形导航语言。
Struts2中默认的表达式语言就是OGNL,任何取值默认都是OGNL中以压栈方式取值

9 Strust2如何访问Servlet API

答:
1:通过ActionContext可以获得request,application,session三个作用域
2:ServletActionContext去获取原生的API。

10 什么是拦截器 说说Struts2用拦截器来干什么 说出3个拦截器来,

在访问类的某个方法或者属性之前执行,拦截的是Action的请求,进行拦截然后在方法的执行前或者之后加入某些操作,
如:国际化,权限,效验等与源代码无关的操作。
国际化,表单重复提交,处理类型转换错误,日志拦截器,等等..

11. 如何实现自定义拦截器?

答:可以继承MethodFilterInterceptor重写doIntercept方法指定某个方法进行拦截,或者继承AbstractInterceptor,重写intercept方法,


14.为什么要继承默认的包?

     因为在Strtus2里面默认有很多的常量,拦截器,还有一些bean,如果继承默认的包,这些默认值和常量就会继承过来, 

15 .常见的有那些有十几种结果集类型,

常见的结果集类型有dispatcher,redirect,redirectAction,stream等

默认的是dispatcher,是转发

redirect指重定向,

16 开发项目时struts2在页面怎样拿值?

从值栈中或者是OGNL

17.怎么样用Struts2进行文件的上传或者下载

   Struts2里面已经提供了默认的拦截器来处理上传,只要在jsp用了s:file标签,然后在Action和Form中做些配置对应即可

下载是用了result为stream的类型,然后在action定义默认值是是InputStream,从硬盘上面读取文件到这个流赋值即可.

18.简单讲下struts里面的标签,说不少于5个

s:iterater  s:property s:form s:url s:if 等等

19.默认struts2里面的标签取值都是从那里取值的

默认都是从OGNL值栈里面取值的 

21.ValueStack分为那两部分,组成部分是什么,分别怎么访问

 分为对象栈和ContextMap ,对象栈里面放入的是Action及其用户定义的对象,在前台可以直接访问,在contextMap里面放入的是Servlet对象转化后map,譬如requestMap,sessionMap,访问的时候前面加#即可. 

22.标签<s:property>和el表达式有什么区别,

它们都可以从值栈里面取值,但是el表达式只能取属性有get set方法的简单数据类型,如果要取得数组的一些方法等复杂数据对象类型,那么就要用s:property标签
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章