SSH整合第一个例子

转载 2012年03月28日 16:52:35

原文出自:http://jingbo2759.blog.163.com/blog/static/983753152009625112835927/

我们先实现一个最基本的需求..添加,然后保存以后返回列表页面.这里先不包括验证什么的..都假设输入是正确的.验证到下一节说明..

我们从需求出发...一步步实现.我这里用的是myeclipse6.0 .struts2.0.16.spring2.0 hibernate3 mysql5.1

1.准备工作...当然是数据库了..在mysql数据库里,创建一个名为"user"的数据库.创建一个表也叫"user". 表里面就三个字段,id ,username ,age这里我的数据库名为 root 密码为11.

2.创建一个web project .工程名是myTest1.选择JAVA EE 5.0..点finish.

3导入hibernate.点工程右键,MyEclipse 选择Add hibernate capabilities.上面的不变.下面下面的JAR Library Installation .选择Copy cheched Library..点next .这里不需要修改,点Next.将最上面的勾去掉.我们等下自己写这个factory.点next.再将上面的勾去掉.点finish..

4.导入spring..点工程右键,MyEclipse 选择Add spring capabilities..其中Libraries选择前四个.还有一个Spring 2.0 Web libraries ..一共是五个..下面的JAR Library Installation .选择Copy cheched Library...这个.也就是将加入的jar包复制到lib目录下..点next .在产生applicationContext.xml的目录里选择WebRoot/WEB-INF 点next.把上面的√去掉.等下我们自己写...最后点FINISH.spring就导入成功了

5 导入struts2..现在myeclipse还不支持导入struts2.所以这里我们需要手动导入.方法也很简单..将struts2.0.16客户端的jar包里.选择freemarker.jar,ognl.jar.struts2-spring-plugin.jar.xwork.jar.struts-core.jar.这里不需要导入common-logging.jar.因为spring里面已经有这个jar包了.所以不需要再次导入..然后在src目录下创建一个struts.xml..这样就差不多了.

这里特别注意一下.需要将common-pool.jar包放到Lib目录下..貌似myeclipse6.5就会自动导入.6.0不会的说

6 准备工作差不多了.终于开始写页面了...首先,我们先做一个save.jsp..里面有一个表单,输入名字和年龄..

<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
   
    <title>My JSP 'save.jsp' starting page</title>

  </head>
 
  <body>
 <s:form action="userAction">//注意,我们这里选择模型驱动.而不是字段驱动.

还有,这个action name 设置为 userAction ..
  <s:textfield name="user.username" label="username"></s:textfield>
  <s:textfield name="user.age" label="age"></s:textfield>
  <s:submit></s:submit>
 </s:form>
  </body>
</html>

7创建bean..这个很简单.就是在com.test.model下面创建一个User.java.标准的bean.没啥可说的

package com.test.model;

public class User {
 
 private Integer id;
 private String username;
 private int age;
 public Integer getId() {
  return id;
 }
 public void setId(Integer id) {
  this.id = id;
 }
 public String getUsername() {
  return username;
 }
 public void setUsername(String username) {
  this.username = username;
 }
 public int getAge() {
  return age;
 }
 public void setAge(int age) {
  this.age = age;
 }
 
 

}

 

7 开始写action .首先在src下面创建一个com.test.action包.在这个包下面创建UserAction.java

package com.test.action;

import com.opensymphony.xwork2.ActionSupport;
import com.test.model.User;
import com.test.service.UserService;

public class UserAction extends ActionSupport {
 
 private UserService userservice;
 
 private User user;
 
 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;
 }
 
 public String execute(){
  
  userservice.saveUser(user);
  
  return SUCCESS;
 }
}

这里在流程上已经有点偏了.因为这里我直接写出了userserive.这个类我们还没实现..而在实现这个service以前我们又必须实现userDAO.下一步,我们实现userDAO

8 新建一个包.com.test.DAO 这个是存放DAO接口的..spring要求我们必须面向接口编程 创建一个UserDAO.java

package com.test.DAO;

//这里定义了五个方法.分别是增删改查..查里面有两个,一个是根据ID查,一个是查所有.
import java.util.List;

import com.test.model.User;

public interface UserDAO {
 
 public void addUser(User user);
 
 public void delUser(User user);
 
 public void updateUser(User user);
 
 public User selectById(Integer id);
 
 public List<User> selectAll();

}
9 创建一个com.test.DAO.impl包.实现上面定义的UserDAO ...类名是UserDAOimpl

package com.test.DAO.impl;//这里结合了hibernate.所以我们继承 HibernateDaoSupport来实现相应的操作.都很简单的..就要注意下selectALL方法.里面用到了hql语句

import java.util.List;

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

import com.test.DAO.UserDAO;
import com.test.model.User;

public class UserDAOimpl extends HibernateDaoSupport implements UserDAO {

 @Override
 public void addUser(User user) {
  this.getHibernateTemplate().save(user);

 }

 @Override
 public void delUser(User user) {
  this.getHibernateTemplate().delete(user);
 }

 @Override
 @SuppressWarnings("unchecked")
 public List<User> selectAll() {
   String hql= "from User";
   return (List<User>)this.getHibernateTemplate().find(hql);
 
 }

 @Override
 public User selectById(Integer id) {
  return (User)this.getHibernateTemplate().get(User.class, id);
 }

 @Override
 public void updateUser(User user) {
  this.getHibernateTemplate().update(user);

 }

}

10创建好了DAO实现数据库的操作..现在开始写Service业务层...由于我们没有任何事务,所以Service就是调用一次DAO层...首先还是创建一个包来放接口.com.test.service ..里面的类UserService.java

package com.test.service;

import java.util.List;

import com.test.model.User;

public interface UserService {//这里也对应DAO.写了五个方法..
 
 public void saveUser(User user);
 
 public void delUser(User user);
 
 public void updateUser(User user);
 
 public User findById(int id);
 
 public List<User> findAll();

}

11同理,当然是写这个service的实现类..com.test.service.impl包..UserServiceImpl.java

package com.test.service.impl;//这里没写什么业务,只是调用了一次dao.

import java.util.List;

import com.test.DAO.UserDAO;
import com.test.model.User;
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 delUser(User user) {
  
  userdao.delUser(user);
  
 }

 @Override
 public List<User> findAll() {
  return userdao.selectAll();
 }

 @Override
 public User findById(int id) {

  return userdao.selectById(id);
 }

 @Override
 public void saveUser(User user) {
  userdao.addUser(user);

 }

 @Override
 public void updateUser(User user) {
  userdao.updateUser(user);

 }

}

12 最重要的地方开始了.就是配置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"
 xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
  <property name="driverClassName">//配置dataSource.这个部分在hibernate里面说的比较多了.不多说了
   <value>com.mysql.jdbc.Driver</value>
  </property>
  <property name="url">
   <value>jdbc:mysql://localhost/user</value>
  </property>
  <property name="username">
   <value>root</value>
  </property>
  <property name="password">
   <value>11</value>
  </property>
 </bean>
 <bean id="factory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
  <property name="mappingResources">
   <value>com/test/model/User.hbm.xml</value>
  </property>
  <property name="hibernateProperties">
   <props>
    <prop key="hibernate.dialect">
     org.hibernate.dialect.MySQLDialect
    </prop>
    <prop key="hibernate.show_sql">true</prop>
   </props>
  </property>
  <property name="dataSource">
   <ref bean="dataSource"/>
  </property>
 </bean>
 
 <bean id="UserDao" class="com.test.DAO.impl.UserDAOimpl">
  <property name="sessionFactory">//这个部分也说明了.其实就是在DAO里面注入一个factory.我们在调用this.getHibernateTemplate() 的时候必须有这个factory.
   <ref bean="factory"/>
  </property>
 </bean>
 
 <bean id="UserService" class="com.test.service.impl.UserServiceImpl">
  <property name="userdao">//在类UserServiceImpl里面定义了一个userdao.这里的这个name属性必须和那里的名字相同.因为要调用那里的set方法.
   <ref bean="UserDao"/>//依赖注入.spring里面说了很多了...
  </property>
 </bean>
 
 <bean id="userAction" class="com.test.action.UserAction">
  <property name="userservice">
   <ref bean="UserService" />
  </property>
 </bean>

 
 <bean id="listActionClass" class="com.test.action.ListAction">
  <property name="service">//这个是配置下面list页面的时候用的...先放上来了...免得重复黏贴
   <ref bean="UserService"/>
  </property>
 </bean>

</beans>

13 save页面的最后一步当然是配置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="user" extends="struts-default">
   
     <action name="userAction" class="userActionClass">
      <result type="redirect">ListAction.action</result>//这里重定向到ListAction.显示list页面
      <result name="input">/save.jsp</result>
     </action>
     
     <action name="ListAction" class="listActionClass">
      <result >/list.jsp</result>//list页面的action配置
      <result name="input">/index.jsp</result>
     </action>
   
    </package>
   
    </struts>

14 至此,save页面已经全部完成.但是提交以后总要显示列表信息吧..也就是将数据库里的数据全部取出来显示.所以,我们在com.test.action下面再写一个action.叫ListAction.java

package com.test.action;

import java.util.Map;


import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import com.test.service.UserService;

public class ListAction 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的MAP对象
  
  request.put("list", service.findAll());//放入MAP
  
  return SUCCESS;
 }
 

}

15 这里,还忘记一个重要的东西..就是bean对应的hbm.xml 因为我使用Middlegen自动生成的,所以代码多一些..ID的生产策略是加一..

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
    "-//Hibernate/Hibernate Mapping DTD 2.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd" >
   
<hibernate-mapping>
<!--
    Created by the Middlegen Hibernate plugin 2.1

    http://boss.bekk.no/boss/middlegen/
    http://www.hibernate.org/
-->

<class
    name="com.test.model.User"
    table="user"
>
    <meta attribute="class-description" inherit="false">
       @hibernate.class
        table="user"
    </meta>

    <id
        name="id"
        type="java.lang.Integer"
        column="id"
    >
        <meta attribute="field-description">
           @hibernate.id
            generator-class="assigned"
            type="java.lang.Integer"
            column="id"


        </meta>
        <generator class="increment" />
    </id>

    <property
        name="username"
        type="java.lang.String"
        column="username"
        not-null="true"
        length="50"
    >
        <meta attribute="field-description">
           @hibernate.property
            column="username"
            length="50"
            not-null="true"
        </meta>   
    </property>
    <property
        name="age"
        type="int"
        column="age"
        not-null="true"
        length="10"
    >
        <meta attribute="field-description">
           @hibernate.property
            column="age"
            length="10"
            not-null="true"
        </meta>   
    </property>

    <!-- Associations -->
 

</class>
</hibernate-mapping>

16 我忘记了一个非常重要的配置..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">

   
 <filter>
  <filter-name>struts2</filter-name>
  <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</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>

17又忘记一个jar包.就是jdbc连mysql的驱动包..我用的是mysql-connector-java-5.1.7-bin.jar

18 最后是我们的列表页面.list.jsp .里面用到ognl表达式.有空得去学习下

<%@ 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>
  
  </head>
 
  <body>
<h1><font color="red"><center>User List</center></font></h1>

<table align="center" border="1" width="80%">
 <tr>
  <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.username"/>
  </td>
  
  
  <td><s:property value="#us.age"/>
  </td>
  
  <td><s:a href="deleteUser.action?user.id=%{#us.id}">删除</s:a>
  </td>
  
  <td><s:a href="updatePUser.action?user.id=%{#us.id}">修改</s:a>
  </td>
  </tr>
 </s:iterator>

</table>
  </body>
</html>
19 最后..终于测试通过.

SSH框架的第一个整合例子

我们先实现一个最基本的需求..添加,然后保存以后返回列表页面.这里先不包括验证什么的..都假设输入是正确的.验证到下一节说明.. 我们从需求出发...一步步实现.我这里用的是myeclipse6.0...

SSH框架的第一个整合例子

SSH框架的第一个整合例子SSH框架整合 2009-07-25 11:28:35 阅读332 评论2 字号:大中小 订阅 . ,我们先实现一个最基本的需求..添加,然后保存以后返回列表页面.这里先不包...

使用Myeclipse搭建的第一个SSH例子

主要功能:将输入的数据存入数据库中,并把数据库中的所有数据显示出来 源码地址:http://pan.baidu.com/s/1bpzXGTp ①利用Myeclipse加载struts2的jar包 ...

第一个SSH手动整合程序

  • 2014年03月22日 10:56
  • 15.07MB
  • 下载

ssh完整例子--第一个ssh

一共有6步(文章底部附有源码下载地址,刚学完ssh的可以借鉴) 1 写一个Hibernate应用,完成用户的增加 1) User实体 2)UserDao接口 save(User u) 3)...
  • feng4656
  • feng4656
  • 2012年05月29日 19:48
  • 20996

ssh完整例子--第一个ssh(转)

[html] view plaincopy strong>   一共有6步(文章底部附有源码下载地址,刚学完ssh的可以借鉴)strong>      1 写一个Hiber...

IDEA 下写出第一个 SSH 整合框架练手项目(四,部门和员工的增删改查完成)

视频地址:  基于SSH实现员工管理系统之案例实现篇 我的整个完整源码地址 : 点击进入 github 这是SSH 整合项目的第三章,第一章基于Meavn 整合 Spring 和 Hibe...

IDEA 下写出第一个 SSH 整合框架练手项目(三.部门和员工的分页查询)

视频地址:  基于SSH实现员工管理系统之案例实现篇 我的整个完整源码地址 : 点击进入 github 这是SSH 整合项目的第三章,第一章基于Meavn 整合 Spring 和 Hibernat...

第一个手动完成SSH整合-- 一

第一个SSH应用程序        个人觉得首先要了解的一点是,在SSH应用程序中,对象的生成与管理都交给了Spring来管理,这意味着,程序中几乎不再使用new 关键字来生成对象,生成对象的工作...

IDEA 下写出第一个 SSH 整合框架练手项目( 一 ,Spring 与 Hibernate 整合)

最近几周快速的学完了 SSH 框架,因为很快,所以几乎没记住什么,又抄着视频写了一个项目,决定自己只看源码的再写一遍。 视频地址:  基于SSH实现员工管理系统之案例实现篇 我的源码地址 : 点击...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:SSH整合第一个例子
举报原因:
原因补充:

(最多只允许输入30个字)