struts2,你必须知道的理论

已有 46 次阅读2017-6-9 21:00 |个人分类:struts|系统分类:学习纪录| struts, command, 过滤器, 控制器, 拦截器

1 Struts2与Struts1的联系与区别 为什么要用Struts2
struts1与struts2都是mvc经典实现模式。
struts2.不是从struts1升级而来,而是由WebWork改名而来,而WebWork只是XWork加了很多Web拦截器而已
2.什么是xwork
无论是struts2还是webwork底层都是xwork。xwork是一个标准的command模式实现,并且完全从web层脱离出来。xwork提供了很多核心功能:
前端拦截器,运行时表单属性验证,类型转换,强大的表达式语言(OGNL)ioc容器等
3.什么是命令模式
是一种设计模式,它尝试以物件来代表实际行动。将一组行为抽象成对象,实现二者之间的松耦合。这就是命令模式
4.Struts2与Struts1的区别。
核心控制器改为了过滤器(过滤器的级别比Servlet级别高)
5模型驱动与属性驱动
模型驱动实现了ModelDriver<T>,重写getModel方法。然后再类里创建该属性类的实例。通过这个实例,拿到封装进来的值,拿返回值的时候进行值拷贝
属性驱动:在实现类里定义属性,生成get,set方法,通过属性来拿值
6.struts是怎么进行值封装的
struts2值封装,采用了ognl表达式
struts2的拦截器经过模型驱动时会先判断action是否实现了ModelDriven,如果是则拿到模型的实例放在了栈的顶部,
到属性驱动的时候会从栈里面把栈顶的实例给取出来,从页面传进来的值放在一个map集合当中,
通过map集合进行迭代会通过ognl技术把值封装到实例中。
7.struts2如何进行校验
1.继承ActionSupport,重写validate方法(针对所有方法)(服务器端编程,不推荐)。
2.validateXxx方法(Xxx代表的是方法名,针对某个方法进行效验)
3.如果有错误就把错误信息放在FieldError中,并且跳转到指定的错误业务类,没有就会进行action方法的调用
8. 校验框架
每个Action类有一个校验文件,命名 Action类名-validation.xml,且与Action类同目录,这是对action里面所有的方法进行校验。
对Action里面的指定方法做校验使用Action的类名-访问路径_方法名-validation.xml。
如:StudentAction-student_add-validation.xml
在效验文件里又分为两种:
字段校验:字段用什么校验器来校验。
非字段校验:是用校验器校验什么字段。
通俗点讲:字段校验:校验谁,用什么方法。
非字段校验:用什么校验,校验谁 。
9.ognl在项目中如何使用
ongl是图像导航语言
struts2的类型转换也是通过ognl来实现的。
Struts2中默认的表达式语言就是ognl,struts2的取值设值都是通过ognl来实现的,struts2要依靠它的标签才可以使用ognl
10.ongl的优势
1 能够调用对象实例的方法
2 能够调用类的静态方法
3 操作集合对象
4 访问Ognl上下文
11.Strust2如何访问Servlet API。
1:通过ActionContext可以获得request,application,session三个作用域(struts2实际上是通过适配器来把servlet的api转换为一个map,
并把这些map放在ActionContext里面)。
2:通过ActionContext的子类ServletActionContext去获取原滋原味的API。
3:可以通过实现ServletRequestAware接口,重写里面的setServletRequest方法可以获得request,实际上是通过set的依赖注入
12.Struts2拦截器
在访问类的某个方法或则属性之前执行,拦截的是action的请求,进行拦截之后在方法执行前加入某些操作,比如国际化,权限,校验等于源代码无关的操作
13.拦截器有哪些
国际化,表单重复提交,类型转换,自动装配,数据封装,异常处理,模型驱动,请求参数,处理类型转换错误,日志拦截器
14.如何实现自定义拦截器?
可以继承MethodFilterInterceptor重写doIntercept方法指定某个方法进行拦截,或者继承AbstractInterceptor,重写intercept方法,
15.ActionContext是用来干什么的。
通过ActionContext这个类来可以获得:request,application,session,Locale、ValueStack,ConversionErrors
16.为什么要继承默认的包
因为在Strtus2里面默认有很多的常量,拦截器,还有一些bean,如果继承默认的包,这些默认值和常量就会继承过来
17.type类型
redirect
dispatcher
redirectAction是重定向到一个action
stream是返回一个流,一般用在文件下载上面
18.怎么样用Struts2进行文件的上传或者下载
Struts2里面已经提供了默认的拦截器来处理上传,只要在jsp用了s:file标签,把s:from的enctype 属性设置为 multipart/form-data,然后在action里面定义三个字段 File file ,String [file]ContentType,String [file]?FileName即可,如果有多个文件上传,那么就用List<File>来接受,然后把接受到的File构建成FileInputStream,转化成硬盘上面的文件即可(用输出流)
下载用了resust为stream的类型,然后在action定义四个属性,默认的有个是InputStream 的类型叫inputStream的,从硬盘上面读取文件到这个流赋值即可.
19.struts2.使用到的设计模式
命令模式
责任链模式
组合模式
20.什么是责任链模式
在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链。请求在这个链上传递,直到链上的某一个对象决定处理此请求。发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求,这使得系统可以在不影响客户端的情况下动态地重新组织和分配责任。


路过

鸡蛋

鲜花

握手

雷人

评论 (0 个评论)

facelist

doodle 涂鸦板

您需要登录后才可以评论 登录 | 立即注册

Copyright;  ©2015-2017  知了堂学习社区  Powered by  知了堂Edu!     ( 蜀ICP备16011312号-1 )