整合web项目

首先还是我们的需求式开场白。在web项目中如何使用spring开发。如果使用 new ClassPathXmlApplicationContext 将每一次都加载xml,相当于每一次都创建spring容器。而真实开发中,容器只有一份。之后重复的从spring容器中获取内容。


自动加载配置文件,生成spring容器,并将其存放到ServletContext作用域中。Spring提供监听器程序ContextLoaderListener (ServletContextListener实现),tomcat启动时执行。启动时加载配置文件。


来段小栗子演示


service层(为了方便,直接来):

public class UserService 
{
	public void addUser()
	{
		System.out.println("add user");
	}
}


然后去applicationContext.xml配置bean:


<bean id="userService" class="com.canyugan.service.UserService">
       </bean>


在index.jsp写上我们的测试,直接点击页面,servlet处理addUser方法,并在服务器输出:

<body>
    <a href="${pageContext.request.contextPath}/HelloServlet">点我</a>
  </body>


servlet不急着写,我们先去web.xml配置(完成我们加载spring配置文件):

<!-- 
    设置web的全局初始化参数 设置配置文件的位置 
    name是固定值	class表示类路径 
  -->
  <context-param>
  	<param-name>contextConfigLocation</param-name>
  	<param-value>classpath:applicationContext.xml</param-value>
  </context-param>
  
  <!-- 配置监听器 加载spring配置文件 -->
  <listener>
  	<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>

此处需要注意一下,在只配监听器的情况下,你会很幸运的遇到一个Bug。来看看Bug长啥样:

Caused by: java.io.FileNotFoundException: Could not open ServletContext resource [/WEB-INF/applicationContext.xml]

什么意思?找不到文件位置。我们还需要配置文件位置。所以就有了上面我们配置的那段xml



既然spring容器已经有了并且被放到servletContext中,我们可以在servlet取出并实现我们的业务:

public class HelloServlet extends HttpServlet 
{
	
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException 
	{
		//方式1:手动从servletcontext作用域获取内容
		/*WebApplicationContext webApplicationContext=
				(WebApplicationContext) this.getServletContext().getAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE);*/
		//方式2:提供工具类
		WebApplicationContext webApplicationContext=WebApplicationContextUtils.getWebApplicationContext(this.getServletContext());
		
		UserService userService=(UserService) webApplicationContext.getBean("userService");
		userService.addUser();
	}

	
	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException 
	{
		doGet(request, response);
	}
}



至此,大功告成。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值