Struts2 的个人理解

个人理解的Struts2  写给自己的 留着以后面试用

 

1.动态方法加载调用

    在struts.xml配置文件中:<constant name="struts.enable.DyanmicMethodInvocation" value="true"/>

 

2.OGNL表达式语言

     (1).读取strut2中的ValueStack中的值:

           假设action类中有 private Cat cat;private Dog dog;对象

           在jsp中 <s:property value ="#cat.name"/> 得到猫的名字

      (2) action 类通过ValueStack属性可以获得相关的值 在action 类中声明与类相同名的属性并get()set()

       注:个人理解这样会带来跨脚本攻击和sql注入等漏洞

3. Struts2的新特征

 

如果读者熟悉Struts1.X,会发现Struts2Struts1.X有了巨大的变化:

Action :

 Struts1要求Action类继承一个抽象基类。Struts1的一个普遍问题是使用抽象类编程而不是接口。

 Struts 2 Action类可以实现一个Action接口,也可实现其他接口,使可选和定制的服务成为可能。Struts2提供一个ActionSupport基类去实现常用的接口。Action接口不是必须的,任何有execute标识的POJO对象都可以用作Struts2Action对象。

线程模式:

 Struts1 Action是单例模式并且必须是线程安全的,因为仅有Action的一个实例来处理所有的请求。单例策略限制了Struts1 Action能作的事,并且要在开发时特别小心。Action资源必须是线程安全的或同步的。

 Struts2 Action对象为每一个请求产生一个实例,因此没有线程安全问题。(实际上,servlet容器给每个请求产生许多可丢弃的对象,并且不会导致性能和垃圾回收问题)

Servlet 依赖:  

 Struts1 Action 依赖于Servlet API ,因为当一个Action被调用时HttpServletRequest  HttpServletResponse 被传递给execute方法。

 Struts 2 Action不依赖于容器,允许Action脱离容器单独被测试。如果需要,Struts2 Action仍然可以访问初始的requestresponse。但是,其他的元素减少或者消除了直接访问HttpServetRequest  HttpServletResponse的必要性。

可测性:

 测试Struts1 Action的一个主要问题是execute方法暴露了servlet API(这使得测试要依赖于容器)。一个第三方扩展--Struts TestCase--提供了一套Struts1的模拟对象(来进行测试)。

 Struts 2 Action可以通过初始化、设置属性、调用方法来测试,“依赖注入”支持也使测试更容易。

你可能感兴趣的:(struts2)