背景:
在做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资源配置的属性;
主要是对这个知识点的不熟悉,不理解