zoukankan      html  css  js  c++  java
  • Struts2 知识体系

    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的属性值。
     
     
                                        欢迎各位园友补充指正!!!

      

  • 相关阅读:
    分布式消息系统Kafka初步
    webService 学习
    一个周末掌握IT前沿技术之node.js篇
    mount
    dd
    fsck
    resize2fs
    mkfs
    parted
    tune2fs
  • 原文地址:https://www.cnblogs.com/tengpan-cn/p/5400582.html
Copyright © 2011-2022 走看看