SSH整合第一个例子

5 篇文章 0 订阅
4 篇文章 0 订阅

原文出自: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 最后..终于测试通过.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值