当前位置:编程学习 > JAVA >>

java.lang.NullPointerException SSH搭建 hibernate getHibernateTemplate 没法save

HTTP Status 500 - 

--------------------------------------------------------------------------------

type Exception report

message 

description The server encountered an internal error () that prevented it from fulfilling this request.

exception 

java.lang.NullPointerException
UserAction.add(UserAction.java:28)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
java.lang.reflect.Method.invoke(Unknown Source)
com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:453)
com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:292)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:255)
org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:256)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:176)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:265)
org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:68)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:138)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:211)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:211)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:190)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
org.apache.struts2.interceptor.MultiselectInterceptor.intercept(MultiselectInterceptor.java:75)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)
org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:90)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249)



   hello.jsp  里 action为useradd.action 转到useraction类存储user实体类时,调用getHibernateTemplate().saveOrUpdate(user);出错  查了很久了,大家谁能帮下啊 
tomcat6.0 + jdk1.6  + eclipse

--------------------lib



--------------------项目



附代码:
------------applicationContext.xml  (数据源 跟 spring中集成hibernate)
<beans xmlns="http://www.springframework.org/schema/beans"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xmlns:p="http://www.springframework.org/schema/p"
     xsi:schemaLocation="http://www.springframework.org/schema/beans
     http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">

     <bean id="dataSource"  
        class="org.apache.commons.dbcp.BasicDataSource"  
        destroy-method="close">  
<property name="driverClassName"    
        value="com.mysql.jdbc.Driver" />  
    <property name="url"   value="jdbc:mysql://localhost:3306/ssh"></property>  
    <property name="username" value="root"></property>    
    <property name="password" value="wl890830"></property>            
</bean>  

<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="annotatedClasses">
<list>
<value>User</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
</props>
</property>
</bean>

<bean id="userAction" class="UserAction">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
</beans>  
--------------------UserAction.java  (存储数据类)
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;


public class UserAction extends HibernateDaoSupport {
public void add() {
User user = new User();
user.setName("aa");
user.setAddress("beijing");
user.setAge("11");
getHibernateTemplate().saveOrUpdate(user);
}
}
--------------------------User.java (实体类)
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name = "user")
public class User {
@Id
public String name;
public String age;
public String address;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}

}
-------------------------web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
  <display-name>SSH0701</display-name>

  <!-- struts Framework -->  
    <filter>  
        <filter-name>struts2</filter-name>  
        <filter-class>  
          org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter  
        </filter-class>  
    </filter>  
    <filter-mapping>  
        <filter-name>struts2</filter-name>  
        <url-pattern>/*</url-pattern>  
    </filter-mapping>  
    
    <!-- Spring Framework -->  
<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>
----------------------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 namespace="/" name="struts2" extends="struts-default">  
            <action name="useradd" method="add" class="UserAction" >  
                <result name="success">OK.jsp</result>  
            </action>  
        </package>  
    </struts>    
----------------------hello.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<form action="useradd.action" method="post">
<input type="submit" value="提交">
</form>

</body>
</html>
--------------------- --------------------编程问答-------------------- 自己顶 --------------------编程问答-------------------- 遇到同样的问题,正在找解决的办法 --------------------编程问答-------------------- 看看你struts2的配置文件 --------------------编程问答--------------------
引用 3 楼  的回复:
看看你struts2的配置文件

不好意思,没看见,纠正你的错误 <action name="useradd" method="add" class="UserAction" >   
改为 <action name="useradd" method="add" class="userAction" >   spring中的ID,这样表示才给了spring管理 --------------------编程问答-------------------- 问题解决,数据库访问的操作放到一个一个类中如UserDao,在action用spring反向注入该类,再去调用这个类中方法进行数据库的访问,就行了。注意,这个类一定不能用new来实例化,否则一样会出这个错误的。
补充:Java ,  Web 开发
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,