`
winie
  • 浏览: 216896 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类
最新评论

springSide3框架的笔记

    博客分类:
  • ss
阅读更多

首先,从官网下载的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.9 (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,晕死 目录还真乱,我要改造他,当然也可以不改造,我只是想让他看起来更舒服。

 

刚生成时的目录结构:

改造后的目录结构。

 

 

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

 

1.user增删改差示例。

2.权限的示例。

 

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

 

1.applicationContext.xml

Xml代码 复制代码
  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代码 复制代码
  1. < property   name = "packagesToScan"   value = "cn.xxn.entity.*"   />   
<property name="packagesToScan" value="cn.xxn.entity.*" />

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

 

2.struts.xml

 

Xml代码 复制代码
  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代码 复制代码
  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代码 复制代码
  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代码 复制代码
  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代码 复制代码
  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:跳转的方法或页面。

 

 

简单把。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics