配置如下:MyEclipse7.1 jdk1.6 tomcat5.5 struts 1.2 spring2.5 hibernate3.2
错误如下:
HTTP Status 500 - --------------------------------------------------------------------------------type Exception reportmessage description The server encountered an internal error () that prevented it from fulfilling this request.exception javax.servlet.ServletException
org.apache.struts.action.RequestProcessor.processException(RequestProcessor.java:535)
org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:433)
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:236)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
root cause java.lang.NullPointerException
com.pt.struts.action.StudentLoginAction.execute(StudentLoginAction.java:47)
org.springframework.web.struts.DelegatingActionProxy.execute(DelegatingActionProxy.java:110)
org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:431)
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:236)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
note The full stack trace of the root cause is available in the Apache Tomcat/5.5.27 logs.
--------------------------------------------------------------------------------
这是我后台dao中调用到的函数:
public Student getStudentByEmail(String email) {

System.out.println("test, the function getStudentByEmail is getin" +
" and the email is "+email);
String hql = "FROM Student WHERE studentEmail = '";
hql += email;
hql+="'";
Student student = null;
List  list =null;
try{

list = ht.find(hql);

System.out.println("test , we get the list, the size of list is "+list.size());

student = (Student)list.get(0);
}
catch(Exception ex)
{
ex.getStackTrace();
}
return student;
}我debug了一下,语句System.out.println("test, the function getStudentByEmail is getin" +" and the email is "+email);能够打印,而后面的语句:System.out.println("test , we get the list, the size of list is "+list.size());不能够打印。申明email不是主码,hql语句没有写错。

解决方案 »

  1.   

    StudentLoginAction.java:47)
    设个断点看看  那个值没有得到
    是空指针
      

  2.   

    就是action调用的这个函数那一行,返回的Student对象为空!
      

  3.   

    我感觉我是我的配置文件出问题了,我把我的spring的配置文件贴出来:<?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.5.xsd"> <bean id="studentDao" class="com.pt.dao.StudentDao">
    <property name="sessionFactory">
    <ref local ="sessionFactory"/>
    </property>
    </bean> <bean name="/studentLogin" class="com.pt.struts.action.StudentLoginAction" >
      <property name="studentDao">
      <ref local="studentDao"/>
      </property>
      </bean>
     
    <bean id="sessionFactory"
    class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
    <property name="configLocation">
    <value>/WEB-INF/hibernate.cfg.xml</value>
    </property>
    </bean>
    </beans>
      

  4.   

    list = ht.find(hql);
    ht没有初始化。
      

  5.   

    student = (Student)list.get(0);
    如果查询结果为空的话,list=null;
    直接取第一个元素会报错。
    建议修改为:
    if(list!=null&&list.size()>0){
        student = (Student)list.get(0);
    }
      

  6.   

    java.lang.NullPointerException 
    com.pt.struts.action.StudentLoginAction.execute(StudentLoginAction.java:47) 你返回的对象为空,list为空,用list去操作当然会空指针。
    自己处理下异常
    if(list!=null&&list.size!=0)

    再做操作。
      

  7.   


    list = ht.find(hql);从在找问题
      

  8.   


    public class StudentDao extends HibernateDaoSupport implements IStudentDao {

    HibernateTemplate ht = this.getHibernateTemplate();
            public Student getStudentByEmail(String email) {
    这个应该是这样初始化吧!下面的内容就是上面贴的函数的代码了!
      

  9.   

    恩,谢谢,我马上就去改!我调试的时候,运行完 list = ht.find(hql);
    这一句的时候,就直接跳到catch(Exception ex)
            {
                ex.getStackTrace();
            }
    了。
    八楼的朋友我没有懂你说的是什么意思!
      

  10.   

    你用断点跟一下 变量ht执行到那句是 是不是还为null,如果是的话,说明没有初始化成功!
      

  11.   

    LZ的sessionFactory配置了吗
    好像你没有配置啊
    不知道是不是完整的配置文件
    这样应该tomcat都不能启动啊
      

  12.   

    呵呵,我在spring的配置文件中配置了的。不知道配置的对不对。tomcat能够正常启动的。
      

  13.   

    StudentLoginAction.java:47
    从这下手一点点的找,调错需要耐心
      

  14.   

    我把ht的初始化的语句写到函数内部后即后来的函数变为:
    public Student getStudentByEmail(String email) {
            
            System.out.println("test, the function getStudentByEmail is getin" +
                    " and the email is "+email);
            String hql = "FROM Student WHERE studentEmail = '";
            hql += email;
            hql+="'";
            Student student = null;
            List  list =null;
            try{
                //添加了下面这一句
                 ht = this.getHibernateTemplate();//这里为修改的地方            list = ht.find(hql);
                
                System.out.println("test , we get the list, the size of list is "+list.size());
                
                student = (Student)list.get(0);
            }
            catch(Exception ex)
            {
                ex.getStackTrace();
            }
            return student;
        }
    (我在hibernate配置文件中配置了show_sql为true)可以打印出select语句了(以前不行),但还是错误!
      

  15.   

    个人觉得出错的话 一般自己用debug调试应该能够解决
      

  16.   

    如果你用到spring,这个错误会经常出项的,因为spring的配置确实挺烦人的
    你现在能够获取到ht了吗?
    如果能还报错,把错误帖出来
      

  17.   

    ht能够取到的,我又单步调试了一下,系统说spring-hibernate.jar包找不到。但是我在Spring1.2ORM/DAO/Hibernate3 Libraries的包中找到了(这个包我也导入机进来了的)。但是这个包的样子和其他包的样子不一样。图形比其他导入进来的包多一个“文本样子”的标示。我直接去这个包所在的路径查找,这个包和其他包没有什么不一样!
      

  18.   

    非常谢谢大家的关注!我的问题已经解决了。解决方法是:在src文件夹下建立一个名字叫log4j.log的日志记录文件,在里面发现问题再一步一步的找答案。当然这个日志的内容我贴到下面希望觉得有用的朋友做一个参考:
    log4j.rootLogger=info,A1
    log4j.appender.A1=org.apache.log4j.DailyRollingFileAppender
    log4j.appender.A1.Append=true
    log4j.appender.A1.File=F:/Workspaces7.1/log4j.log
    log4j.appender.A1.DatePattern = '.'yyyy-MM-dd'.log'
    log4j.appender.A1.layout=org.apache.log4j.PatternLayout
    log4j.appender.A1.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH\:mm\:ss} Method\:  %l%n%m%n 
    其中log4j.appender.A1.File是你输出文件的路径。