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>