SSH框架的第一個整合例子

我們先實現一個最基本的需求..添加,然後保存以後返回列表頁面.這裏先不包括驗證什麼的..都假設輸入是正確的.驗證到下一節說明..

我們從需求出發...一步步實現.我這裏用的是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 最後..終於測試通過.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章