所需要的jar包
beans.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/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
<!-- 读取jdbc.properties里的配置信息 -->
<bean
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<value>classpath:jdbc.properties</value>
</property>
</bean>
<bean id="dataSource" destroy-method="close"
class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="${jdbc.driverClassName}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
</bean>
<!-- xml方式配置sessionFactory -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="mappingResources">
<list>
<value>com/anllin/usermgr/model/User.hbm.xml</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.format_sql">true</prop>
</props>
</property>
</bean>
<!-- 开启事务管理 -->
<bean id="txManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
<!-- spring事务的xml配置 ,建议使用-->
<aop:config>
<aop:pointcut id="bussinessService"
expression="execution(* com.anllin.usermgr.service..*.*(..))" />
<aop:advisor advice-ref="txAdvice" pointcut-ref="bussinessService" />
</aop:config>
<!-- 对不同的方法进行不同的事务管理 -->
<tx:advice id="txAdvice" transaction-manager="txManager">
<tx:attributes>
<tx:method name="get*" read-only="true"/>
<tx:method name="isExists*" read-only="true"/>
<tx:method name="*" propagation="REQUIRED" read-only="false" />
</tx:attributes>
</tx:advice>
<!-- UserDaoImpl继承 HibernateDaoSupport,即可使用hibernateTemplate-->
<bean id="userDao" class="com.anllin.usermgr.dao.impl.UserDaoImpl">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
<bean id="userService" class="com.anllin.usermgr.service.impl.UserServiceImpl">
<property name="userDao" ref="userDao"/>
</bean>
<bean id="listUsersAction" class="com.anllin.usermgr.action.ListUserAction">
<property name="userService" ref="userService"/>
</bean>
<bean id="addUserAction" class="com.anllin.usermgr.action.AddUserAction">
<property name="userService" ref="userService"/>
</bean>
<bean id="deleteUserAction" class="com.anllin.usermgr.action.DeleteUserAction">
<property name="userService" ref="userService"></property>
</bean>
<bean id="getUserAction" class="com.anllin.usermgr.action.GetUserAction">
<property name="userService" ref="userService"></property>
</bean>
<bean id="updateUserAction" class="com.anllin.usermgr.action.UpdateUserAction">
<property name="userService" ref="userService"></property>
</bean>
</beans>
struts.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<package name="registration" namespace="/" extends="struts-default">
<action name="listUser" class="listUsersAction">
<result name="success">/listUsers.jsp</result>
</action>
<action name="addUser" class="addUserAction">
<result name="success" type="redirect">listUser.action</result>
</action>
<action name="deleteUser" class="deleteUserAction">
<result name="success" type="redirect">listUser.action</result>
</action>
<action name="getUser" class="getUserAction">
<result name="success">updateUser.jsp</result>
</action>
<action name="updateUser" class="updateUserAction">
<result name="success" type="redirect">listUser.action</result>
</action>
</package>
</struts>
jdbc.properties
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc\:mysql\://localhost\:3306/usermgr
jdbc.username=root
jdbc.password=123
log4j.properties
#
# Hibernate, Relational Persistence for Idiomatic Java
#
# Copyright (c) 2008, Red Hat Middleware LLC or third-party contributors as
# indicated by the @author tags or express copyright attribution
# statements applied by the authors. All third-party contributions are
# distributed under license by Red Hat Middleware LLC.
#
# This copyrighted material is made available to anyone wishing to use, modify,
# copy, or redistribute it subject to the terms and conditions of the GNU
# Lesser General Public License, as published by the Free Software Foundation.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
# for more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with this distribution; if not, write to:
# Free Software Foundation, Inc.
# 51 Franklin Street, Fifth Floor
# Boston, MA 02110-1301 USA
#
#log4j.rootLogger=info, stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
log4j.rootLogger=warn, stdout
#log4j.logger.org.hibernate=debug
#log4j.logger.org.hibernate.test=info
### log schema export/update ###
log4j.logger.org.hibernate.tool.hbm2ddl=debug
#log4j.logger.org.hibernate.sql.ordering.antlr.OrderByFragmentTranslator=trace
#log4j.logger.org.hibernate.ejb=debug
#log4j.logger.org.hibernate.ejb.packaging=debug
#log4j.logger.org.hibernate.reflection=debug
#log4j.logger.org.hibernate.hql.ast.QueryTranslatorImpl=trace
#log4j.logger.org.hibernate.hql.ast.HqlSqlWalker=trace
#log4j.logger.org.hibernate.hql.ast.SqlGenerator=trace
#log4j.logger.org.hibernate.hql.ast.AST=trace
#log4j.logger.org.hibernate.type.descriptor.sql.BasicBinder=trace
#log4j.logger.org.hibernate.type.BasicTypeRegistry=trace
#log4j.logger.org.hibernate.engine.Cascades=debug
#log4j.logger.org.hibernate.hql=debug
### log just the SQL
#log4j.logger.org.hibernate.SQL=debug
### log JDBC bind parameters ###
#log4j.logger.org.hibernate.type=info
#log4j.logger.org.hibernate.type=trace
### log HQL parse trees
#log4j.logger.org.hibernate.hql=debug
### log cache activity ###
#log4j.logger.org.hibernate.cache=debug
### log JDBC resource acquisition
#log4j.logger.org.hibernate.jdbc=debug
### enable the following line if you want to track down connection ###
### leakages when using DriverManagerConnectionProvider ###
#log4j.logger.org.hibernate.connection.DriverManagerConnectionProvider=trace
#log4j.logger.org.jgroups=info
#log4j.logger.org.jboss.cache=trace
#log4j.logger.org.jboss.cache.RegionManager=info
#log4j.logger.org.jboss.cache.lock=info
#log4j.logger.org.jboss.cache.interceptors.PessimisticLockInterceptor=info
#log4j.logger.org.jboss.cache.interceptors.UnlockInterceptor=info
AddUserAction.java
package com.anllin.usermgr.action;
import com.anllin.usermgr.model.User;
import com.anllin.usermgr.service.UserService;
import com.opensymphony.xwork2.ActionSupport;
public class AddUserAction extends ActionSupport
{
private User user;
private UserService userService;
public User getUser()
{
return user;
}
public void setUser(User user)
{
this.user = user;
}
public UserService getUserService()
{
return userService;
}
public void setUserService(UserService userService)
{
this.userService = userService;
}
@Override
public String execute() throws Exception
{
if(user != null)
{
this.userService.add(user);
}
return SUCCESS;
}
}
DeleteUserAction.java
package com.anllin.usermgr.action;
import org.apache.struts2.ServletActionContext;
import com.anllin.usermgr.service.UserService;
import com.opensymphony.xwork2.ActionSupport;
public class DeleteUserAction extends ActionSupport
{
private int id;
private UserService userService;
public UserService getUserService()
{
return userService;
}
public void setUserService(UserService userService)
{
this.userService = userService;
}
@Override
public String execute() throws Exception
{
id = Integer.parseInt(ServletActionContext.getRequest().getParameter("id").trim());
if (id > 0)
{
userService.deleteById(id);
}
return SUCCESS;
}
}
GetUserAction.java
package com.anllin.usermgr.action;
import org.apache.struts2.ServletActionContext;
import com.anllin.usermgr.model.User;
import com.anllin.usermgr.service.UserService;
import com.opensymphony.xwork2.ActionSupport;
public class GetUserAction extends ActionSupport
{
private User user;
private UserService userService;
public User getUser()
{
return user;
}
public void setUser(User user)
{
this.user = user;
}
public UserService getUserService()
{
return userService;
}
public void setUserService(UserService userService)
{
this.userService = userService;
}
@Override
public String execute() throws Exception
{
int id = Integer.valueOf(ServletActionContext.getRequest().getParameter("id").trim());
if(id >= 0)
{
this.user = userService.getById(id);
}
ServletActionContext.getRequest().setAttribute("user",user);
return SUCCESS;
}
}
ListUserAction.java
package com.anllin.usermgr.action;
import java.util.List;
import org.apache.struts2.ServletActionContext;
import com.anllin.usermgr.model.User;
import com.anllin.usermgr.service.UserService;
import com.opensymphony.xwork2.ActionSupport;
public class ListUserAction extends ActionSupport
{
private List<User> users;
private UserService userService;
public List<User> getUsers()
{
return users;
}
public void setUsers(List<User> users)
{
this.users = users;
}
public UserService getUserService()
{
return userService;
}
public void setUserService(UserService userService)
{
this.userService = userService;
}
@Override
public String execute() throws Exception
{
users = userService.getAll();
ServletActionContext.getContext().getSession().put("users",users);
return SUCCESS;
}
}
UpdateUserAction.java
package com.anllin.usermgr.action;
import com.anllin.usermgr.model.User;
import com.anllin.usermgr.service.UserService;
import com.opensymphony.xwork2.ActionSupport;
public class UpdateUserAction extends ActionSupport
{
private User user;
private UserService userService;
public User getUser()
{
return user;
}
public void setUser(User user)
{
this.user = user;
}
public UserService getUserService()
{
return userService;
}
public void setUserService(UserService userService)
{
this.userService = userService;
}
@Override
public String execute() throws Exception
{
if(user != null)
{
userService.update(user);
}
return super.execute();
}
}
UserDao.java
package com.anllin.usermgr.dao;
import java.util.List;
import com.anllin.usermgr.model.User;
public interface UserDao
{
void add(User user);
void update(User user);
void delete(User user);
void deleteById(int id);
User getById(int id);
List<User> getByName(String username);
List<User> getAll();
}
UserDaoImpl.java
package com.anllin.usermgr.dao.impl;
import java.util.List;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
import com.anllin.usermgr.dao.UserDao;
import com.anllin.usermgr.model.User;
public class UserDaoImpl extends HibernateDaoSupport implements UserDao
{
@Override
public void add(User user)
{
this.getHibernateTemplate().save(user);
}
@Override
public void delete(User user)
{
this.getHibernateTemplate().delete(user);
}
@Override
public void deleteById(int id)
{
User user = (User)this.getHibernateTemplate().get(User.class,id);
delete(user);
}
@SuppressWarnings("unchecked")
@Override
public List<User> getAll()
{
return (List<User>)this.getHibernateTemplate().find("from User");
}
@Override
public User getById(int id)
{
return (User)this.getHibernateTemplate().get(User.class,id);
}
@SuppressWarnings("unchecked")
@Override
public List<User> getByName(String username)
{
List<User> users = (List<User>)this.getHibernateTemplate().find("from User as u where u.username=?",username);
return users;
}
@Override
public void update(User user)
{
this.getHibernateTemplate().update(user);
}
}
User.java
package com.anllin.usermgr.model;
import java.sql.Date;
public class User
{
private int id;
private String username;
private String password;
private int age;
private Date birthday;
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 getPassword()
{
return password;
}
public void setPassword(String password)
{
this.password = password;
}
public int getAge()
{
return age;
}
public void setAge(int age)
{
this.age = age;
}
public Date getBirthday()
{
return birthday;
}
public void setBirthday(Date birthday)
{
this.birthday = birthday;
}
}
User.hbm.xml
<?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>
<class name="com.anllin.usermgr.model.User" dynamic-update="true" dynamic-insert="true">
<id name="id" column="id" type="integer">
<generator class="native"/>
</id>
<property name="username" type="string">
<column name="username" length="20"/>
</property>
<property name="password" type="string">
<column name="password" length="20"/>
</property>
<property name="age" type="integer">
<column name="age"/>
</property>
<property name="birthday" type="date">
<column name="birthday"/>
</property>
</class>
</hibernate-mapping>
UserService.java
package com.anllin.usermgr.service;
import java.util.List;
import com.anllin.usermgr.model.User;
public interface UserService
{
void add(User user);
void update(User user);
void delete(User user);
void deleteById(int id);
User getById(int id);
List<User> getByName(String username);
List<User> getAll();
boolean isExistsUser(String username);
}
UserServiceImpl.java
package com.anllin.usermgr.service.impl;
import java.util.List;
import com.anllin.usermgr.dao.UserDao;
import com.anllin.usermgr.model.User;
import com.anllin.usermgr.service.UserService;
public class UserServiceImpl implements UserService
{
private UserDao userDao;
public UserDao getUserDao()
{
return userDao;
}
public void setUserDao(UserDao userDao)
{
this.userDao = userDao;
}
@Override
public void add(User user)
{
this.userDao.add(user);
}
@Override
public void delete(User user)
{
this.userDao.delete(user);
}
@Override
public void deleteById(int id)
{
this.userDao.deleteById(id);
}
@Override
public List<User> getAll()
{
return this.userDao.getAll();
}
@Override
public User getById(int id)
{
return this.userDao.getById(id);
}
@Override
public List<User> getByName(String username)
{
return this.userDao.getByName(username);
}
@Override
public boolean isExistsUser(String username)
{
List<User> users = getByName(username);
if(users != null && users.size() > 0)
{
return true;
}
return false;
}
@Override
public void update(User user)
{
this.userDao.update(user);
}
}
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<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>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:beans.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
</web-app>
addUser.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@taglib prefix="s" uri="/struts-tags"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>Add User</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<style type="text/css">
h1
{
color:blue;
}
</style>"
</head>
<body>
<h1>Add User</h1>
<s:form action="addUser.action" theme="simple">
username: <s:textfield name="user.username"/><br/>
password: <s:password name="user.password"/><br/>
age: <s:textfield name="user.age"/><br/>
birthday: <s:textfield name="user.birthday"/><br/>
<s:submit value="submit"/>
</s:form>
</body>
</html>
index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@taglib prefix="s" uri="/struts-tags" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<base href="<%=basePath%>">
<title>User Manager</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<style type="text/css">
body
{
font-family:Courial new,sans-serif;
font-size: 16px;
}
div
{
margin:0 auto;
text-align: center;
background: window;
}
div h1
{
color:Blue;
}
div a:link
{
color:blue;
}
div a:hover
{
color:red;
font-size:18px;
font-weight: bold;
font-style: italic;
}
</style>
</head>
<body>
<div>
<h1>User Manager</h1><br/><br/><br/>
<s:a href="listUser.action">Show All Users</s:a><br/><br/><br/>
<s:a href="addUser.jsp">Add a New User</s:a><br/>
</div>
</body>
</html>
listUsers.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@taglib prefix="s" uri="/struts-tags"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>List All Users</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<style type="text/css">
table
{
border-collapse: collapse;
}
table tr th
{
background: MediumSlateBlue;
color: white;
}
table tr td
{
border:1px solid black;
background: AliceBlue;
}
h1
{
color:blue;
}
</style>
</head>
<body>
<h1 align="center">List All Users</h1>
<table align="center" width="80%">
<tr>
<th>username</th>
<th>password</th>
<th>age</th>
<th>birthday</th>
<th>update</th>
<th>delete</th>
</tr>
<s:iterator value="%{#session.users}">
<tr>
<td>
<s:property value="username"/>
</td>
<td>
<s:property value="password"/>
</td>
<td>
<s:property value="age"/>
</td>
<td>
<s:property value="birthday"/>
</td>
<td>
<s:a href="getUser.action?id=%{#this.id}">update</s:a>
</td>
<td>
<s:a href="deleteUser.action?id=%{#this.id}">delete</s:a>
</td>
</tr>
</s:iterator>
</table>
</body>
</html>
updateUser.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@taglib prefix="s" uri="/struts-tags" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>Update User</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<STYLE type="text/css">
h1
{
color: blue;
}
</STYLE>
</head>
<body>
<h1>Update User</h1>
<s:form action="updateUser.action" theme="simple">
<s:hidden name="user.id" value="%{#request.user.id}"></s:hidden>
username: <s:textfield name="user.username" value="%{#request.user.username}"/><br/>
password: <s:textfield name="user.password" value="%{#request.user.password}"/><br/>
age: <s:textfield name="user.age" value="%{#request.user.age}"/><br/>
birthday: <s:textfield name="user.birthday" value="%{#request.user.birthday}"/><br/>
<s:submit value="sumbit changed"></s:submit>
</s:form>
<s:debug></s:debug>
</body>
</html>