基于Eclipse搭建SSH框架详解
1 目的
熟悉搭建Struts2+Spring+Hibernate框架详细过程。
参考博客:http://www.cnblogs.com/sunliming/archive/2010/10/04/1842114.html
2 环境准备
jdk版本:Jdk1.7及以上
IDE : eclipse
Tomcat : tomcat7.0及以上
Maven : maven3.3
数据库:mysql5.0以上及navicat for mysql
3 新建一个maven项目
这里以MySSH项目为例
4 Struts2配置
4.1 基本配置
(1)在WEB-INF文件下新建lib文件,引入Struts必需的五个jar包。以后用到什么jar包,再引入。
具体包可以自己去网上下载。
别忘了把包加入项目中!!!
(2)修改WEB-INF下的web.xml文件,增加struts2的配置。
(3)添加struts配置文件。 在src/main/resources目录下,新建struts.xml。
(4)好了,struts基本配置完毕。现在把工程发布到tomcat上去测试一下,启动tomcat,如果启动无异常,则说明配置成功。注意:可能会出现异常,根据提示引入相关jar包。我测试的时候是缺少下面三个相关jar包。
4.2 简单用户登录页面实现(与数据库无关)
(1)首先在webapp目录下,新建一个登陆页面login.jsp。
(2)在我们已经建好的struts.xml中来配置登录的action。这里定义登录action的名字为login。
(3)下面就来编写具体的action类了。这里,在src/main/java目录下新建一个test包,再在该包里面新建LoginAction类。
可以看到,该类继承了com.opensymphony.xwork2.ActionSupport类,因为ActionSupport类里面包含两个登录验证的方法:execute()和validate()。
另外,这里假设用户名为admin、密码为001。
(4)这样,一个简单用户登录就完成了,重启tomcat测试一下吧。打开登录页面http://localhost:8080/MySSH/login.jsp,输入正确或错误的用户名和密码,看看有什么提示。
注意:可能会出现struts-default.xml相关异常,根据提示引入相关jar包。我的是缺少fileupload相关jar包,于是引入了commons-fileupload-1.3.1.jar。
4.3 struts.xml配置介绍
参考博客:http://www.cnblogs.com/kay/archive/2007/11/28/976120.html
配置文件:
<package name="struts2" extends="struts-default">
<action name="login" class="test.LoginAction">
<result name="success" type="redirect">index.jspresult>
<result name="input">login.jspresult>
<result name="error">login.jspresult>
action>
package>
(1)package
package提供了将多个Action组织为一个模块的方式,package的名字必须是唯一的,package可以扩展,当一个package扩展自另一个package时,该package会在本身配置的基础上加入扩展的package的配置,父package必须在子package前配置。
name:package名称
extends : 继承的父package名称
(2)action
Action配置 一个Action可以被多次映射(只要action配置中的name不同)
name:action名称
class: 对应的类的路径
method: 调用Action中的方法名
(3)result节点配置
name : result名称,和Action中返回的值相同
type : result类型,不写则选用superpackage的type,struts-default.xml中的默认为dispatcher
5 Hibernate配置
5.1 基本配置
(1)安装eclipse之Hibernate Tools插件。
这里选择JBoss Tools安装,点击安装后(我的因为安装过了,所以显示Installed),弹出一个选项框,只选择“Hibernate Tools”安装即可。在eclipse中看到下面的,表示安装成功了。
(2)创建Hibernate配置文件。在src/main/resources目录下,新建hibernate.cfg.xml。这是hibernate连接数据库的配置文件。(因为我们安装了Hibernate Tools插件,所以可以选择自动生成)
这里选择了localhost本地数据库,选择创建了ssh数据库
(3)创建Session工厂类HibernateSessionFactory。
让我们先了解一下Session, Hibernate对数据库的操作是通过Session来实现的,这里的session不同于页面间传递参数的session,而是类似于JDBC中的 Connection。Session是Hibernate运作的中心,对象的生命周期、事务的管理、数据库的存取都与session息息相关。
而Session是由HibernateSessionFactory创建的,是线程安全的,可以让多个执行线程同时存取HibernateSessionFactory而不会有数据共享的问题,但不能让多个线程共享一个Session。
在eclispe里面HibernateSessionFactory不可以自动创建,所以可以去网上搜索。可参考博客:http://www.cnblogs.com/dyllove98/archive/2013/08/07/3243769.html如何理解Hibernate中的HibernateSessionFactory类。在这里还要引入hibernate-core-5.0.1.Final.jar包。
注意:别忘了把数据库驱动包引入到工程中(这里选择的mysql-connector-java-5.1.37.jar)
5.2 简单数据库获得数据实现
(1)数据库ssh创建表user,这里我们通过navicat for mysql创建,并添加一组数据。
(2)创建实体类User
(3)创建hibernate与实体User关联文件User.hbm.xml(这里我们使用Hibernate Tools插件自带的)
可以看到,自动配置成功
(4)在hibernate.cfg.xml里面指定映射文件User.hbm.xml
(5)测试实现类Test
(6)运行Test,注意:这里可能会报错,原因缺少以下几个包
(7)运行成功
5.3 hibernate.cfg.xml配置介绍
参考博客:http://blog.csdn.net/qiaqia609/article/details/9456489/
配置文件:
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>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driverproperty>
<property name="hibernate.connection.password">rootproperty>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/sshproperty>
<property name="hibernate.connection.username">rootproperty>
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialectproperty>
<mapping resource="test/User.hbm.xml"/>
session-factory>
hibernate-configuration>
(1)>
表明解析本XML文件的DTD文档位置,DTD是Document Type Definition 的缩写,即文档类型的定义,XML解析器使用DTD文档来检查XML文件的合法性。
(2)
声明Hibernate配置文件的开始
(3)
表明以下的配置是针对session-factory配置的,SessionFactory是Hibernate中的一个类,这个类主要负责保存Hibernate的配置信息,以及对Session的操作
(4)
配置数据库的驱动程序,Hibernate在连接数据库时,需要用到数据库的驱动程序
(5)
连接数据库的密码
(6)
设置数据库的连接url:jdbc:mysql://localhost:3306/ssh,其中localhost表示mysql服务器名称,此处为本机,3306表示端口号,ssh是数据库名
(7)
连接数据库的用户名
(8)
hibernate.dialect 只是Hibernate使用的数据库方言,就是要用Hibernate连接那种类型的数据库服务器。
(9)
指定映射文件为“test/User.hbm.xml ”
(10)可加入
是否在后台显示Hibernate用到的SQL语句,开发时设置为true,便于差错,程序运行时可以在Eclipse的控制台显示Hibernate的执行Sql语句。项目部署后可以设置为false,提高运行效率
5.4 User.hbm.xml配置介绍
配置文件:
<hibernate-mapping>
<class name="test.User" table="USER">
<id name="id" type="java.lang.String">
<column name="ID" />
<generator class="assigned" />
id>
<property name="userName" type="java.lang.String">
<column name="USERNAME" />
property>
<property name="password" type="java.lang.String">
<column name="PASSWORD" />
property>
class>
hibernate-mapping>
(1)<hibernate-mapping>
声明Hibernate配置映射文件的开始
(2)<class name="test.User" table="USER">
class name——映射实体类类名,这里配置实际上是“所属包名.类名”
table——实体类映射数据库表名
另一种方式:
<class name="User" table="USER">——类名
(3)<id name="id" type="java.lang.String">
<column name="ID" />
<generator class="assigned" />
id>
id name——"主键在java类中的字段名"
type——"类型 "
column——"对应表中字段"
generator class——"主键生成策略"
常用的两种策略
1) assigned——主键由外部程序负责生成,在 save() 之前指定。
2) native——由Hibernate根据使用的数据库自行判断。
property name——非主键在java类中的字段名
6 Spring配置
6.1 基本配置
(1)通过maven的pom.xml文件注入spring所需的主要包。
(2)配置web.xml文件。Jar包引入完成后,就开始配置spring了。在这里,我们指定了spring配置文件的路径,即src/main/resources目录下的所有以applicationContext开头命名的xml文件。
注意:配置是可能会出现
(3)在src/main/resources目录下新建applicationContext.xml文件。并且给这个文件加上spring的标头:
注意:标头是4.0, 错了可能Spring就不能正确加载。
6.2 简单测试实现
这里我们还是以User类为例
(1)创建SpringTest类
(2)在applicationContext.xml中配置一个bean。
(3)运行测试类,出现下面结果,表示配置成功。
7 Spring整合Struts2
Spring与Struts的整合其实就是把Struts的Action类交给Spring来管理
(1)导入jar包struts2-spring-plugin-2.1.6.jar,引入到工程中。
(2)现在就来看如何把struts的action交给spring。以struts示例中的login的action为例,首先创建一个LoginAction类的Bean。在applicationContext.xml中增加如下代码:
这里,我们把这个bean的id设为loginAction。Scope设为prototype,含义是每一次请求创建一个LoginAction类的实例,Scope还有另一个值“singleton”意为“单例模式”。
(3)接下来修改struts.xml文件,把原来login的action的配置做如下修改:
把
注意到有什么区别了吗?class值设为了loginAction,即LoginAction类的bean的ID。这样我们就把LoginAction类交给了spring管理。
(4)运行测试,再次打开登录页面http://localhost:8080/MySSH/login.jsp,输入正确或错误的用户名和密码,看看有什么提示。如果正确运行,表示配置成功。
8 Spring整合Hibernate
Spring整合Hibernate主要是对hibernate的Session进行管理,包含Session的创建、提交、关闭的整个生命周期。Spring对事务的管理应用了AOP的技术,配置前请先了解一下AOP的知识。
(1)配置sessionFactory,让spring来创建Session。在applicationContext.xml中增加如下代码:
(2)创建SpringHibernateTest类。
(3)运行测试类,出现下面结果,表示配置成功。
9 SSH框架注解实现登录页面功能
(1)下载注解包jsr250-api-1.0.jar,并引入工程。
(2)在applicationContext.xml中配置注解:
(2)修改LoginAction类,使用注解获得sessionFactory,进而获得session值,通过Session获得数据库数据,进行用户名和密码的验证。
(3)运行用户登录界面实现,打开登录页面http://localhost:8080/MySSH/login.jsp,输入正确或错误的用户名和密码,看看有什么提示。如果正确运行,表示配置成功。
输入正确用户名和密码,跳转到index.jsp页面。
附录
(1)项目目录:
(2)项目所必须的所有包:
(3)项目具体文档参见MySSH文件
注:项目文档可以到我的资源里面下载!