实现了用户的查插删改操作。

原理:struts负责接收、分发请求。spring采用面向接口编程的思想整合整体框架,负责连接数据库。hibernate负责操作数据库语言。

思路:

1.配置struts的配置信息
2.创建struts和hibernate的关联(主要是加载jar包)
3.创建struts和spring的关联(主要是加载jar包)
4.编写页面信息。action
5.纵向开发模式(但是平时按照横向开发)。纵向开发好处是思路清晰,先写完dao层

service层action层编写模式
6.开始编写spring的配置文件。添加bean。采用依赖注入完成面向接口编程(面向切面编

程更准确些)。
7.编写struts的配置文件。将action映射到spring的配置文件中的bean中

防止表单重复提交(重定向)

好了,不多说了,用例子说话才是最权威的。

1.配置struts

a.wen.xml文件添加struts的过滤器、映射,spring的监听器

<?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"> <!-- 解决中文乱码问题 -->
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- 解决中文乱码问题 --> <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>

b.struts的jar包支持

c.struts的配置文件 struts.xml(放在src目录下)

<?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>
  <constant name="struts.i18n.encoding" value="UTF-8"></constant>
<package name="ssh2" extends="struts-default">
<action name="saveUser" class="saveUserAction">
<result name="success" type="redirect">listUser.action</result>
</action> <action name="listUser" class="listUserAction">
<result name="success">/list.jsp</result>
</action> <action name="deleteUser" class="removeUserAction">
<result name="success" type="redirect">/listUser.action</result>
</action> <!--请求转发 -->
<action name="updatePUser" class="updatePUserAction">
<result name="success">/update.jsp</result>
</action> <!-- 重定向 -->
<action name="updateUser" class="updateUserAction">
<result name="success" type="redirect">/listUser.action</result>
</action>
</package> </struts>

2.导入hibernate的jar包支持,采用myeclipse自带的jar包

a.右击项目名称选择 myeclipse-->Add Hibernate Capabilities 如下图(为了将hibernate配置文件放置在src目录下,其实哪里都一样。。。)

b.点击next,不用向导配置完成后,打开配置文件

c.只是导入一些jar包,不需要连接数据库

d.不用创建session工厂

e.点击Finish完成

3.添加spring的jar包支持

同上面一样,导入jar包

4.编写页面信息、bean以及此bean的映射文件User.hbm.xml(放在com.test.bean目录下)

a.index.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s" %>
<%
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>My JSP 'index.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head> <body> <h1><font color="red">Operation List</font></h1> <s:a href="save.jsp">Sav e User</s:a><br/>
<s:a href="listUser.action">List Users</s:a>
</body>
</html>

b.创建bean

package com.test.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;
}
}

3.bean的映射文件User.hbm.xml

<?xml version="1.0"?>
<!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.test.bean.User" table="users">
<id name="id" column="id" type="int">
<generator class="increment"></generator>
</id> <property name="firstname" column="firstname" type="string"></property>
<property name="lastname" column="lastname" type="string"></property>
<property name="age" column="age" type="int"></property>
</class>
</hibernate-mapping>

6.因为要良好封装,所以从dao层开始编写

a.dao层接口

package com.test.dao.impl;

import java.util.List;

import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

import com.test.bean.User;
import com.test.dao.UserDAO; public class UserDAOImpl extends HibernateDaoSupport implements UserDAO
{ public void saveUser(User user) {
this.getHibernateTemplate().save(user);
} @SuppressWarnings("unchecked")
@Override
public List<User> findAllUsers() {
String hql = "from User user order by user.id desc";
return (List<User>)this.getHibernateTemplate().find(hql);
} @Override
public void removeUser(User user) {
this.getHibernateTemplate().delete(user);
} @Override
public void updateUser(User user) {
this.getHibernateTemplate().update(user);
} @Override
public User findUserById(Integer id) { User user = (User)this.getHibernateTemplate().get(User.class, id);
return user;
} }

b.dao层实现类

package com.test.dao.impl;

import java.util.List;

import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

import com.test.bean.User;
import com.test.dao.UserDAO; public class UserDAOImpl extends HibernateDaoSupport implements UserDAO
{ public void saveUser(User user) {
this.getHibernateTemplate().save(user);
} @SuppressWarnings("unchecked")
@Override
public List<User> findAllUsers() {
String hql = "from User user order by user.id desc";
return (List<User>)this.getHibernateTemplate().find(hql);
} @Override
public void removeUser(User user) {
this.getHibernateTemplate().delete(user);
} @Override
public void updateUser(User user) {
this.getHibernateTemplate().update(user);
} @Override
public User findUserById(Integer id) { User user = (User)this.getHibernateTemplate().get(User.class, id);
return user;
} }

7.编写service层

a.service的接口

package com.test.service;

import java.util.List;

import com.test.bean.User;

public interface UserService {

    public void save(User user);

    public List<User> findAll();

    public void delete(User user);

    public User findById(Integer id);

    public void update(User user);

}

b.service的实现类

package com.test.service.impl;

import java.util.List;

import com.test.bean.User;
import com.test.dao.UserDAO;
import com.test.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 save(User user) { this.userDAO.saveUser(user);//完成真正的业务逻辑
} @Override
public List<User> findAll() {
return this.userDAO.findAllUsers();
} @Override
public void delete(User user) {
this.userDAO.removeUser(user);
} @Override
public User findById(Integer id) {
User user = this.userDAO.findUserById(id);
System.out.println(user);
return user;
} @Override
public void update(User user) { this.userDAO.updateUser(user);
}
}

8.action的实现

a.完成的是显示全部用户信息功能的action

package com.test.action.user;

import java.util.List;
import java.util.Map; import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import com.test.bean.User;
import com.test.service.UserService; public class ListUserAction extends ActionSupport { private UserService service; public UserService getService() {
return service;
} public void setService(UserService service) {
this.service = service;
} @SuppressWarnings("unchecked")
@Override
public String execute() throws Exception { Map request = (Map)ActionContext.getContext().get("request");
request.put("list", this.service.findAll());
return SUCCESS;
}
}

b.根据id删除用户信息

package com.test.action.user;

import com.opensymphony.xwork2.ActionSupport;
import com.test.bean.User;
import com.test.service.UserService; public class RemoveUserAction extends ActionSupport { private User user;
private UserService service;
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public UserService getService() {
return service;
}
public void setService(UserService service) {
this.service = service;
} @Override
public String execute() throws Exception {
this.service.delete(user);
return SUCCESS;
}
}

c.添加用户信息

package com.test.action.user;

import com.opensymphony.xwork2.ActionSupport;
import com.test.bean.User;
import com.test.service.UserService; public class SaveUserAction extends ActionSupport { private User user;
private UserService service; public UserService getService() {
return service;
} public void setService(UserService service) {
this.service = service;
} public User getUser() {
return user;
} public void setUser(User user) {
this.user = user;
} @Override
public String execute() throws Exception { //调用service相关的方法,完成实际的业务逻辑
//action只负责收集数据,验证校验
this.service.save(this.user);
return SUCCESS;
}
}

d.通过ID查找用户信息

package com.test.action.user;

import com.opensymphony.xwork2.ActionSupport;
import com.test.bean.User;
import com.test.service.UserService; public class UpdatePUserAction extends ActionSupport { private User user;
private UserService service;
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public UserService getService() {
return service;
}
public void setService(UserService service) {
this.service = service;
} @Override
public String execute() throws Exception { this.user = this.service.findById(this.user.getId());
return SUCCESS;
}
}

e.通过ID修改用户信息

package com.test.action.user;

import com.opensymphony.xwork2.ActionSupport;
import com.test.bean.User;
import com.test.service.UserService; public class UpdateUserAction extends ActionSupport { private User user;
private UserService service;
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public UserService getService() {
return service;
}
public void setService(UserService service) {
this.service = service;
} @Override
public String execute() throws Exception {
this.service.update(user);
return SUCCESS;
}
}

9.添加spring的配置信息

bean的实现(放在WEB-INF目录下)

<?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:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close"> <property name="driverClassName">
<value>com.mysql.jdbc.Driver</value>
</property> <property name="url">
<value>jdbc:mysql://localhost:3306/hibernate</value>
</property> <property name="username">
<value>root</value>
</property> <property name="password">
<value>123456</value>
</property>
</bean> <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> <property name="dataSource">
<ref local="dataSource"/>
</property> <property name="mappingResources">
<list>
<value>com/test/bean/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>
</bean> <bean id="userDao" class="com.test.dao.impl.UserDAOImpl" scope="singleton">
<property name="sessionFactory">
<ref bean="sessionFactory"/>
</property>
</bean> <bean id="userService" class="com.test.service.impl.UserServiceImpl" scope="singleton">
<property name="userDAO" ref="userDao" />
</bean> <bean id="saveUserAction" class="com.test.action.user.SaveUserAction" scope="prototype">
<property name="service" ref="userService"></property>
</bean> <bean name="listUserAction" class="com.test.action.user.ListUserAction" scope="prototype">
<property name="service" ref="userService"></property>
</bean> <bean name="removeUserAction" class="com.test.action.user.RemoveUserAction" scope="prototype">
<property name="service" ref="userService"></property>
</bean> <bean name="updateUserAction" class="com.test.action.user.UpdateUserAction" scope="prototype">
<property name="service" ref="userService"></property>
</bean> <bean name="updatePUserAction" class="com.test.action.user.UpdatePUserAction">
<property name="service" ref="userService"></property>
</bean>
</beans>

10.struts.xml(放在src目录下)

<?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="ssh2" extends="struts-default">
<action name="saveUser" class="saveUserAction">
<result name="success" type="redirect">listUser.action</result>
</action> <action name="listUser" class="listUserAction">
<result name="success">/list.jsp</result>
</action> <action name="deleteUser" class="removeUserAction">
<result name="success" type="redirect">/listUser.action</result>
</action> <!--请求转发 -->
<action name="updatePUser" class="updatePUserAction">
<result name="success">/update.jsp</result>
</action> <!-- 重定向 -->
<action name="updateUser" class="updateUserAction">
<result name="success" type="redirect">/listUser.action</result>
</action>
</package> </struts>

11.页面展示

a.list.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>"> <title>My JSP 'list.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
<SCRIPT type="text/javascript">
function del()
{
if(comfirm("are you sure?"))
{
return true;
}
return false;
}
</SCRIPT>
</head> <body>
<h1><font color="red"><center>User List</center></font></h1> <table border="1" width=80% align="center">
<tr>
<td>序号:</td>
<td>姓:</td>
<td>名:</td>
<td>年龄:</td>
<td>删除:</td>
<td>更新:</td>
</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>
<s:a href="deleteUser.action?user.id=%{#us.id}" onclick="return del();">delete</s:a>
</td>
<td>
<s:a href="updatePUser.action?user.id=%{#us.id}">update</s:a>
</td>
</tr>
</s:iterator> </table>
</body>
</html>

b.save.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<%
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>My JSP 'save.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
--> </head> <body> <h1><font color="red">Operation User</font></h1> <s:form action="saveUser">
<s:textfield name="user.firstname" label="firstname"></s:textfield>
<s:textfield name="user.lastname" label="lastname"></s:textfield>
<s:textfield name="user.age" label="age"></s:textfield> <s:submit value="submit"></s:submit> </s:form> </body>
</html>

c.update.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>"> <title>My JSP 'update.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
--> </head> <body> <h1><font color="red"><center> Update User</center></font></h1> <s:form action="updateUser"> <table>
<tr>
<td>
<s:hidden name="user.id" value="%{user.id}"></s:hidden>
</td>
<td>
<s:textfield name="user.firstname" value="%{user.firstname}"></s:textfield>
</td>
<td>
<s:textfield name="user.lastname" value="%{user.lastname}"></s:textfield>
</td>
<td>
<s:textfield name="user.age" value="%{user.age}"></s:textfield>
</td>
<td>
<s:submit value="submit"></s:submit>
</td>
</tr>
</table>
</s:form>
</body>
</html>

总体的框架

lib目录下jar包信息

好了完工。。。。坐等评论。

ssh整合 小例子的更多相关文章

  1. SSH整合简单例子

    说明:简单SSH整合,struts版本2.3.32,spring版本3.2.9,hibernate版本3.6.10 一.开发步骤 1 引jar包,创建用户library.使用的包和之前博文相同,可以参 ...

  2. web学习:Spring2.5+Hibernate3.3+Struts1.3整合小例子

    写android有段时间了,感觉思维越写越狭窄,考虑问题越来越局限了,看不到一个项目整体的设计和构架,觉得很有必要多多写一些大型的框架性的东西来提高自己的视野. 从接触java到现在一年多了,在我的印 ...

  3. spring小例子-springMVC+mybits整合的小例子

    这段时间没更博,找房去了...   吐槽一下,自如太坑了...承诺的三年不涨房租,结果今年一看北京房租都在涨也跟着涨了... 而且自如太贵了,租不起了.. 突然有点理解女生找对象要房了..   搬家太 ...

  4. 三大框架SSH整合

    三大框架SSH整合 -------------------------------Spring整合Hibernate------------------------------- 一.为什么要整合Hi ...

  5. SSH整合之全注解

    SSH整合之全注解 使用注解配置,需要我们额外引入以下jar包

  6. SSH整合方案2

    [案例3]SSH整合_方案2 **  案例描述  两个知识点的演示  其一,SSH整合的第二个方案  其二,Spring+JDBC+Struts2  参考代码  31) 使用工程spring4  32 ...

  7. Spring自学教程-ssh整合(六)

    以下是本人原创,如若转载和使用请注明转载地址.本博客信息切勿用于商业,可以个人使用,若喜欢我的博客,请关注我,谢谢!博客地址 感谢您支持我的博客,我的动力是您的支持和关注!如若转载和使用请注明转载地址 ...

  8. Spring.Net在ASP.NET Mvc里使用的一个小例子

    就贴个小例子,就不注意格式了. 1.下载dll NuGet的下载地址:http://docs.nuget.org/docs/start-here/installing-nuget 在vs的NuGet里 ...

  9. 【Java EE 学习 67 下】【OA项目练习】【SSH整合JBPM工作流】【JBPM项目实战】

    一.SSH整合JBPM JBPM基础见http://www.cnblogs.com/kuangdaoyizhimei/p/4981551.html 现在将要实现SSH和JBPM的整合. 1.添加jar ...

随机推荐

  1. mysql 源码 jin-yang.github.io

    https://jin-yang.github.io/post/mysql-group-commit.html

  2. Shadow Map阴影贴图技术之探 【转】

    这两天勉勉强强把一个shadowmap的demo做出来了.参考资料多,苦头可不少.Shadow Map技术是目前与Shadow Volume技术并行的传统阴影渲染技术,而且在游戏领域可谓占很大优势.本 ...

  3. 从TCP协议的原理来谈谈rst复位攻击

    在谈RST攻击前,必须先了解TCP:如何通过三次握手建立TCP连接.四次握手如何把全双工的连接关闭掉.滑动窗体是怎么数据传输的.TCP的flag标志位里RST在哪些情况下出现.以下我会画一些尽量简化的 ...

  4. 微信授权网页登陆,oauth

    1.在微信公众号请求用户网页授权之前.开发人员须要先到公众平台官网中的开发人员中心页配置授权回调域名.请注意,这里填写的是域名(是一个字符串),而不是URL,因此请勿加http://等协议头. 2.授 ...

  5. 解读Unity中的CG编写Shader系列1——初识CG

    CG=C for Graphics  用于计算机图形编程的C语言超集 前提知识点: 1.CG代码必须用 CGPROGRAM ... ENDCG括起来 2.顶点着色器与片段着色器的主函数名称可任意,但须 ...

  6. 爬虫基本操作、requests和BeautifulSoup

    1. 爬虫基本操作 例如舆情系统: 获取汽车之家新闻放到自己数据库里,创建自己的app,发布内容,注明来源,自己创业. URL指定内容获取到 - 发送Http请求:http://www.autohom ...

  7. MySQL 压缩解决方案

    From:https://www.qcloud.com/community/article/876100 导语 描述 MySQL 压缩的使用场景和解决方案,包括压缩传输协议.压缩列解决方案和压缩表解决 ...

  8. 读《疯狂Java讲义》笔记总结三

    1.初始化块 实际上初始化块是一个假象,使用javac命令编译Java类后,该Java类中的初始化块会消失--初始化块中代码会被 "还原" 到每一个构造器中,且位于构造器全部代码的 ...

  9. Cocos2d-X中提高性能的方法

     1)内存使用效率: 使用大纹理 场景切换时,要尽量使用replaceScene 2)用好缓存: CCTextureCache(纹理缓存) CCSpriteFrameCache(精灵帧缓存) CC ...

  10. 自己定义ActionBar标题与菜单中的文字样式

    自己定义标题文字样式 标题样式是ActionBar样式的一部分,所以要先定义ActionBar的样式 <style name="AppTheme" parent=" ...