`
chengyu2099
  • 浏览: 471039 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

SSH 项目框架搭建

阅读更多
spring2.5 + hibernate3.0 + struts2.1 +(oracle9i)

简单说下框架的基本信息

package com.isoftstone.ssh.po ;
这个包是所有hibernate映射关系包,因为SSH架构里面我把hibernate交给spring管理
省去了hibernate.cfg.xml的映射文件导入问题。
只需要把对应的POJO和*.hbm.xml放到该包下面即可。
在spring里面做了配置如下:
<property name="mappingDirectoryLocations">
<list>
    <value>classpath:/com/isoftstone/ssh/po</value>
</list>
</property>
一些hibernate的常用配置也做了相应配置,编码如下:
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.Oracle9Dialect</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.hbm2ddl.auto">update</prop>
<prop key="hibernate.format_sql">true</prop>
<prop key="hibernate.autoReconnect">true</prop>
<!-- <prop oracle的BLOB,CLOB配置 key="hibernate.connection.SetBigStringTryClob">true</prop> -->
</props>
</property>
hibernate使用的jdbc连接,交给spring管理,用apache的DBCP
org.apache.commons.dbcp.BasicDataSource

配置数据源如下:
<!-- 配置数据源 apache-dbcp
	<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
		destroy-method="close">
		<property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
		<property name="url"
			value="jdbc:mysql://localhost:3306/SSH"></property>
		<property name="username" value="root"></property>
		<property name="password" value="root"></property>
	</bean>
	-->
这里我们采用动态的配置,故注释掉以上配置
采用jdbc.properties属性文件配置
jdbc.properties如下:
dataSource.driverClassName=oracle.jdbc.driver.OracleDriver
dataSource.url=jdbc:oracle:thin:@127.0.0.1:1521:orcl
dataSource.username=*****
dataSource.password=*****
动态配置前需要加载该文件,在spring中配置如下:
<!-- 加载数据库属性文件 jdbc.properties -->
	<bean id="configBean" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    	<property name="location">
    		<value>classpath:conf/jdbc.properties</value>
    	</property>
    </bean>

其他的还有一些事物的配置,事物我们采用spring的声明式事物,一些灵活的代码,可以采用spring的编程式事物。
简单说下spring的事物:
1、编程式事物
spring 提供了几个关于事物处理的类
TransactionDefinition // 事物属性定义
TransactionStatus     // 代表了当前事物,可以提交,回滚
PlatformTransactionManager // spring 提供的用户管理事物的基础接口
下面写了个DEMO,如下:
private PlatformTransactionManager transactionManager;
/*** 事物控制 transactionManager **/
DefaultTransactionDefinition def = new DefaultTransactionDefinition();
def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);
TransactionStatus status = this.transactionManager.getTransaction(def);
try{
    //dosomething ...
    transactionManager.commit(status);
}catch{
    transactionManager.rollback(status);
    e.printStackTrace();
}
编程式的比较灵活,但是代码量大,存在重复代码比较多;
声明式的比编程式的更灵活。
编程式主要使用 transcationTemplate. 省略了部分的提交,回滚,一系列的事物
对象定义,需注入事物管理对象。
transactionTemplate.execute(new TransactionCallback(){
	public Object doInTransaction(TransactionStatus ts)
	{
		// dosomething....
	}
});
------------------
声明式:
使用 TransactionProxyFactoryBean :
(org.springframework.transaction.interceptor.TransactionProxyFactoryBean)
PROPAGATION_REQUIRED - 支持当前事物,如果当前没有事物,就新建一个事物。
等等....
具体事物配置根据项目需要。以下事物DEMO,仅供参考:
<!-- 配置事务管理器 -->
	<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
		<property name="sessionFactory">
			<ref bean="sessionFactory"/>
		</property>	
	</bean>
	
	<!-- 配置事务的传播特性 -->
	<tx:advice id="txAdvice" transaction-manager="transactionManager">
		<tx:attributes>
			<tx:method name="save*" propagation="REQUIRED"/>
			<tx:method name="delete*" propagation="REQUIRED"/>
			<tx:method name="update*" propagation="REQUIRED"/>
			<tx:method name="*" read-only="false"/>
		</tx:attributes>
	</tx:advice>
	
	<!-- 那些类的哪些方法参与事务 -->
	<aop:config>
		<aop:pointcut id="allManagerMethod" expression="execution(* com.projectName.*.service.*.*(..))"/>
		<aop:advisor pointcut-ref="allManagerMethod" advice-ref="txAdvice"/>
	</aop:config>

另外就是拦截器的配置了
这里就不多说了,我把代码贴出来(拦截器就是AOP的一种策略实现)

<!-- interceptor start -->
			<interceptors>
				<interceptor name="authority" class="com.isoftstone.ssh.util.MyInterceptor"></interceptor>
				<!-- 拦截器栈 -->
				<interceptor-stack name="myDefault">
					<interceptor-ref name="defaultStack"></interceptor-ref>
					<interceptor-ref name="authority"></interceptor-ref>
				</interceptor-stack>
			</interceptors>
		<!-- interceptor end -->
		
		<!-- global-results start -->
		<global-results>
			<result name="error">/pages/error.jsp</result>
		</global-results>

/**
 * MyInterceptor.java
 * com.isoftstone.ssh.util
 *
 * Function: TODO 
 *
 *   ver     date      		author
 * ──────────────────────────────────
 *   		 May 16, 2011 		程仁银
 *
 * Copyright (c) 2011,  All Rights Reserved.
*/

package com.isoftstone.ssh.util;

import java.util.Map;

import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;

/**
 * ClassName:MyInterceptor
 * Project: 
 * Company: isoftStone
 *
 * @author   程仁银
 * @version  
 * @since    Ver 1.1
 * @Date	 May 16, 2011		8:44:44 AM
 * @see 	 
 */
public class MyInterceptor extends AbstractInterceptor {

	@Override
	public String intercept(ActionInvocation invocation) throws Exception {
		System.out.println(" ...  MyInterceptor ......");
		ActionContext context = invocation.getInvocationContext();
		Map session = context.getSession();
		String user = (String)session.get("USER");
		if(null != user && user.equals("using")) {
			System.out.println("用户:"+ user + "已登录!");
			return invocation.invoke();
		} else {
			return Action.ERROR;
		}
	}

}


项目中大家都写自己的action、service、dao信息等,比如说都写在application_context.xml中,在版本控制再好的情况下,难免会出项冲突,代码丢失等。
这里我采用分割application_context.xml文件的形式,比如说,你写user这个模块,那么你就建立个单独的application_user.xml文件或者struts_user.xml.这样就不会出现版本冲突了。
application_*.xml的形式,我在web.xml中做如下配置:
<!-- 装载spring的xml文件 -->
	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>classpath:conf/spring/application_*.xml</param-value>
	</context-param>
struts.xml中的配置如下:
<struts>
	<constant name="struts.devMode" value="true" />
	<constant name="struts.i18n.encoding" value="UTF-8"></constant>
	<include file="conf/struts/struts_regist.xml"></include>
	<include file="conf/struts/struts_login.xml"></include>
</struts>
这样就OK了。

由于需要拦截jsp页面,我写了个filter,代码如下:

<!-- filter jspFilter-->
	<filter>
		<filter-name>MyFilter</filter-name>
		<filter-class>com.isoftstone.ssh.util.MyFilter</filter-class>
	</filter>
	<filter-mapping>
		<filter-name>MyFilter</filter-name>
		<url-pattern>*.jsp</url-pattern>
	</filter-mapping>

/**
 * MyFilter.java
 * com.isoftstone.ssh.util
 *
 * Function: TODO 
 *
 *   ver     date      		author
 * ──────────────────────────────────
 *   		 May 17, 2011 		程仁银
 *
 * Copyright (c) 2011,  All Rights Reserved.
*/

package com.isoftstone.ssh.util;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * ClassName:MyFilter
 * Project: 
 * Company: isoftStone
 *
 * @author   程仁银
 * @version  
 * @since    Ver 1.1
 * @Date	 May 17, 2011		3:16:36 AM
 * @see 	 
 */
public class MyFilter implements Filter{
	public void init(FilterConfig filter) throws ServletException {
		System.out.println("****************** 过滤器初始化 ******************");
	}
	public void doFilter(ServletRequest req, ServletResponse res,
			FilterChain chain) throws IOException, ServletException 
	{
		HttpServletRequest request = (HttpServletRequest)req;
		HttpServletResponse response = (HttpServletResponse)res;
		req.setCharacterEncoding("UTF-8");
		String uri = request.getRequestURI();
		System.out.println("URL = "+ uri);
//		定义可以访问的 jsp
		if(uri.endsWith("/MyJsp.jsp")){
			chain.doFilter(request,response);
		}else{
			request.getRequestDispatcher("/index.jsp").forward(request,response);
		}
	}
	public void destroy() {
		System.out.println("**************** 过滤器销毁 ****************");
	}
}

还有一点,比如说用户数据插入、注册等情况,有重复提交的情况,strut2提供了token拦截机制,代码如下:

。。。。。。。。。。
<td colspan="2">
						<input type="submit" value="提交" />
						<!-- 防止重复提交 -->
						<s:token></s:token>
					</td>

<!-- 配置action,class与spring-xml中bean的名称对应 -->
		<action name="login" class="login" method="toLogin">
			<result name="success">/index.jsp</result>
			<result name="faild">/index.jsp</result>
			<interceptor-ref name="myDefault"></interceptor-ref>
			<!-- 防止重复提交 -->
			<interceptor-ref name="token"></interceptor-ref>
			<!--配置错误页面,指定name="invalid.token"-->
   			<result name="invalid.token">/pages/error.jsp</result>
		</action>

这样基本SSH框架就搭建好了,代码我将后期上传。
如果你要优化的话,那就看个人或者项目需要了,再做相应的配置JSTL,ERROR_PAGES等。
分享到:
评论

相关推荐

    SSH项目框架搭建和配置

    SSH是Java开发中常见的一个企业级应用框架,它由三个组件组成:Struts、Spring和Hibernate。这个框架组合提供了一种高效且灵活的方式来构建...通过提供的文档`SSH项目框架搭建.doc`,可以更深入地学习SSH的实战细节。

    Maven下ssh项目框架搭建

    在Maven环境下搭建SSH项目框架,可以有效地管理和组织项目的构建、依赖和部署过程,提高开发效率。本教程将详细介绍如何在Maven下利用注解方式搭建SSH框架。 首先,我们需要了解SSH框架的组成部分: 1. Spring:这...

    SSH2框架搭建实例源码

    总的来说,SSH2框架搭建实例是一个学习和理解Java Web开发的好素材。通过实践这个项目,开发者可以深入理解如何整合三大框架,以及如何利用它们来实现常见的业务功能。同时,这也是提升数据库操作、MVC设计模式和...

    SSH 项目框架搭建总结

    * 项目体系分层: cn.itcast.elec.containner:自定义的spring容器,用于在控制层调用操作业务层 cn.itcast.elec.dao:项目的dao层,负责连接数据库的操作 cn.itcast.elec.daomain:封装实体对象(PO对象),对应...

    一个基于SSH项目框架搭建的实例 超详细

    SSH 的各种配置文件 数据源 文件配置 事务 反转数据库 BaseDao 36张表 一个一个看 也看会了 项目的命名规范 包的命名规范 没有没有的了 快下了 我的项目差点都给你们了

    SSH框架搭建源码

    这个压缩包文件"SSHdemo"提供了一个SSH框架搭建登录功能的示例,帮助开发者了解并实践如何整合这三个框架来构建一个完整的Web应用程序。 **Struts2** 是一个基于MVC(Model-View-Controller)设计模式的Java Web...

    SSH框架搭建jar包

    本压缩包提供了搭建SSH环境所需的核心jar包,让我们来详细探讨一下这些框架及其在构建Java Web应用中的作用。 1. Struts2:Struts2是一个基于MVC(Model-View-Controller)设计模式的Web应用框架,主要负责控制层。...

    SSH框架搭建步骤

    以下将详细介绍SSH框架搭建的步骤。 **Spring框架** 1. **环境准备**:首先确保已安装JDK,并配置好环境变量。然后下载Spring框架的库文件,将其添加到项目的类路径中。 2. **创建项目**:使用IDE如Eclipse或...

    SSH2框架搭建所需jar包合集

    这个“SSH2框架搭建所需jar包合集”提供了Struts2.3.4、Spring2.5.6以及Hibernate框架的核心库,确保开发者能够快速搭建起一个完整的MVC(模型-视图-控制器)架构的应用。 首先,Struts2是Apache软件基金会的一个...

    SSH项目框架(web开发)

    SSH项目框架是Web开发中的一个经典组合,由Struts、Spring和Hibernate三个开源框架整合而成。这个框架集合提供了全面的企业级应用解决方案,旨在简化开发流程并提高代码的可维护性。 Struts是MVC(Model-View-...

    ssh框架搭建实例源码2

    本资源是在“ssh框架搭建实例源码1”基础上增加了修改了分页技术,实现数据从数据库中读取,并补充“ssh框架搭建实例源码1”中忘记上传的与分页技术相关的jar包,更新数据库文件ssh.sql。本资源所需的jar包请到“ssh...

    SSH2框架搭建详细图解

    以上就是SSH2框架的搭建过程,通过这个过程,你可以深入理解MVC架构、依赖注入以及对象-关系映射等核心概念。虽然SSH2现在已经被更现代的框架如Spring Boot所取代,但理解这些基础对于Java Web开发者来说仍然至关...

    SSH框架的搭建的步骤

    以上就是SSH框架搭建的详细步骤。这个过程中,Struts2负责请求转发和视图展示,Hibernate负责数据持久化,Spring则进行依赖注入和事务管理,三者协同工作,提高了开发效率和代码的可维护性。理解并掌握SSH框架的搭建...

    ssh框架搭建及实例ssh框架

    ssh框架搭建及实例ssh框架 ssh框架搭建及实例ssh框架

    SSH框架简单搭建

    SSH框架是Java开发中常用的三大框架...通过实践crud1这样的示例项目,可以更好地掌握SSH框架的使用,从而快速上手企业级应用的开发。在实际操作中,应多参考官方文档和在线教程,不断调试和优化,提升自己的技能水平。

    SSH1框架搭建实例

    总的来说,SSH1框架搭建实例是一个涵盖了Web应用基础架构、业务逻辑处理、数据持久化等多个方面的综合练习。通过这个实例,开发者能深入理解MVC模式,掌握Spring、Struts和Hibernate的协同工作方式,为构建更复杂的...

    ssh框架手动搭建PPT

    让我们深入探讨一下SSH框架搭建的知识点。 **Spring框架** Spring是一个全面的后端开发框架,它提供了依赖注入(DI)和面向切面编程(AOP)等功能。在SSH框架中,Spring主要负责管理对象的生命周期和装配,以及处理...

    ssh2框架搭建

    在这个项目中,我们将会深入探讨如何利用这些框架搭建一个能够从数据库读取数据并在JSP页面上展示的系统。 首先,Struts2作为MVC(模型-视图-控制器)架构的实现,负责处理HTTP请求,提供业务逻辑与视图之间的解耦...

    SSH2框架搭建详细说明

    ### SSH2框架搭建详解 #### 一、引言 随着Java Web开发技术的不断发展与进步,越来越多的企业级应用选择使用SSH2(Struts2 + Spring + Hibernate)框架进行开发。SSH2框架以其强大的功能和灵活性成为了Java Web...

    ssh2框架搭建流程及注意事项

    以下是对SSH2框架搭建流程及注意事项的详细说明: 1. **创建新工程** 在MyEclipse中创建新工程时,如果涉及到泛型如`List&lt;xxx&gt;`,需要确保工程的Java版本为Java EE5.0或以上,因为泛型是Java 5引入的新特性。 2. ...

Global site tag (gtag.js) - Google Analytics