2010年项目前端转为Flex后,已经2年没搞过SSH框架开发了,闲来没事,觉得还是熟悉熟悉下才行,所今天就抽了点时间搭建了改项目。
各框架版本号:
Struts:struts-2.3.4
Hibernate:hibernate-release-4.1.0.Final
Spring:spring-framework-3.1.1.RELEASE
平台:eclipse_juno(4.2)
结构如下:
web.xml
<?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" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 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</display-name>
<context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>/WEB-INF/log4j.properties</param-value>
</context-param>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/applicatonContext.xml
</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<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.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>
applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.1.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.1.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.1.xsd
">
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
<property name="driverClass" value="com.mysql.jdbc.Driver"/>
<property name="jdbcUrl" value="jdbc:mysql://localhost:3306/test"/>
<property name="user" value="root"/>
<property name="password" value="mysql"/>
<property name="maxPoolSize" value="40"/>
<property name="minPoolSize" value="1"/>
<property name="initialPoolSize" value="1"/>
<property name="maxIdleTime" value="20"/>
</bean>
<bean id="sessionFactory"
class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource">
</property>
<property name="mappingResources">
<list>
<value>Entity/User.hbm.xml</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
<prop key="hibernate.show_sql">true</prop>
</props>
</property>
<property name="packagesToScan" value="Entity" />
</bean>
<bean id="transactionManager"
class="org.springframework.orm.hibernate4.HibernateTransactionManager">
<property name="sessionFactory">
<ref local="sessionFactory" />
</property>
</bean>
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="update*" propagation="REQUIRED" read-only="false" />
<tx:method name="delete*" propagation="REQUIRED" read-only="false" />
<tx:method name="save*" propagation="REQUIRED" read-only="false" />
<tx:method name="*" propagation="SUPPORTS" read-only="true" />
</tx:attributes>
</tx:advice>
<aop:config>
<aop:pointcut id="ServiceMethods" expression="execution(* Service..*.*(..))"/>
<aop:advisor advice-ref="txAdvice" pointcut-ref="ServiceMethods" />
</aop:config>
<bean id="userDao" class="Dao.UserDaoImpl">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
<bean id="userService" class="Service.UserServiceImpl">
<property name="userDao" ref="userDao"/>
</bean>
<bean id="userAction" class="Action.UserAction" scope="prototype">
<property name="userService" ref="userService"/>
</bean>
</beans>
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>
<!--
<constant name="struts.enable.DynamicMethodInvocation" value="false" />
<constant name="struts.devMode" value="false" />
-->
<package name="default" namespace="/" extends="struts-default">
<global-results>
<result name="error">/error.jsp</result>
</global-results>
<global-exception-mappings>
<exception-mapping exception="java.lang.Exception" result="error"/>
</global-exception-mappings>
<action name="login" class="userAction">
<result name="input">/index.jsp</result>
<result name="error">/index.jsp</result>
<result name="success">/welcome.jsp</result>
</action>
</package>
<!--
<package name="action" namespace="/Action" extends="struts-default">
</package>
-->
</struts>
UserAction.java
package Action;
import Service.UserService;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class UserAction extends ActionSupport {
/**
*
*/
private static final long serialVersionUID = 1L;
private UserService userService;
public UserService getUserService() {
return userService;
}
public void setUserService(UserService userService) {
this.userService = userService;
}
private String userName;
private String userPass;
private String userSex;
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getUserPass() {
return userPass;
}
public void setUserPass(String userPass) {
this.userPass = userPass;
}
public String getUserSex() {
return userSex;
}
public void setUserSex(String userSex) {
this.userSex = userSex;
}
@Override
public String execute() throws Exception {
if(!getUserName().equals("") && !getUserPass().equals("") && !getUserSex().equals("")){
ActionContext.getContext().getSession().put("user", getUserName());
userService.saveUser(getUserName(), getUserPass(), getUserSex(), 20);
return SUCCESS;
}else{
return ERROR;
}
}
}
UserService.java
package Service;
public interface UserService {
void saveUser(String userName, String userPass, String userSex, int userAge);
}
UserServiceImpl.java
package Service;
import Dao.UserDao;
import Entity.User;
public class UserServiceImpl implements UserService {
private UserDao userDao;
public UserDao getUserDao() {
return userDao;
}
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
@Override
public void saveUser(String userName,String userPass,String userSex,int userAge){
User u = new User();
u.setUserName(userName);
u.setUserPass(userPass);
u.setUserSex(userSex);
u.setUserAge(userAge);
userDao.saveUser(u);
u.setUserName(userName+"s");
u.setUserSex(null);
userDao.saveUser(u);
}
}
UserDao.java
package Dao;
import Entity.User;
public interface UserDao {
void saveUser(User u);
}
UserDaoImpl.java
package Dao;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import Entity.User;
public class UserDaoImpl implements UserDao {
private SessionFactory sessionFactory;
public SessionFactory getSessionFactory() {
return sessionFactory;
}
public void setSessionFactory(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
}
public Session getSession() {
return sessionFactory.getCurrentSession();
}
@Override
public void saveUser(User u){
getSession().save(u);
}
}
User.java
package Entity;
import java.io.Serializable;
public class User implements Serializable {
/**
*
*/
private static final long serialVersionUID = 1L;
private int id;
private String userName;
private String userPass;
private String userSex;
private int userAge;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getUserPass() {
return userPass;
}
public void setUserPass(String userPass) {
this.userPass = userPass;
}
public String getUserSex() {
return userSex;
}
public void setUserSex(String userSex) {
this.userSex = userSex;
}
public int getUserAge() {
return userAge;
}
public void setUserAge(int userAge) {
this.userAge = userAge;
}
public User(int id, String userName, String userPass, String userSex,
int userAge) {
super();
this.id = id;
this.userName = userName;
this.userPass = userPass;
this.userSex = userSex;
this.userAge = userAge;
}
public User() {
super();
}
}
User.hbm.xml
<?xml version="1.0" encoding="GBK"?>
<!DOCTYPE hibernate-mapping
PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.jboss.org/dtd/hibernate/hibernate-mapping-3.0.dtd">
<!-- Hibernate映射文件的根元素 -->
<hibernate-mapping package="Entity">
<class name="User" table="User">
<!-- 映射标识属性 -->
<id name="id" type="integer" column="id">
<!-- 指定使用identity主键生成策略 -->
<generator class="identity"/>
</id>
<!-- 映射普通属性 -->
<property name="userName" />
<property name="userPass" />
<property name="userSex" />
<property name="userAge" />
</class>
</hibernate-mapping>
MySql
/*
Navicat MySQL Data Transfer
Source Server : MySql
Source Server Version : 50522
Source Host : localhost:3306
Source Database : test
Target Server Type : MYSQL
Target Server Version : 50522
File Encoding : 65001
Date: 2012-07-30 21:24:07
*/
SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for `user`
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
`userName` varchar(50) NOT NULL DEFAULT '',
`userPass` varchar(50) DEFAULT NULL,
`userAge` int(11) DEFAULT NULL,
`userSex` bit(1) DEFAULT NULL,
`userAddress` varchar(50) DEFAULT NULL,
`userPhone` varchar(20) DEFAULT NULL,
PRIMARY KEY (`userName`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of user
-- ----------------------------
INSERT INTO `user` VALUES ('Luck', 'Luck', '23', ' ', 'chengdu', '13683903943');
INSERT INTO `user` VALUES ('Neal', 'Neal', '32', '', '32', '15080348032');
INSERT INTO `user` VALUES ('Tom', 'Tom', '27', '', 'chengdu', '13509873421');
运行测试通过。
如需要源码的请下载。