整合web项目

Posted 时间沉淀美好

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了整合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);
	



至此,大功告成。

以上是关于整合web项目的主要内容,如果未能解决你的问题,请参考以下文章

ssm项目整合(搭建1)

(转)shiro权限框架详解06-shiro与web项目整合(下)

spring整合web项目原理

Spring:概述,IOC(Bean管理),整合Web项目,整合JUnit单元测试

springboot 整合 web 项目找不到 jsp 文件

Spring整合web项目原理