这个是报的错误信息:2010-3-14 18:56:21 org.apache.catalina.core.StandardWrapperValve invoke
严重: Servlet.service() for servlet action threw exception
java.lang.NullPointerException
at org.hibernate.tuple.AbstractEntityTuplizer.createProxy(AbstractEntityTuplizer.java:372)
at org.hibernate.persister.entity.AbstractEntityPersister.createProxy(AbstractEntityPersister.java:3121)
at org.hibernate.event.def.DefaultLoadEventListener.createProxyIfNecessary(DefaultLoadEventListener.java:232)
at org.hibernate.event.def.DefaultLoadEventListener.proxyOrLoad(DefaultLoadEventListener.java:173)
at org.hibernate.event.def.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:87)
at org.hibernate.impl.SessionImpl.fireLoad(SessionImpl.java:862)
at org.hibernate.impl.SessionImpl.internalLoad(SessionImpl.java:830)
at org.hibernate.type.EntityType.resolveIdentifier(EntityType.java:266)
at org.hibernate.type.EntityType.resolve(EntityType.java:303)
at org.hibernate.engine.TwoPhaseLoad.initializeEntity(TwoPhaseLoad.java:116)
at org.hibernate.loader.Loader.initializeEntitiesAndCollections(Loader.java:842)
at org.hibernate.loader.Loader.doQuery(Loader.java:717)
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:224)
at org.hibernate.loader.Loader.doList(Loader.java:2145)
at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2029)
at org.hibernate.loader.Loader.list(Loader.java:2024)
at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:375)
at org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:308)
at org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:153)
at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1106)
at org.hibernate.impl.QueryImpl.list(QueryImpl.java:79)
at com.hpxx.dao.ManagerDao.checkManagerLogin(ManagerDao.java:25)
at com.hpxx.struts.action.LoginAcion.execute(LoginAcion.java:41)
at org.springframework.web.struts.DelegatingActionProxy.execute(DelegatingActionProxy.java:110)
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:431)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:236)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
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 com.hpxx.filter.EncodingFilter.doFilter(EncodingFilter.java:31)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
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:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:263)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:584)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Unknown Source)
action中的代码://声明管理员对象的数据操作对象
private ManagerDao manager ;
@Override
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
//获得用户输入的管理员对象
Manager man = (Manager)form;
System.out.println(manager);
//创建session对象,用于储存全局值
HttpSession session = request.getSession();
System.out.println(man.getAccount()+"---"+man.getPassword());
//根据管理员对象查询出是否存在该管理员
List list = this.manager.checkManagerLogin(man);
//如果管理员存在就将管理员的信息存放在session中
if(list.size() > 0){
man = (Manager)list.get(0);
session.setAttribute("userName",man.getAccount());
session.setAttribute("grade",man.getGrade());
session.setAttribute("id", man.getManagerId());
session.setAttribute("manager",man);
response.sendRedirect("/ElectronicOrder/index.jsp");
}
//如果验证失败就提示用户用户名或者密码输入错误
else{
request.setAttribute("error","1");
request.getRequestDispatcher("/login.jsp").forward(request, response);
} return null;
}
public void setManagerDAO(ManagerDao manager){
this.manager = manager;
}
dao代码:public List checkManagerLogin(Manager man){
String hql = "from Manager where account = :account and password = :password";
List list = null;
try{ Query obj = getSession().createQuery(hql);
obj.setParameter("account", man.getAccount());
obj.setParameter("password", man.getPassword());
System.out.println("=============================================================");
System.out.println("*********");
System.out.println(obj.list().size());
System.out.println("=============================================================");
list = obj.list();
//System.out.println(list.size());
return list;
}catch(RuntimeException re){
throw re;
}finally{
closeSession();
}
}
用于测试的main方法:
public static void main(String[] args){
ManagerDao m = new ManagerDao();
Manager man = new Manager();
man.setAccount("test");
man.setPassword("test");
System.out.println(m.checkManagerLogin(man).size());
}我在main方法里面运行是成功的,但是我在action里面运行的话就在
obj.list();这里报错了,
哪位大哥帮我看下啊!
严重: Servlet.service() for servlet action threw exception
java.lang.NullPointerException
at org.hibernate.tuple.AbstractEntityTuplizer.createProxy(AbstractEntityTuplizer.java:372)
at org.hibernate.persister.entity.AbstractEntityPersister.createProxy(AbstractEntityPersister.java:3121)
at org.hibernate.event.def.DefaultLoadEventListener.createProxyIfNecessary(DefaultLoadEventListener.java:232)
at org.hibernate.event.def.DefaultLoadEventListener.proxyOrLoad(DefaultLoadEventListener.java:173)
at org.hibernate.event.def.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:87)
at org.hibernate.impl.SessionImpl.fireLoad(SessionImpl.java:862)
at org.hibernate.impl.SessionImpl.internalLoad(SessionImpl.java:830)
at org.hibernate.type.EntityType.resolveIdentifier(EntityType.java:266)
at org.hibernate.type.EntityType.resolve(EntityType.java:303)
at org.hibernate.engine.TwoPhaseLoad.initializeEntity(TwoPhaseLoad.java:116)
at org.hibernate.loader.Loader.initializeEntitiesAndCollections(Loader.java:842)
at org.hibernate.loader.Loader.doQuery(Loader.java:717)
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:224)
at org.hibernate.loader.Loader.doList(Loader.java:2145)
at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2029)
at org.hibernate.loader.Loader.list(Loader.java:2024)
at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:375)
at org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:308)
at org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:153)
at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1106)
at org.hibernate.impl.QueryImpl.list(QueryImpl.java:79)
at com.hpxx.dao.ManagerDao.checkManagerLogin(ManagerDao.java:25)
at com.hpxx.struts.action.LoginAcion.execute(LoginAcion.java:41)
at org.springframework.web.struts.DelegatingActionProxy.execute(DelegatingActionProxy.java:110)
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:431)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:236)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
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 com.hpxx.filter.EncodingFilter.doFilter(EncodingFilter.java:31)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
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:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:263)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:584)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Unknown Source)
action中的代码://声明管理员对象的数据操作对象
private ManagerDao manager ;
@Override
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
//获得用户输入的管理员对象
Manager man = (Manager)form;
System.out.println(manager);
//创建session对象,用于储存全局值
HttpSession session = request.getSession();
System.out.println(man.getAccount()+"---"+man.getPassword());
//根据管理员对象查询出是否存在该管理员
List list = this.manager.checkManagerLogin(man);
//如果管理员存在就将管理员的信息存放在session中
if(list.size() > 0){
man = (Manager)list.get(0);
session.setAttribute("userName",man.getAccount());
session.setAttribute("grade",man.getGrade());
session.setAttribute("id", man.getManagerId());
session.setAttribute("manager",man);
response.sendRedirect("/ElectronicOrder/index.jsp");
}
//如果验证失败就提示用户用户名或者密码输入错误
else{
request.setAttribute("error","1");
request.getRequestDispatcher("/login.jsp").forward(request, response);
} return null;
}
public void setManagerDAO(ManagerDao manager){
this.manager = manager;
}
dao代码:public List checkManagerLogin(Manager man){
String hql = "from Manager where account = :account and password = :password";
List list = null;
try{ Query obj = getSession().createQuery(hql);
obj.setParameter("account", man.getAccount());
obj.setParameter("password", man.getPassword());
System.out.println("=============================================================");
System.out.println("*********");
System.out.println(obj.list().size());
System.out.println("=============================================================");
list = obj.list();
//System.out.println(list.size());
return list;
}catch(RuntimeException re){
throw re;
}finally{
closeSession();
}
}
用于测试的main方法:
public static void main(String[] args){
ManagerDao m = new ManagerDao();
Manager man = new Manager();
man.setAccount("test");
man.setPassword("test");
System.out.println(m.checkManagerLogin(man).size());
}我在main方法里面运行是成功的,但是我在action里面运行的话就在
obj.list();这里报错了,
哪位大哥帮我看下啊!
进入了dao里面的
这个方法内有空指针,可能的地方是:1、检查一下getSession()是不是空
2、man是不是空
在dao中打印session的值是:session:SessionImpl(PersistenceContext[entityKeys=[],collectionKeys=[]];ActionQueue[insertions=[] updates=[] deletions=[] collectionCreations=[] collectionRemovals=[] collectionUpdates=[]])都是正确的,但是执行System.out.println(obj.list().size());这句代码的时候就报错了
form对象account和password的值:test---test
dao中session的值:session:SessionImpl(PersistenceContext[entityKeys=[],collectionKeys=[]];ActionQueue[insertions=[] updates=[] deletions=[] collectionCreations=[] collectionRemovals=[] collectionUpdates=[]])
=============================================================
*********
dao中Query(obj)的值:QueryImpl(from Manager where account = :account and password = :password)都是正确的啊
public List checkManagerLogin(Manager man){
String hql = "from Manager where account = :account and password = :password";
List list = null;
try{ Query obj = getSession().createQuery(hql);
obj.setParameter("account", man.getAccount());
obj.setParameter("password", man.getPassword());
System.out.println("=============================================================");
System.out.println("*********");
System.out.println(obj.list().size());
System.out.println("=============================================================");
list = obj.list();
return list;
}catch(RuntimeException re){
throw re;
}finally{
closeSession();
}
} System.out.println("=============================================================");
System.out.println("*********");
System.out.println(obj.list().size());
System.out.println("=============================================================");把这个放在 list = obj.list();
这个的后面,如果没有判断list是否为空,直接调用size方法是会爆空指针错误的~~要不你输正确的用户名和密码试试~~还有 Manager man = (Manager)form;
System.out.println(manager);
//创建session对象,用于储存全局值
HttpSession session = request.getSession();
System.out.println(man.getAccount()+"---"+man.getPassword());
你这个action对应的form是什么? 给你个对应的例子看看
LoginForm loginForm = (LoginForm) form;// TODO Auto-generated method
// stub
String username = loginForm.getUsername();
String password = loginForm.getPassword();
User user = new User();
user.setUsername(username);
user.setPassword(password);
List list = this.manager.checkManagerLogin(user);
System.out.println("=============================================================");
System.out.println("*********");
System.out.println(obj.list().size());
System.out.println("=============================================================");改成
System.out.println("=============================================================");
System.out.println("*********");
System.out.println(obj.list());
System.out.println("=============================================================");但是还是在System.out.println(obj.list());这一句的时候报错!
//获得用户输入的管理员对象
Manager man = (Manager)form;
Manager m = new Manager();
m.setAccount(man.getAccount());
m.setPassword(man.getPassword());
System.out.println(manager+"----"+m.getAccount());
//创建session对象,用于储存全局值
HttpSession session = request.getSession();
System.out.println(man.getAccount()+"---"+man.getPassword());
//根据管理员对象查询出是否存在该管理员
List list = this.manager.checkManagerLogin(m);dao里面的内容改成这样:/**
* 该方法用于根据管理员登录的信息验证管理员的状态
* @param man 管理员对象
* @return list
*/
public List checkManagerLogin(Manager man){
String hql = "from Manager where account = :account and password = :password";
List list = null;
try{ Query obj = getSession().createQuery(hql);
System.out.println("session:"+getSession());
obj.setParameter("account", man.getAccount());
obj.setParameter("password", man.getPassword());
System.out.println("=============================================================");
System.out.println("*********");
System.out.println(obj);
System.out.println(obj.list());
System.out.println("=============================================================");
list = obj.list();
//System.out.println(list.size());
return list;
}catch(RuntimeException re){
throw re;
}finally{
closeSession();
}
}
但是还是在System.out.println(obj.list());这一句的时候报错
我在main方法里面测试是这样写的:public static void main(String[] args){
ManagerDao m = new ManagerDao();
Manager man = new Manager();
man.setAccount("test");
man.setPassword("test");
System.out.println(m.checkManagerLogin(man).size());
OrderinfoDao o = new OrderinfoDao();
System.out.println(o.getAllOrder(0, 10).size());
}
2次查询都是对的!为什么在main里面能够执行,在action里面就不能执行了呢?
为什么在main方法里面能运行,在action里面就运行不了呢!
account或password属性为null啦
query对象也的有值的,但是一调用query对象的list方法就报空指针错误了
这句话能打印你输入的账号和密码吧?
这个账号和密码在db中存在吗?
不存在,就会返回一个null, list = null时候, list.size()肯定会报错的
在 List list = this.manager.checkManagerLogin(man);
这里设置断点,然后跳入方法debug就知道空指针在什么地方了~