iteye_8355 2010-07-22 15:49
浏览 260
已采纳

Sping+struts2+hibernate的空指针问题,小弟太着急了



 搭一个Sping+struts2+hibernate的框架,出现空指针问题:

package com.user.action; 

import com.opensymphony.xwork2.ActionSupport; 
import com.user.dao.PersonManager; 
import com.user.vo.Person; 

public class LoginAction extends ActionSupport{ 

private String username; 
private String password; 
private PersonManager personManager; 

public String getUsername() { 
   return username; 
} 

public void setUsername(String username) { 
   this.username = username; 
} 

public String getPassword() { 
   return password; 
} 

public void setPassword(String password) { 
   this.password = password; 
} 

public PersonManager getPersonManager() { 
   return personManager; 
} 

public void setPersonManager(PersonManager personManager) { 
   this.personManager = personManager; 
} 

@Override 
public String execute() throws Exception { 
   String flag = ""; 

   Person per = new Person(); 
   per.setUname(this.username); 
   per.setUpwd(this.password); 
  
   if(personManager.isLogin(per)){ 
    flag = "success"; 
   } 
   else{ 
    flag = "fail"; 
   } 
  
   return flag; 
} 

} 
package com.user.dao; 

import java.util.List; 

import org.hibernate.Query; 
import org.springframework.orm.hibernate3.support.HibernateDaoSupport; 

import com.user.vo.Person; 

public class PersonManager extends HibernateDaoSupport{ 

public boolean isLogin(Person per){ 
   boolean flag = false; 
  
   String hql = "From Person as p where p.uname=? and p.upwd=?"; 
   Query q = this.getSession().createQuery(hql); 
   q.setString(0, per.getUname()); 
   q.setString(1, per.getUpwd()); 
   List all = q.list(); 
  
   if(all.size() > 0){ 
    flag = true; 
   } 
   else{ 
    flag = false; 
   } 
  
   return flag; 
} 

} 
package com.user.vo;

public class Person implements java.io.Serializable { 

    private Integer id; 
    private String uname; 
    private String upwd; 

    public Person() { 
    } 

    public Person(Integer id) { 
        this.id = id; 
    } 
    
    public Person(Integer id, String uname, String upwd) { 
        this.id = id; 
        this.uname = uname; 
        this.upwd = upwd; 
    } 
    
    public Integer getId() { 
        return this.id; 
    } 
    
    public void setId(Integer id) { 
        this.id = id; 
    } 

    public String getUname() { 
        return this.uname; 
    } 
    
    public void setUname(String uname) { 
        this.uname = uname; 
    } 

    public String getUpwd() { 
        return this.upwd; 
    } 
    
    public void setUpwd(String upwd) { 
        this.upwd = upwd; 
    } 

} 
<?xml version="1.0" encoding="utf-8"?> 
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 


<hibernate-mapping> 
<class name="com.user.vo.Person" table="person" catalog="MAIN"> 
   <id name="id" type="java.lang.Integer"> 
    <column name="id" length="4" /> 
   </id> 
   <property name="uname" type="java.lang.String"> 
    <column name="uname" length="20" /> 
   </property> 
   <property name="upwd" type="java.lang.String"> 
    <column name="upwd" length="20" /> 
   </property> 
</class> 
</hibernate-mapping> 
<?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="dataSource" 
   class="org.apache.commons.dbcp.BasicDataSource"> 
   <property name="driverClassName" 
    value="org.gjt.mm.mysql.Driver"> 
   </property> 
   <property name="url" value="jdbc:mysql://localhost:3306/MAIN"></property> 
   <property name="username" value="tooy"></property> 
   <property name="password" value="root"></property> 
</bean> 
<bean id="exampleHibernateProperties"
class="org.springframework.beans.factory.config.PropertiesFactoryBean">
<property name="properties">
<props>
<prop key="hibernate.hbm2ddl.auto">update</prop>
<prop key="hibernate.query.substitutions">
true 'T', false 'F'
</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.c3p0.minPoolSize">5</prop>
<prop key="hibernate.c3p0.maxPoolSize">20</prop>
<prop key="hibernate.c3p0.timeout">600</prop>
<prop key="hibernate.c3p0.max_statement">50</prop>
<prop key="hibernate.c3p0.testConnectionOnCheckout">
false
</prop>
</props>
</property>
</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> 
    </props> 
   </property> 
   <property name="mappingResources"> 
    <list> 
     <value>com/user/vo/Person.hbm.xml</value></list> 
   </property> 
</bean> 

<!--   配置PersonManager.java类文件 --> 

<bean id="personManager" class="com.user.dao.PersonManager" abstract="false" lazy-init="default" autowire="default" dependency-check="default"> 
      <property name="sessionFactory" > 
       <ref local="sessionFactory"/> 
      </property> 
</bean> 

<!--   配置LoginAction.java类文件 --> 

<bean id="loginAction" class="com.user.action.LoginAction" > 
   <property name="personManager"> 
           <ref bean="personManager" /> 
       </property> 

</bean> 

</beans> 
<?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> 

<constant name="struts.objectFactory" value="spring"></constant>
    <!-- Rose India Struts 2 Tutorials -->
    <constant name="struts.enable.DynamicMethodInvocation"
        value="false" />
    <constant name="struts.devMode" value="true" />
<!--导入struts-default.xml文件 --> 
<include file="struts-default.xml"></include> 

<!-- 配置中文支持 --> 
<constant name="struts.i18n.encoding" value="GBK"></constant> 

<!-- 配置Action --> 
<package name="struts" extends="struts-default" namespace="/"> 
   <action name="login" class="com.user.action.LoginAction"> 
    <result name="success">/result.jsp</result> 
    <result name="fail">/error.jsp</result> 
   </action> 
</package> 

</struts> 
<?xml version="1.0" encoding="UTF-8"?> 
<web-app version="2.5"    
    xmlns="http://java.sun.com/xml/ns/javaee"    
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee    
    http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> 
       
    <!-- 配置spring的监听器 --> 
    <context-param> 
        <param-name>contextConfigLocation</param-name> 
        <param-value>classpath*:/applicationContext_hibernate.xml</param-value> 
    </context-param> 
    <!-- 开启监听 --> 
    <listener> 
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
    </listener> 

       
    <!-- Struts2 配置 --> 
       
    <filter> 
        <filter-name>struts2</filter-name> 
        <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class> 
    </filter> 
    <filter-mapping> 
        <filter-name>struts2</filter-name> 
        <url-pattern>/*</url-pattern> 
    </filter-mapping> 
       
    <welcome-file-list> 
        <welcome-file>login.jsp</welcome-file> 
    </welcome-file-list> 
</web-app> 
<%@ page language="java" contentType="text/HTML;charset=GBK" pageEncoding="GBK"%>   

<%@ taglib prefix="s" uri="/struts-tags"%>   

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">   
<html>   
<head>   
       
</head>   
     
<body>   
    <center>   
        <s:form action="login" method="POST" namespace="/">   
            <s:textfield name="username" label="用户名" size="14"/>   
            <s:password name="password" label="密 码" size="14"/>   
            <s:submit label="提交" />   
        </s:form>   
    </center>   
</body>   
</html> 

 错误:

Stacktraces

java.lang.NullPointerException
    com.user.action.LoginAction.execute(LoginAction.java:45)
    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:441)
    com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:280)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:243)
    com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:165)
    com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
    com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:252)
    org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:68)
    com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
    com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:122)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
    com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:195)
    com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
    com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:195)
    com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
    com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:179)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
    org.apache.struts2.interceptor.MultiselectInterceptor.intercept(MultiselectInterceptor.java:75)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
    org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:94)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
    org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:235)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
    com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:89)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
    com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:130)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
    org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:267)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
    com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:126)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
    com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:138)
    com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
    com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:165)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
    org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
    com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:179)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
    com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:176)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
    org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:52)
    org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:488)
    org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:395)
    org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
    org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
    org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
    org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
    org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
    org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
    org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
    org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
    java.lang.Thread.run(Unknown Source)

  • 写回答

1条回答 默认 最新

  • iteye_2687 2010-07-23 13:38
    关注

    你的spring没有给你action注入personManager属性,
    在spring配置action的时候加上singleton="false"
    也就是这样






    让后在struts2的配置文件中
    把login这个action的class 由com.user.action.LoginAction改成loginAction
    注:此处的loginAction是上面spring中Logingaction 的bean ID
    如果对了的话楼主记得给我加分哦,估计也就这个错误

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 教务系统账号被盗号如何追溯设备
  • ¥20 delta降尺度方法,未来数据怎么降尺度
  • ¥15 c# 使用NPOI快速将datatable数据导入excel中指定sheet,要求快速高效
  • ¥15 再不同版本的系统上,TCP传输速度不一致
  • ¥15 高德地图点聚合中Marker的位置无法实时更新
  • ¥15 DIFY API Endpoint 问题。
  • ¥20 sub地址DHCP问题
  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式