如何创建一个ssh项目

※ssh整合

ssh指struts+spring+hibernate三大框架,通过ssh三大框架间的配合使用来开发项目是jee中较流行的一种方式,下边通过一个案例来说明ssh的整合,案例使用一个雇员管理系统


具体步骤:

创建web项目


(1)先整合spring

①引入spring开发包

②编写applicationContext.xml文件(或者beans.xml),将该文件放在src目录下(也可以根据情况建立另外的包并放在包下),下边是该xml文件的模板





③测试spring是否ok

建一个test包,写一个简单的TestService类并在applicationContext.xml里装配bean,再写一个Test类进行测试,测试ok表明目前spring可以工作

④在web.xml中初始化我们的spring容器,这样在启动Tomcat的时候,就会实例化spring容器

	
	
		contextConfigLocation
		classpath:applicationContext.xml
	
	
	
		org.springframework.web.context.ContextLoaderListener
	

⑤配置后,spring容器由web容器接管
		// 通过下面语句可以直接获取到spring容器实例,即ApplicationContext
		WebApplicationContext ctx = WebApplicationContextUtils
				.getWebApplicationContext(this.getServlet().getServletContext());


(2)整合hibernate

①加入hibernate开发包

②因为使用的是ssh,所以hibernate的核心就被spring接管了。hibernate.cfg.xml文件对象映射文件,SessionFactory在spring的文件中配置即可

③在applicationContext.xml中配置数据源

	
	
		driverClassName" value="com.mysql.jdbc.Driver">
		
		username" value="root">
		
		
		
		
		
		
		
		
		
	

④在applicationContext.xml中配置SessionFactory对象

	
	
		
		dataSource" />
		
		
			
				com/lewis/domain/Employee.hbm.xml
			
		
		hibernateProperties">
		
			hibernate.dialect=org.hibernate.dialect.MySQLDialect
			hibernate.hbm2ddl.auto=update
			hibernate.show_sql=false
		
		
	

⑤编写domain对象和映射文件Employee.hbm.xml,测试spring和hibernate是否可以结合使用

⑥考虑分层

⑦使用事务管理器来统一管理事务,在applicationContext.xml中配置事务管理器

	
	
		
	
	
	

接下来添加事务注解
//这里配置@Transactional用处是让spring的事务管理器接管该Service的事务,也可以只将注解添加在某个方法前
@Transactional
public class EmployeeServiceImpl implements EmployeeServiceIntfc {

此时事务管理器、SessionFactory、数据源之间的关系图如下

如何创建一个ssh项目_第1张图片


⑧在applicationContext.xml中配置hibernate的二级缓存

		
			
				hibernate.dialect=org.hibernate.dialect.MySQLDialect
				hibernate.hbm2ddl.auto=update
				hibernate.show_sql=false
				
				hibernate.cache.use_second_level_cache=true
				
				hibernate.cache.provider_class=org.hibernate.cache.EhCacheProvider
				
				hibernate.generate_statistics=true
			
		

添加二级开发包,将ehcache的配置文件放到src目录


(3)整合struts

① 引入struts开发包

② 创建struts-config.xml,放到/WEB-INF目录下


	
		
		
	
	
		
		
			
			
		
	

③ 在web.xml中配置struts

	
	
		action
		org.apache.struts.action.ActionServlet
		
			config
			/WEB-INF/struts-config.xml
		
		0
	

	
		action
		*.do
	

④由spring接管struts(action控件)

⑤在struts-config.xml作如下配置:

	
	
		
	
⑥在applicationContext.xml中配置action的路径
	
	
此时struts-config.xml中对应的action的type就可以不要了

⑦这样就可以通过spring容器来获取action和配置action的一些属性,可以在action里添加一个属性:

在相对应的action里添加一个employeeServiceIntfc属性和setter方法,就可以无需通过(1)⑤的语句来获取spring容器对象,直接可以通过employeeServiceIntfc.XX()来调用业务逻辑里的方法。

※注意在配置spring容器里的bean时name不要写错,一旦写错就会出错导致实例化失败,出现404等错误。

⑧struts的action是单例,对于并发的处理并不好,因为不管有多少请求,总是由一个action去处理。而降action交由spring管理之后,可以通过修改该action的scope属性为prototype来解决这个问题。

⑨struts有中文乱码的毛病,要解决这个问题,有两种方式

方法一:自己配置过滤器

9.1.1建一个com.xxx.web.filter包,建一个实现javax.servlet.Filter的Servlet,重写doFilter和init方法:

	public void doFilter(ServletRequest arg0, ServletResponse arg1,
			FilterChain arg2) throws IOException, ServletException{

		arg0.setCharacterEncoding("utf-8");
		arg2.doFilter(arg0, arg1);
	}
9.1.2在web.xml中配置过滤器


	
		MyFilter
		com.lewis.web.filter.MyFilter
	
	
		MyFilter
		/*
	

方法二:使用spring框架提供的处理中文乱码的过滤器

直接在web.xml里进行配置就行


	encoding
	org.springframework.web.filter.CharacterEncodingFilter
	
		encoding
		UTF-8
	


	encoding
	/*

※对ssh整合的特别说明

①spring可以通过注解的方式来配置属性

1.1重新这样配置bean

1.2在EmployeeService的属性sessionFactory中添加一个注解@Resource
	@Resource
	private SessionFactory sessionFactory;
1.3在applicationContext.xml中启用注解
	
	

②ssh整合时,如何解决懒加载问题

2.1方法一:显示初始化懒加载,明确初始化

Hibernate.initialize(Department.class);//select预先查询

或者在Session还没关闭时,访问一次xxx.getXxx(),强制访问数据库

2.2方法二:在对象映射文件配置lazy=false,取消懒加载

但是以上两个方法都不好,因为无论你用不用该关联对象,hibernate都会发出sql语句去查询

2.3方法三:延长session的生命周期(推荐该方法)

spring专门提供了opensessioninview的方法来解决懒加载,需要在web.xml文件中添加如下配置:

	
	
		OpenSessionInViewFilter
		org.springframework.orm.hibernate3.support.OpenSessionInViewFilter
	
	
		OpenSessionInViewFilter
		/*
	
该方法可以有效的减少对数据库的查询,但缺点是和数据保持的session时间延长了


你可能感兴趣的:(项目笔记)