Spring在Web中使用的基本思路

1. 加入额外的jar包:spring-web-4.0.0.RELEASE和spring-webmvc-4.0.0.RELEASE。

2. Spring的配置文件没有什么不同之处,按常规配置即可。

3. 如何创建IOC容器:

(1). 在非Web应用中,我们直接在main()中创建IOC容器的实例对象,即:

public static void main(String[] args) {
        //1.创建Spring的IOC容器对象,在该过程中会调用实体类的构造器和set方法
        ApplicationContext act = new ClassPathXmlApplicationContext("beans.xml");
        //2.从IOC容器中获取实例对象
        HelloWorld helloWorld = (HelloWorld) act.getBean("helloworld");
        //3.调用实例方法
        helloWorld.hello();
}

(2). 在Web应用中如何创建呢?在Web应用被服务器加载时就创建IOC容器的实例。

此时可以利用监听器,我们知道监听器是Servlet规范中定义的一种特殊的类,它主要是对ServletContext、Session和Request的监听。所以

当监听器监听ServletContext的时候,可以在ServletContextListener中的contextInitialized(ServletContextEvent  sce)中创建IOC容器。

(3). Web应用中的其他组件如何来访问IOC容器呢?

当在ServletContextListener中的contextInitialized(ServletContextEvent  sce)中创建IOC容器以后,将IOC实例存放到

ServletContext的一个属性中(即application域中)。

(4). 在开发中为了增加应用的灵活性,可以将Spring配置文件的名字和位置配置到当前应用的初始化参数当中比较好,即在web.xml文件中配置。

(5). 测试代码:

实体类:

package bean;

public class HelloWorld {
    public void hello() {
        System.out.println("Hello,My name is Kate.");
    }
}

Spring配置文件:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
                        http://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean id="helloWorld" class="bean.HelloWorld"></bean>
</beans>

Servlet配置文件:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0"
    xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
    http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">

    <!-- 表示application域中的参数 -->
    <context-param>
        <param-name>configLocation</param-name>
        <param-value>bean.xml</param-value>
    </context-param>

    <!-- 配置监听器 -->
    <listener>
        <listener-class>listener.IOCListener</listener-class>
    </listener>

    <servlet>
        <servlet-name>TestSpringServlet</servlet-name>
        <servlet-class>servlet.TestSpringServlet</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>TestSpringServlet</servlet-name>
        <url-pattern>/testSpring</url-pattern>
    </servlet-mapping>
</web-app>

监听器:

package listener;

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 IOCListener implements ServletContextListener {
    @Override
    public void contextInitialized(ServletContextEvent sce) {
        //1.获取Spring配置文件的名称
        ServletContext servletContext = sce.getServletContext();
        String config = servletContext.getInitParameter("configLocation");
        //2.创建IOC容器
        ApplicationContext ac = new ClassPathXmlApplicationContext(config);
        //3.吧IOC容器实例存放到ServletContext的属性中
        servletContext.setAttribute("applicationContext", ac);
    }
    @Override
    public void contextDestroyed(ServletContextEvent sce) {
        System.out.println("IOCListener destroyed...");
    }
}

测试类:

package servlet;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.context.ApplicationContext;

import bean.HelloWorld;

public class TestSpringServlet extends HttpServlet {

    private static final long serialVersionUID = 1L;

    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        //获取IOC容器实例
        ApplicationContext ac = (ApplicationContext) this.getServletContext()
                .getAttribute("applicationContext");
        System.out.println(ac);
        HelloWorld hello = (HelloWorld) ac.getBean("helloWorld");
        hello.hello();
    }

}
时间: 2024-11-02 20:26:01

Spring在Web中使用的基本思路的相关文章

模拟Spring如何在WEB中运行

Spring在web中配置和普通的Java程序中有所区别,总结一下主要表现在以下几个方面: ①jar包不同,需要引入两个web的jar包 ②需要考虑IOC容器创建的时间 非 WEB 应用在 main 方法中直接创建 在web应用中为了保证spring的运行,所以必须在程序刚在容器中启动时就必须创建IOC容器,这样的时间人为不好把握,我们可以通过Listener来监听程序的运行,保证在刚开始时就创建,具体采用的是 创建一个实现ServletContextListener接口的类,并在重写的cont

如何在Spring异步调用中传递上下文

以下文章来源于aoho求索 ,作者aoho 1. 什么是异步调用? 异步调用是相对于同步调用而言的,同步调用是指程序按预定顺序一步步执行,每一步必须等到上一步执行完后才能执行,异步调用则无需等待上一步程序执行完即可执行.异步调用指,在程序在执行时,无需等待执行的返回值即可继续执行后面的代码.在我们的应用服务中,有很多业务逻辑的执行操作不需要同步返回(如发送邮件.冗余数据表等),只需要异步执行即可. 本文将介绍 Spring 应用中,如何实现异步调用.在异步调用的过程中,会出现线程上下文信息的丢失

Spring MVC环境中文件上传大小和文件类型限制以及超大文件上传bug问题

    在上一篇文章中,主要介绍了Spirng MVC环境下的正常情况下文件上传功能实现.在实际开发的时候,还会涉及到上传文件大小和类型的限制,接下来就会对Spirng MVC环境下文件上传大小和类型的限制进行介绍,还会讲解到文件上传大小tomcat服务器bug问题及解决方案. 一.文件上传大小限制 这里还是接着上篇文章先介绍Spring MVC下的文件上传大小限制,文件上传大小的限制在springmvc-config.xml中配置文件解析器CommonsMultipartResolver时即可

spring framework web @Scheduled 执行两次的问题

与本文相关的关键词:Spring @Scheduled 执行两次的问题 使用组件:Spring framework web mvc 现象如下:使用@Scheduled标注的方法会执行两次 通过google输入关键词:spring @scheduled called twice,会显示许多人遇到相似问题. 该问题的根本原因就是包含有@Scheduled方法的类被初始化两次. 在spring官方说明中有如下提示: Make sure that you are not initializing mul

Spring Boot 配置文件中的花样,看这一篇足矣!

在快速入门一节中,我们轻松的实现了一个简单的RESTful API应用,体验了一下Spring Boot给我们带来的诸多优点,我们用非常少的代码量就成功的实现了一个Web应用,这是传统的Spring应用无法办到的,虽然我们在实现Controller时用到的代码是一样的,但是在配置方面,相信大家也注意到了,在上面的例子中,除了Maven的配置之后,就没有引入任何的配置. 这就是之前我们所提到的,Spring Boot针对我们常用的开发场景提供了一系列自动化配置来减少原本复杂而又几乎很少改动的模板化

Spring Boot项目中使用Mockito

本文首发于个人网站:Spring Boot项目中使用Mockito Spring Boot可以和大部分流行的测试框架协同工作:通过Spring JUnit创建单元测试:生成测试数据初始化数据库用于测试:Spring Boot可以跟BDD(Behavier Driven Development)工具.Cucumber和Spock协同工作,对应用程序进行测试. 进行软件开发的时候,我们会写很多代码,不过,再过六个月(甚至一年以上)你知道自己的代码怎么运作么?通过测试(单元测试.集成测试.接口测试)可

apacheFtpServer集成spring由web容器控制启动和关闭

ApacheFtpServer是一个100%纯Java实现的FTP服务器,基于网络框架apache MINA实现,可支撑多并发用户.FtpServer可以独立运行作为一个Windows服务或Unix/Linux守护进程,或嵌入到Java应用程序,提供对内部集成spring应用程序支持.下面介绍apacheFtpServer与spring集成,交由spring控制ApacheFtpServer的启动与关闭. 1.      初始化创建MyFtpServer: import java.io.File

Java EE 学习(7):IDEA + maven + spring 搭建 web(3)- 配置数据库

参考: https://my.oschina.net/gaussik/blog/513444 注:在阅读本文前,请先阅读: Java EE 学习(5):IDEA + maven + spring 搭建 web(1) Java EE 学习(6):IDEA + maven + spring 搭建 web(2) 5 数据库配置 下面,就要通过一个简单的例子,来介绍 SpringMVC 如何集成 Spring Data JPA(由 Hibernate JPA 提供),来进行强大的数据库访问,并通过本章节

优化Web中的性能

优化Web中的性能 简介 web的优化就是一场阻止http请求最终访问到数据库的战争. 优化的方式就是加缓存,在各个节点加缓存. web请求的流程及节点 熟悉流程及节点,才能定位性能的问题.而且优化的顺序一般也是按请求的流程逐一优化.这里的流程只是做个概要,并不代表全面. 整个流程是以最快的方式让用户看到结果 定位的方法 思路是:把看不见的http,具体化.可视化. 定位是优化的前提.没有准确的定位就无法有效的解决问题. 浏览器 看整个请求的时间 看整个页面加载的时间 看页面加载的数据大小 看页