(转)简单易懂的ssh整合案例和开发步骤

本文描述的是框架SSH集成的示例,由于在这个过程中有一些小的细节容易被遗忘,特别撰写了一篇小的博文来记录这个过程,希望对自己以及后来者能够起到积极意义。

本文中使用的框架和版本号为:

struts-2.3.1.2、hibernate-3.6.10、spring-3.1.1

其下载地址分别为:

http://struts.apache.org/download.cgi#struts2312

http://sourceforge.net/projects/hibernate/files/hibernate3/3.6.10.Final/

http://www.springsource.org/download/community?project=Spring%2520Framework&version=3.1.1.RELEASE

分别将其解压,需要注意的是本例中hibernate3还需要的是log4j,spring还需要commons-loging、commons-dbcp和commons-pool,在这里就不再赘述出其下载地址了。

需要删除的重复包为:asm-commons-3.3.jar和javassist-3.11.0.GA.jar

需要使用的JAR包截图:



 接下来在jee中新建一个Dynamic Web Project,选择好运行环境:



 相关文件组织如下:



 源代码列举如下:

UserAction.java

Java代码   
  1. package com.ssh.action;
  2. import com.opensymphony.xwork2.ActionSupport;   
  3. import com.ssh.pojo.User;   
  4. import com.ssh.service.UserService;   
  5.   
  6. public class UserAction extends ActionSupport {   
  7.   
  8.     private static final long serialVersionUID = 1L;   
  9.   
  10.     private User user;   
  11.     private UserService service;   
  12.     public UserService getService() {   
  13.         return service;   
  14.     }   
  15.     public void setService(UserService service) {   
  16.         this.service = service;   
  17.     }   
  18.     public User getUser() {   
  19.         return user;   
  20.     }   
  21.     public void setUser(User user) {   
  22.         this.user = user;   
  23.     }   
  24.        
  25.     public String execute(){   
  26.         if (service.save(user)!=null) {   
  27.             return SUCCESS;   
  28.         }else {   
  29.             return ERROR;   
  30.         }   
  31.     }   
  32. }  
package com.ssh.action;import com.opensymphony.xwork2.ActionSupport;
import com.ssh.pojo.User;
import com.ssh.service.UserService;

public class UserAction extends ActionSupport {

	private static final long serialVersionUID = 1L;

	private User user;
	private UserService service;
	public UserService getService() {
		return service;
	}
	public void setService(UserService service) {
		this.service = service;
	}
	public User getUser() {
		return user;
	}
	public void setUser(User user) {
		this.user = user;
	}
	
	public String execute(){
		if (service.save(user)!=null) {
			return SUCCESS;
		}else {
			return ERROR;
		}
	}
}

 

 User.java

 

Java代码   
  1. package com.ssh.pojo;   
  2.   
  3. import javax.persistence.Column;   
  4. import javax.persistence.Entity;   
  5. import javax.persistence.GeneratedValue;   
  6. import javax.persistence.Id;   
  7. import javax.persistence.Table;   
  8.   
  9. @Entity  
  10. @Table(name="user")   
  11. public class User {   
  12.     private Integer id;   
  13.     private String username;   
  14.     private String password;   
  15.     @Id  
  16.     @GeneratedValue  
  17.     @Column(name="hr_id")   
  18.     public Integer getId() {   
  19.         return id;   
  20.     }   
  21.     public void setId(Integer id) {   
  22.         this.id = id;   
  23.     }   
  24.     public String getUsername() {   
  25.         return username;   
  26.     }   
  27.     public void setUsername(String username) {   
  28.         this.username = username;   
  29.     }   
  30.     public String getPassword() {   
  31.         return password;   
  32.     }   
  33.     public void setPassword(String password) {   
  34.         this.password = password;   
  35.     }   
  36. }  
package com.ssh.pojo;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name="user")
public class User {
	private Integer id;
	private String username;
	private String password;
	@Id
	@GeneratedValue
	@Column(name="hr_id")
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
}

 UserService.java

 

Java代码   
  1. package com.ssh.service;   
  2.   
  3. import org.hibernate.Session;   
  4. import org.hibernate.SessionFactory;   
  5.   
  6. import com.ssh.pojo.User;   
  7.   
  8. public class UserService {   
  9.     private SessionFactory factory = null;   
  10.     public SessionFactory getFactory() {   
  11.         return factory;   
  12.     }   
  13.     public void setFactory(SessionFactory factory) {   
  14.         this.factory = factory;   
  15.     }   
  16.     public User save(User user){   
  17.         Session session = factory.getCurrentSession();   
  18.         session.beginTransaction();   
  19.         session.save(user);   
  20.         session.getTransaction().commit();   
  21.         return user;   
  22.     }   
  23. }  
package com.ssh.service;

import org.hibernate.Session;
import org.hibernate.SessionFactory;

import com.ssh.pojo.User;

public class UserService {
	private SessionFactory factory = null;
	public SessionFactory getFactory() {
		return factory;
	}
	public void setFactory(SessionFactory factory) {
		this.factory = factory;
	}
	public User save(User user){
		Session session = factory.getCurrentSession();
		session.beginTransaction();
		session.save(user);
		session.getTransaction().commit();
		return user;
	}
}

 log4j.properties

 

Properties代码   
  1. ### direct log messages to stdout ###   
  2. log4j.appender.stdout=org.apache.log4j.ConsoleAppender   
  3. log4j.appender.stdout.Target=System.out   
  4. log4j.appender.stdout.layout=org.apache.log4j.PatternLayout   
  5. log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n   
  6.   
  7. ### direct messages to file hibernate.log ###   
  8. #log4j.appender.file=org.apache.log4j.FileAppender   
  9. #log4j.appender.file.File=hibernate.log   
  10. #log4j.appender.file.layout=org.apache.log4j.PatternLayout   
  11. #log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n   
  12.   
  13. ### set log levels - for more verbose logging change 'info' to 'debug' ###   
  14.   
  15. log4j.rootLogger=warn, stdout   
  16.   
  17. #log4j.logger.org.hibernate=info   
  18. #log4j.logger.org.hibernate=debug   
  19.   
  20. ### log HQL query parser activity   
  21. #log4j.logger.org.hibernate.hql.ast.AST=debug   
  22.   
  23. ### log just the SQL   
  24. #log4j.logger.org.hibernate.SQL=debug   
  25.   
  26. ### log JDBC bind parameters ###   
  27. #log4j.logger.org.hibernate.type=info   
  28. #log4j.logger.org.hibernate.type=debug   
  29.   
  30. ### log schema export/update ###   
  31. log4j.logger.org.hibernate.tool.hbm2ddl=debug   
  32.   
  33. ### log HQL parse trees   
  34. #log4j.logger.org.hibernate.hql=debug   
  35.   
  36. ### log cache activity ###   
  37. #log4j.logger.org.hibernate.cache=debug   
  38.   
  39. ### log transaction activity   
  40. #log4j.logger.org.hibernate.transaction=debug   
  41.   
  42. ### log JDBC resource acquisition   
  43. #log4j.logger.org.hibernate.jdbc=debug   
  44.   
  45. ### enable the following line if you want to track down connection ###   
  46. ### leakages when using DriverManagerConnectionProvider ###   
  47. #log4j.logger.org.hibernate.connection.DriverManagerConnectionProvider=trace  
### direct log messages to stdout ###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n

### direct messages to file hibernate.log ###
#log4j.appender.file=org.apache.log4j.FileAppender
#log4j.appender.file.File=hibernate.log
#log4j.appender.file.layout=org.apache.log4j.PatternLayout
#log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n

### set log levels - for more verbose logging change 'info' to 'debug' ###

log4j.rootLogger=warn, stdout

#log4j.logger.org.hibernate=info
#log4j.logger.org.hibernate=debug

### log HQL query parser activity
#log4j.logger.org.hibernate.hql.ast.AST=debug

### log just the SQL
#log4j.logger.org.hibernate.SQL=debug

### log JDBC bind parameters ###
#log4j.logger.org.hibernate.type=info
#log4j.logger.org.hibernate.type=debug

### log schema export/update ###
log4j.logger.org.hibernate.tool.hbm2ddl=debug

### log HQL parse trees
#log4j.logger.org.hibernate.hql=debug

### log cache activity ###
#log4j.logger.org.hibernate.cache=debug

### log transaction activity
#log4j.logger.org.hibernate.transaction=debug

### log JDBC resource acquisition
#log4j.logger.org.hibernate.jdbc=debug

### enable the following line if you want to track down connection ###
### leakages when using DriverManagerConnectionProvider ###
#log4j.logger.org.hibernate.connection.DriverManagerConnectionProvider=trace

 struts.xml

 

Xml代码   
  1. <?xml version="1.0" encoding="UTF-8" ?>  
  2. <!DOCTYPE struts PUBLIC   
  3.     "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"   
  4.     "http://struts.apache.org/dtds/struts-2.0.dtd">  
  5. <struts>  
  6.     <constant name="struts.devMode" value="true" />  
  7.     <package name="ssh" extends="struts-default">  
  8.         <action name="loginApp" class="userAction">  
  9.             <result name="error">/WEB-INF/content/error.jsp</result>  
  10.             <result name="success">/WEB-INF/content/success.jsp</result>  
  11.         </action>  
  12.         <action name="*">  
  13.             <result>/WEB-INF/content/{1}.jsp</result>  
  14.         </action>  
  15.     </package>  
  16. </struts>  
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
	<constant name="struts.devMode" value="true" />
	<package name="ssh" extends="struts-default">
		<action name="loginApp" class="userAction">
			<result name="error">/WEB-INF/content/error.jsp</result>
			<result name="success">/WEB-INF/content/success.jsp</result>
		</action>
		<action name="*">
			<result>/WEB-INF/content/{1}.jsp</result>
		</action>
	</package>
</struts>

 error.jsp

 

Html代码   
  1. <%@ page language="java" contentType="text/html; charset=UTF-8"  
  2.     pageEncoding="UTF-8"%>  
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
  4. <html>  
  5. <head>  
  6. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  
  7. <title>出错页面</title>  
  8. </head>  
  9. <body>  
  10. 对不起,出错了   
  11. </body>  
  12. </html>  
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>出错页面</title>
</head>
<body>
对不起,出错了
</body>
</html>

 register.jsp

 

Html代码   
  1. <%@ page language="java" contentType="text/html; charset=UTF-8"  
  2.     pageEncoding="UTF-8"%>  
  3. <%@ taglib prefix="s" uri="/struts-tags" %>  
  4. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
  5. <html>  
  6. <head>  
  7. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  
  8. <title>注册页面</title>  
  9. </head>  
  10. <body>  
  11. 欢迎注册,请在这里输入必要的注册信息:   
  12. <s:form action="loginApp" method="post">  
  13.     <s:textfield name="user.username" label="用户名"></s:textfield>  
  14.     <s:password name="user.password" label="密码"></s:password>  
  15.     <s:submit label="提交"></s:submit>  
  16. </s:form>  
  17. </body>  
  18. </html>  
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>注册页面</title>
</head>
<body>
欢迎注册,请在这里输入必要的注册信息:
<s:form action="loginApp" method="post">
	<s:textfield name="user.username" label="用户名"></s:textfield>
	<s:password name="user.password" label="密码"></s:password>
	<s:submit label="提交"></s:submit>
</s:form>
</body>
</html>

 success.jsp

 

Html代码
<%@ page language="java" contentType="text/html; charset=UTF-8"  
  1.     pageEncoding="UTF-8"%>  
  2. <%@ taglib prefix="s" uri="/struts-tags" %>  
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
  4. <html>  
  5. <head>  
  6. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  
  7. <title>成功页面</title>  
  8. </head>  
  9. <body>  
  10. 成功了   
  11. </body>  
  12. </html>  
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>成功页面</title>
</head>
<body>
成功了
</body>
</html>

 applicationContext.xml

 

Xml代码
<?xml version="1.0" encoding="utf-8"?>  
  1. <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  2.     xmlns="http://www.springframework.org/schema/beans"  
  3.     xsi:schemaLocation="http://www.springframework.org/schema/beans   
  4.     http://www.springframework.org/schema/beans/spring-beans-3.1.xsd">  
  5.   
  6.     <bean id="dataSource" destroy-method="close"  
  7.         class="org.apache.commons.dbcp.BasicDataSource">  
  8.         <property name="driverClassName" value="com.mysql.jdbc.Driver" />  
  9.         <property name="url" value="jdbc:mysql://localhost:9906/ssh" />  
  10.         <property name="username" value="root" />  
  11.         <property name="password" value="root" />  
  12.     </bean>  
  13.        
  14.     <bean id="sessionFactory"  
  15.         class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">  
  16.         <property name="dataSource" ref="dataSource" />  
  17.         <property name="annotatedClasses">  
  18.             <list>  
  19.                 <value>com.ssh.pojo.User</value>  
  20.             </list>  
  21.         </property>  
  22.         <property name="hibernateProperties">  
  23.             <value>  
  24.                 hibernate.dialect=org.hibernate.dialect.MySQLDialect   
  25.                 hibernate.show_sql=true  
  26.                 hibernate.hbm2ddl.auto=update  
  27.                 hibernate.current_session_context_class=thread  
  28.             </value>  
  29.         </property>  
  30.     </bean>  
  31.        
  32.     <bean id="userService" class="com.ssh.service.UserService">  
  33.         <property name="factory" ref="sessionFactory"></property>  
  34.     </bean>  
  35.     <bean id="user" class="com.ssh.pojo.User"></bean>  
  36.     <bean id="userAction" class="com.ssh.action.UserAction">  
  37.         <property name="user" ref="user"></property>  
  38.         <property name="service" ref="userService"></property>  
  39.     </bean>  
  40. </beans>  
<?xml version="1.0" encoding="utf-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns="http://www.springframework.org/schema/beans"
	xsi:schemaLocation="http://www.springframework.org/schema/beans
	http://www.springframework.org/schema/beans/spring-beans-3.1.xsd">

	<bean id="dataSource" destroy-method="close"
		class="org.apache.commons.dbcp.BasicDataSource">
		<property name="driverClassName" value="com.mysql.jdbc.Driver" />
		<property name="url" value="jdbc:mysql://localhost:9906/ssh" />
		<property name="username" value="root" />
		<property name="password" value="root" />
	</bean>
	
	<bean id="sessionFactory"
		class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
		<property name="dataSource" ref="dataSource" />
		<property name="annotatedClasses">
			<list>
				<value>com.ssh.pojo.User</value>
			</list>
		</property>
		<property name="hibernateProperties">
			<value>
				hibernate.dialect=org.hibernate.dialect.MySQLDialect
				hibernate.show_sql=true
				hibernate.hbm2ddl.auto=update
				hibernate.current_session_context_class=thread
			</value>
		</property>
	</bean>
	
	<bean id="userService" class="com.ssh.service.UserService">
		<property name="factory" ref="sessionFactory"></property>
	</bean>
	<bean id="user" class="com.ssh.pojo.User"></bean>
	<bean id="userAction" class="com.ssh.action.UserAction">
		<property name="user" ref="user"></property>
		<property name="service" ref="userService"></property>
	</bean>
</beans>

 web.xml

 

Xml代码
<?xml version="1.0" encoding="UTF-8"?>  
  1. <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  2.     xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"  
  3.     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"  
  4.     id="WebApp_ID" version="3.0">  
  5.   
  6.     <display-name>ssh03_demo</display-name>  
  7.   
  8.     <listener>  
  9.         <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>  
  10.     </listener>  
  11.     <filter>  
  12.         <filter-name>struts2</filter-name>  
  13.         <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>  
  14.     </filter>  
  15.     <filter-mapping>  
  16.         <filter-name>struts2</filter-name>  
  17.         <url-pattern>/*</url-pattern>  
  18.     </filter-mapping>  
  19.   
  20.     <welcome-file-list>  
  21.         <welcome-file>index.html</welcome-file>  
  22.         <welcome-file>index.jsp</welcome-file>  
  23.     </welcome-file-list>  
  24. </web-app>  
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
	id="WebApp_ID" version="3.0">

	<display-name>ssh03_demo</display-name>

	<listener>
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>
	<filter>
		<filter-name>struts2</filter-name>
		<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
	</filter>
	<filter-mapping>
		<filter-name>struts2</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>

	<welcome-file-list>
		<welcome-file>index.html</welcome-file>
		<welcome-file>index.jsp</welcome-file>
	</welcome-file-list>
</web-app>

 然后在Tomcat7上部署该项目即可,在浏览器中输入地址:http://localhost:8080/ssh_demo/register即可进入下面的页面:



 至此,SSH框架整合完成。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值