SSH框架搭建(Struts2.3.12+Spring3.2.2+Hibernate4.2.0)
1 搭建Struts2
1.1 搭建所需jar包
序号 |
名称 |
描述 |
1 |
commons-fileupload-1.2.2.jar |
文件上传组件 |
2 |
commons-io-2.0.1.jar |
io包 |
3 |
commons-lang3-3.1.jar |
基础工具包,封装一些常用的基础操作 |
4 |
commons-loggin-1.1.1.jar |
日志组件 |
5 |
freemarker-2.3.19.jar |
一个基于模板生成文本输出的通用工具 |
6 |
ognl-3.0.6.jar |
对象图导航语言(jar包库) |
7 |
strut2-core-2.3.12.jar |
Struts2核心jar包 |
8 |
xwork-core-2.3.12.jar |
xwork核心包 |
9 |
javassist-3.15.0-GA.jar |
扩展java类和实现 |
1.2 整合步骤
1.2.1 创建项目
创建一个web项目,项目名称为SSH,如下所示:
1.2.2 导入jar包
项目中点击lib,复制需要的jar到lib中即完成导入,如下所示:
如果没有导入完成,右键点击项目名(SSH),选择properties-Java Build Path,点击Add Extenrnal JARs,选择项目lib中的jar包进行导入,如下所示:
1.2.3 配置web.xml
主要配置Struts2容器控制器,如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<!-- 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>
<!-- 欢迎页面 -->
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
1.2.4 创建web
LoginAction主要用于实现逻辑控制控制,通过Struts的调用,处理业务之后,返回给Struts,然后显示给页面,如下所示:
LoginAction.java
package com.ssh.web;
public class LoginAction {
private String name;
private String password;
public String login() {
if (null == name && null == password) {
return "login";
} else if ("ssh".equals(name) && "12345".equals(password)) {
return "ok";
} else {
return "error";
}
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
1.2.5 创建jsp页面
login.jsp是登录页面,其他两个jsp分别写入Login Is Ok 和 Login Is Error,用于登录成功和失败的页面显示,右键点击WebRoot,创建jsp,如下所示:
login.jsp
<html>
<body>
<center><form method="post" action="login" >
UserName<input type="text" name="name" id="name"/><br/>
Password<input type="password" name="password" id="password"/><br/>
<input type="submit" value="login" /></form></center>
</body>
</html>
loginOk.jsp
<html>
<body>
<center><h1>Login Is Ok</h1></center>
</body>
</html>
loginOk.jsp
<html>
<body>
<center><h1>Login Is Ok</h1></center>
</body>
</html>
loginError.jsp
<html>
<body>
<center><h1>Login Is Error</h1></center>
</body>
</html>
1.2.6 配置struts.xml
这里配置页面访问访问请求的跳转和返回结果的路径,右键点击src,创建一个xml文件,如下所示:<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<package name="default" extends="struts-default">
<action name="login" class="com.ssh.web.LoginAction" method="login">
<result name="login">login.jsp</result>
<result name="ok">loginOk.jsp</result>
<result name="error">loginError.jsp</result>
</action>
</package>
</struts>
2.整合Spring
2.1 整合所需jar包
序号 |
名称 |
描述 |
1 |
struts2-spring-plugin-2.3.12.jar |
Struts2+Spring整合包 |
2 |
spring-core-3.2.2.jar |
Spring核心工具包 |
3 |
spring-context-3.2.2.jar |
为Spqing提供核心扩展 |
4 |
spring-context-support-3.2.2.jar |
为Spqing提供核心扩展 |
5 |
spring-beans-3.2.2.jar |
管理beans的工具 |
6 |
spring-expression-3.2.2.jar |
表达式语言 |
7 |
spring-web-3.2.2.jar |
Web应用开发包 |
8 |
spring-aspects-3.2.2.jar |
提供对AspectJ的支持,以便可以方便的将面向方面的功能集成进IDE中 |
2.2 整合步骤
2.2.1导入jar包
略
2.2.2配置web.xml
配置Spring容器,如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<!-- 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>
<!-- spring容器配置 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/classes/spring.xml</param-value>
</context-param>
<!-- spring容器监听器 -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- 欢迎页面 -->
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
2.2.3 配置struts.xml
配置class类由spring代理,如下所示:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<package name="default" extends="struts-default">
<action name="login" class="loginAction" method="login">
<result name="login">login.jsp</result>
<result name="ok">loginOk.jsp</result>
<result name="error">loginError.jsp</result>
</action>
</package>
</struts>
2.2.4 配置spring.xml
配置action的代理,右键点击src,创建xml文件,如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<!-- 登录Action -->
<bean id="loginAction" class="com.ssh.web.LoginAction" singleton="false">
</bean>
</beans>
3整合Hibernate4
3.1整合所需jar包
1 |
spring-aop-3.2.2.jar |
事务管理 |
2 |
spring-jdbc-3.2.2.jar |
对JDBC封装 |
3 |
spring-orm-3.2.2.jar |
ORM映射支持 |
4 |
spring-tx-3.2.2.jar |
Spring配置事务管理 |
5 |
hibernate-core-4.2.0.CR2.jar |
Hibernate的核心模块 |
6 |
hibernate-jpa-2.0-api-1.0.1.Final.jar |
用来定义java持久性 |
7 |
hibernate-commons-annotations-4.0.1.Final.jar |
注解 |
8 |
aopalliance-1.0.jar |
AOP提供了最普通和通用的接口 |
9 |
jta-1.1.jar |
事务管理 |
10 |
antlr-2.7.7.jar |
执行sql查询 |
11 |
dom4j-1.6.1.jar |
Xml配置和映射解释器 |
12 |
proxool-0.9.1.jar |
配置连接池的工具类 |
13 |
proxool-cglib.jar |
数据库代理 |
14 |
jboss-logging-3.1.0.GA.jar |
日志 |
15 |
jboss-transaction-api_1.1_spec-1.0.0.Final.jar |
事务处理 |
16 |
mysql-connector-java-5.1.8-bin.jar |
Mysql连接驱动 |
3.2整合步驟
3.2.1导入jar包
略
3.2.2创建数据库ccc
在Mysql数据库中,创建一个ccc的数据库(以ccc为例,用户可自定义),创建表结构,并插入数据,如下所示:
create database ccc;
create table t_user
(
ID bigint not null auto_increment,
name varchar(20) not null,
password varchar(10) not null,
primary key (ID)
);
insert into t_user values (1,'ssh','12345');
3.2.3 创建对象User
实体对象是根据java面向对象的实现创建的实体体现,如下所示:
User.java
package com.ssh.entity;
public class User {
private Integer id;
private String name;
private String password;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
3.2.4生成映射文件User.hbm.xml
映射文件主要用于实现java实体和数据库表结构的一一对应,从而hibernate可以把表转换成实体对象,如下所示:
<?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.entity">
<class name="User" table="t_user" catalog="ccc">
<id name="id" column="id" type="java.lang.Integer">
<generator class="identity">
</generator>
</id>
<property name="name" column="name" type="java.lang.String"></property>
<property name="password" column="password" type="java.lang.String"></property>
</class>
</hibernate-mapping>
3.2.5创建dao
UserDAO.java是底层数据库操作的接口,UserDAOImpl.java是接口实现,如下所示:
UserDAO.java
package com.ssh.dao;
import com.ssh.entity.User;
public interface UserDAO {
public User queryUserByName(String name);
}
UserDAOImpl.java
package com.ssh.dao;
import org.hibernate.Query;
import org.hibernate.SessionFactory;
import com.ssh.entity.User;
public class UserDAOImpl implements UserDAO {
private SessionFactory sessionFactory;
public User queryUserByName(String name) {
Query query = sessionFactory.getCurrentSession().createQuery(
"from User as u where u.name = ?");
query.setString(0, name);
User u = (User) query.uniqueResult();
return u;
}
public SessionFactory getSessionFactory() {
return sessionFactory;
}
public void setSessionFactory(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
}
}
3.2.6创建service
UserService.java是业务层的接口,UserServiceImpl.java是接口实现,接口实现用到的DAO在spring.xml里面配置,如下所示:
UserService.java
package com.ssh.ser;
public interface UserService {
public boolean login(String name,String password);
}
UserServiceImpl.java
package com.ssh.ser;
import com.ssh.ser.UserService;
import com.ssh.dao.UserDAO;
import com.ssh.entity.User;
public class UserServiceImpl implements UserService {
private UserDAO userDAO;
public boolean login(String name, String password) {
User u = userDAO.queryUserByName(name);
if (u == null) {
return false;
} else {
if (u.getPassword().equals(password)) {
return true;
} else {
return false;
}
}
}
public UserDAO getUserDAO() {
return userDAO;
}
public void setUserDAO(UserDAO userDAO) {
this.userDAO = userDAO;
}
}
3.2.7创建web
LoginAction.java主要用于控制访问,处理页面的请求,然后返回结果,这里调用服务用到的service从spring.xml里面配置,如下所示:
LoginAction.java
package com.ssh.web;
import com.opensymphony.xwork2.ActionSupport;
import com.ssh.ser.UserService;
public class LoginAction extends ActionSupport {
private String name;
private String password;
private UserService userService;
public String login() {
/* NAME和PASSWORD为空则返回登录页面,否则验证登录 */
if (null == name && null == password) {
return "login";
} else {
Boolean u = userService.login(name, password);
if (u) {
return "ok";
} else {
return "error";
}
}
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public UserService getUserService() {
return userService;
}
public void setUserService(UserService userService) {
this.userService = userService;
}
}
3.2.8 配置jdbc.properties
用于配置数据库的相关数据,方便修改,是Hibernate的一个辅助配置文件,配置完成之后关联Hibernate即可,右键点击src,创建配置文件。如下所示:
proxool.maxConnCount=5
proxool.minConnCount=2
proxool.statistics=1m,15m,1h,1d
proxool.simultaneousBuildThrottle=5
proxool.trace=false
proxool.verbose=false
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/ccc?useUnicode=true&characterEncoding=utf-8
jdbc.username=root
jdbc.password=root
3.2.9 配置db.xml
用于配置与数据库相关的信息,是Hibernate的主要配置文件,配置完成之后关联到spring即可,右键点击src,创建xml文件。如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<!-- 引入配置文件 -->
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="locations">
<list>
<value>classpath:jdbc.properties</value>
</list>
</property>
</bean>
<!--配置数据源 -->
<bean id="dataSource" class="org.logicalcobwebs.proxool.ProxoolDataSource">
<property name="driver" value="${jdbc.driverClassName}" />
<property name="driverUrl" value="${jdbc.url}" />
<property name="user" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
<property name="maximumConnectionCount" value="${proxool.maxConnCount}" />
<property name="minimumConnectionCount" value="${proxool.minConnCount}" />
<property name="statistics" value="${proxool.statistics}" />
<property name="simultaneousBuildThrottle" value="${proxool.simultaneousBuildThrottle}" />
<property name="trace" value="${proxool.trace}" />
<property name="verbose" value="${proxool.verbose}" />
</bean>
<!-- 会话配置 -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="hibernateProperties">
<props>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.format_sql">true</prop>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
</props>
</property>
<property name="mappingResources">
<list>
<!-- 项目应用实体对象 -->
<value>com/ssh/entity/User.hbm.xml</value>
</list>
</property>
</bean>
<!-- 事务管理配置 -->
<bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
<!--业务类声明式事务管理配模板,需要使用事务管理业务服务对象,直接继承此Bean[即配置parent属性为此bean的id],方便统一配置--><bean id="baseTransactionProxy" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean" abstract="true">
<property name="transactionManager" ref="transactionManager" />
<property name="transactionAttributes">
<props>
<!-- 指明进行事务管理业务方法名[*是通配符] -->
<prop key="add*">PROPAGATION_REQUIRED</prop>
<prop key="edit*">PROPAGATION_REQUIRED</prop>
<prop key="del*">PROPAGATION_REQUIRED</prop>
<prop key="*">PROPAGATION_REQUIRED,readOnly</prop>
</props>
</property>
</bean>
<!-- Dao模板,具体实现Dao继承此bean的配置,省去各个Dao的重复配置 -->
<bean id="daoTemplate" abstract="true">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
</beans>
2.2.10配置spring.xml
在之前配置的基础上把db.xml配置文件导入,实现spring和hibernate的整合,同时这里配置dao和service的参数注入,如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<!-- 数据库配置 -->
<import resource="/db.xml" />
<!-- 用户dao -->
<bean id="userDAO" class="com.ssh.dao.UserDAOImpl" parent="daoTemplate" />
<!-- 登录服务[进行事务控制] -->
<bean id="userService" parent="baseTransactionProxy">
<property name="target">
<bean class="com.ssh.ser.UserServiceImpl">
<property name="userDAO" ref="userDAO"/>
</bean>
</property>
</bean>
<!-- 登录Action -->
<bean id="loginAction" class="com.ssh.web.LoginAction" singleton="false">
<property name="userService" ref="userService" />
</bean>
</beans>
3.2.11配置struts.xml
这里配置页面访问访问请求的跳转和返回结果的路径,如下所示:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<package name="default" extends="struts-default">
<action name="login" class="loginAction" method="login">
<result name="login">login.jsp</result>
<result name="ok">loginOk.jsp</result>
<result name="error">loginError.jsp</result>
</action>
</package>
</struts>