springSide3框架的笔记

 

首先,从官网下载的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 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中

<property name="packagesToScan" value="cn.xxn.entity.*" />

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

 

2.struts.xml

 

<?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中有方法

public String school() throws Exception {
	return "school";
}

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

 

哪么为什么会这样呢?

 

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

从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去,不到页面怎么办。

 

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

 

你可以写在这里:

@Results({ 
	@Result(name = CRUDActionSupport.RELOAD, location = "user.action?page.pageParam=${page.pageParam}", type = "redirect") ,
    })
public class UserAction extends CRUDActionSupport<User> {

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

你可以写多个

@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:跳转的方法或页面。

 

 

简单把。

 

 

累了。。。明天继续。

你可能感兴趣的:(spring,maven,Hibernate,框架,struts)