先看异常:
信息: Server startup in 11922 ms
111111111111111111
2009-8-26 11:51:45 org.apache.catalina.core.StandardWrapperValve invoke
严重: Servlet.service() for servlet action threw exception
java.lang.NullPointerException
at com.yb.actionserver.loginactionserver.checkUser(loginactionserver.java:22)
at com.yb.struts.action.LoginAction.execute(LoginAction.java:45)
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:419)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:224)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194)
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.yb.SetEncoding.EncodingFilter.doFilter(EncodingFilter.java:28)
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:228)
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:216)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:634)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:445)
at java.lang.Thread.run(Thread.java:619)
ApplicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"><beans>
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
<property name="driverClass" value="com.microsoft.jdbc.sqlserver.SQLServerDriver" />
<property name="jdbcUrl" value="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=webpro;"/>
<property name="user" value="sa"/>
<property name="password" value="sa"/>
<property name="initialPoolSize" value="3"/>
<property name="maxIdleTime" value="3600"/>
<property name="minPoolSize" value="2"/>
<property name="maxPoolSize" value="200"/>
<property name="idleConnectionTestPeriod" value="30000"/>
<property name="acquireIncrement" value="20"/>
<property name="acquireRetryAttempts" value="30"/>
<property name="acquireRetryDelay" value="1000"/>
<property name="autoCommitOnClose" value="false"/>
<property name="automaticTestTable" value="leihailongtabletest"/>
<property name="breakAfterAcquireFailure" value="false"/>
<property name="checkoutTimeout" value="30000"/>
<property name="maxStatements" value="10000"/>
<property name="maxStatementsPerConnection" value="0"/>
<property name="numHelperThreads" value="10"/>
<property name="propertyCycle" value="100"/>
<property name="testConnectionOnCheckout" value="false"/>
<property name="testConnectionOnCheckin" value="false"/>
</bean>
<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.MySQLDialect
</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.hbm2ddl.auto">update</prop>
<!-- 修改属性为update、create、create-drop,<prop name="hibernate.hbm2ddl.auto">update</prop> -->
<prop key="connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</prop>
<prop key="hibernate.cache.use_query_cache">true</prop>
<prop key="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</prop>
<prop key="hibernate.cglib.use_reflection_optimizer">true</prop>
<!-- <prop key="hibernate.cache.provider_configuration_file_resource_path">/ehcache-hibernate.xml</prop> -->
</props>
</property>
<property name="mappingResources">
<list>
<value>com/yb/vo/Userinfo.hbm.xml</value></list>
</property>
</bean>
<bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
<bean id="daoimpl" class="com.yb.daoImpl.DAOImpl">
<property name="hibernateTemplate">
<ref bean="hibernateTemplate"/>
</property>
<property name="sessionFactory">
<ref bean="sessionFactory"/>
</property>
</bean>
<bean id="loginactionserver" class="com.yb.actionserver.loginactionserver">
<property name="objectDAO">
<ref bean="daoimpl"/>
</property>
</bean>
<!--
<bean name="/login" class="com.yb.struts.action.LoginAction">
<property name="objectDAO">
<ref bean="daoimpl"/>
</property>
</bean>
-->
</beans>
信息: Server startup in 11922 ms
111111111111111111
2009-8-26 11:51:45 org.apache.catalina.core.StandardWrapperValve invoke
严重: Servlet.service() for servlet action threw exception
java.lang.NullPointerException
at com.yb.actionserver.loginactionserver.checkUser(loginactionserver.java:22)
at com.yb.struts.action.LoginAction.execute(LoginAction.java:45)
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:419)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:224)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194)
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.yb.SetEncoding.EncodingFilter.doFilter(EncodingFilter.java:28)
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:228)
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:216)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:634)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:445)
at java.lang.Thread.run(Thread.java:619)
ApplicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"><beans>
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
<property name="driverClass" value="com.microsoft.jdbc.sqlserver.SQLServerDriver" />
<property name="jdbcUrl" value="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=webpro;"/>
<property name="user" value="sa"/>
<property name="password" value="sa"/>
<property name="initialPoolSize" value="3"/>
<property name="maxIdleTime" value="3600"/>
<property name="minPoolSize" value="2"/>
<property name="maxPoolSize" value="200"/>
<property name="idleConnectionTestPeriod" value="30000"/>
<property name="acquireIncrement" value="20"/>
<property name="acquireRetryAttempts" value="30"/>
<property name="acquireRetryDelay" value="1000"/>
<property name="autoCommitOnClose" value="false"/>
<property name="automaticTestTable" value="leihailongtabletest"/>
<property name="breakAfterAcquireFailure" value="false"/>
<property name="checkoutTimeout" value="30000"/>
<property name="maxStatements" value="10000"/>
<property name="maxStatementsPerConnection" value="0"/>
<property name="numHelperThreads" value="10"/>
<property name="propertyCycle" value="100"/>
<property name="testConnectionOnCheckout" value="false"/>
<property name="testConnectionOnCheckin" value="false"/>
</bean>
<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.MySQLDialect
</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.hbm2ddl.auto">update</prop>
<!-- 修改属性为update、create、create-drop,<prop name="hibernate.hbm2ddl.auto">update</prop> -->
<prop key="connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</prop>
<prop key="hibernate.cache.use_query_cache">true</prop>
<prop key="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</prop>
<prop key="hibernate.cglib.use_reflection_optimizer">true</prop>
<!-- <prop key="hibernate.cache.provider_configuration_file_resource_path">/ehcache-hibernate.xml</prop> -->
</props>
</property>
<property name="mappingResources">
<list>
<value>com/yb/vo/Userinfo.hbm.xml</value></list>
</property>
</bean>
<bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
<bean id="daoimpl" class="com.yb.daoImpl.DAOImpl">
<property name="hibernateTemplate">
<ref bean="hibernateTemplate"/>
</property>
<property name="sessionFactory">
<ref bean="sessionFactory"/>
</property>
</bean>
<bean id="loginactionserver" class="com.yb.actionserver.loginactionserver">
<property name="objectDAO">
<ref bean="daoimpl"/>
</property>
</bean>
<!--
<bean name="/login" class="com.yb.struts.action.LoginAction">
<property name="objectDAO">
<ref bean="daoimpl"/>
</property>
</bean>
-->
</beans>
/*
* Generated by MyEclipse Struts
* Template path: templates/java/JavaClass.vtl
*/
package com.yb.struts.action;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;import com.yb.actionserver.loginactionserver;
import com.yb.struts.form.LoginForm;/**
* MyEclipse Struts
* Creation date: 07-17-2009
*
* XDoclet definition:
* @struts.action path="/login" name="loginForm" input="/login.jsp" scope="request" validate="true"
* @struts.action-forward name="success" path="/index.jsp"
*/
public class LoginAction extends Action {
/*
* Generated Methods
*/
private loginactionserver loginactionserver=new loginactionserver();
/**
* Method execute
* @param mapping
* @param form
* @param request
* @param response
* @return ActionForward
*/
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
LoginForm loginForm = (LoginForm) form;// TODO Auto-generated method stub
String userString=loginForm.getUsername();
String userPassword=loginForm.getUserpassword();
//Logger logger=Logger.getLogger(LoginAction.class);//log4j
if (loginactionserver.checkUser(userString)) {
if (loginactionserver.checkPass(userString, userPassword)) {
//用户名和密码判断成功,应该检查人员相关状态。
return mapping.findForward("success");
}else {
request.setAttribute("passworderror",com.yb.struts.TS.LoginAction_execute_usernameerror);
return mapping.findForward("faliure");
}
}else {
request.setAttribute("usernameerror", com.yb.struts.TS.LoginAction_execute_passworderror);
return mapping.findForward("failure");
}
}
}
loginactionserver.java
package com.yb.actionserver;import java.util.List;import com.yb.dao.ObjectDAO;public class loginactionserver {
public ObjectDAO objectDAO; public ObjectDAO getObjectDAO() {
return objectDAO;
} public void setObjectDAO(ObjectDAO objectDAO) {
this.objectDAO = objectDAO;
}
public boolean checkUser(String username)
{
String hql="from Userinfo as u where u.name = '"+username+"'";
System.out.println("111111111111111111");
List userList=this.objectDAO.ObjectHqlSelect(hql);
if (userList.size()>0) {
return true;
}else {
return false;
}
}
public boolean checkPass(String username,String password)
{
String hql="from Userinfo as u where u.name='"+username+"' and u.userPassword='"+password+"'";
List list=this.objectDAO.ObjectHqlSelect(hql);
if (list.size()>0) {
return true;
}else {
return false;
}
}
}ObjectDAO.java
package com.yb.dao;import java.util.List;public interface ObjectDAO {
public void ObjectSave(Object object);
public void ObjectSaveOrUpdate(Object object);
public List ObjectHqlSelect(String hql);
public List ObjectSqlSelect(String sql);
public void ObjectDelete(Object object);
public void ObjectUpdate(String hql);
}DAOImpl.java
package com.yb.daoImpl;import java.util.List;import org.hibernate.Query;
import org.hibernate.Session;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;import com.yb.dao.ObjectDAO;public class DAOImpl extends HibernateDaoSupport implements ObjectDAO {
public void ObjectSave(Object object) {
// TODO Auto-generated method stub
this.getHibernateTemplate().save(object);
}
public void ObjectSaveOrUpdate(Object object) {
// TODO Auto-generated method stub
this.getHibernateTemplate().saveOrUpdate(object);
}
public List ObjectHqlSelect(String hql) {
// TODO Auto-generated method stub
System.out.println("------"+this.getSession());
Query query=this.getSession().createQuery(hql);
List list=query.list();
this.getSession().close();
this.getSessionFactory().close();
return list;
}
public List ObjectSqlSelect(String sql) {
// TODO Auto-generated method stub
System.out.println("------"+this.getSession());
Query query=this.getSession().createSQLQuery(sql);
List list=query.list();
this.getSession().close();
this.getSessionFactory().close();
return list;
}
public void ObjectDelete(Object object) {
// TODO Auto-generated method stub
this.getHibernateTemplate().delete(object);
}
public void ObjectUpdate(String hql) {
// TODO Auto-generated method stub
Session session=this.getSession();
Query query=session.createQuery(hql);
query.executeUpdate();
this.getSession().close();
}
}
这个地方NullPointerException </bean>
<bean id="loginactionserver" class="com.yb.actionserver.loginactionserver">
<property name="objectDAO">
<ref bean="daoimpl"/>
</property>
</bean>
<!--
<bean name="/login" class="com.yb.struts.action.LoginAction">
<property name="objectDAO">
<ref bean="daoimpl"/>
</property>
</bean>
-->
</beans>为什么要注释掉?如果注释掉,那么objectDAO肯定是空指针!LoginAction.java:45对应什么代码啊?
对应语句是:
loginactionserver.checkUser()里面
List userList=this.objectDAO.ObjectHqlSelect(hql);
at com.yb.struts.action.LoginAction.execute(LoginAction.java:45)
对应语句是:
loginaction。java里面
if (loginactionserver.checkUser(userString)) {
}
List userList=this.objectDAO.ObjectHqlSelect(hql); //loginactionserver.java:22
是空指针,再往上抛
loginactionserver.checkUser(userString))
就到这里了
action--》actionserver--》ObjectDAO-->DAOImpl
这样的配置有问题嘛?
你说的对,这个没问题,但是spring注入的时候是一层套一层,如果没有入住就会报空指针异常!
谢谢大家。问题已经解决。
加了一层。
<bean id="loginactionserver" class="com.yb.actionserver.loginactionserver">
<property name="objectDAO">
<ref bean="daoimpl"/>
</property>
</bean>
<bean name="/login" class="com.yb.struts.action.LoginAction">
<property name="loginactionserver">
<ref bean="loginactionserver"/>
</property>
</bean>