getHibernateTemplate().find出现异常,请各位大虾来看下是什么情况~~

时间:2021-10-25 20:54:50
一个小程序,在application中测试能完成,代码如下:

final ApplicationContext ctx = new FileSystemXmlApplicationContext("applicationContext.xml");
final SessionFactory sessionFactory = (SessionFactory)ctx.getBean("localsessionfactory");

public void nametest(){

HibernateTemplate template=new HibernateTemplate(this.sessionFactory);
EmployeeTableDAO employee = new EmployeeTableDAO();

EmployeeTable employeetable = new EmployeeTable();

employee.setHibernateTemplate(template);
if(employee.findByNameAndPass("hello", "hello").size()>0){
System.out.println("1");
System.out.println(employee.findByNameAndPass("hello", "hello").size());

}else{
System.out.println("2");
}
}

但是在web里面就有问题,代码如下:

 if(employee.findByNameAndPass("hello", "hello").size()>0){
// request.setAttribute("result" , "您已经成功登陆系统");
 System.out.println("login success!");
 return mapping.findForward("loginsuccess");

 }else{
// request.setAttribute("result" , "不存在该用户或者用户名和密码不符");
 System.out.println("login failed!");
 return mapping.findForward("login");
 }

调用的findByNameAndPass方法在EmployeeTableDAO类中,代码如下:
public List findByNameAndPass(String name, String pass) {
String[] args = {name,pass};
return  getHibernateTemplate().find("from EmployeeTable where empName = ? and empPass = ?", args);
}

测试的application和web用的都是同一个applicationContext.xml配置文件,在web应用中也在struts-config.xml中进行了配置,配置文件如下:
 <plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">
        <set-property property="contextConfigLocation" 
value="WEB-INF/applicationContext.xml" />
</plug-in>

现在的问题是同样的配置,同样的代码,在application里面可以通过,但在web里面就有问题,报错如下:
2008-8-24 10:50:29 org.apache.catalina.core.StandardWrapperValve invoke
严重: Servlet.service() for servlet action threw exception
java.lang.NullPointerException
at cn.edu.aust.dao.EmployeeTableDAO.findByNameAndPass(EmployeeTableDAO.java:68)
at cn.edu.aust.struts.action.LoginAction.execute(LoginAction.java:56)
at org.apache.struts.chain.commands.servlet.ExecuteAction.execute(ExecuteAction.java:58)
at org.apache.struts.chain.commands.AbstractExecuteAction.execute(AbstractExecuteAction.java:67)
at org.apache.struts.chain.commands.ActionCommandBase.execute(ActionCommandBase.java:51)
at org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:190)
at org.apache.commons.chain.generic.LookupCommand.execute(LookupCommand.java:304)
at org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:190)
at org.apache.struts.chain.ComposableRequestProcessor.process(ComposableRequestProcessor.java:283)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1913)
at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:462)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:261)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:581)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Unknown Source


请问各位大虾,这种问题最有可能是什么原因引起的?谢谢了先

22 个解决方案

#1


java.lang.NullPointerException 
at cn.edu.aust.dao.EmployeeTableDAO.findByNameAndPass(EmployeeTableDAO.java:68) 
看看EmployeeTableDAO.java的68行是什么问题,貌似有空指针

#2


第68行:     return  getHibernateTemplate().find("from EmployeeTable where empName = ? and empPass = ?", args);
问题是我在application里面调用的也是这个啊,就没报错。。。

#3


debug一下就清楚了

#4


getHibernateTemplate
返回了 null;

估计是配置文件位置错误,或者没有初始化。

#5


applicationContext.xml配置文件放在了WEB-INF文件夹下面,同时web.xml,struts-config.xml,一些.tld文件也在这个文件夹里面。至于初始化,不知道楼上的说的是不是如下的内容:
web.xml里面的的一部分:
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>
org.apache.struts.action.ActionServlet
</servlet-class>
<init-param>
<param-name>config</param-name>
<param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>
<init-param>
<param-name>debug</param-name>
<param-value>3</param-value>
</init-param>
<init-param>
<param-name>detail</param-name>
<param-value>3</param-value>
</init-param>
<load-on-startup>0</load-on-startup>
</servlet>

struts-config.xml里面的一部分:
<plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">
        <set-property property="contextConfigLocation" 
value="WEB-INF/applicationContext.xml" />
</plug-in>
和配置文件有关的地方就这两个了,请各位看看是不是什么地方有疏漏?

#6


顶一下.学习了

#7


我也遇到过使用spring+hibernate的时候,在application中测试能完成,但是在web里面就抛出了NullPointerException的异常,有可能是hibernate懒加载机制的问题,我试过在hibernate映射文件中的多对一关系的lazy设置为false就没出错了,你可以试试看是不是这个问题
我也在初学框架使用,经常遇到一些莫名其妙的问题

#8


我刚才又测试了一下我写的那个程序,找到问题的根源了,可能是包冲突的问题,我用的spring2+hibernate3
在http://topic.csdn.net/u/20080803/20/79c8994d-1ef3-4112-9d02-453d797fb790.html这篇帖子里面有个回复提到了整合Struts2+Spring2.0+Hibernate3.1 注意的问题,Spring2.0+Hibernate3.1 个别的jar包版本有冲突,要删除以下6个jar包:
asm-2.2.3.jar,asm-commons-2.2.3.jar,asm.jar,asm-attrs.jar,asm-util-2.2.3.jar,cglib-2.1.3.jar 

我之前把spring2换成spring1就不会出现空指针异常,今天我试了试删除了那6个jar包就不会出现空指针异常了,说明就是包冲突的问题

#9


那可能是配置的问题,用ContextLoaderPlugIn来整合struts1和spring有如下几个步骤

1 在struts-config.xml中加入如下配置文件(如果applicationContext.xml在WEB-INF目录下)
  <plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">
        <set-property property="contextConfigLocation" value="/WEB-INF/classes/applicationContext.xml" />
   </plug-in>

2 如果是spring2.5的话,加入spring-webmvc-struts.jar包,如果是2.0的话只需加入spring.jar包即可

3 在applicationContext.xml中加入如下配置
<bean name="/listXxx" class="com.xxx.web.ListXxxAction" scope="prototype">
     <property name="myXxxService" ref="myXxxService"></property>
</bean>
......

4 在ListXxxAction中可以进行直接调用了
	private XxxService xxxService;
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
return mapping.findForward("success");
Collection<Xxx> xxxs = this.getXxxService().findXxxs(xxx);
}
get/set...
......

#10


上面发现个错误,修改一下,如果applicationContext.xml在WEB-INF目录下,去掉class一级目录
<plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">
        <set-property property="contextConfigLocation" value="/WEB-INF/applicationContext.xml" />
   </plug-in>

#11


to yugang1219:非常之不幸,你说的两种我都试了,还是出现上面的错误。我都快疯了,这个问题都困扰了我好几天,太郁闷了。。。

#12


我也遇到这个问题,也没解决。
我的save,update,delete方法都能执行。就是find时出现空指针。
关注中...

#13


getHibernateTemplate()==null?

#14


肯定是68行哪里出现null值了,参数正确吗?

#15


System.out.println(getHibernateTemplate());看是否为空,为空就是配置有问题.

#16


又测试了一下:

String[] args = {name,pass};
System.out.println(args[0]);
System.out.println(args[0]);
System.out.println(getHibernateTemplate());

参数传进去了,没错,但System.out.println(getHibernateTemplate())打印出来的是null,看来是配置问题了,可就是不知道配置文件那里出错了。。。

#17


哪里出问题不好说,需要看你的配置文件代码,全部

#18


哪位对spring配置比较熟悉的大虾有空闲时间的能帮忙看下配置文件么?本人刚开始学习这东东没多久,实在是没办法解决了。有兴趣的联系QQ:89165880。谢谢了先。。。。。

#19


getTemplate()没取到。。

#20


问题已经解决,结贴,谢谢楼上各位达人的解答

#21


   怎么解决的也不和大家分享一下,哎!

#22


垃圾,问题怎么解决都不说

#1


java.lang.NullPointerException 
at cn.edu.aust.dao.EmployeeTableDAO.findByNameAndPass(EmployeeTableDAO.java:68) 
看看EmployeeTableDAO.java的68行是什么问题,貌似有空指针

#2


第68行:     return  getHibernateTemplate().find("from EmployeeTable where empName = ? and empPass = ?", args);
问题是我在application里面调用的也是这个啊,就没报错。。。

#3


debug一下就清楚了

#4


getHibernateTemplate
返回了 null;

估计是配置文件位置错误,或者没有初始化。

#5


applicationContext.xml配置文件放在了WEB-INF文件夹下面,同时web.xml,struts-config.xml,一些.tld文件也在这个文件夹里面。至于初始化,不知道楼上的说的是不是如下的内容:
web.xml里面的的一部分:
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>
org.apache.struts.action.ActionServlet
</servlet-class>
<init-param>
<param-name>config</param-name>
<param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>
<init-param>
<param-name>debug</param-name>
<param-value>3</param-value>
</init-param>
<init-param>
<param-name>detail</param-name>
<param-value>3</param-value>
</init-param>
<load-on-startup>0</load-on-startup>
</servlet>

struts-config.xml里面的一部分:
<plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">
        <set-property property="contextConfigLocation" 
value="WEB-INF/applicationContext.xml" />
</plug-in>
和配置文件有关的地方就这两个了,请各位看看是不是什么地方有疏漏?

#6


顶一下.学习了

#7


我也遇到过使用spring+hibernate的时候,在application中测试能完成,但是在web里面就抛出了NullPointerException的异常,有可能是hibernate懒加载机制的问题,我试过在hibernate映射文件中的多对一关系的lazy设置为false就没出错了,你可以试试看是不是这个问题
我也在初学框架使用,经常遇到一些莫名其妙的问题

#8


我刚才又测试了一下我写的那个程序,找到问题的根源了,可能是包冲突的问题,我用的spring2+hibernate3
在http://topic.csdn.net/u/20080803/20/79c8994d-1ef3-4112-9d02-453d797fb790.html这篇帖子里面有个回复提到了整合Struts2+Spring2.0+Hibernate3.1 注意的问题,Spring2.0+Hibernate3.1 个别的jar包版本有冲突,要删除以下6个jar包:
asm-2.2.3.jar,asm-commons-2.2.3.jar,asm.jar,asm-attrs.jar,asm-util-2.2.3.jar,cglib-2.1.3.jar 

我之前把spring2换成spring1就不会出现空指针异常,今天我试了试删除了那6个jar包就不会出现空指针异常了,说明就是包冲突的问题

#9


那可能是配置的问题,用ContextLoaderPlugIn来整合struts1和spring有如下几个步骤

1 在struts-config.xml中加入如下配置文件(如果applicationContext.xml在WEB-INF目录下)
  <plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">
        <set-property property="contextConfigLocation" value="/WEB-INF/classes/applicationContext.xml" />
   </plug-in>

2 如果是spring2.5的话,加入spring-webmvc-struts.jar包,如果是2.0的话只需加入spring.jar包即可

3 在applicationContext.xml中加入如下配置
<bean name="/listXxx" class="com.xxx.web.ListXxxAction" scope="prototype">
     <property name="myXxxService" ref="myXxxService"></property>
</bean>
......

4 在ListXxxAction中可以进行直接调用了
	private XxxService xxxService;
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
return mapping.findForward("success");
Collection<Xxx> xxxs = this.getXxxService().findXxxs(xxx);
}
get/set...
......

#10


上面发现个错误,修改一下,如果applicationContext.xml在WEB-INF目录下,去掉class一级目录
<plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">
        <set-property property="contextConfigLocation" value="/WEB-INF/applicationContext.xml" />
   </plug-in>

#11


to yugang1219:非常之不幸,你说的两种我都试了,还是出现上面的错误。我都快疯了,这个问题都困扰了我好几天,太郁闷了。。。

#12


我也遇到这个问题,也没解决。
我的save,update,delete方法都能执行。就是find时出现空指针。
关注中...

#13


getHibernateTemplate()==null?

#14


肯定是68行哪里出现null值了,参数正确吗?

#15


System.out.println(getHibernateTemplate());看是否为空,为空就是配置有问题.

#16


又测试了一下:

String[] args = {name,pass};
System.out.println(args[0]);
System.out.println(args[0]);
System.out.println(getHibernateTemplate());

参数传进去了,没错,但System.out.println(getHibernateTemplate())打印出来的是null,看来是配置问题了,可就是不知道配置文件那里出错了。。。

#17


哪里出问题不好说,需要看你的配置文件代码,全部

#18


哪位对spring配置比较熟悉的大虾有空闲时间的能帮忙看下配置文件么?本人刚开始学习这东东没多久,实在是没办法解决了。有兴趣的联系QQ:89165880。谢谢了先。。。。。

#19


getTemplate()没取到。。

#20


问题已经解决,结贴,谢谢楼上各位达人的解答

#21


   怎么解决的也不和大家分享一下,哎!

#22


垃圾,问题怎么解决都不说