spring3.1.2+struts-2.3.4.1+hibernate4.1.6框架整合(基础)

废话不多说,这里我就ssh整合的基础配置进行一下简单的分析(数据库是oracle11g,web容器tomcat7,jdk版本java7,eclipse版本indigo,并且劝诫大家暂时不要使用eclipse juno虽然它增加了预览等等功能,但是由于优化问题,对于jsp页面和xml页面基本卡到不行,请大家等待更新)(主要是分析每个配置的作用。)

首先是基本的包结构,我做了一个简单的登录程序为例子。

lib中的jar包搭配这里就不讲了,我自己也不能完全弄清楚,只知道基本的几个包的作用,如果误导大家就是过错了。

首先我搭建项目的做法是从model做起。因为MVC中有这么一句话:一个model对应对个视图。并且,如果能了解数据的流向,那么很容易把握整个程序的流程。(使用struts1为核心的框架,这一点更加的明显。)

这个程序中只有一个model就是User。所有的getter和setter我在此都省略掉。

User.java

public class User {

	// 标识属性
	private Integer id;

	// 用户名
	private String username;

	// 密码
	private String password;
       
}
在这里如果我们使用Xml配置hibernate数据映射

User.hbm.xml

<hibernate-mapping>
    <!-- 这里的name是POJO所在的位置,table是数据库中的表名 -->
    <class name="com.ssh.demo.bean.User" table="user_gyb">
    
        <!-- 这里name是User中的id属性 -->
        <id name="id" type="java.lang.Integer">
               <!-- column就是列名,也就是数据表中的列名 -->
               <column name="ID"/>
               <!-- generator在此是“生成”的意思,也就是这个id是如何生成,因为我在数据库中将它设为主键,所以我是根据sequence生成的,根据使用的数据库不同,大家自行设置 -->
               <generator class="sequence"/>
        </id>
        
          <!-- 因为这个文件我是使用工具生成的,所以它会有generated和lazy-->
          <!-- generated设置该属性的数据列的值是如何生成,可以设置为never(从不自动生成),insert(在insert时生成,但是update不会重新生成),always(总是重新生成) -->
          <!-- lazy指定该属性第一个被访问时,是否启动延迟加载,默认为false,如果是组件或者是集合,设置为true可以提高效率 -->
          <property generated="never" lazy="false" 
                           name="username" type="java.lang.String">
               <column name="username"/>
          </property>
          
          <property generated="never" lazy="false" name="password" type="java.lang.String">
               <column name="password"/>
          </property>
     </class>
</hibernate-mapping>


在完成了model之后,然后再把hibernate交给spring来管理,这个过程中我们至少需要完成三件事:

1.配置数据库连接;

2.定义Hibernate的SessionFactory;

3.注入bean。

在application中添加如下代码

		<!-- 定义数据源Bean,使用C3P0数据源实现 -->
		<!-- 设置连接数据库的驱动、URL、用户名、密码、连接池最大连接数、
		最小连接数、初始连接数等参数 -->
		<!-- 这里我使用了P标签,那么在<beans>中应该加入xmlns:p="http://www.springframework.org/schema/p"如果不实用"p:"的形式,这里可以替换为<property name="" value=""/>的形式 -->
                <bean id="dataSource"
		      class="com.mchange.v2.c3p0.ComboPooledDataSource"
                      destroy-method="close"
                      p:driverClass="oracle.jdbc.driver.OracleDriver"
		      p:jdbcUrl="jdbc:oracle:thin:@localhost:1521:ORCL"
		      p:user="scott"
		      p:password="123"
		      p:maxPoolSize="40"
		      p:minPoolSize="1"
		      p:initialPoolSize="1"
		      p:maxIdleTime="20" />
	
		<!-- 定义Hibernate的SessionFactory -->
		<!-- 依赖注入数据源,注入正是上面定义的dataSource -->
		<bean id="sessionFactory"
		      class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"
		      p:dataSource-ref="dataSource">
		    <!-- mappingResouces属性用来列出全部映射文件 -->
                    <!-- 如果使用Annotation配置,那么name改成annotatedClasses -->
                    <!-- 如果使用properties配置,那么name改成hibernateProperties -->
                    <property name="mappingResources">
			<!-- 以下用来列出Hibernate映射文件 -->
			<list>
                            <!-- Annotation <value>com.ssh.demo.bean.User</value> -->
                            <!-- properties <value>properties文件位置</value> -->
                            <value>com/ssh/demo/bean/User.hbm.xml</value>
			</list>
		    </property>
		    <!-- 定义Hibernate的SessionFactory的属性 -->
		    <property name="hibernateProperties">
			<!-- 指定数据库方言、是否自动建表 是否生成SQL语句等 -->
			<value>
			    hibernate.dialect=org.hibernate.dialect.OracleDialect
			    hibernate.show_sql=true
			    hibernate.hbm2ddl.auto=update
			    hibernate.current_session_context_class=thread
			</value>
		    </property>
		</bean>

                <!-- 注入bean User -->
                <bean id="user" class="com.ssh.demo.bean.User"></bean>



完成这个部分之后,我们就该考虑控制层和视图了。

regist.jsp

        <s:form action="regist.action" namespace="loginModule" method="post" id="form_regist">
	<s:textfield name="user.username" key="username" required="true"></s:textfield>
	<s:password name="user.password" key="password" required="true"></s:password>
	<s:submit name="submit_regist" key="regist"></s:submit>
	</s:form>
但是regist.jsp在WEB-INF中,是无法被直接访问的,所以在欢迎页面应该给一个路径请求到这个页面。如果需要直接请求,拿到WEB-INF外面来。这里我在index中提供了一个链接请求到这个页面。<s:a action="newUser.action" namespace="index">注册</s:a>

struts.xml中映射路径:

<struts>
	<constant name="struts.devMode" value="true"></constant>
	<constant name="struts.custom.i18n.resources" value="messageSource"></constant>
	
	<package name="loginModule" extends="struts-default">
		<action name="regist" class="registAction">
			<result name="error">/WEB-INF/jsp/loginModule/error.jsp</result>
			<result name="success">/WEB-INF/jsp/loginModule/success.jsp</result>
		</action>
	</package>
	
	<package name="index" extends="struts-default">
	    <action name="newUser">
	        <result>/WEB-INF/jsp/loginModule/regist.jsp</result>
	    </action>
	</package>
</struts>
messageSource.properties

username=\u7528\u6237\u540D
password=\u5BC6\u7801
welcome=\u9996\u9875
errorPage=\u9519\u8BEF\u9875\u9762
successPage=\u6210\u529F\u9875\u9762
处理User注册的服务UserService.java

public class UserService {

	private SessionFactory sessionFactory = null;

	public User save(User user){
		Session session = sessionFactory.getCurrentSession();  
        session.beginTransaction();  
        session.save(user);  
        session.getTransaction().commit();  
		return user;
	}
}
RegistAction.java

public class RegistAction extends ActionSupport {

	private static final long serialVersionUID = 5305314154058136201L;

	private UserService service;

	private User user;

	public String execute() {
		if (service.save(user) != null) {
			return SUCCESS;
		} else {
			return ERROR;
		}
	}
}
由于这些属性都需要通过spring来注入

在ApplicationContext.xml中添加

        <!-- 注入bean UserService -->
	<bean id="userService" class="com.ssh.demo.service.UserService">
		<property name="sessionFactory" ref="sessionFactory"></property>
	</bean>

        <!-- 注入action RegistAction -->
	<bean id="registAction" class="com.ssh.demo.action.RegistAction">
		<property name="user" ref="user"></property>
		<property name="service" ref="userService"></property>
	</bean>
由于我使用了log4j的日志功能,所以还需要配置log4j.properties,这里不再具体说了。error.jsp和success.jsp可以根据个人想法输出想要的信息。

到此一个简单的ssh框架就配置完成了。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值