新手,刚学习spring,整合struts+spring,总是不能成功,下面是报错信息:
java.lang.NullPointerException
com.ssh3.struts.action.HelloAction.execute(HelloAction.java:69)
org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:484)
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:274)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:525)
javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
struts-config.xml内容如下,通过plug-in,在web应用启动时创建spring容器:
attribute="helloForm"
input="/form/hello.jsp"
name="helloForm"
path="/hello"
scope="request"
type="com.ssh3.struts.action.HelloAction">
HelloAction源代码如下:
package com.ssh3.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 org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.ssh3.dao.StudentDAO;
import com.ssh3.struts.form.HelloForm;
public class HelloAction extends Action {
private StudentDAO studentDao;
public StudentDAO getStudentDao() {
return studentDao;
}
public void setStudentDao(StudentDAO studentDao) {
this.studentDao = studentDao;
}
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
HelloForm helloForm = (HelloForm) form;// TODO Auto-generated method stub
//通过直接创建ctx,可以正确执行 studentDAO.sayHello(),
// ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
// StudentDAO studentDAO = (StudentDAO) ctx.getBean("StudentDAO");
//
// System.out.println(studentDAO.sayHello());
//通过spring的IOC,报错
System.out.println(studentDao.sayHello());
return mapping.findForward("success");
}
}
applicationContext.xml,代码如下:
Baby!
StudentDAO代码如下(并没有访问数据库,只是为了测试spring):
package com.ssh3.dao;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
public class StudentDAO {
private static final Log log = LogFactory.getLog(StudentDAO.class);
private String msg;
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public String sayHello(){
return "Hello" + msg;
}
}
我的目的是不想在Action中通过创建ctx,在调用ctx.getBean("XX")方法来取得容器中的bean,看了好多资料说通过配置struts-config.xml或web.xml就可以隐式创建spring容器,但是在Action中我却无法使用applicationContext.xml中的bean。
请帮帮忙,指点一下,我哪里错了。
问题补充:
难道大家在实际项目中都显式的调用applicationContext.xml中定义的bean??