文档章节

在 WEB 应用中使用 Spring 的基本思路(原生)

哎小艾
 哎小艾
发布于 2017/10/31 23:54
字数 499
阅读 11
收藏 1

1、Spring如何在web应用中使用

几点说明:
 1) 需要额外加入的jar包:
     spring-web-4.0.0.RELEASE.jar
     spring-webmvc-4.0.0.RELEASE.jar

 2) Spring的配置文件,没有什么不同
 3) 如何创建IOC容器
     ① 非WEB应用在main方法中直接创建
     ② 应该在WEB应用被服务器加载时就创建IOC容器
  在ServletContextListener#void contextInitialized(ServletContextEvent sce)方法中创建IOC容器 
    ③ 在ServletContextListener#void contextInitialized(ServletContextEvent sce)方法中创建IOC容器后, 可以将其放在ServletContext(即application域)的一个属性中
     ④ 实际上,Spring配置文件的名字和位置应该也是可以配置的!将其配置到当前WEB应用的初始化参数中较为合适

2、关键文件编码

① SpringServletContextListener(ServletContextListener)(核心)

package com.lty.spring.struts2.listener;

import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

/**
 * Application Lifecycle Listener implementation class SpringServletContextListener
 *
 */
@WebListener
public class SpringServletContextListener implements ServletContextListener {

    /**
     * Default constructor. 
     */
    public SpringServletContextListener() {
    	
    }

	/**
     * @see ServletContextListener#contextDestroyed(ServletContextEvent)
     */
    public void contextDestroyed(ServletContextEvent arg0)  { 
    	
    }

	/**
     * @see ServletContextListener#contextInitialized(ServletContextEvent)
     */
    public void contextInitialized(ServletContextEvent event)  { 
    	//获取Spring配置文件的名称(全路径)
    	ServletContext servletContext = event.getServletContext();
    	String config = servletContext.getInitParameter("configLocation");
    	
    	//1、创建IOC容器
    	ApplicationContext ctx = new ClassPathXmlApplicationContext(config);
    	
    	//2、将IOC容器放在ServletContext的一个属性中
    	servletContext.setAttribute("applicationContext", ctx);
    }
	
}

② TestServlet(Servlet)

package com.lty.spring.struts2.servlet;

import java.io.IOException;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.context.ApplicationContext;

import com.lty.spring.struts2.bean.Person;

/**
 * Servlet implementation class TestServlet
 */
@WebServlet("/TestServlet")
public class TestServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//1、从application域对象中获取IOC容器的引用
		ServletContext servletContext = getServletContext();
		ApplicationContext ctx = (ApplicationContext) servletContext.getAttribute("applicationContext");
		
		//2、从IOC容器中得到需要的bean
		Person person = ctx.getBean(Person.class);
		person.hello();
	}

}

③ web.xml(核心)

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns="http://java.sun.com/xml/ns/javaee"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
	id="WebApp_ID" version="2.5">
	
	<!-- 配置Spring配置文件的名称和位置 -->
	<context-param>
		<param-name>configLocation</param-name>
		<param-value>applicationContext.xml</param-value>
		
		<!-- 默认类路径下 -->
		<!-- <param-value>classpath:com/lty/spring/struts2/servlet/beans.xml</param-value> -->
	</context-param>
	
	<!-- 启动IOC容器的ServletContextListener -->
	<listener>
		<listener-class>com.lty.spring.struts2.listener.SpringServletContextListener</listener-class>
	</listener>
</web-app>

3、测试

 

参考资料

1、完整代码

© 著作权归作者所有

哎小艾
粉丝 14
博文 328
码字总数 163990
作品 0
深圳
程序员
私信 提问
浅谈Spring Security与Java应用安全保护

  Spring Security是一个强大且高度可定制的安全框架,致力于为Java应用提供身份认证和授权。第一本Spring Security中文版图书《Spring Security实战》现已上市,文末参与互动赢取新书~  ...

java进阶架构师
2019/09/10
0
0
三条路线告诉你如何掌握Spring IoC容器的核心原理

一、前言 前三篇已经从历史的角度和大家一起探讨了为什么会有Spring,Spring的两个核心概念:IoC和AOP的雏形,Spring的历史变迁和如今的生态帝国。本节的主要目的就是通过一个切入点带大家一...

Java小铺
2018/08/27
0
0
微服务配置中心实战:Spring + MyBatis + Druid + Nacos

在结合场景谈服务发现和配置中我们讲述了 Nacos 配置中心的三个典型的应用场景,包括如何在 Spring Boot 中使用 Nacos 配置中心将数据库连接信息管控起来,而在“原生”的 Spring 中可以怎么...

中间件小哥
2018/12/21
0
0
次世代的会话管理项目 Spring Session

欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文来自云+社区翻译社,由Tnecesoc编译。 会话管理一直是 Java 企业级应用的重要部分。不过在很长的一段时间里,这一部分都被我...

腾讯云加社区
2018/06/26
0
0
为什么Java大神,都在看Spring Boot和Spring Cloud的书?

如果你是一名Java开发人员,并且最近正打算学习Spring Boot和Spring Cloud框架并寻找一些关于它们的最好的书籍,那么,你今天就来对地方了。 本文,我们将讨论一些学习Spring Boot和Spring ...

Java小铺
2018/09/18
598
3

没有更多内容

加载失败,请刷新页面

加载更多

Elasticsearch系列---索引管理

概要 Elasticsearch让索引创建变得非常简单,只要索引一条新的数据,索引会自动创建出来,但随着数据量的增加,我们开始有了索引优化和搜索优化的需求之后,就会发现自动创建的索引在某些方面...

清茶豆奶
17分钟前
4
0
MAMP Pro for Mac(PHP/MySQL开发环境)

[名称]:MAMP Pro for Mac [大小]: 11.14 MB [语言]:英文 [测试环境]: Mac OS 10.15.x [下载链接]:https://www.macdown.com/mac/1676.html 简介 一款包含Macintosh、Apache、MySQL和PHP...

麦克虾仔
21分钟前
1
0
Numpy处理图片方法

在进行图像领域的深度学习的时候经常需要对图片进行处理,包括图像的翻转,压缩,截取等,一般都是用Numpy来处理。处理起来也很方便。 In[3] # 导入需要的包 import numpy as np import matp...

北方的郎
今天
15
0
AMD集中擢升高管:从Intel挖了个高手

  1 月 17 日,AMD 官方宣布多项人事升迁、新人任命,擢升了四位高级副总裁:   AMD 同时还宣布, 聘请行业资深人士 Daniel McNamara 出任高级副总裁兼服务器业务部总经理,负责在第二代...

水果黄瓜
今天
10
0
什么是泛型?

一、泛型的概念 泛型是 Java SE5 出现的新特性,泛型的本质是类型参数化或参数化类型,在不创建新的类型的情况下,通过泛型指定的不同类型来控制形参具体限制的类型。 二、泛型的意义 一般的...

hncboy
今天
11
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部