Struts2总结1

为什么使用Struts等框架技术?
    让我们的开发变得简单,节省项目成本。
基本的开发模式(不用框架的情况下)
    1、数据表        2、java实体类(封装从数据库中查询出的数据)        3、数据访问对象dao    4、jsp/servlet
MVC:
    1、Model 模型:模型的职责是负责业务逻辑,包括两部分:业务数据和业务处理逻辑。如实体类、service、dao都属于模型层
    2、view 视图:视图的职责是显示界面和用户交互 属于视图的类是不包含业务逻辑和控制逻辑的     JSP:如果页面中有<%%>就不能算是视图层的类,或者jsp中有转发或者重定向的控制逻辑也是不可以的。
    3、Controller控制器:控制层是视图层和模型之间的桥梁用于控制流程。 比如AcctionServlet
在web.xml中配置Struts2的前端控制器: 用filter实现的
    
<filter>
        <filter-name>Struts2</filter-name>
        <filter-class>
            org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
        </filter-class>
    </filter>
    <filter-mapping>
        <filter-name>Struts2</filter-name>
        <url-pattern>/*</url-pattern>   表示所有的请求都要经过该过滤器
    </filter-mapping>


Struts的优点:
    1、数据的自动封装:根据页面组件的name属性,自动封装到action中对应的name属性中    如:在jsp中<input name='name' type='text'> 在action中 会自动的给属性private   String   name赋值
    2、数据的自动传递:Action中的属性可以直接用EL表达式在jsp页面中获得 如:${name}
配置文件Struts.xml:
   
 <Struts>
        <package name="test" extends="struts-default" namespace="/test">
            <action name="welcome" class="com.cn.WelcomeAction" method="">
            <result name="success">/jsp/welcome.jsp</result>
            <result name="fail>/jsp/nameform.jsp</result>
            </action>
        </package>
    </Struts>


method:用于指定在对应的类中要执行的方法名,该方法的返回值必须是String类型,如果没有method=“”属性默认执行execute方法。
extends = "struts-default" 继承的包的name,一般继承Struts2默认提供的struts-default包,该包中定义了很多Struts2应用必须的组件(如:拦截器)
<action name="nameform">中只有name属性时,没有class属性Struts框架会默认为该<action>添加一个class作用是转发到对应的<result name="success">中指定的页面


8、OGNL表达式:
    ognl封装在ognl.jar包中
    EL表达式:EL表达式把数据从四个方面取出来(pageContenxt、request、session、application)中取出来显示或者计算。El表达式解决了java代码和HTML不匹配的问题。El表达式用字符串表达式替换了java代码用来表示对数据的获取和计算。


Ognl引擎访问对象的格式:Ognl.getValue("Ognl表达式",root对象);root对象是Ognl操作的主要对象
    1、基本类型属性   Ognl.getValue("id",foo);    Ognl.getValue("name",foo);
    2、数组、List属性  :属性名[下标] Ognl.getValue("array[0]",foo)    Ognl.getValue("list[1]",foo);
    3、map属性Ognl.getValue("map.one",foo);    Ognl.getValue("map['two'],foo);     one、two都是key值
    4、基本运算:Ognl.getValue("id+100",foo);
    5、调用方法:Ognl.getValue("name.toUpperCase(),"foo);      Ognl.getValue("list.size()",foo);
    6、调用静态方法,以取出的属性为参数,调用静态方法的格式:@类名@方法名
            Ognl.getValue("@java.util.Arrays@toString(arry)",foo)
    7、Ognl只能创建Map 和list对象
        创建Map对象    注意:#号不能丢Ognl.getValue("#{1:'java',2:'javajava',3:'javajavajava'}", null); 
9、OGNL引擎的基本结构:ognl引擎、root对象(ognl操作的对象)、context对象(就是一个map,用于存放一个和整个系统都相关的公共数据);
    当有了ongl引擎,在访问中有一些数据时每一次访问都需要用到的,这些数据就可以保存在context对象中
    Ognl.getValue("name",root); 不加 # 表示从业务对象root中取出数据
    Ognl.getValue("#num",root); 加# 表示从公共对象context中取出数据


10、Xwork对Ognl的扩展:
    CompoundRoot对象;在XWork中,root对象被改为类似”栈"一样的存储空间,在该对象空间内可以存放多个root对象;
当去数据符合“栈'的规则,如果OGNL表达式是name在CompoundRoot从栈顶开始依次看是否有name属性。
    Context(Map)对象


11、ValueStack基本结构
        Struts将之前讲的XWork对Ognl的扩展这一套机制封装起来,这个对象叫做ValueStack
Struts2在启动时,会创建一个ValueStrack对象,当用户发送请求到对应的Action时,Struts2会把当前被请求的Action1放入CommpoundRoot对象的”栈空间"栈顶,请求结束,Action1会被清除,当下一次另一个请求到来时,Struts2会把该请求对应的Action2放入栈顶所以我们可以通过Ognl表达式访问CompoundRoot对象栈顶的Action


12、ValueStack核心概念
    Struts2在请求到来时,首先会创建一个Valuestack;然后,把当前的Action对象放入栈顶(CompoundRoot);Struts2会把ValueStack存在request中属性为“struts.valueStack”,所以标记库可以访问到valueStack
    Struts2的很多标记就是通过访问ValueStack获得数据的:
            通过ognl从valueStack取数据,并且显示:
                        <s:property value = "ognl..."/>
            省略Value,取出ValueStack的栈顶 <s:property/>
            通过ognl从Valuestack取出集合,依次将集合中的对象置于栈顶,在循环中,valuestack栈顶即为要显示的数据
                       
 <s:iterator value = "ognl...list">
                                            <s:property value = “name"/>
                        </s:iterator>



13、EL表达式从 pagecontext、request、session、application四个范围中查找name属性,但是name属性是放在Action中的;Action存放于Valuestack中,valuestack存放于request中,也就是说在request中,我们是不能直接找到name的,但是我们为何却可以用EL表达式呢,这是因为Struts支持EL表达式,它通过StrutsRequestWrapper重写了getAttribute方法。如此,在编程过程中,如果丌使用getAttribute方法,request的使用和乊前没有区别,如果调 用getAttribute方法,则会调用Struts2框架重写的方法。



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值