struts2总结

本文探讨了Struts2与SpringMVC框架的主要区别,包括架构设计、线程安全性、文件上传处理等方面的内容,并深入讲解了Struts2的拦截器机制及其常见应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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/>

  1. <package name="student" namespace="/student" extends="struts-default">  
  2.     <interceptors> //配置拦截器  
  3.         <interceptor-stack name="tokenStack"> //命名拦截器栈,名字随便  
  4.             <interceptor-ref name="token"/> //此拦截器为token拦截器,struts已经实现  
  5.             <interceptor-ref name="defaultStack" /> //默认拦截器,注意顺序,默认拦截器放在最下面  
  6.         </interceptor-stack>  
  7.     </interceptors>  
  8.            
  9.     <default-interceptor-ref name="tokenStack" /> //让该包中所有action都是用我们配置的拦截器栈,名字和上面的对应  
  10.   
  11.     <action name="changeinfo" class="sChangeInfoAction">  
  12.         <result name="success">/WEB-INF/student/person_info.jsp</result>  
  13.         <result name="invalid.token">/WEB-INF/student/person_info.jsp</result> //这个结果是拦截后返回的页面,必须要配置  
  14.     </action>  
  15. </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


内容概要:本文档详细介绍了一个基于MATLAB实现的跨尺度注意力机制(CSA)结合Transformer编码器的多变量时间序列预测项目。项目旨在精准捕捉多尺度时间序列特征,提升多变量时间序列的预测性能,降低模型计算复杂度与训练时间,增强模型的解释性和可视化能力。通过跨尺度注意力机制,模型可以同时捕获局部细节和全局趋势,显著提升预测精度和泛化能力。文档还探讨了项目面临的挑战,如多尺度特征融合、多变量复杂依赖关系、计算资源瓶颈等问题,并提出了相应的解决方案。此外,项目模型架构包括跨尺度注意力机制模块、Transformer编码器层和输出预测层,文档最后提供了部分MATLAB代码示例。 适合人群:具备一定编程基础,尤其是熟悉MATLAB和深度学习的科研人员、工程师和研究生。 使用场景及目标:①需要处理多变量、多尺度时间序列数据的研究和应用场景,如金融市场分析、气象预测、工业设备监控、交通流量预测等;②希望深入了解跨尺度注意力机制和Transformer编码器在时间序列预测中的应用;③希望通过MATLAB实现高效的多变量时间序列预测模型,提升预测精度和模型解释性。 其他说明:此项目不仅提供了一种新的技术路径来处理复杂的时间序列数据,还推动了多领域多变量时间序列应用的创新。文档中的代码示例和详细的模型描述有助于读者快速理解和复现该项目,促进学术和技术交流。建议读者在实践中结合自己的数据集进行调试和优化,以达到最佳的预测效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值