struts2总结
来源:互联网 发布:陕师大网络远程教育 编辑:程序博客网 时间:2024/06/16 09:00
1.struts2拦截器与过滤器的区别?
2.struts2的Action是不是线程安全的?如果不是 有什么方式可以保证Action的线程安全?
3.struts2怎么实现上传功能
4.struts2的拦截器都有哪些,各有什么作用?
5.struts2的action为什么是非单例,而springmvc的servlet是单例?
6.struts2和springmvc的区别?
1.struts2拦截器与过滤器的区别?
①拦截器是基于Java的反射机制的,而过滤器是基于函数回调
②过滤器依赖于servlet容器,而拦截器不依赖于servlet容器
③拦截器只能对action请求起作用,而过滤器则可以对几乎所有的请求起作用
④拦截器可以访问action上下文、值栈里的对象,而过滤器不能
⑤在action的生命周期中,拦截器可以多次被调用,而过滤器只能在容器(服务器)初始化时被调用一次,只有当服务器停止时才会被销毁
注: 1.Struts2拦截器是在访问某个Action或Action的某个方法,字段之前或之后实施拦截,并且Struts2拦截器是可插拔的,拦截器是AOP的一种实现。
2. 拦截器栈(Interceptor Stack)。Struts2拦截器栈就是将拦截器按一定的顺序联结成一条链。在访问被拦截的方法或字段时,Struts2拦截器链中的拦截器就会按其之前定义的顺序被调用。
2.struts2的Action是不是线程安全的?如果不是 有什么方式可以保证Action的线程安全?
答: 是线程安全的。非单例,在每个action上都要加@scope("prototype"),每一个请求都会产生一个新的action对象,不存在数据的共享
3.struts2怎么实现上传功能
之前的博客有详细代码
struts2中如何实现文件上传的:
a、借助一个fileUpload拦截器完成的;
b、最底层的还是借助的commons-fileupload这个组件
jsp:文件上传三要素: 1.表单提交方式: post (get方式提交有大小限制,post没有) 2.表单的enctype属性:必须设置为multipart/form-data. 3.表单必须有文件上传项:file
action:
private File upload;//动作类上传的属性必须是file类型,upload为表单的nameprivate String uploadFileName; //上传的文件名称,固定写法:name+FileName; private String uploadContentType; //上传文件的mime类型,固定写法: name+ContextType;
指定文件存放目录dir
调用FileUtils.moveFile(upload,new File(dir,uploadFileName));//剪切文件,推荐使用,无备份文件
配置文件:
<action name="uploadAction_*" class="uploadAction" method="{1}"> <interceptor-ref name="defaultStack"> <!-- 允许上传的文件的扩展名,多个扩展名用逗号分隔 --> <param name="fileUpload.allowedExtensions">.doc,.txt</param> <!-- 语序上传的mime类型 --> <param name="fileUpload.allowedTypes">text/plain,application/msword</param> </interceptor-ref> <result name="error">/error.jsp</result> <result name="message">/success.jsp</result> </action>4.struts2的拦截器都有哪些,各有什么作用?
我在这里列举几个有可能经常用到的
①.exception拦截器
<global-results><result name="syerror">/unauthorized.jsp</result></global-results><global-exception-mappings><exception-mapping result="syerror" exception="org.apache.shiro.authz.UnauthorizedException"/></global-exception-mappings>
主要是用来拦截异常信息,跳转到指定页面的,异常也均可以不处理(try/catch),直接配置接收,比如activiti中的方法授权的返回异常可以用上面的配置来接收.②token:令牌:主要用来防止表单重复提交,此拦截器不是默认拦截器,需要自己配置
页面配置:<s:token/>
- <package name="student" namespace="/student" extends="struts-default">
- <interceptors> //配置拦截器
- <interceptor-stack name="tokenStack"> //命名拦截器栈,名字随便
- <interceptor-ref name="token"/> //此拦截器为token拦截器,struts已经实现
- <interceptor-ref name="defaultStack" /> //默认拦截器,注意顺序,默认拦截器放在最下面
- </interceptor-stack>
- </interceptors>
- <default-interceptor-ref name="tokenStack" /> //让该包中所有action都是用我们配置的拦截器栈,名字和上面的对应
- <action name="changeinfo" class="sChangeInfoAction">
- <result name="success">/WEB-INF/student/person_info.jsp</result>
- <result name="invalid.token">/WEB-INF/student/person_info.jsp</result> //这个结果是拦截后返回的页面,必须要配置
- </action>
- </package>
③.Params拦截器
作用:将表单字段映射到值栈栈顶对象的各个属性中;如果某个字段在模型里没有匹配的属性,Param拦截器将尝试值栈中的下一个对象属性。
④.modelDriven拦截器
作用:用户执行请求时,ModelDriven拦截器将调用对应Action对象的getModel()方法,并将返回的模型(对象实例)压入到值栈中。
⑤.paramsPrepareParams拦截器
作用:Struts2.0中的modelDriven拦截器负责把Action类以外的一个对象压入到值栈栈顶,而prepare拦截器负责为getModel()方法准备model。
具体作用:
- 若Action类实现Preparable接口,则其需实现prepare()方法;
- 该拦截器将调用prepareActionMethodName()方法、prepareDoActionMethodName()方法或prepare()方法;
- 该拦截器根据firstCallPrepareDo属性值决定 prepareActionMethodName 和prepareDoActionMethodName的获取顺序;
- 该拦截器会根据alwaysInvokePrepare属性值决定是否调用实现了Preparable接口的 Action类的prepare()方法。
⑥fileupload:文件上传:参见第三条总结
5.struts2的action为什么是非单例,而springmvc的servlet是单例?
对于struts2因为参数是以属性的形式存储到值栈中,供所有方法使用,如果为单例,很容易出现并发问题.
而springmvc是以方法形参的方式来传递参数,并不会出现安全问题,用单例性能当然要更好.
6.struts2和springmvc的区别?
①、 springmvc的入口是一个servlet即前端控制器,而struts2入口是一个filter过滤器。
②、 springmvc是基于方法开发(一个url对应一个方法),请求参数传递到方法的形参,可以设计为单例或多例(建议单例),struts2是基于类开发,传递参数是通过类的属性,只能设计为多例。
③、 Struts采用值栈存储请求和响应的数据,通过OGNL存取数据,springmvc通过参数解析器是将request请求内容解析,并给方法形参赋值,将数据和视图封装成ModelAndView对象,最后又将ModelAndView中的模型数据通过reques域传输到页面。Jsp视图解析器默认使用jstl。
- [Struts2]Struts2学习总结
- 【Struts2框架】Struts2总结
- 【Struts2】Struts2要点总结
- struts2 总结
- Struts2总结
- struts2总结
- Struts2总结
- struts2总结
- struts2总结
- Struts2总结
- Struts2总结
- struts2 总结
- struts2总结
- struts2总结
- Struts2总结
- STRUTS2总结
- struts2 总结
- struts2总结
- Ubuntu 12.04下安装OpenCV 2.3.1,图像二值化
- 魔法宝石 spfa
- Android Activity四种启动模式
- 误差、欠拟合和过拟合
- 剑指offer(C++)——旋转数组的最小数字
- struts2总结
- Lintcode32 Minimum Window Substring solution 题解
- NANDflash
- android自定义view底部可上拉页面
- 第2章 软件工程与需求工程
- Android客户端代码保护技术-完整性校验
- 函数指针及函数指针数组
- 1210: OY问题 [搜索]
- hiho1515分数调查