zoukankan      html  css  js  c++  java
  • SSI框架总结

    先来点文字性的描写叙述:

    MVC对于我们来说,已经不陌生了,它起源于20世纪80年代针对smalltalk语言的一种软件设计模式,如今已被广泛应用。近年来,随着java的盛行,MVC的低耦合性、高重用性、可维护性、软件project的可管理性等诸多长处使其在java平台中非常受欢迎,其间,也诞生了很多优秀的MVC框架,如专注于控制层的Struts、WebWork, Struts2, JSF等框架,专注于业务逻辑方面的Spring框架、专注于持久层的Hibernate、iBatis、Castor、JORM等框架。因为近期用了一次SSI框架,因此本文主要是对Strtus2、Spring、iBatis三个开源的MVC框架进行一个小结。


    Struts2主要来源于webwork框架,与Struts1相比,在数据传递方面,Struts2提供了更加强大OGNL标签功能,使其可以通过在action中定义变量来直接与jsp页面中的数据进行相互传值,省去了Struts1中的formbean;而在跳转控制方面,Struts2简化了配置文件的信息量,使页面和action之间的交换更加的简洁和直观,便于开发者的管理。


    Spring功能非常的强大,比方它的控制反转/依赖注入机制,省去了我们自己书写工厂模式的工作,实现类对我们将要用到控制类、业务逻辑类、数据訪问类、以及JNDI或者JDBC数据源的托管;Spring对AOP支持使我们在用户chmod.html' target='_blank'>权限控制、事务处理方面节省了非常多工作量;


    iBatis则是一种轻量级的OR Mapping框架,与Hibernate相比,iBatis提供了半自己主动化对象关系 映射的实现,开发者须要编写详细的sql语句,为系统设计提供了更大的自由空间,为sql语句优化提供了便利。


    以下这张图就是我们所用到的这三种框架的结合体,以下对其作以简介。




    在控制层,利用Strtus2标签功能,在Action中直接与jsp页面上的数据进行交互。在调用业务逻辑层应用时,Struts2提供了对Sping的支持。开发者须要完毕对struts.xml的配置工作和对各个Action类的编写。


    在业务逻辑层,利用Spring框架的依赖注入实现对业务逻辑类和DAO类的实例托管;在事务处理方面,利用Spring提供的面向切面的事务处理功能,使对数据的事务控制脱离于数据訪问接口实现;在对象关系映射方面,利用Spring对数据库连接池的托管和对iBatis框架的支持。开发者须要完毕对数据源的配置、对不同模块所相应的application*.xml文件的配置,以及对业务逻辑接口的定义和业务逻辑实现的编写。


    在持久层,利用iBatis提供的半自己主动化对象关系映射的实现,开发者须要编写详细的sql语句,为系统设计提供了更大的自由空间。另外,开发者须要完毕对SqlMapConfig.xml*SqlMap.xml的配置,以及对DAO接口的定义和DAO接口的实现。


    在各层之间进行交换的过程中,利用传输数据类进行数据的传递和交互。当中,传输数据类与数据库表一一相应。


    SSI框架可以减少我们代码的耦合度,增强了代码的健壮性和可重用性,加快了开发速度,可是也有一些不足之处,比方因为三种框架的配置文件较多,也给我们带来了一些不便,特别是对于较小的应用来说更是如此。

                                                                                                        

    一:首先引入struts2 spring ibatis 各自的jar包 在此就不一一罗列了。

    二:加入配置文件

       我们首先从web.xml文件说起 

       web.xml载入过程:
       1 启动WEB项目的时候,容器(如:Tomcat)会读他的配置文件web.xml读两个节点
             <listener></listener>和<context-param></context-param>
        2 紧接着,容器创建一个ServletContext(上下文) 这个WEB项目全部部分都将共享这个上下文
        3 容器将<context-param></context-param>转化为键值对并交给ServletContext
        4 容器创建<listener></listener>中的类的实例,即创建监听
        5 在监听中会有contextInitialized(ServletContextEvent args)初始化方法,在这种方法中获得:
                  ServletContext = ServletContextEvent.getServletContext();  
                  context-param的值 = ServletContext.getInitParameter("context-param的键"); 

         web.xml节点载入顺序
         节点的载入顺序与它们在web.xml文件里的先后顺序无关。即不会由于filter写在listener的前面而会先载入filter终于得出的结论是:listener->filter->servlet
         同一时候还存在着这样一种配置节点:context-param,它用于向 ServletContext 提供键值对,即应用程序上下文信息。我们的 listener, filter 等在初始化时会用到这些上下文 的信息,那么context-param 配置节是不是应该写在 listener 配置节前呢?实际上 context-param 配置节可写在任何位置,因此真正的载入顺序为:
    context-param -> listener -> filter -> servlet
         载入spring
         <listener> 
                 <listener-class> 
                   org.springframework.web.context.ContextLoaderListener  
                </listener-class> 
           </listener>
         终于结论:

         web.xml 的载入顺序是:[context-param -> listener -> filter -> servlet -> spring] ,而同类型节点之间的实际程序调用的时候的顺序是依据相应的 mapping 的顺序进行调  用的。

        打开web.xml文件,依据实际须要加入例如以下内容

    <!--上下文參数用于log4j以及spring中使用-->
    <context-param>
        <param-name>webAppRootKey</param-name>
        <param-value>/WEB-INF/log4j.properties</param-value>
    </context-param>
    
    <!--应用程序上下文參数,指定spring配置文件位置-->
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/beans.xml</param-value>
    </context-param> 
    
    <listener>
        <listener-class>org.springframework.web.util.Log4jConfigListener</listener
    
    -class>
    </listener>
    
    <!--监听器 用于初始化spring框架-->
    <listener>
         <listener-
    
    class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>


    在这说说SSI整合时的一些配置文件:

     1,contextConfigLocation:Spring容器启动时须要载入Spring的配置文件。默认是/WEB-INF文件夹下的applicationContext.xml文件

       当然也能够放在classpath下,能够包含多个spring配置文件,这就得依靠contextConfigLocation

    <!-- 载入spring的配置文件 假设文件名称为applicationContext.xml而且是在WEB-INF文件夹下 则无需此配置 -->
        <context-param>
    		<param-name>contextConfigLocation</param-name>
    		<param-value>/WEB-INF/beans.xml</param-value>
    	</context-param> 

    假设web.xml中没有配置context-param,spring的配置就像如上这段代码演示样例一下,自己主动去WEB-INF文件夹下寻找applicationContext.xml。此时,假设你改动applicationContext.xml的名称,或者移除它,再启动server,你会得到例如以下异常信息:

    1.nested exception is java.io.FileNotFoundException: Could not open ServletContext resource [/WEB-INF/applicationContext.xml]  
    

    这证实了其默认配置。默认配置情况下spring仅仅会去WEB-INF文件夹下寻找配置文件,而不会去classpath下寻找。
    假设我们不想将配置文件放在WEB-INF文件夹下呢?开发中常常在src以下创建一个config文件夹,用于存放配置文件。此时,相应的param-value改为:classpath:config/applicationContext.xml。
    一定要加上classpath,这告诉spring去classes文件夹下的config文件夹以下寻找配置文件。

    2,怎样启动Spring容器

    两种方法,一种以listener启动  一种以load-on-startup Servlet。

    <!-- 配置spring监听器 -->
    	<listener>
    		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    	</listener>

    另外一种

    <servlet>
     <servlet-name>context</servlet-name>
     <servlet-class>org.springframework.web.context.ContextLoaderServlet</servlet-class>
     <load-on-startup>1</load-on-startup>
    </servlet>
    
    
     

     3,整合Struts2

       

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


    4,Spring整合ibatis配置文件

      

    <bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
    		<property name="configLocation"> 
    			<value>classpath:SqlMapConfig.xml</value>
    		</property>
    	</bean>
    


    5,Struts.xml

    <constant name="struts.objectFactory" value="spring" />

    constant配置struts的常量(也可在struts.properties)文件里配置,将struts的对象工厂托由spring管理。


  • 相关阅读:
    PAT 1088. Rational Arithmetic
    PAT 1087. All Roads Lead to Rome
    PAT 1086. Tree Traversals Again
    PAT 1085. Perfect Sequence
    PAT 1084. Broken Keyboard
    PAT 1083. List Grades
    PAT 1082. Read Number in Chinese
    求最大公因数
    [转载]Latex文件转成pdf后的字体嵌入问题的解决
    [转载]Matlab有用的小工具小技巧
  • 原文地址:https://www.cnblogs.com/gcczhongduan/p/3989130.html
Copyright © 2011-2022 走看看