SSH整合的一个小例子,struts2+Spring2+Hibernate3 
代码如下: 
Person.java 
package com.eva.po;
/**
 * Person entity.
 * 
 * @author eva 
 */
import java.io.Serializable;public class Person implements Serializable{

private int id;
private String name;
private int age;
private String sex;
private String address;

/** defult constructor */
public Person() {

}
/** minimal constructor */
public Person(String name) {
this.name = name;
}
/** full constructor */
public Person(String name,int age,String sex,String address) {
this.name = name;
this.age = age;
this.sex = sex;
this.address = address;
}
         //setter and getter
}
PersonDAO.java 
 
package com.eva.dao;   
  
import java.util.List;   
  
import com.eva.po.Person;   
  
public interface PersonDAO {   
    public void saveOrUpdate(Person person);   
    public void update(Person person);   
    public void delete(Person person);   
    public Person get(String id);   
    public List<Person> findAll();   
}  PersonHibernateDAO.java package com.eva.dao.hibernate;   
  
import java.util.List;   
  
import com.eva.dao.PersonDAO;   
import com.eva.po.Person;   
  
import org.hibernate.SessionFactory;   
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;   
  
public class PersonHibernateDAO extends HibernateDaoSupport implements  
        PersonDAO {   
    public void delete(Person person) {   
        this.getHibernateTemplate().delete(person);   
    }   
  
    public List<Person> findAll() {   
        List<Person> persons = this.getHibernateTemplate().find("from Person");   
        return persons;   
    }   
  
    public Person get(String id) {   
        Person person = (Person)this.getHibernateTemplate().get(Person.class, id);   
        return person;   
    }   
  
    public void saveOrUpdate(Person person) {   
        this.getHibernateTemplate().saveOrUpdate(person);   
    }   
  
    public void update(Person person) {   
        this.getHibernateTemplate().saveOrUpdate(person);   
    }   
  
}  
PersonService.java package com.eva.service;   
  
import java.util.List;   
  
import com.eva.dao.hibernate.PersonHibernateDAO;   
import com.eva.po.Person;   
  
public class PersonService {   
    private PersonHibernateDAO personHibernateDAO;   
       
    public void setPersonHibernateDAO(PersonHibernateDAO personHibernateDAO) {   
        this.personHibernateDAO = personHibernateDAO;   
        System.out.println("personHibernateDAO is null ? --- " + personHibernateDAO == null);   
    }   
       
    public PersonHibernateDAO getPersonHibernateDAO() {   
        return personHibernateDAO;   
    }   
  
    public void saveOrUpdate(Person person)   
    {   
        personHibernateDAO.saveOrUpdate(person);   
    }   
  
    public void update(Person person)   
    {   
        personHibernateDAO.update(person);   
    }   
  
    public void delete(Person person)   
    {   
        personHibernateDAO.delete(person);   
    }   
  
    public List<Person> findAll()   
    {   
        return personHibernateDAO.findAll();   
    }   
  
    public Person get(String id)   
    {   
        return personHibernateDAO.get(id);   
    }   
       
}  
LoginAction.java package com.eva.action;   
  
import java.util.List;   
  
import org.springframework.context.ApplicationContext;   
import org.springframework.context.support.ClassPathXmlApplicationContext;   
import org.springframework.context.support.FileSystemXmlApplicationContext;   
  
import com.eva.po.Person;   
import com.eva.service.PersonService;   
import com.opensymphony.xwork2.ActionSupport;   
  
public class LoginAction extends ActionSupport {   
    private PersonService personService;   
    private Person person;   
    private String id;   
    private List<Person> persons;   
  
    public LoginAction() {   
           
    }   
  
    public Person getPerson() {   
        return person;   
    }   
  
    public void setPerson(Person person) {   
        this.person = person;   
    }   
  
    public String getId() {   
        return id;   
    }   
  
    public void setId(String id) {   
        this.id = id;   
    }   
  
    public PersonService getPersonService() {   
        return personService;   
    }   
  
    public void setPersonService(PersonService personService) {   
        this.personService = personService;   
    }   
  
    public List<Person> getPersons() {   
        return persons;   
    }   
  
    public void setPersons(List<Person> persons) {   
        this.persons = persons;   
    }   
  
    public String execute() throws Exception {   
        if (person != null & !person.equals("")) {   
            personService.saveOrUpdate(person);   
        }   
        persons = personService.findAll();   
        setPersons(persons);   
  
        System.out.println(persons.size());   
        return SUCCESS;   
    }   
  
    public String list() throws Exception {   
        persons = personService.findAll();   
        setPersons(persons);   
        return SUCCESS;   
    }   
  
    public String save() throws Exception {;   
        personService.saveOrUpdate(person);   
        return SUCCESS;   
    }   
  
    public String update() throws Exception {   
        person = personService.get(id);   
        personService.update(person);   
        return SUCCESS;   
    }   
  
    public String getValue() throws Exception {   
        return SUCCESS;   
    }   
    public String delete() throws Exception{   
        person = personService.get(id);   
        personService.delete(person);   
        return SUCCESS;   
    }   
  
}
  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">   
       
    <!-- dataSource配置 -->   
    <bean id="dataSource"     
        class="org.apache.commons.dbcp.BasicDataSource">     
        <property name="driverClassName">   
            <value>com.microsoft.jdbc.sqlserver.SQLServerDriver</value>   
        </property>   
        <property name="url">   
            <value>   
                jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=ssh    
            </value>   
        </property>   
        <property name="username">   
            <value>sa</value>   
        </property>   
        <property name="password">   
            <value>sa</value>   
        </property>   
    </bean>    
    <!-- 配置session工厂 -->   
  
    <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">   
        <property name="dataSource">   
            <ref bean="dataSource"/>   
        </property>      
        <property name="hibernateProperties">     
            <props>     
                <prop key="hibernate.dialect">     
                    org.hibernate.dialect.SQLServerDialect       
                </prop>     
            </props>     
        </property>     
        <property name="mappingResources">     
            <list>     
                <value>com/eva/po/Person.hbm.xml</value></list>     
        </property>    
    </bean>   
       
    <!-- 具体的数据库访问类 -->   
    <bean id="dao" class="com.eva.dao.hibernate.PersonHibernateDAO">   
        <property name="sessionFactory">   
            <ref bean="sessionFactory"/>   
        </property>   
    </bean>   
    <!-- 配置具体的业务逻辑类 -->   
    <bean id="personService" class="com.eva.service.PersonService">   
        <property name="personHibernateDAO">   
            <ref bean="dao"/>   
        </property>   
    </bean>   
       
    <!-- 配置action -->   
    <bean id="loginAction" class="com.eva.action.LoginAction">   
        <property name="personService">   
            <ref bean="personService"/>   
        </property>   
    </bean>   
</beans>  
 

解决方案 »

  1.   

    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>   
        <constant name="struts.i18n.encoding" value="UTF-8" />   
        <!-- 一定要加,对象工厂是spring -->   
        <constant name="struts.objectFactory" value="spring" />   
        <!-- 开启开发模式 -->   
        <constant name="struts.devMode" value="true" />   
      
        <package name="login" extends="struts-default">   
            <!-- 保存 -->   
            <action name="Login" method="save" class="com.eva.action.LoginAction">   
                <result>success.jsp</result>   
                <!-- <result name="error">error.jsp</result> -->   
            </action>   
            <!-- 显示出所有列表 -->   
            <action name="list" method="list" class="com.eva.action.LoginAction">   
                <result>success.jsp</result>   
            </action>   
            <!-- 删除 -->   
            <action name="delete" method="delete" class="com.eva.action.LoginAction">   
                <result>success.jsp</result>   
            </action>   
            <!-- 更新 -->   
            <action name="update" method="update" class="com.eva.action.LoginAction">   
                <result>index.jsp</result>   
            </action>   
        </package>   
      
    </struts>  
    Person.hbm.xml <?xml version="1.0" encoding="utf-8"?>   
    <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"  
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">   
    <!--    
        Mapping file autogenerated by MyEclipse Persistence Tools   
    -->   
    <hibernate-mapping>   
        <class name="org.s2s2h3.po.Person" table="person_" catalog="ssh2">   
            <id name="id" type="java.lang.String">   
                <column name="id" length="10" />   
                <generator class="assigned" />   
            </id>   
            <property name="name" type="java.lang.String">   
                <column name="name" length="30" not-null="true" />   
            </property>   
            <property name="age" type="java.lang.String">   
                <column name="age" length="10" />   
            </property>   
            <property name="sex" type="java.lang.String">   
                <column name="sex" length="10" />   
            </property>   
            <property name="address" type="java.lang.String">   
                <column name="address" length="50" />   
            </property>   
        </class>   
    </hibernate-mapping>  web.xml <?xml version="1.0" encoding="UTF-8"?>   
    <web-app id="person" version="2.4"  
        xmlns="http://java.sun.com/xml/ns/j2ee"  
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
        xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">   
        <display-name>person</display-name>   
        <filter>   
            <filter-name>struts2</filter-name>   
            <filter-class>   
                org.apache.struts2.dispatcher.FilterDispatcher   
            </filter-class>   
            <init-param>   
                <param-name>classes</param-name>   
                <param-value>java.lang.Object</param-value>   
            </init-param>   
        </filter>   
      
        <filter-mapping>   
            <filter-name>struts2</filter-name>   
            <url-pattern>/*</url-pattern>   
        </filter-mapping>   
      
        <welcome-file-list>   
            <welcome-file>index.jsp</welcome-file>   
        </welcome-file-list>   
           
        <context-param>    
            <param-name>contextConfigLocation</param-name>    
            <param-value>/WEB-INF/applicationContext*.xml</param-value>    
        </context-param>    
        <!-- 添加监听器 -->   
        <listener>   
            <listener-class>   
                org.springframework.web.context.ContextLoaderListener   
            </listener-class>   
        </listener>   
    </web-app>  
     
    index.jsp <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>   
    <%@ taglib prefix="s" uri="/struts-tags"%>   
    <%   
        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>   
            <s:if test="null == person">   
            Add Person   
            </s:if>   
            <s:else>   
            Update Person   
            </s:else>   
            <s:form action="Login" method="post">   
                <table>   
                    <caption>   
                        客户管理   
                    </caption>   
                    <tr>   
                        <td>   
                            <s:textfield name="person.id" label="ID" />   
                        </td>   
                    </tr>   
                    <tr>   
                        <td>   
                            <s:textfield name="person.name" label="NAME" />   
                        </td>   
                    </tr>   
                    <tr>   
                        <td>   
                            <s:textfield name="person.age" label="AGE" />   
                        </td>   
                    </tr>   
                    <tr>   
                        <td>   
                            <s:textfield name="person.sex" label="SEX" />   
                        </td>   
                    </tr>   
                    <tr>   
                        <td>   
                            <s:textfield name="person.address" label="ADDRESS" />   
                        </td>   
                    </tr>   
                    <tr>   
                        <td colspan="2">   
                            <s:submit value="submit" />   
                            <s:reset value="reset" />   
                        </td>   
                    </tr>   
                </table>   
      
            </s:form>   
        </body>   
    </html>  
    添加数据之后点提交,会抛空指针错误,原因是是执行到PersonService的时候,personHibernateDAO为null
    困惑,希望路过的各位兄弟帮忙看看。。谢过先~~
      

  2.   

    现在又变成到LoginAction.java就抛空指针了personService为空
      

  3.   

    最好把错误信息贴出来
    看样子你的spring都没起作用,web.xml里spring的监听你配置了吗
      

  4.   

    spring的监听器配置了,getter setter也都写了呀,applicationContext.xml里也都配置了我代码都贴上了,错误就是抛一空指针啊