首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java Web开发 >

SSH使用注解方式出错误 求教

2012-09-25 
SSH使用注解方式出异常 求教一个简单的SSH(struts2.1 + hibernate3.3 + spring3.0)例子改为用注解配置后启

SSH使用注解方式出异常 求教
一个简单的SSH(struts2.1 + hibernate3.3 + spring3.0)例子改为用注解配置后启动tomcat报错:
 Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'userAction' defined in file [C:\Program Files\Apache Software Foundation\apache-tomcat-7.0.5\webapps\ssh5\WEB-INF\classes\com\lm\struts2\userAction.class]: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [com.lm.struts2.userAction]: Constructor threw exception; nested exception is java.lang.NullPointerException
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:946)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:892)
.............
Caused by: org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [com.lm.struts2.userAction]: Constructor threw exception; nested exception is java.lang.NullPointerException
at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:141)
..................
Caused by: java.lang.NullPointerException
at org.apache.struts2.ServletActionContext.getRequest(ServletActionContext.java:112)
at com.lm.struts2.userAction.<init>(userAction.java:21)

意思好像是不能初始化UserAction

下面是配置文件

applicationContext.xml:

XML code
<?xml version="1.0" encoding="UTF-8"?><beans    xmlns="http://www.springframework.org/schema/beans"    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    xmlns:p="http://www.springframework.org/schema/p"    xmlns:context="http://www.springframework.org/schema/context"    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd"      default-autowire="byName">        <context:annotation-config />    <context:component-scan base-package="com.lm"></context:component-scan>    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">        <property name="driverClassName"            value="com.mysql.jdbc.Driver">        </property>        <property name="url" value="jdbc:mysql://127.0.0.1:3306"></property>        <property name="username" value="root"></property>        <property name="password" value="lm"></property>        <property name="maxActive" value="100"></property>        <property name="maxIdle" value="30"></property>        <property name="maxWait" value="500"></property>        <property name="defaultAutoCommit" value="true"></property>    </bean>    <bean id="sessionFactory"        class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">        <property name="configLocation"            value="classpath:hibernate.cfg.xml">        </property>        <property name="dataSource" ref="dataSource"></property>    </bean></bean>


struts.xml:
XML code
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd"><struts><package name="suibiaojiao" extends="struts-default" namespace="/" >   <action name="*_*" class="com.lm.struts2.{1}Action" method="{2}" >      <result name="ok"  type="redirect">user_findAll.action</result>      <result name="error">/error.jsp</result>      <result name="findAllOK">/studentList.jsp</result>      <result name="deleteOK" type="redirect">user_findAll.action</result>      <result name="input" >/save.jsp</result>        <result name="updatePOK" >/update.jsp</result>        <result name="updateOK" type="redirect">user_findAll.action</result>     </action> </package></struts>  



StudentDAO:
Java code
package com.lm.Impdao;import java.util.List;import javax.annotation.Resource;import org.aspectj.weaver.patterns.ThisOrTargetAnnotationPointcut;import org.hibernate.Query;import org.hibernate.Session;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.context.ApplicationContext;import org.springframework.orm.hibernate3.support.HibernateDaoSupport;import org.springframework.stereotype.Repository;import com.lm.Idao.IStudentDAO;import com.lm.dao.Student;@Repositorypublic class StudentDAO extends HibernateDaoSupport implements IStudentDAO{       //此处代码省略}

StudentBiz:
Java code
package com.lm.Impbiz;import java.io.ByteArrayInputStream;import java.io.ByteArrayOutputStream;import java.io.IOException;import java.io.InputStream;import java.util.List;import javax.annotation.Resource;import org.apache.poi.hssf.usermodel.HSSFCell;import org.apache.poi.hssf.usermodel.HSSFRow;import org.apache.poi.hssf.usermodel.HSSFSheet;import org.apache.poi.hssf.usermodel.HSSFWorkbook;import org.springframework.stereotype.Service;import com.lm.Idao.IStudentDAO;import com.lm.biz.IStudentBiz;import com.lm.dao.Student;@Servicepublic class StudentBiz implements IStudentBiz {    @Resource    private IStudentDAO studentDAO;        public void setStuDAO(IStudentDAO stuDAO) {        this.studentDAO = stuDAO;    }    public boolean login(Student stu) {        return studentDAO.findByExample(stu).size() > 0;    }    public List<Student> findAll() {        return studentDAO.findAll();    }        public boolean save(Student stu){        boolean flag=false;        try{            if(studentDAO.findByExample(stu).size() == 0){                studentDAO.save(stu);                 flag=true;            }        }catch(Exception ex){        }                return flag;    }        public boolean delete(int stuId){        boolean flag=false;        try{            studentDAO.delete(stuId);            flag=true;        }catch(Exception ex){            ex.printStackTrace();        }        return flag;    }    public Student findById(int stuId) {        return studentDAO.findById(stuId);             }    public boolean update(Student stu) {        if(studentDAO.merge(stu) != null)             return true;        else            return false;    }}

UserAction:
Java code
package com.lm.struts2;import java.io.InputStream;import java.io.PrintWriter;import java.util.List;import javax.annotation.Resource;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpSession;import org.apache.struts2.ServletActionContext;import org.springframework.stereotype.Controller;import com.lm.biz.IStudentBiz;import com.lm.dao.Student;import com.opensymphony.xwork2.ActionSupport;@Controllerpublic class userAction extends ActionSupport {HttpServletRequest request=ServletActionContext.getRequest();HttpSession session=request.getSession();@Resourceprivate Student stu;private IStudentBiz studentBiz;public void setStuBiz(IStudentBiz stuBiz) {this.studentBiz = stuBiz;}public Student getStu() {return stu;}public void setStu(Student stu) {this.stu = stu;}public String save() throws Exception{String tag="error";if(studentBiz.save(stu))tag="ok";return tag;}public String findAll() throws Exception{String tag="error";try{List<Student> stus = studentBiz.findAll();tag="findAllOK";request.setAttribute("stus", stus);}catch(Exception ex){ex.printStackTrace();}return tag;}public String delete() throws Exception{String tag="error";try{if(studentBiz.delete(stu.getStuId()))tag="deleteOK";}catch(Exception ex){ex.printStackTrace();}return tag;}  public String updateP() throws Exception{stu=studentBiz.findById(stu.getStuId());return "updatePOK";}    public String updatesave() throws Exception{String tag="error";if(studentBiz.update(stu))tag="updateOK";return tag;}  } 



[解决办法]
HttpServletRequest request=ServletActionContext.getRequest();
HttpSession session=request.getSession()

应该是这二行的问题,,
[解决办法]
LZ怎么不在applicationContext.xml的里面多一个注入对象的bean?而只是单纯的用了一个配置的bean。
异常报错的地方有说空指针,就是说你用的是new的方式,而不是应该要使用的注入方式。相应的在业务层和控制层的类里面set出来。
[解决办法]
如果使用注解,那么applicationContext中的sessionfactory应该是<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">

热点排行