项目结构

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>
<!--Struts过滤转发器-->
<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环境加载监听器-->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
</web-app>
JSP页面
<%@ page pageEncoding="GBK"%>
<h1>管理员登录</h1>(测试账号密码都是admin)
<form action="UserAction_login" method="post">
账号<input type="text" name="user.name"><br>
密码<input type="password" name="user.pswd"><br>
<input type="submit" value="登录">
</form>

<%@taglib prefix="s" uri="/struts-tags" %>
<table border="1">
<tr>
<th>ID</th><th>name</th><th>pswd</th><th>update</th><th>delete</th>
</tr>
<s:iterator value="#request.list">
<tr>
<td><s:property value="id"/></td>
<td><s:a href="UserAction_detail?user.id=%{id}"><s:property value="name"/></s:a></td>
<td><s:property value="pswd"/></td>
<td><s:a href="UserAction_toUpdate?user.id=%{id}">update</s:a></td>
<td><s:a href="UserAction_delete?user.id=%{id}">delete</s:a></td>
</tr>
</s:iterator>
</table>
<a href="add.jsp">add</a>

<form action="UserAction_add" method="post">
name<input name="user.name" type="text"><br>
pswd<input name="user.pswd" type="password"><br>
<input type="submit" value="add">
</form>

<%@taglib prefix="s" uri="/struts-tags" %>
id: <s:property value="user.id"/><br/>
name: <s:property value="user.name"/><br/>
pswd: <s:property value="user.pswd"/>

<%@taglib prefix="s" uri="/struts-tags" %>
<form action="UserAction_update" method="post">
<s:hidden name="user.id"></s:hidden>
name: <input name="user.name" type="text" value="<s:property value="user.name"/>"><br>
pswd: <input name="user.pswd" type="password"><br>
<input type="submit" value="modify">
</form>

控制层(Action)
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
<constant name="struts.devMode" value="true" />
<constant name="struts.i18n.encoding" value="GBK"></constant>
<package name="user" extends="struts-default">
<action name="UserAction_*" class="userAction" method="{1}">
<!-- *匹配任意字符,{1}指第一个星号匹配到的字符 -->
<!--重定向到UserAction执行list方法-->
<result name="success" type="redirectAction">UserAction_list</result>
<!--返回结果相应页面-->
<result name="login">/index.jsp</result>
<result name="list">/list.jsp</result>
<result name="detail">/detail.jsp</result>
<result name="update">/update.jsp</result>
</action>
</package>
</struts>

1 package com.lyltim.action;
2
3 import javax.annotation.Resource;
4
5 import org.apache.struts2.ServletActionContext;
6 import org.springframework.stereotype.Controller;
7
8 import com.lyltim.bean.User;
9 import com.lyltim.service.IUserService;
10 import com.opensymphony.xwork2.ActionSupport;
11
12 @Controller("userAction")
13 public class UserAction extends ActionSupport {
14
15 private User user;
16
17 //注入userService
18 @Resource
19 IUserService userService;
20
21 public void setUserService(IUserService userService) {
22 this.userService = userService;
23 }
24 public User getUser() {
25 return user;
26 }
27 public void setUser(User user) {
28 this.user = user;
29 }
30
31 public String login() {
32 if (userService.checkLogin(user))
33 return SUCCESS;
34 else
35 return LOGIN;
36 }
37
38 public String list() {
39 ServletActionContext.getRequest().setAttribute("list", userService.list());
40 return "list";
41 }
42
43 public String add() {
44 userService.add(user);
45 return SUCCESS;
46 }
47
48 public String detail() {
49 user = userService.getUser(user.getId());
50 return "detail";
51 }
52
53 //先获得要更新的用户的信息,显示到更新页面。
54 public String toUpdate() {
55 user = userService.getUser(user.getId());
56 return "update";
57 }
58
59 //更新用户信息
60 public String update() {
61 userService.update(user);
62 return SUCCESS;
63 }
64
65 public String delete() {
66 userService.delete(user.getId());
67 return SUCCESS;
68 }
69
70 }

实体层(Bean)
1 package com.lyltim.bean;
2 public class User {
3 private int id;
4 private String name, pswd;
5 //Getters and Setters...
6 }
<?xml version="1.0"?>
<!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="com.lyltim.bean.User" table="user">
<id column="id" name="id" type="int">
<generator class="native" />
</id>
<property column="name" name="name" not-null="true" type="string" />
<property column="pswd" name="pswd" not-null="true" type="string" />
</class>
</hibernate-mapping>
业务逻辑层(Service)
1 package com.lyltim.service;
2
3 import java.util.List;
4 import com.lyltim.bean.User;
5
6 public interface IUserService {
7 boolean checkLogin(User user); //登入验证
8 void add(User user); //添加用户
9 List<User> list(); //列出所有用户
10 User getUser(int id); //根据ID查找用户
11 void update(User user); //修改用户
12 void delete(int id); //删除用户
13 }

1 package com.lyltim.service;
2
3 import java.util.List;
4 import javax.annotation.Resource;
5 import org.springframework.stereotype.Service;
6
7 import com.lyltim.bean.User;
8 import com.lyltim.dao.IUserDAO;
9
10 @Service("userService")
11 public class UserServiceImpl implements IUserService {
12
13 //注入userDAO
14 @Resource
15 private IUserDAO userDAO;
16
17 public void setUserDAO(IUserDAO userDAO) {
18 this.userDAO = userDAO;
19 }
20
21 //登入验证
22 public boolean checkLogin(User user) {
23 if ("admin".equals(user.getName()) && "admin".equals(user.getPswd()))
24 return true;
25 else
26 return false;
27 }
28
29 //添加用户
30 public void add(User user) {
31 userDAO.add(user);
32 }
33
34 //列出所有用户
35 public List<User> list() {
36 return userDAO.list();
37 }
38
39 //查询某个用户
40 public User getUser(int id) {
41 return userDAO.getUser(id);
42 }
43
44 //修改某个用户的资料
45 public void update(User user) {
46 userDAO.update(user);
47 }
48
49 //删除某个用户
50 public void delete(int id) {
51 userDAO.delete(id);
52 }
53
54 }

数据持久层(DAO)
1 package com.lyltim.dao;
2
3 import java.util.List;
4 import com.lyltim.bean.User;
5
6 public interface IUserDAO {
7 void add(User user); //添加用户
8 List<User> list(); //列出所有用户
9 User getUser(int id); //根据ID查找用户
10 void update(User user); //修改用户
11 void delete(int id); //删除用户
12 }
1 package com.lyltim.dao;
2
3 import java.util.List;
4
5 import org.springframework.orm.hibernate3.support.HibernateDaoSupport;
6 import org.springframework.stereotype.Repository;
7
8 import com.lyltim.bean.User;
9
10 @Repository("userDAO")
11 public class UserDAOImpl extends HibernateDaoSupport implements IUserDAO {
12
13 public void add(User user) {
14 getHibernateTemplate().save(user);
15 }
16
17 public List<User> list() {
18 return getHibernateTemplate().find("from User");
19 }
20
21 public User getUser(int id) {
22 return getHibernateTemplate().get(User.class, id);
23 }
24
25 public void update(User user) {
26 getHibernateTemplate().update(user);
27 }
28
29 public void delete(int id) {
30 getHibernateTemplate().delete(getHibernateTemplate().get(User.class, id));
31 }
32 }
Spring全局配置文件(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"
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-3.0.xsd">
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql:///test" />
<property name="username" value="root" />
<property name="password" value="123" />
</bean>
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="mappingResources">
<list>
<value>com/lyltim/bean/User.hbm.xml</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop>
<prop key="hibernate.hbm2ddl.auto">create-drop</prop>
<prop key="hibernate.show_sql">true</prop>
</props>
</property>
</bean>
<bean id="userDAO" class="com.lyltim.dao.UserDAOImpl">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
<!--启用注解注入 -->
<context:annotation-config />
<!--启用组件扫描 -->
<context:component-scan base-package="com.lyltim" />
</beans>
