Spring整合Web项目:
步骤一:创建web项目,引入jar包:
引入基本6个开发包:
步骤二:创建包结构:
* com.itheima
* web层
* UserServlet
* service层
* UserService
* dao层
* UserDao
步骤三:创建Spring的配置文件:
配置Service和DAO到Spring的配置文件中:
1
2
3
4
|
<
bean
id
=
"userService"
class
=
"com.itheima.service.UserService"
>
<
property
name
=
"userDao"
ref
=
"userDao"
/>
</
bean
>
<
bean
id
=
"userDao"
class
=
"com.itheima.dao.UserDao"
></
bean
>
|
步骤四:在Servlet中获得Service对象:
1
2
3
4
5
6
7
|
// 创建工厂:(方法不好,因为每次在刷新页面时,都会去创建工厂,效率低)
ApplicationContext applicationContext =
new
ClassPathXmlApplicationContext(
"applicationContext.xml"
);
UserService userService = (UserService) applicationContext
.getBean(
"userService"
);
System.out.println(
"UserServlet的方法执行了..."
);
userService.save();
|
步骤五:发现问题:
访问Servlet:创建Spring工厂,不停刷新,不停创建工厂.(效率太低)
* 解决问题:
* 一种:将工厂的创建放入到Servlet的init方法中.(这种方式不好:多个Servlet的情况,创建一个Servlet创建一个Spring的工厂.)
***** 二种:将工厂创建好了以后放入到ServletContext域中.使用工厂的时候,从ServletContext中获得.
* ServletContextListener:用来监听ServletContext对象的创建和销毁的监听器.
* 当ServletContext对象创建的时候:创建工厂 , 将工厂存入到ServletContext.
ServletContext域只会创建一次,所以就把工程存方到ServletContext中去,这样的话,工厂也就只创建一次
工厂创建存入到ServletContext中的过程其实是由监听器完成的,所以我们要是不配置监听器的话,就是无效的。
* Spring整合Web项目:(已经把applicationContext初始化工厂放入监听器初始化方法中,所以我们只需开启这个监听器)
* 引入spring-web-3.2.0.RELEASE.jar包.---->目的:Spring整合Web项目,监听器在里面
* 配置监听器:
1
2
3
4
|
<!-- 配置Spring的核心监听器: -->
<
listener
>
<
listener-class
>org.springframework.web.context.ContextLoaderListener</
listener-class
>
</
listener
>
|
因为tomcat设置Spring配置文件默认是在WEB-INF下的
所以要修改applicationContext.xml文件的路径的全局初始化参数设置。
1
2
3
4
|
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
|
步骤六:在Servlet中获得工厂
* 从ServletContext中获得工厂:
* 两种方式获得:
* 获得ServletContext.getAttribute(“...”);
* WebApplicationContextUtils.getWebApplicationContext(ServletContext context);
返回一个applicationContext对象,可以直接调用getBean()方法