欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

springSide3框架的笔记

程序员文章站 2022-07-03 23:23:18
...

首先,从官网下载的springSide3并不具备我所需要的jar包,几个列子和我的编写习惯有很大冲突。

仔细观察目录结构发现无法像struts2.0一样,把列子改一下就可以架设成功了。

 

没办法,下载包用处不是很大,还是看文档把——http://wiki.springside.org.cn/display/springside3/Home。

 

 

在文档中,首先看到了“快速开发指南”,进去看看。

 

一键式安装,唉,没兴趣,看看别的。

 

还是看看“完全技术参考手册”吧,进去后看到。

 

1. 总述

2. 持久化

2. Web

3 企业服务

4.常见事项

5 开发过程

不用说先看看前四项把,只是看看而已。

 

好了,5分钟到了 看完了把。开始实践把。

 

开始看第五项“开发实践指南 ”,

 

重点在这里:

1. SpringSide风格项目

进去后:

一、原理

    SpringSide使用maven的archetype插件 进行项目生成,新版的archetype2.0插件比以往有了大幅提升。

    SpringSide3.0在archtypes目录里存放使用Velocity语法的项目模板。

    新生成的项目中将包含保证能跑起来的项目骨架、配置文件与示例代码。

二、预要求

  • 设置环境变量JAVA_HOME指向JDK5.0安装目录。
  • 下载Maven2.0.9springSide3框架的笔记 (all in one版已自带),并在环境变量PATH中添加 maven下载目录/bin。
  • 初始化SpringSide,双击bin/install.bat安装springside-core.jar 和两个archetype项目。

三、步骤

  1. 双击bin/new-project.bat,按提示输入参数。
  2. 在tools/generator/generated-project目录下将生成新项目。
  3. 进行必要的配置,如修改数据源,参考Hibernate
  4. 将项目加入版本管理系统向团队分发项目。

       如果不打算在团队中使用maven,使用copy-jar.bat命令初始化依赖的jar到/webapp/WEB-INF/lib中,并将这些jar加入版本管理系统。 

五、生成结果

  • maven的pom.xml 及maven格式的目录结构。
  • Eclipse 3.4.1 for JavaEE 项目文件,含符合maven格式的目录设置,UTF-8及JDK1.5设置等。
  • 配置文件范例
  • 源代码范例

SpringSide使用maven的archetype插件 进行项目生成的,不过我可不喜欢用maven 开发项目,没办法先生成个例子项目把(Struts真好,复制,粘贴,项目就是我的了 哈哈)。

 

按照步骤三的方法,经过漫长的等待,终于生成了一个例子项目。

 

导入到eclipse,晕死 目录还真乱,我要改造他,当然也可以不改造,我只是想让他看起来更舒服。

 

刚生成时的目录结构:

springSide3框架的笔记

改造后的目录结构。

springSide3框架的笔记

 

 

好了,顺眼了,看看他都有什么东西吧。

 

1.user增删改差示例。

2.权限的示例。

 

先不管这些,先看看配置文件:

 

1.applicationContext.xml

Xml代码 springSide3框架的笔记
  1. <? xml   version = "1.0"   encoding = "UTF-8" ?>   
  2. < beans   xmlns = "http://www.springframework.org/schema/beans"   xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"   
  3.      xmlns:jee = "http://www.springframework.org/schema/jee"   xmlns:tx = "http://www.springframework.org/schema/tx"   
  4.      xmlns:context = "http://www.springframework.org/schema/context"   
  5.      xsi:schemaLocation = "http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-2.5.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd"   
  6.      default-lazy-init = "true" >   
  7.      < description > Spring公共配置文件 </ description >   
  8.   
  9.      <!-- 定义受环境影响易变的变量 -->   
  10.      < bean   class = "org.springframework.beans.factory.config.PropertyPlaceholderConfigurer" >   
  11.          < property   name = "systemPropertiesModeName"   value = "SYSTEM_PROPERTIES_MODE_OVERRIDE"   />   
  12.          < property   name = "ignoreResourceNotFound"   value = "true"   />   
  13.          < property   name = "locations" >   
  14.              < list >   
  15.                  < value > classpath:application.properties </ value >   
  16.                  < value > classpath:application.local.properties </ value >   
  17.                  <!-- <value>file:/var/myapp/application.server.properties</value> -->   
  18.              </ list >   
  19.          </ property >   
  20.      </ bean >   
  21.   
  22.      <!-- 使用annotation 自动注册bean,并保证@Required,@Autowired的属性被注入 -->   
  23.      < context:component-scan   base-package = "cn.xxn"   />   
  24.   
  25.      <!-- 数据源配置,在开发测试环境直连数据库 -->   
  26.      < bean   id = "dataSource"   class = "org.springframework.jdbc.datasource.DriverManagerDataSource" >   
  27.          < property   name = "driverClassName"   value = "org.gjt.mm.mysql.Driver"   />   
  28.          < property   name = "url"   value = "jdbc:mysql://localhost:3306/FMS?generateSimpleParameterMetadata=true&amp;useUnicode=true&amp;characterEncoding=UTF-8"   />   
  29.          < property   name = "username"   value = "root"   />   
  30.          < property   name = "password"   value = "123456"   />   
  31.      </ bean >   
  32.   
  33.      <!-- 数据源配置,在生产环境使用应用服务器的数据库连接池 -->   
  34.      <!--<jee:jndi-lookup id="dataSource" jndi-name="java:comp/env/jdbc/ExampleDB" />-->   
  35.   
  36.      <!-- Hibernate配置 -->   
  37.      < bean   id = "sessionFactory"   class = "org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean" >   
  38.          < property   name = "dataSource"   ref = "dataSource"   />   
  39.          < property   name = "namingStrategy" >   
  40.              < bean   class = "org.hibernate.cfg.ImprovedNamingStrategy"   />   
  41.          </ property >   
  42.          < property   name = "hibernateProperties" >   
  43.              < props >   
  44.                  < prop   key = "hibernate.dialect" > org.hibernate.dialect.MySQLDialect </ prop >   
  45.                  < prop   key = "hibernate.show_sql" > ${hibernate.show_sql} </ prop >   
  46.                  < prop   key = "hibernate.cache.provider_class" > org.hibernate.cache.EhCacheProvider   
  47.                  </ prop >   
  48.                  < prop   key = "hibernate.cache.provider_configuration_file_resource_path" > ${hibernate.ehcache_config_file} </ prop >   
  49.                  < prop   key = "hibernate.hbm2ddl.auto" > update </ prop >   
  50.              </ props >   
  51.          </ property >   
  52.          < property   name = "packagesToScan"   value = "cn.xxn.entity.*"   />   
  53.      </ bean >   
  54.   
  55.      <!-- 事务管理器配置,单数据源事务 -->   
  56.      < bean   id = "transactionManager"   class = "org.springframework.orm.hibernate3.HibernateTransactionManager" >   
  57.          < property   name = "sessionFactory"   ref = "sessionFactory"   />   
  58.      </ bean >   
  59.   
  60.      <!-- 事务管理器配置,多数据源JTA事务-->   
  61.     <!--   
  62.          < bean   id = "transactionManager"   class ="org.springframework.transaction.jta.JtaTransactionManager or   
  63.         WebLogicJtaTransactionManager"  />   
  64.     -- >   
  65.   
  66.      <!-- 使用annotation定义事务 -->   
  67.      < tx:annotation-driven   transaction-manager = "transactionManager"   />   
  68. </ beans >   
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:jee="http://www.springframework.org/schema/jee" xmlns:tx="http://www.springframework.org/schema/tx"
	xmlns:context="http://www.springframework.org/schema/context"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-2.5.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd"
	default-lazy-init="true">
	<description>Spring公共配置文件</description>

	<!-- 定义受环境影响易变的变量 -->
	<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
		<property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE" />
		<property name="ignoreResourceNotFound" value="true" />
		<property name="locations">
			<list>
				<value>classpath:application.properties</value>
				<value>classpath:application.local.properties</value>
				<!-- <value>file:/var/myapp/application.server.properties</value> -->
			</list>
		</property>
	</bean>

	<!-- 使用annotation 自动注册bean,并保证@Required,@Autowired的属性被注入 -->
	<context:component-scan base-package="cn.xxn" />

	<!-- 数据源配置,在开发测试环境直连数据库 -->
	<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
		<property name="driverClassName" value="org.gjt.mm.mysql.Driver" />
		<property name="url" value="jdbc:mysql://localhost:3306/FMS?generateSimpleParameterMetadata=true&amp;useUnicode=true&amp;characterEncoding=UTF-8" />
		<property name="username" value="root" />
		<property name="password" value="123456" />
	</bean>

	<!-- 数据源配置,在生产环境使用应用服务器的数据库连接池 -->
	<!--<jee:jndi-lookup id="dataSource" jndi-name="java:comp/env/jdbc/ExampleDB" />-->

	<!-- Hibernate配置 -->
	<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
		<property name="dataSource" ref="dataSource" />
		<property name="namingStrategy">
			<bean class="org.hibernate.cfg.ImprovedNamingStrategy" />
		</property>
		<property name="hibernateProperties">
			<props>
				<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
				<prop key="hibernate.show_sql">${hibernate.show_sql}</prop>
				<prop key="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider
				</prop>
				<prop key="hibernate.cache.provider_configuration_file_resource_path">${hibernate.ehcache_config_file}</prop>
				<prop key="hibernate.hbm2ddl.auto">update</prop>
			</props>
		</property>
		<property name="packagesToScan" value="cn.xxn.entity.*" />
	</bean>

	<!-- 事务管理器配置,单数据源事务 -->
	<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
		<property name="sessionFactory" ref="sessionFactory" />
	</bean>

	<!-- 事务管理器配置,多数据源JTA事务-->
	<!--
		<bean id="transactionManager" class="org.springframework.transaction.jta.JtaTransactionManager or
		WebLogicJtaTransactionManager" />
	-->

	<!-- 使用annotation定义事务 -->
	<tx:annotation-driven transaction-manager="transactionManager" />
</beans>

 生成的很完美,我只需要改下数据源配置就可以了。

 

注意:在sessionFactory中

Xml代码 springSide3框架的笔记
  1. < property   name = "packagesToScan"   value = "cn.xxn.entity.*"   />   
<property name="packagesToScan" value="cn.xxn.entity.*" />

恩,太爽了,这个目录下实体文件都会被映射,不用像以前一样添加实体了。这样一来,这个文件我们以后不用动他了。

 

2.struts.xml

 

Xml代码 springSide3框架的笔记
  1. <? xml   version = "1.0"   encoding = "UTF-8" ?>   
  2. <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN"   
  3.         "http://struts.apache.org/dtds/struts-2.1.dtd" >   
  4. < struts >   
  5.      < constant   name = "struts.convention.default.parent.package"   value = "crud-default"   />   
  6.      < constant   name = "struts.convention.package.locators"   value = "web"   />   
  7.   
  8.      < package   name = "crud-default"   extends = "convention-default" >   
  9.          <!-- 基于paramsPrepareParamsStack,增加store interceptor -->   
  10.          < interceptors >   
  11.              < interceptor-stack   name = "crudStack" >   
  12.                  < interceptor-ref   name = "store" >   
  13.                      < param   name = "operationMode" > AUTOMATIC </ param >   
  14.                  </ interceptor-ref >   
  15.                  < interceptor-ref   name = "paramsPrepareParamsStack"   />   
  16.              </ interceptor-stack >   
  17.          </ interceptors >   
  18.   
  19.          < default-interceptor-ref   name = "crudStack"   />   
  20.      </ package >   
  21.   
  22.     <!--    
  23.         使用ZeroConfig + CodeBehind插件,实现约定大于配置的零配置文件风格.   
  24.                特殊的Result路径在Action类中使用@Result设定.    
  25.     -- >   
  26. </ struts >   
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN"
        "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
	<constant name="struts.convention.default.parent.package" value="crud-default" />
	<constant name="struts.convention.package.locators" value="web" />

	<package name="crud-default" extends="convention-default">
		<!-- 基于paramsPrepareParamsStack,增加store interceptor -->
		<interceptors>
			<interceptor-stack name="crudStack">
				<interceptor-ref name="store">
					<param name="operationMode">AUTOMATIC</param>
				</interceptor-ref>
				<interceptor-ref name="paramsPrepareParamsStack" />
			</interceptor-stack>
		</interceptors>

		<default-interceptor-ref name="crudStack" />
	</package>

	<!-- 
		使用ZeroConfig + CodeBehind插件,实现约定大于配置的零配置文件风格.
	           特殊的Result路径在Action类中使用@Result设定. 
	-->
</struts>

 

这个配置也很强大,在不用对Action进行配置了。

 

疑问1,如何跳转。简单,例如:UserAction中有方法

Java代码 springSide3框架的笔记
  1. public  String school()  throws  Exception {   
  2.      return   "school" ;   
  3. }  
public String school() throws Exception {
	return "school";
}

 他就会跳转到user-school.jsp中。

 

哪么为什么会这样呢?

 

你会在lib中发现struts2-convention-plugin-2.1.6.jar,没错就是他干的。怎么实现的?我怎么知道。

Ruby代码 springSide3框架的笔记
  1. 从struts2.1版本开始,Convention Plugin作为替换替换Codebehind Plugin来实现Struts2的零配置。   
  2.   
  3.     * 包命名习惯来指定Action位置   
  4.     * 命名习惯制定结果(支持JSP,FreeMarker等)路径   
  5.     * 类名到URL的约定转换   
  6.     * 包名到命名空间(namespace)的约定转换   
  7.     * 遵循SEO规范的链接地址(即:使用my-action 来替代 MyAction)   
  8.     * 基于注解的Action名   
  9.     * 基于注解的拦截机(Interceptor)   
  10.     * 基于注解的命名空间(Nameespace)   
  11.     * 基于注解的XWork包   
  12.     * 默认action以及默认的结果(比如:/products 将会尝试寻找com.example.actions.Products 或   
  13.  com.example.actions.products.Index进行处理)   
  14.   
  15. 无需配置Convention即可使用Convention,Convention的某些约束习惯可以通过配置属性来控制,   
  16. 您也可以在类中覆写其中的方法来达到扩展目地。  
从struts2.1版本开始,Convention Plugin作为替换替换Codebehind Plugin来实现Struts2的零配置。

    * 包命名习惯来指定Action位置
    * 命名习惯制定结果(支持JSP,FreeMarker等)路径
    * 类名到URL的约定转换
    * 包名到命名空间(namespace)的约定转换
    * 遵循SEO规范的链接地址(即:使用my-action 来替代 MyAction)
    * 基于注解的Action名
    * 基于注解的拦截机(Interceptor)
    * 基于注解的命名空间(Nameespace)
    * 基于注解的XWork包
    * 默认action以及默认的结果(比如:/products 将会尝试寻找com.example.actions.Products 或
 com.example.actions.products.Index进行处理)

无需配置Convention即可使用Convention,Convention的某些约束习惯可以通过配置属性来控制,
您也可以在类中覆写其中的方法来达到扩展目地。

 

 

疑问2,我要是跳转到别的ACTION去,不到页面怎么办。

 

嘻嘻,当然可以,不过这些东西不会让你去改变配置文件的。

 

你可以写在这里:

Java代码 springSide3框架的笔记
  1. @Results ({    
  2.      @Result (name = CRUDActionSupport.RELOAD, location =  "user.action?page.pageParam=${page.pageParam}" , type =  "redirect" ) ,   
  3.     })   
  4. public   class  UserAction  extends  CRUDActionSupport<User> {  
@Results({ 
	@Result(name = CRUDActionSupport.RELOAD, location = "user.action?page.pageParam=${page.pageParam}", type = "redirect") ,
    })
public class UserAction extends CRUDActionSupport<User> {

 不要说你不知道这是什么位置。

你可以写多个

Java代码 springSide3框架的笔记
  1. @Result (name = CRUDActionSupport.RELOAD1, location =  "user.action?page.pageParam=${page.pageParam}" , type =  "redirect" ) ,   
  2. @Result (name = CRUDActionSupport.RELOAD2, location =  "user.action?page.pageParam=${page.pageParam}" , type =  "redirect" ) ,  
@Result(name = CRUDActionSupport.RELOAD1, location = "user.action?page.pageParam=${page.pageParam}", type = "redirect") ,
@Result(name = CRUDActionSupport.RELOAD2, location = "user.action?page.pageParam=${page.pageParam}", type = "redirect") ,

其中,name:方法的返回值。 location:跳转的方法或页面。

 

 

简单把。