目录结构
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">
action类
DeleteUserAction
package action;
import service.UserService;
import bean.User;
import com.opensymphony.xwork2.ActionSupport;
public class DeleteUserAction extends ActionSupport {
/**
*
*/
private static final long serialVersionUID = 1L;
private User user = new 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 {
System.out.println("-------UserAction.deleteUser-----------"
+ user.getFirstName());
this.userService.delete(user);
return "SUCCESS";
}
}
ListUserAction
package action;
import java.util.Map;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import service.UserService;
public class ListUserAction extends ActionSupport {
private static final long serialVersionUID = 1L;
private UserService userService;
public UserService getUserService() {
return userService;
}
public void setUserService(UserService userService) {
this.userService = userService;
}
@SuppressWarnings("unchecked")
@Override
public String execute() throws Exception {
System.out.println("-------UserAction.ListUser-----------");
Map request = (Map) ActionContext.getContext().get("request");
request.put("list", this.userService.findAllUsers());
System.out.println(3);
return "SUCCESS";
}
}
SaveUserAction
package action;
import service.UserService;
import bean.User;
import com.opensymphony.xwork2.ActionSupport;
public class SaveUserAction extends ActionSupport {
private static final long serialVersionUID = 1L;
private User user;
private UserService userService;
public UserService getUserService() {
return userService;
}
public void setUserService(UserService userService) {
this.userService = userService;
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
@Override
public String execute() throws Exception {
// 调用service相关的方法,完成实际的业务处理
System.out.println("-------UserAction.SaveUser-----------"+user.getFirstName());
this.userService.doCreateUser(user);
return "SUCCESS";
}
}
UpdatePUser
package action;
import java.util.Map;
import service.UserService;
import bean.User;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class UpdatePUser extends ActionSupport {
private static final long serialVersionUID = 1L;
private User user=new 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 {
System.out.println("-------UserAction.UpdatePUser-----------"+user.getId());
Map request = (Map) ActionContext.getContext().get("request");
request.put("list", this.userService.findUserById(user.getId()));
return "SUCCESS";
}
}
UpdateUserAction
package action;
import service.UserService;
import bean.User;
import com.opensymphony.xwork2.ActionSupport;
public class UpdateUserAction extends ActionSupport {
private User user = new 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 {
System.out.println("-------UserAction.UpdateUser-----------"
+ user.getFirstName());
this.userService.update(this.user);
return "SUCCESS";
}
}
Bean类
package bean;
public class User {
private int id;
private String firstName;
private String lastName;
private int age;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "ID: " + id + "FirstName: " + firstName;
}
}
User.hbm.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="bean.User" table="tb_users">
<id name="id"></id>
<property name="firstName" />
<property name="lastName" />
<property name="age" />
</class>
</hibernate-mapping>
Dao类
package dao;
import java.util.List;
import bean.User;
public interface UserDAO {
public void doCreateUser(User user);
public List<User> findAllUsers();
public void removeUser(User user);
public void updateUser(User user);
public List<User> findUserById(int id);
}
package dao;
import java.util.List;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import bean.User;
public class UserDAOImpl implements UserDAO {
private SessionFactory sessionFactory;
public void setSessionFactory(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
}
public Session getSession() {
return sessionFactory.getCurrentSession();
}
@Override
public void doCreateUser(User user) {
// TODO Auto-generated method stub
System.out.println("-------UserDaoImp.doCreateUser-----------"
+ user.getFirstName());
System.out.println("id" + user.getId());
System.out.println("firstname" + user.getFirstName());
System.out.println("lastname" + user.getLastName());
System.out.println("age" + user.getAge());
getSession().save(user);
}
@Override
public List<User> findAllUsers() {
// TODO Auto-generated method stub
String hql = "from User u order by u.id asc";
System.out.println(1);
Query query = getSession().createQuery(hql);
System.out.println(2);
List<User> list = query.list();
return list;
}
@Override
public void removeUser(User user) {
// TODO Auto-generated method stub
System.out.println("-------UserDaoImp.removeUser-----------"
+ user.getFirstName());
getSession().delete(user);
}
@Override
public void updateUser(User user) {
// TODO Auto-generated method stub
System.out.println("-------UserDaoImp.updateUser-----------"
+ user.getFirstName());
getSession().update(user);
}
@Override
public List<User> findUserById(int id) {
// TODO Auto-generated method stub
System.out.println("-------UserDaoImp.findUserById-----------" + id);
String hql = "from User u where u.id=:id order by u.id asc";
Query query = getSession().createQuery(hql);
query.setInteger("id", id);
List<User> list = query.list();
return list;
}
}
Service类
package service;
import java.util.List;
import bean.User;
public interface UserService {
public void doCreateUser(User user);
public List<User> findAllUsers();
public void delete(User user);
public void update(User user);
public List<User> findUserById(int id);
}
package service;
import java.util.List;
import dao.UserDAO;
import bean.User;
public class UserServiceImpl implements UserService {
private UserDAO dao;
public UserDAO getDao() {
return dao;
}
public void setDao(UserDAO dao) {
this.dao = dao;
}
public void doCreateUser(User user) {
System.out.println("-------UserService.doCreateUser-----------"+user.getFirstName());
this.dao.doCreateUser(user);
}
public List<User> findAllUsers() {
System.out.println("-------UserService.findAllUsers-----------");
return this.dao.findAllUsers();
}
public void delete(User user) {
System.out.println("-------UserService.deleteUser-----------"+user.getFirstName());
this.dao.removeUser(user);
}
public void update(User user) {
System.out.println("-------UserService.updateUser-----------"+user.getFirstName());
this.dao.updateUser(user);
}
public List<User> findUserById(int id) {
System.out.println("-------UserService.findUserById-----------"+id);
return this.dao.findUserById(id);
}
}
applicationContext.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.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.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">
<!-- 引入外部属性文件. -->
<context:property-placeholder location="classpath:jdbc.properties" />
<!-- 配置c3p0连接池 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="${jdbc.driver}" />
<property name="jdbcUrl" value="${jdbc.url}" />
<property name="user" value="${jdbc.user}" />
<property name="password" value="${jdbc.password}" />
</bean>
<!-- 零障碍整合在spring配置文件中引入hibernate的配置文件 -->
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<!-- 管理连接池 -->
<property name="dataSource" ref="dataSource"></property>
<!-- hibernate属性 -->
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.OracleDialect</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.format_sql">true</prop>
<prop key="hibernate.hbm2ddl.auto">update</prop>
<prop key="hibernate.connection.autocommit">false</prop>
</props>
</property>
<property name="mappingResources">
<list>
<value>bean/User.hbm.xml</value>
</list>
</property>
<!-- <property name="mappingDirectoryLocations">
<list>
<value>classpath:vo</value>
</list>
</property> -->
</bean>
<bean id="userDAO" class="dao.UserDAOImpl" scope="singleton">
<property name="sessionFactory" ref="sessionFactory">
</property>
</bean>
<bean id="userServiceTarget" class="service.UserServiceImpl"
scope="singleton">
<property name="dao" ref="userDAO" />
</bean>
<bean id="userService"
class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<property name="target" ref="userServiceTarget">
</property>
<property name="transactionManager" ref="transactionManager">
</property>
<property name="transactionAttributes">
<props>
<prop key="find*">PROPAGATION_REQUIRED,readOnly</prop>
<prop key="*">PROPAGATION_REQUIRED</prop>
</props>
</property>
</bean>
<bean id="saveUserAction" class="action.SaveUserAction" scope="prototype">
<property name="userService" ref="userService"></property>
</bean>
<bean id="listUserAction" class="action.ListUserAction" scope="prototype">
<property name="userService" ref="userService"></property>
</bean>
<bean id="removeUserAction" class="action.DeleteUserAction" scope="prototype">
<property name="userService" ref="userService"></property>
</bean>
<bean id="updatePUserAction" class="action.UpdatePUser">
<property name="userService" ref="userService"></property>
</bean>
<bean id="updateUserAction" class="action.UpdateUserAction" scope="prototype">
<property name="userService" ref="userService"></property>
</bean>
<bean id="UpdatePUser" class="action.UpdatePUser" scope="prototype">
<property name="userService" ref="userService"></property>
</bean>
<!-- 事务管理器 -->
<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
<!-- 注解开户事务 -->
<tx:annotation-driven transaction-manager="transactionManager" />
</beans>
jdbc.properties
jdbc.user=scott
jdbc.password=tiger
jdbc.driver=oracle.jdbc.driver.OracleDriver
jdbc.url=jdbc\:oracle\:thin\:@localhost\:1521\:orcl
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.devMode" value="false" />
<package name="default" namespace="/" extends="struts-default">
<action name="saveUser" class="saveUserAction">
<result name="SUCCESS" type="redirectAction">listUser</result>
</action>
<action name="listUser" class="listUserAction">
<result name="SUCCESS">/list.jsp</result>
</action>
<action name="deleteUser" class="removeUserAction">
<result name="SUCCESS" type="redirectAction">listUser</result>
</action>
<action name="updatePUser" class="updatePUserAction">
<result name="SUCCESS">/update.jsp</result>
</action>
<action name="updateUser" class="updateUserAction">
<result name="SUCCESS" type="redirectAction">listUser</result>
</action>
<action name="findUser" class="UpdatePUser">
<result name="SUCCESS">/list.jsp</result>
</action>
</package>
</struts>
index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>My JSP 'index.jsp' starting page</title>
</head>
<body>
<h2><font color="red">Operation List</font></h2>
<s:a href="update.jsp">Update User</s:a><br/>
<s:a href="Save.jsp">Save User</s:a><br/>
<s:a href="listUser.action">List Users</s:a>
<s:form action="findUser">
<s:textfield name="user.id" label="id"></s:textfield>
<s:submit></s:submit>
</s:form>
</body>
</html>
list.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>My JSP 'list.jsp' starting page</title>
<script type="text/javascript">
function del(){
if(confirm("Are you sure?")){
return true;
}
return false;
}
</script>
</head>
<body>
<h2><font color="red">Users List</font></h2>
<s:a href="/ssh_learn/index.jsp">返回</s:a>
<table border="1" width="80%" align="center">
<tr>
<th>序号</th>
<th>姓</th>
<th>名</th>
<th>年龄</th>
<th>删除</th>
<th>更新</th>
</tr>
<s:iterator value="#request.list" id="us">
<tr>
<td>
<s:property value="#us.id"/>
</td>
<td>
<s:property value="#us.firstName"/>
</td>
<td>
<s:property value="#us.lastName"/>
</td>
<td>
<s:property value="#us.age"/>
</td>
<td align="center">
<s:a href="deleteUser.action?user.id=%{#us.id}" onclick="return del()">Delete</s:a>
</td>
<td align="center">
<s:a href="updatePUser.action?user.id=%{#us.id}">Update</s:a>
</td>
</tr>
</s:iterator>
</table>
</body>
</html>
Save.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>My JSP 'update.jsp' starting page</title>
</head>
<body>
<h2>
<font color="red">Save User</font>
</h2>
<s:form action="saveUser">
<table>
<tr>
<td><s:hidden name="user.id" value="%{user.id}"></s:hidden></td>
</tr>
<tr>
<td><s:textfield name="user.firstName"
value="%{user.firstName}" label="First Name"></s:textfield></td>
</tr>
<tr>
<td><s:textfield name="user.lastName" value="%{user.lastName}"
label="Last Name"></s:textfield></td>
</tr>
<tr>
<td><s:textfield name="user.age" value="%{user.age}"
label="Age"></s:textfield></td>
</tr>
<tr>
<td><s:submit></s:submit></td>
</tr>
</table>
</s:form>
</body>
</html>
update.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>My JSP 'update.jsp' starting page</title>
</head>
<body>
<h2>
<font color="red">Update User</font>
</h2>
<s:form action="updateUser">
<table>
<tr>
<td><s:hidden name="user.id" value="%{user.id}"></s:hidden></td>
</tr>
<tr>
<td><s:textfield name="user.firstName"
value="%{user.firstName}" label="First Name"></s:textfield></td>
</tr>
<tr>
<td><s:textfield name="user.lastName" value="%{user.lastName}"
label="Last Name"></s:textfield></td>
</tr>
<tr>
<td><s:textfield name="user.age" value="%{user.age}"
label="Age"></s:textfield></td>
</tr>
<tr>
<td><s:submit></s:submit></td>
</tr>
</table>
</s:form>
</body>
</html>
WEB-INF.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">
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/classes/applicationContext.xml </param-value>
</context-param>
<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>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
</web-app>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。