0 0

SSH整合问题 NullPointerException20

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>


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>


添加数据之后点提交,会抛空指针错误,原因是LoginAction.java中的personService为空。。。
困惑,希望路过的各位兄弟帮忙看看。。谢过先~~

问题补充:
jjjssh 写道
在execute() 里面set 一个new personService看看,即
this.setPersonService(new PersonService());


我搞错了,是执行到PersonService的时候,personHibernateDAO为null。

问题补充:
jjjssh 写道
public void setPersonHibernateDAO(PersonHibernateDAO personHibernateDAO) {  
        this.personHibernateDAO = personHibernateDAO;  
        System.out.println("personHibernateDAO is null ? --- " + personHibernateDAO == null);  
    }  



有你这段代码。想不为null都不行啦

解决了,谢谢你~~是web.xml的问题
2010年7月07日 16:46

2个答案 按时间排序 按投票排序

0 0

采纳的答案

在execute() 里面set 一个new personService看看,即
this.setPersonService(new PersonService());

2010年7月07日 17:21
0 0

public void setPersonHibernateDAO(PersonHibernateDAO personHibernateDAO) {  
        this.personHibernateDAO = personHibernateDAO;  
        System.out.println("personHibernateDAO is null ? --- " + personHibernateDAO == null);  
    }  



有你这段代码。想不为null都不行啦

2010年7月08日 09:12

相关推荐

    SSH框架整合笔记

    ### SSH框架整合知识点详解 #### 一、框架的搭建与配置 SSH框架指的是Spring、Struts2和Hibernate三个开源框架的结合使用。本篇笔记主要介绍如何搭建基于Struts2的Web应用程序,并进行简单的配置。 ##### 1. 创建...

    SSH整合配置注意点

    ### SSH整合配置注意点 SSH框架(Struts + Spring + Hibernate)是Java Web开发中非常流行的一种技术组合,它能够帮助开发者构建出高效、可维护性强的应用系统。然而,在进行SSH框架整合时,经常会遇到一些配置上的...

    SSH各种问题集合及解决方案

    ### SSH各种问题集合及解决方案 #### 一、SSH基础启动问题 **问题描述:** SSH服务启动时出现异常,导致无法正常连接。 **解决方案:** 1. **检查SSH配置文件**: - 需要确认`/etc/ssh/sshd_config`文件中的配置...

    java 空指针异常(NullPointerException)

    - **定位问题**:根据异常信息找到引发异常的代码行。 - **检查变量状态**:检查异常行的变量是否正确初始化,或者是否有其他可能导致null的情况。 - **修复代码**:添加适当的非空检查,或者修正可能导致null的逻辑...

    java.lang.NullPointerException

    通过以上六个步骤,我们终于解决了 Java.lang.NullPointerException 问题。现在,我们可以测试我们的程序了。我们可以使用 http://localhost:8080/源码目录 来访问我们的主页。 Java.lang.NullPointerException 是...

    NullPointerException 异常处理

    Excel文件读取时NullPointerException 异常处理

    java.lang.NullPointerException的解决方法

    具体来说,如果将这两个软件安装在非根目录下的子目录中,可能会因为路径问题引发各种兼容性和配置上的错误,其中就包括`java.lang.NullPointerException`。 **原因解析:** - **路径长度限制**:Windows系统对...

    java.lang.NullPointerException的可能原因及处理.docx

    Java.lang.NullPointerException 的可能原因及处理 Java.lang.NullPointerException 是 Java 语言中最常见的异常之一,它的出现通常是由于编程不当或对象未被正确初始化所致。在本文中,我们将探讨 Java.lang....

    java中常见的NullPointerException异常.pdf

    Java中常见的NullPointerException异常 Java中常见的NullPointerException异常是Java编程中最常见的一种异常。这种异常发生在程序试图访问或操作一个为null的对象时。下面是可能发生NullPointerException的几种情况...

    SSH环境搭建流程

    - 遇到问题时,根据日志信息定位错误,比如上述的NullPointerException,可能需要检查配置文件或代码逻辑。 注意,本教程仅涵盖了SSH框架的搭建和一个基础的用户注册功能。更深入的学习,如Struts2的国际化、...

    linux jdk字体库 解决.EasyExcel 导出报空指针NullPointerException就是缺少字体库

    在使用EasyExcel进行数据导出操作时,可能会遇到空指针异常(NullPointerException),这个异常通常是由于字体库缺失或者配置不当造成的。具体来说,当EasyExcel在执行字体相关的操作时,如果找不到必要的字体文件,...

    全面解析Java中的NullPointerException及其预防策略

    虽然NullPointerException在Java编程中是一个常见的问题,但通过在对象初始化、null检查、方法返回值处理等环节采取合适的预防策略,以及使用现代IDE工具进行代码审查和分析,可以显著降低此类异常的发生。...

    NullPointerException如何解决.md

    Optional类的设计目的是为了将null的问题从程序逻辑中分离出来,避免在代码中频繁地检查null。使用Optional类可以让代码更加清晰,并且减少了程序因null值而抛出异常的可能性。 除了上述方法,养成良好的编程习惯和...

    Java中避免NullPointerException的方法总结

    Java 中避免 NullPointerException 的方法总结 Java 中的 NullPointerException 是一个非常常见的错误,它通常是由于程序员没有正确地处理 null 对象导致的。避免 NullPointerException 的方法总结是非常重要的,本...

    ssh框架技术支持

    其中,常见的运行时异常包括 `NullPointerException`(空指针异常)、`IndexOutOfBoundsException`(数组越界异常)等,这些异常通常由编程错误引起。而非运行时异常(如 `IOException`)则通常需要通过 `try-catch`...

    NullPointerException解决办法.md

    1. NullPointerException简介:NullPointerException,即空指针异常,是Java语言中的一种运行时异常。它通常发生在试图调用一个未指向任何对象的引用变量的方法或属性时。这种异常会导致程序停止执行,除非通过异常...

    NullPointerException.md

    - 使用try-catch捕获并处理异常:通过捕获NullPointerException并进行处理,可以在不确定对象是否为null时临时解决问题。但这种做法通常不推荐,因为它可能会隐藏问题的根源,并使得代码调试变得困难。 - 使用注解...

    NullPointerException(解决方案).md

    例如,在Java 8之后的版本中可以利用@NonNull和@Nullable注解来提示编译器进行空指针检查,这有助于在编译时期发现潜在的NullPointerException问题。 在实际开发中,根据不同的上下文和需求,选择最适合的预防策略...

Global site tag (gtag.js) - Google Analytics