1、struts2是什么

  struts2是用于企业级Web开发的框架,基于struts2开发Web应用程序,在开发效率、可扩展性、可维护性上都会大有提升。

2、struts2的优点

  struts2框架是典型的实现了MVC架构的框架,使用struts框架,通过struts2.xml文件配置非常容易的将数据层(模型)、控制层和视图展现层分离,开发出架构清晰的项目。

3、struts2的运行机制

  参见博客:http://www.cnblogs.com/tengpan-cn/p/5210155.html

4、struts2知识体系

  ① 如何搭建最简易的struts2程序

    结合struts2运行机制可知,首先在web.xml中配置struts2的过滤器;写struts2.xml文件(文件中可以include其他xml文件);写后台的action类(继承于ActionSupport类),类成员必须写get  set方法;编写前端展示页面即可;

  ② 关于struts.xml配置中的问题

  包(package):包的作用同Java中的包的作用是一样的,主要防止action的命名冲突,尤其是多个小组负责一个项目的时候;

    包可以继承,默认(必须在xml中写)继承 struts-default 包;

    namespace属性,值必须以“/”开头;对应客户端浏览器中的URL地址的一部分

  action标签:位于package标签里面,这个标签指定了后台逻辑,实现的是控制层;

    name属性对应的URL地址的一部分

    动态方法调用(通配符* 的应用)~~~~,此技术可以从客户端向服务器端的struts.xml文件中传递参数,实现动态配置;

    struts2是线程安全的,每次请求访问一个action 都会创建一个新的action对象。

    默认的action,可以为一个包配置一个默认的action,当找不到action的时候就会执行默认的action

  result标签,位于action标签里面,用于指定action执行完后,前台显示的内容,实现的是展示层;

    name属性默认值是success;

    type属性:可以设置为 dispatcher(服务器跳转到页面.jsp  .html等)、redirect(客户端跳转到页面)、chain(服务器端跳转到action)、redirectAction(客户端跳转到action) ;默认是dispatcher;

   关于struts中的路径:URL地址中的路径并不是文件的实际路径;也就是说,struts2寻找路径的方式不是按照文件保存路径去寻找的,而是根据package、action、result的这些对于关系找的。

   global-result标签:一个package对应一个global-result标签,这个标签内包含多个result标签,这个包内的所有action都可以使用这些result标签;

            其他包想要使用这些标签,可以继承这个包;

  

  前端与服务器端的数据交互

      前端向服务器端传递数据:通过get或者是post请求传递参数,在action中通过各种方式拿到request 请求即可     

      ①  ActionContext.getContext().get("request")  &  ActionContext.getContext().getSession()
      ②  ServletActionContext.getRequest();  
      ③  实现RequestAware、SessionAware接口(setRequest 与 setSession方法,入参是Map对象)(最常用)
      ④  实现ServerletRequestAware接口 
      或者是通过DOMmain(域模型) 直接赋值给action的属性。
      服务器端向前端传递参数:主要通过value stack 和 context stack,在服务器端通过request.setAttribute()  或者 session.setAttribute()将值放在值栈或者上下文栈中,然后通过ONGL表达式获取。《ONGL表达式》 
      也可以直接给action的属性赋值,在前端通过ONGL获取action的属性;
      关于传递中文乱码,解决方法有很多。推荐一种,就是自己写一个charsetEncoderFilter过滤器。具体参见《Encoding filter 编码过滤器
  动态结果集:在struts2.xml中获取action的属性值,这样产生动态结果集。获取方式${成员名};
  标签:
    <s:property value="ONGLExpression" default=""  />
    <s:set var="varName" value="varValue" />
    

    <s:bean var="dog" name="com.bjsxt.action.Dog" >
        <s:param name="name" value="'cacy'" />            <!-- cacy是Dog类的一个属性 -->
    </s:bean>
    这时候会将一个名字为dog的对象放在actionContext里面,类似于JSP的useBean
    

    

    控制标签:
      <s:if test="condition" ></s:if>
      <s:else if test="condition"></s:if>
      <s:else></s:else>
    

    

    遍历集合
      <iterator value="{1,2,3}" var="x"  status="status">
          <s:property />            //取出当前值 放在x变量中
          <s:property value="#status.count" />
        <s:property value="#status.index" />
      </iterator> 
 
   遍历Map
      <iterator value="#{1:'a', 2:'b' , 3:'c'}" var="x">
          <s:property value="key" /> |  <s:property value="value" />
          <s:property value="#x.key" /> |  <s:property value="#x.value" />    
      </iterator>
 
  <subset> 标签,截取集合
 
  关于% $ #的使用:
    %:配合{}使用,将字符串转化为ONGL表达式;
    #:相当于ActionContext. getContext(),可以用于访问context stack中的元素;用来构造Map  "#{"key1":"value1","key2":"value2"}"  (不太清楚为什么必须加#);用于过滤和投影;
    $: 在xml文件中取action的属性值。
 
 
                                    欢迎各位园友补充指正!!!

  

05-06 08:24