最近在学习SSH整合过程中出现了许多小问题!为了以后的学习SSH整合的朋友少走弯路,所以总结了一篇文档!但愿能对大家有所帮助!
好了,废话不多说!下面我们来实现一个用ssh框架完成对一本书的保存~
一、开发工具
开发工具 | 工具版本 |
---|---|
eclipse | 4.4.9M6 |
tomcat | 7.0 |
jdk | 1.8 |
二、项目开发
1、首先创建web项目!
2、创建好项目,我们开始导入项目需要的jar包,主要是ssh框架的jar包,下面我们对其详细介绍!
a、首先导入与数据库连接的支持包
b、导入数据库连接池c3p0需要的jar包
c、导入spring3.5的支持包
spring支持jar包的名称 | jar包的说明 |
---|---|
spring-aop.jar | spring的面向切面编程,提供AOP(面向切面编程)的实现 |
spring-aspects.jar | spring提供对Aspectj框架的整合 |
spring-beans.jar | springIOC(控制反转和依赖注入)的基础实现 |
spring-context.jar | spring提供在基础IOC功能上的扩展服务 |
spring-core.jar | spring的核心工具包 |
spring-expression.jar | spring表达式语言 |
spring-jdbc.jar | spring对jdbc的简单封装 |
spring-orm.jar | spring整合第三方ORM框架(如hibernte,ibatis)的支持包 |
spring-struts.jar | spring整合struts时候的支持 |
spring-tx.jar | spring提供事务管理功能 |
spring-web.jar | spring提供web应用开发时
,用到spring框架时所需要的核心类,包括自动载入Web ApplicationContext特性的类,Struts与JSF集成类,文件上传的支持类,
Filter类和大量工具辅助类
|
d、导入struts2的支持包
struts支持jar包的名称 | jar包的说明 |
---|---|
asm-3.3.jar | java字节码框架 |
asm-commons-3.3.jar | 同上 |
asm-tree-3.3.jar | 同上 |
commons-fileupload-1.3.jar | struts2文件上传的支持包 |
commons-io-2.0.1.jar | IO工具类的封装 |
commons-lang3-3.1.jar | 为java.lang包提供扩展 |
freemarker-2.3.19.jar | 表现层框架,定义了struts2的可是组件主题 |
javassist-3.11.0.GA.jar | 代码生成工具,hibernate在运行时扩展java类和实现 |
ognl-3.0.6.jar | 对象图导航语言(Object Graph Navigation Language),struts2框架使用的一种表达式语言 |
struts2-core-2.3.15.3.jar | struts2的核心库 |
xwork-core-2.3.15.3.jar | webwork核心库 |
struts2-spring-plugin-2.3.15.3.jar | 这是为struts与spring整合提供的支持包 |
e、导入hibernate4.2的jar包
hibernate支持jar包的名称 | jar包的说明 |
---|---|
antlr-2.7.7.jar | 这是一个语言转化工具,Hibernate利用它实现HQL到SQL的转换 |
dom4j-1.6.1.jar | dom4j xml 解析器 |
hibernate-commons-annotation-4.0.2.Final.jar | 支持annotation |
hibernate-core-4.2.12.Final.jar | hibernate4.2的核心库 |
hibernate-jpa-2.0-api-1.0.1.Final.jar | hibernate API |
javassist-3.18.1-GA.jar | 代码生成器,Hibernate用它在运行时扩展java类和实现,同cglib |
jboss-logging-3.1.0.GA.jar | 日志 |
jboss-transaction-api_1.1_spec-1.0.1Final.jar | 事务处理 |
3、现在我们开始创建实体类
-------------------------------------------------------------------------model-----------------------------------------------------------------------------------------------------
package com.phome.modal;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
/**
* 这是实体类
* @author 欢
*
*/
@Entity
public class User {
private int id;
private String name;
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
---------------------------------------------------------------------Action----------------------------------------------------------------------------------------------------------
package com.phome.action;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.stereotype.Controller;
import com.opensymphony.xwork2.ActionSupport;
import com.phome.IService.ISaveService;
import com.phome.model.Book;
/**
* 这是struts调用的Action类
* @author 欢
*
*/
@Controller
public class SaveAction extends ActionSupport {
/**
* 唯一标识
*/
private static final long serialVersionUID = 1L;
private ISaveService saveService;
private Book book;
public ISaveService getSaveService() {
return saveService;
}
@Autowired
public void setSaveService(ISaveService saveService) {
this.saveService = saveService;
}
public Book getBook() {
return book;
}
public void setBook(Book book) {
this.book = book;
}
/**
* action的保存书籍方法
* @return
*/
public String save () {
System.out.println("Action进入....");
//调用SaveService的save(Book book)方法
saveService.save(book);
return SUCCESS;
}
}
----------------------------------------------------------IDAO----------------------------------------------------------------------------
package com.phome.dao;
import com.phome.modal.User;
public interface IAddDAO {
public int add (User user);
}
------------------------------------------------------------DAO--------------------------------------------------------------------------------
package com.phome.dao.imp;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import com.phome.dao.IAddDAO;
import com.phome.modal.User;
/**
* 这是一个DAO持久类
* @author 欢
*
*/
@Repository
public class AddDAO implements IAddDAO{
private SessionFactory sessionFactory;
public SessionFactory getSessionFactory() {
return sessionFactory;
}
@Autowired
public void setSessionFactory(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
}
@Override
public int add(User user) {
System.out.println("addDAO()方法进入....");
Session session = (Session) sessionFactory.getCurrentSession();
session.save(user);
return 0;
}
}
---------------------------------------------------------------------IService--------------------------------------------------------------------------------------------------
package com.phome.service;
import com.phome.modal.User;
public interface IAddService {
public int add(User user);
}
------------------------------------------------------------------Service----------------------------------------------------------------------------------------
package com.phome.service.imp;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.phome.dao.IAddDAO;
import com.phome.modal.User;
import com.phome.service.IAddService;
/**
* 这是业务类
* @author 欢
*
*/
@Service
public class AddService implements IAddService{
private IAddDAO addDAO;
public IAddDAO getAddDAO() {
return addDAO;
}
@Autowired
public void setAddDAO(IAddDAO addDAO) {
this.addDAO = addDAO;
}
@Override
public int add(User user) {
int num = 0;
System.out.println("service进入--〉");
addDAO.add(user);
return num;
}
}
4、我们开始创建spring.xml,配置spring.xml文件
a、创建spring.xml文件
b、开始配置spring.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:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd">
<!-- spring支持annotation -->
<context:annotation-config></context:annotation-config>
<!-- spring 自动扫描 -->
<context:component-scan base-package="com.phome"></context:component-scan>
<!-- 配置数据库dataSource -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="com.mysql.jdbc.Driver" />
<property name="jdbcUrl" value="jdbc:mysql://127.0.0.1/hibernate_test" />
<property name="user" value="root" />
<property name="password" value="admin" />
</bean>
<!-- 配置hibernateSessionFactory -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource"></property>
<!-- 配置需要映射的实体类 -->
<property name="annotatedClasses">
<list>
<value>com.phome.model.Book</value>
</list>
</property>
<!-- 配置hibernate的一些属性 -->
<property name="hibernateProperties">
<value>
hibernate.show_sql=true
hibernate.format_sql=true
hibernate.dialect=org.hibernate.dialect.MySQLDialect
hibernate.current_session_context_class=org.springframework.orm.hibernate4.SpringSessionContext
hibernate.hbm2ddl.auto=update
</value>
</property>
</bean>
<!-- 配置事务管理 -->
<bean id="transactionManager"
class="org.springframework.orm.hibernate4.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="save*" propagation="REQUIRED" read-only="false" />
<tx:method name="*" read-only="true" />
</tx:attributes>
</tx:advice>
<aop:config>
<aop:pointcut id="allManagerMethod"
expression="execution(public * com.phome.IService.imp.*.*(..))" />
<aop:advisor advice-ref="txAdvice" pointcut-ref="allManagerMethod" />
</aop:config>
</beans>
5、创建struts2.xml文件,并配置strurs2.xml文件
a、创建struts2.xml文件
b、配置struts2.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.1//EN"
"http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
<!-- 打开struts开发开关,显示更多人性化提示信息 -->
<constant name="struts.devMode" value="false"></constant>
<!-- 修改编码 -->
<constant name="struts.il8n.encoding" value="UTF-8" ></constant>
<!-- 将struts对action的管理权托管给spring -->
<constant name="struts.objectFactory" value="spring"></constant>
<!-- 配置action -->
<package name="action" extends="struts-default" namespace="/action">
<action name="*_*" class="com.phome.action.{1}Action" method="{2}">
<result name="success">/success.jsp</result>
</action>
</package>
</struts>
6、配置web.xml文件,配置spring,struts2的启动
<?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" 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>ssh_test</display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<!-- 配置spring的启动 -->
<!-- 1、加载spring的配置文件 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>WEB-INF/spring/spring.xml</param-value>
</context-param>
<!-- 2、通过监听器启动spring -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- 配置struts2的启动 -->
<!-- 这是第一种配置Struts2的方法 -->
<!-- <filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
<init-param>
<param-name>config</param-name>
<param-value>
struts-default.xml,
struts-plugin.xml,
../struts2/struts2.xml
</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping> -->
<!-- 这是第二种配置Struts2的方法 -->
<!-- 1、这里配置一些struts2启动前加载的配置文件 -->
<filter>
<filter-name>struts2p</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareFilter</filter-class>
<init-param>
<param-name>config</param-name>
<param-value>
struts-default.xml,
struts-plugin.xml,
../struts2/struts2.xml
</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>struts2p</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- 2、配置第三方过滤器 -->
<!-- 在这里我们可以配置自己的过滤器,比如编码过滤器等 -->
<!-- 3、配置Struts2的启动过滤器 -->
<filter>
<filter-name>struts2e</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2e</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
7、创建两个测试页面,分别是index.jsp和success.jsp
-----------------------------------------------index.jsp------------------------------------------------------------
<%@ 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>Insert title here</title>
</head>
<body>
<h1>填写书籍信息:</h1>
<form action="${pageContext.request.contextPath }/action/Save_save" method="post">
<p>书籍的名称:</p>
<input id="book.name" name="book.name" type="text" value="请输入书籍的名称..." /><br />
<p>书籍的价格:</p>
<input id="book.price" name="book.price" type="text" value="请输入书籍的价格..." /><br /><br />
<input type="submit" value="提交" />
</form>
</body>
</html>
-----------------------------------------------success.jsp------------------------------------------------------------
<%@ page language="java" contentType="text/html; charset=GB18030"
pageEncoding="GB18030"%>
<!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=GB18030">
<title>Insert title here</title>
</head>
<body>
<h1>添加书籍成功!</h1>
</body>
</html>
8、测试
启动项目,在浏览器进入
输入书名称,价格,点击提交
页面成功跳转!
控制台信息如下:
sql语言正确,数据添加成功!项目执行结束。。。
希望对大家有所帮助!谢谢~~