Spring+struts2+Hibernate整合 java.lang.NullPointerException

版权声明:博客知识产权来源命运的信徒,切勿侵权 https://blog.csdn.net/qq_37591637/article/details/85611163

背景:

在做Spring+struts2+hibernate整合的时候,点击一个连接跳转到Servlet里面

Servlet的代码如下

// 1.获取上下文
		ServletContext sc = getServletContext();
		// 获取ioc容器
		ApplicationContext apl = (ApplicationContext) sc.getAttribute("app");
		// 获取bean
		GoodsService gh = (GoodsService) apl.getBean("goodsService");
		// 调用方法
		List<Goods> ls = gh.getGoodsList();
		request.setAttribute("list", ls);
		// 转发
		request.getRequestDispatcher("goodslist.jsp")
				.forward(request, response);

错误的原因是对 Spring资源文件配置 的错误理解

在web.xml里面配置Spring资源文件有两种方式

1、使用原有的配置
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:applicationContext.xml</param-value>
    </context-param>

    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
2、自定义的

<context-param>
        <param-name>tjnContext</param-name>
        <param-value>classpath:applicationContext.xml</param-value>
    </context-param>
 
    <listener>
        <listener-class>cn.com.ioc.ServletContextLIstenerImpl</listener-class>
    </listener>

当然ServletContextLIstenerImpl里面会对容器进行处理,以便servlet调用

package cn.com.ioc;
import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class ServletContextLIstenerImpl implements ServletContextListener {
	@Override
	public void contextDestroyed(ServletContextEvent arg0) {
		// TODO Auto-generated method stub

	}

	@Override
	public void contextInitialized(ServletContextEvent arg0) {
		//1.获取资源文件
		ServletContext sc=arg0.getServletContext();
		String ioc=sc.getInitParameter("tjnContext");
       //2.创建ioc容器
		ApplicationContext app=new ClassPathXmlApplicationContext(ioc);
		//3.把ioc放在ServletContext里面
		sc.setAttribute("app", app);
	}

}

我错误的原因就是,在web.xml文件里面使用了默认的设置,但是在servlet里面又使用了自定义Spring资源配置的属性;

主要是对这个知识点的不熟悉,不理解

猜你喜欢

转载自blog.csdn.net/qq_37591637/article/details/85611163