最新的SSH框架(Spring4.3.3 +Struts2.5.2+Hibernate5.2.3)搭建
2016-10-09 11:54
627 查看
SSH框架搭建
项目环境
创建Structs工程
操作步骤
操作完成后项目结构如图
编写代码
运行效果
在Struts基础上整合Hibernate整合Hibernate
操作步骤
修改完成后如下所示
编写代码
运行效果
在Struts Hibernate项目中整合Spring整合Spring
操作步骤
操作完成后项目结构图如下所示
第一次用Markdown编写,排版还是比较舒服的
Mysql 5.0.45
Struts2.5.2
http://struts.apache.org/download.cgi
struts2.3.8.1下载地址:http://mirrors.cnnic.cn/apache/struts/2.3.28.1/struts-2.3.28.1-apps.zip
Spring Framework 4.3.3
http://repo.springsource.org/libs-release-local/org/springframework/spring/
Hibernate 5.2.3
[http://hibernate.org/orm/downloads/Hibernate 5.2.3](
http://hibernate.org/orm/downloads/)
mysql-connector-java-5.1.40(数据库驱动)
我这里用的是mysql mysq-jdbc的驱动下载地址http://dev.mysql.com/downloads/connector/j/
把Struts内apps文件夹下的
在src目录下创建相应package。
在
用户表单类
注册Action类
业务逻辑接口
业务逻辑实现类
- 注册成功后
-
在上面Struts项目的基础上添加
在数据库中创建对应的表user来写入要注册的用户。创建表的
创建user表的
建立Hibernate配置文件。路径:
编写
修改业务逻辑实现类。
实体类
POJO类
POJO类
代码
工厂类
不同的hibernate版本编写有些不同,这里我用hibernate5.2.5配置的时候按照hibernate配置的出了经典的问题 unknown entity 请看这篇文章-传送门,下面附上正确的代码
修改后的业务逻辑实现类
查看数据
编写
修改
在引入Spring后,需要用Spring进行统一的事务管理,数据源和sessionFactory都交给Spring去生成,因此接口类和实现类BaseDao和UserDao都需要做相应的修改。Spring提供了HibernateDaoSupport类来完成对数据的操作,因此UserDao在实现BaseDao的同时还需要继承HibernateDaoSupport类。并将先前session的操作修改成HibernateTemplate(可通过getHibernateTemplate()方法来获得)的操作。
修改业务逻辑实现类。在没有加入
修改用户注册的
删除
修改
修改
项目环境
创建Structs工程
操作步骤
操作完成后项目结构如图
编写代码
运行效果
在Struts基础上整合Hibernate整合Hibernate
操作步骤
修改完成后如下所示
编写代码
运行效果
在Struts Hibernate项目中整合Spring整合Spring
操作步骤
操作完成后项目结构图如下所示
第一次用Markdown编写,排版还是比较舒服的
SSH框架搭建
1 项目环境
Win7 x64环境,eclipse mars2,jdk1.8,tomcat8.0Mysql 5.0.45
Struts2.5.2
http://struts.apache.org/download.cgi
新版本刚出不久,Structs2.5.中没strut-blank.war,也就没有struts.xml,没办法,只structs2.3.8.1中找的
struts2.3.8.1下载地址:http://mirrors.cnnic.cn/apache/struts/2.3.28.1/struts-2.3.28.1-apps.zip
Spring Framework 4.3.3
http://repo.springsource.org/libs-release-local/org/springframework/spring/
Hibernate 5.2.3
[http://hibernate.org/orm/downloads/Hibernate 5.2.3](
http://hibernate.org/orm/downloads/)
mysql-connector-java-5.1.40(数据库驱动)
我这里用的是mysql mysq-jdbc的驱动下载地址http://dev.mysql.com/downloads/connector/j/
2 创建Structs工程
1 操作步骤
在Eclipse中创建一个Dynamic Web Project,本文项目名称为
SSHProject。
把Struts内apps文件夹下的
struts2-blank war包用压缩工具解压,然后把
WEB-INF/lib内的jar包和
WEB-INF下的
web.xml文件分别复制到
SSHProject项目下的
WEB-INF/lib内和
WEB-INF下。
在src目录下创建相应package。
在
WebContent下创建
Register.jsp文件,并分别创建注册成功和注册失败的
Success.jsp和
Fail.jsp。
2 操作完成后项目结构如图
3 编写代码
web.xml的内容
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1"> <display-name>SSHProgect</display-name> <filter> <filter-name>SSH</filter-name> <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> </filter> <filter-mapping> <filter-name>SSH</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.htm</welcome-file> <welcome-file>index.jsp</welcome-file> <welcome-file>default.html</welcome-file> <welcome-file>default.htm</welcome-file> <welcome-file>default.jsp</welcome-file> </welcome-file-list> </web-app>
struts.xml的内容
<?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> <include file="struts-default.xml" /> <package name="default" namespace="/" extends="struts-default"> <action name="register" class="com.ssh.action.RegisterAction"> <result name="input">/Register.jsp</result> <result name="success">/Success.jsp</result> <result name="error">/Fail.jsp</result> </action> </package> </struts>
Register.jsp的内容。
<%@ 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>User Register Page</title> </head> <body> <s:form action="register"> <s:textfield name="user.username" label="用户名"></s:textfield> <s:password name="user.password" label="密码"></s:password> <s:select list="#{'1':'男','0':'女'}" listKey="key" listValue="value" name="user.gender" label="性别" value="1"></s:select> <s:submit value="注册"></s:submit> </s:form> </body> </html>
Success.jsp的内容
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <!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=ISO-8859-1"> <title>Insert title here</title> </head> <body> <h1>success!</h1> </body> </html>
Fail.jsp的内容
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <!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=ISO-8859-1"> <title>Insert title here</title> </head> <body> <h1>failure!</h1> </body> </html>
用户表单类
UserForm.java的内容。
package com.ssh.beans; public class UserForm { private String username; private String password; private int gender; 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; } public int getGender() { return gender; } public void setGender(int gender) { this.gender = gender; } }
注册Action类
RegisterAction.java的内容。
package com.ssh.action; import com.opensymphony.xwork2.ActionSupport; import com.ssh.beans.UserForm; import com.ssh.service.UserManager; import com.ssh.serviceImpl.UserManagerImpl; public class RegisterAction extends ActionSupport { private static final long serialVersionUID = 1L; private UserForm user; private UserManager userManager; public UserForm getUser() { return user; } public void setUser(UserForm user) { this.user = user; } public UserManager getUserManager() { return userManager; } public void setUserManager(UserManager userManager) { this.userManager = userManager; } public String execute() { try { this.setUserManager(new UserManagerImpl()); userManager.regUser(user); System.out.println("success"); return SUCCESS; } catch (Exception e) { e.printStackTrace(); return ERROR; } } }
业务逻辑接口
UserManager.java的内容
package com.ssh.service; import com.ssh.beans.UserForm; public interface UserManager { public void regUser(UserForm user); }
业务逻辑实现类
UserManagerImpl.java的内容
package com.ssh.serviceImpl; import com.ssh.beans.UserForm; import com.ssh.service.UserManager; public class UserManagerImpl implements UserManager { @Override public void regUser(UserForm user) { } }
4 运行效果
浏览器地址中输入http://localhost:8080/SSHProgect/Register.jsp后
- 注册成功后
-
3 在Struts基础上整合Hibernate整合Hibernate
1 操作步骤
将Hibernate内的
lib/required下的jar包和
lib/jpa下的jar包复制到
SSHProject项目的
lib目录下。
在上面Struts项目的基础上添加
com.ssh.dao和
com.ssh.daoImpl包。分别创建
BaseDao接口和
UserDao类。
在数据库中创建对应的表user来写入要注册的用户。创建表的
SQL脚本如下所示。
create table user( userId int auto_increment, userName varchar(16) not null, password varchar(16) not null, gender int not null, primary key(userId) );
创建user表的
Hibernate映射文件。因为这里要创建
user表对应的
POJO类,所以我这里把之前
com.ssh.beans包改成
com.ssh.forms包,用来存放页面传过来的表单数据,新创建
com.ssh.beans包,用来创建
POJO对象来对应数据库中的表。路径:
POJO类同目录。
建立Hibernate配置文件。路径:
src目录下。
编写
Session工厂类。整合
Spring后,数据源的创建和
SessionFactory的创建都交给
Spring去管理,就无需这个工厂类了,临时创建在
daoImpl包里面。
修改业务逻辑实现类。
2 修改完成后如下所示
3 编写代码
BaseDao.java的内容
package com.ssh.dao; import org.hibernate.HibernateException; import org.hibernate.Session; public interface BaseDao { public Session getSession(); public void setSession(Session session); public void saveObject(Object obj)throws HibernateException; }
实体类
User.java的内容。
package com.ssh.beans; public class User { private String username; private String password; private String gender; private int userId; public int getUserId() { return userId; } public void setUserId(int userId) { this.userId = userId; } 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; } public String getGender() { return gender; } public void setGender(String gender) { this.gender = gender; } }
POJO类
UserDao.java的内容
package com.ssh.daoimpl; import org.hibernate.HibernateException; import org.hibernate.Session; import com.ssh.dao.BaseDao; public class UserDao implements BaseDao { private Session session; @Override public Session getSession() { // TODO Auto-generated method stub return session; } @Override public void setSession(Session session) { // TODO Auto-generated method stub this.session=session; } @Override public void saveObject(Object obj) throws HibernateException { // TODO Auto-generated method stub session.save(obj); } }
POJO类
User.java的
Hibernate映射文件
User.hbm.xml的内容
代码
<generator class="native"></generator>说明将根据本地数据库的设置来创建
userId,如MySQL中将表
user的
userId设置为自动增长,则在保存记录是,
userId将自动增长。对于需要在程序中指定主键的值,则将
generator的class属性设置为
assigned。
<?xml version="1.0" encoding='UTF-8'?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" > <hibernate-mapping package="com.ssh.beans"> <class name="User" table="user"> <id name="userId" column="userId"> <generator class="native"></generator> </id> <property name="username" column="userName" type="java.lang.String" not-null="true" length="16"></property> <property name="password" column="password" type="java.lang.String" not-null="true" length="16" /> <property name="gender" column="gender" type="java.lang.Integer" length="1" /> </class> </hibernate-mapping>
Hibernate的配置文件
hibernate.cfg.xml的内容
<?xml version='1.0' encoding='utf-8'?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <!-- Database connection settings --> <property name="connection.driver_class">com.mysql.jdbc.Driver</property> <property name="connection.url">jdbc:mysql://localhost:3306/test</property> <property name="connection.username">root</property> <property name="connection.password"></property> <property name="dialect">org.hibernate.dialect.MySQLDialect</property> <property name="show_sql">true</property> <mapping class="com.ssh.beans.User"/> </session-factory> </hibernate-configuration>
工厂类
SessionFactory的内容。
不同的hibernate版本编写有些不同,这里我用hibernate5.2.5配置的时候按照hibernate配置的出了经典的问题 unknown entity 请看这篇文章-传送门,下面附上正确的代码
package com.ssh.daoimpl; import org.hibernate.HibernateException; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.boot.MetadataSources; import org.hibernate.boot.registry.StandardServiceRegistryBuilder; import org.hibernate.cfg.Configuration; import org.hibernate.service.ServiceRegistry; public class HibernateSessionFactory { private static final ThreadLocal<Session> threadLocal = new ThreadLocal<>(); //加载默认的src下的hibernate.cfg.xml private static final Configuration cfg = new Configuration().configure(); private static SessionFactory sessionFaction; public static Session currentSession()throws HibernateException{ // 创建Session Session session = threadLocal.get(); if (session == null||session.isOpen()==false) { if (sessionFaction==null) { try { sessionFaction = cfg.buildSessionFactory(); //System.out.println("HibernateSessionFactory---sessionfactory:"+sessionFaction); } catch (Exception e) { // TODO: handle exception e.printStackTrace(); } } session=sessionFaction.openSession(); //System.out.println("HibernateSessionFactory--session:"+session); threadLocal.set(session); } return session; } public static void closeSession()throws HibernateException{ Session session= threadLocal.get(); threadLocal.set(null); if (session!=null) { session.close(); } } //public static void main(String []args){ // Session session = currentSession(); // System.out.println("session:"+session); //} }
修改后的业务逻辑实现类
UserManagerImpl的内容。
package com.ssh.serviceImpl; import org.hibernate.Session; import org.hibernate.Transaction; import com.ssh.beans.User; import com.ssh.dao.BaseDao; import com.ssh.daoimpl.HibernateSessionFactory; import com.ssh.daoimpl.UserDao; import com.ssh.forms.UserForm; import com.ssh.service.UserManager; public class UserManagerImpl implements UserManager { private BaseDao dao; private Session session; public UserManagerImpl() { // TODO Auto-generated constructor stub dao = new UserDao(); } @Override public void regUser(UserForm userForm) { session = HibernateSessionFactory.currentSession(); System.out.println("UserManegerImpl---session:" + session); dao.setSession(session); // 获取事务 Transaction transaction = session.beginTransaction(); // 构造uer对象 User user = new User(); user.setUsername(userForm.getUsername()); user.setPassword(userForm.getPassword()); user.setGender(userForm.getGender()); // 保存对象 dao.saveObject(user); // 提交事务 transaction.commit(); HibernateSessionFactory.closeSession(); } public static void main(String[] args) { User userForm = new User(); userForm.setGender("male"); userForm.setPassword("12121212"); userForm.setUsername("zjz"); HibernateSessionFactory.currentSession().save(userForm); // new UserManagerImpl().regUser(userForm); } }
4 运行效果
查看数据
4 在Struts + Hibernate项目中整合Spring整合Spring
1 操作步骤
将Spring内libs目录下包含所有的jar包(不需要复制结尾为
sources和
javadoc的jar包)到
SSHProject项目的
lib目录下。
编写
Spring的配置文件
applicationContext.xml。路径:
src目录下,需要在
web.xml配置
context-param指定路径,或者把该文件放在WEB-INF下,跟
web.xml同目录。这里由于Spring配置数据源的需要,需要把
Hibernate内lib/optional/c3p0下的c3p0-0.9.1.jar复制到
lib目录下。
修改
BaseDao和
UserDao。
在引入Spring后,需要用Spring进行统一的事务管理,数据源和sessionFactory都交给Spring去生成,因此接口类和实现类BaseDao和UserDao都需要做相应的修改。Spring提供了HibernateDaoSupport类来完成对数据的操作,因此UserDao在实现BaseDao的同时还需要继承HibernateDaoSupport类。并将先前session的操作修改成HibernateTemplate(可通过getHibernateTemplate()方法来获得)的操作。
修改业务逻辑实现类。在没有加入
Spring之前,业务逻辑实现类的
Session的获得,
dao的实例化,以及事务的管理都是该类执行管理的。加入
Spring后,这些都交给
Spring去管理。该类的
dao的实例化由
Spring注入。
修改用户注册的
RegisterAction类。同样,
RegisterAction类中的
userManager的实例化也由Spring注入。
删除
Hibernate的配置文件
Hibernate.cfg.xml和工厂类
HibernateSesseionFactory类。他们的工作已经交给
Spring去做,已经不再有用。
修改
web.xml,加载
Spring。要想启动时加载
Spring的配置文件,需要在
web.xml中配置对应的监听器
listenser,并制定
Spring的配置文件。
修改
Struts的配置文件
struts.xml。把原来指定的名为
register的
action的class由原来的路径变为
applicationContext.xml文件中该
Action的id。
2 操作完成后项目结构图如下所示
相关文章推荐
- 搭建SSH框架Struts2.1、Spring2.5、Hibernate3.3
- 用MyEclipse搭建SSH框架 Struts Spring Hibernate
- ssh框架搭建Struts2.06+spring2.5+hibernate3.2整合实例代码教程步骤
- 图文教你整合最新版本搭建SSH框架之一:spring(非常详细)
- 用MyEclipse搭建SSH框架 Struts Spring Hibernate
- Spring学习8-用MyEclipse搭建SSH框架 Struts Spring Hibernate
- 搭建SSH框架遇到的struts.xml找不到spring定义的bean的错误(配置文件的路径问题)
- 最新版使用SSH框架(Struts2.x + Spring4.x + Hibernate5.x)搭建JavaWeb开发环境实例
- 用MyEclipse搭建SSH框架 Struts Spring Hibernate
- 用MyEclipse搭建SSH框架 Struts Spring Hibernate
- spring3.0+struts2+hibernate3整个环境的搭建和基于junit4的spring测试框架,最新技术的ssh框架
- 在Eclipse上搭建SSH框架(Struts 2.5.1 + Spring 4.3.0 + Hibernate 4.3.11)
- Struts1.2+spring2.0+hibernate3.3 搭建SSH框架
- 最新版SSH框架简单整合(Struts 2.3.15.2 + Spring 4.0.0 + Hibernate 4.2.6)与整合手记
- 用MyEclipse搭建SSH框架 Struts Spring Hibernate
- SSH(struts+spring+hibernate)迅速开发--第二章 SSH框架搭建(1)
- 基于struts2.5.2+hibernate5.2.2+spring4.3.2搭建SSH框架
- Spring学习8-用MyEclipse搭建SSH框架 Struts Spring Hibernate
- 用MyEclipse搭建SSH框架 Struts Spring Hibernate
- 用MyEclipse搭建SSH框架 Struts Spring Hibernate