SSH是指JavaEE中的三种框架:Struts2,Spring,Hibernate。
1,准备工作
1.先要有一个eclipse工具,运行环境是jdk1.8。tomcat8.0
2.然后在网上下载Struts2,Spring,Hibernate的包
这是我用的SSH的包和版本。
3.解压3个jar包:
Struts2解压后所需要的包的路径,D:\SSH的资源包\struts-2.3.30-apps\apps\struts2-blank\WEB-INF\lib
———————————————————————————————————————————————————————————————
spring解压后的路径,D:\SSH的资源包\spring-framework-4.2.2.RELEASE\libs
但并不是所有的包都是需要的,比如“javadoc.jar、sources.jar”这两个结尾的包是不需要的,不会在项目中加入它们
除了以上的包,spring还要导入两个包:commons-logging.jar 和 struts2-spring-plugin.jar
这两个包在Struts2的包里,路径是:D:\SSH的资源包\struts-2.3.30\apps\struts2-showcase\WEB-INF\lib
——————————————————————————————————————————————————————
Hibernate解压后所需要的包的路径:D:\SSH的资源包\hibernate-release-5.2.2.Final\lib\required
然后还需要一个数据库连接池的包,可以在网上下载,也可以在Hibernate包里找:路径是,D:\SSH的资源包\hibernate-release-5.2.2.Final\lib\optional\c3p0
以上这些包都是要用到的。下面正式开始
2.新建项目
1.首先打开eclipse工具新建一个web项目
这个选项是动态的web项目,点击之后进行下一步的设置
不要直接Finish(完成),点next(下一步)
完成之后如下图
之前准备好的包放入箭头所指的文件夹里
2.在web.xml配置Struts2和spring
<?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">
这是配置的头信息,可以从Struts2包里的示例项目中拷过来
<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>
这是以过滤器的形式引入Struts2的包。这是个版本是一个过滤器,在后面的版本会变成两个过滤器,接下来配置spring
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
到这里就配置好了,进行下一步
3.要编写一个代替servlet跳转的action类。先新建一个action类,如下图
名字可随意起,不过一般会起个有意义的名字,方便查找。这里我把一般要用到的包都写上去了分别是,action(跳转),dao(访问数据库),service(业务逻辑),entity(实体类),util(工具)。
public class IndexAction extends ActionSupport{
//声明service,但不给它创建具体的实现类的实例,
//因为:action不应该关注具体是谁来实现service
//具体service实现类是谁,我们使用spring注入进来
private IndexService is;
public viod setIs(IndexService){//这里就是用spring注入
this. is = is ;
}
public String execute1{
return: "index" ;
}
}
4.编写完Action类后,我们要配置struts.xml文件,首先新建一个xml文件,如下图
下面开始写配置文件
<struts>
<constant name="struts.obiectFactory" value="spring"/>
<include file="s001.xml"/>
<package name="mypck001" extends="struts-default">
<action name="Index" class="myIndexAction" method="execute1">
<result name="success">/WEB-INF/jsp/index.jsp</result>
<result name="fail">/WEB-INF/jsp/fail.jsp</result>//防止不通过action就可以访问jsp页面
</action>
</package>
</struts>
5.写appliCation.xml配置文件,也是在src文件夹内新建一个xml文件。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:jee="http://www.springframework.org/schema/jee"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.2.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd
http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-4.2.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.2.xsd">
<!-- ①一个bean标签对应一个类,id为myIndexAction的bean就对应项目中的IndexAction类 ②id的值是随便起,但最好有意义 ③class的值是包名.类名 ④scope="prototype"是非单例,不用理解,但一定要写这句代码,记住有这回事就行 -->
<bean id="myIndexAction" class="ssh.action.IndexAction" scope="prototype">
<!-- ①name的值是要注入的变量名 ②ref是引用类的类名,name为“is”的变量引用的是myIndexService的值 -->
<property name="is" ref="myIndexService"/>
</bean>
<!-- myIndexService = new ssh.service.IndexServiceImpl() id为myIndexService的bean对应项目中的IndexService类-->
<bean id="myIndexService" class="ssh.service.IndexServiceImpl" scope="prototype">
<!-- name为id的变量引用的是myIndexDao的值 -->
<property name="id" ref="myIndexDao"/>
</bean>
<bean id="myIndexDao" class="ssh.dao.IndexDaoImpl" scope="prototype">
<property name="c" ref="myConnection"></property>
</bean>
<!-- 下面这个bean是对应项目中的connection类,class的值是包名.类名 -->
<bean id="myConnection" class="ssh.util.MyConnectionImpl_SQLSERVER" scope="prototype">
<!-- 这里没有<property>是因为connection这个类已经是连接数据库的类,我们已经不需要通过new实现类了 -->
</bean>
</beans>
6.然后写数据库的配置文件,首先把(hibernate-release-5.2.2.Final\project\hibernate-core\src\test\resources)目录下的hibernate.cfg.xml文件放在src目录下。
然后在hibernate.cfg.xml文件里最顶部加上<?xml version="1.0" encoding="utf-8"?>
接着配置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>
<!-- hibernate配置文件 -->
<!-- 配置数据库名,以及用户名,密码 -->
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql://localhost:3306/CardDB</property>
<property name="connection.username">root</property>
<property name="connection.password">123456</property>
<!-- 每个数据库都有1个 -->
<property name="dialect">org.hibernate.dialect.MySQL5Dialect</property>
<property name="connection.pool_size">5</property>
<property name="show_sql">true</property>
<property name="format_sql">true</property>
<property name="hbm2ddl.auto">update</property>
<!-- 配置映射文件 -->
<mapping resource="ssh/entity/BookCard.hbm.xml"/>
</session-factory>
</hibernate-configuration>
7.然后在src文件夹内再新建一个BookCard.hbm.xml(实体类配置)文件并进行配置
<?xml version="1.0" encoding="UTF-8"?>
<hibernate-mapping xmlns="http://www.hibernate.org/xsd/hibernate-mapping">
<!-- ①class的值是包名.实体类名 ②table的值是数据库表名 -->
<class name="ssh.entity.BookCard" table="BookCard">
<!-- ①<id>标签是要作为主键的属性或字段才能用 ②column是数据库的字段名-->
<id name="cid" column="cid">
<generator class="native"></generator>
</id>
<!-- <property>标签对应于属性(数据库字段)在<property>标签中设置数据库相关的属性,比如长度、类型、是否为空、列名...等等 -->
<property name="name" type="string" length="50" column="name" not-null="true"></property>
<property name="sex" type="string" length="2" column="sex"></property>
<property name="cardDate" type="date" column="cardDate"></property>
<property name="deposit" type="double" column="deposit"></property>
</class>
</hibernate-mapping>
8.在IndexDaoImpl实现类中构造SessionFactory
package ssh.dao;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.query.Query;
public class IndexDaoImpl implements IndexDao {
<!-- SessionFactory是hibernate的内置对象 -->
private SessionFactory sessionFactory;
<!-- 给SessionFactory一个set方法,便于spring注入 -->
public void setSessionFactory(SessionFactory sf) {
this.sessionFactory = sf;
}
@Override
public List<BookCard> getAllBookCard() {
<!-- sessionFactory这个实例可以自己按常规的hibernate传统写法创建也可以交给spring去托管sessionFactory = new Configuration().configure().buildSessionFactory(); -->
Session session = sessionFactory.openSession();
}
}
以上就是一个简易的SSH框架项目的搭建