模拟Spring如何在WEB中运行

Spring在web中配置和普通的Java程序中有所区别,总结一下主要表现在以下几个方面:

①jar包不同,需要引入两个web的jar包

②需要考虑IOC容器创建的时间

非 WEB 应用在 main 方法中直接创建

在web应用中为了保证spring的运行,所以必须在程序刚在容器中启动时就必须创建IOC容器,这样的时间人为不好把握,我们可以通过Listener来监听程序的运行,保证在刚开始时就创建,具体采用的是

创建一个实现ServletContextListener接口的类,并在重写的contextInitialized(ServletContextEvent sce)方法中创建IOC容器,创建了如何让其他的组件来访问可以通过把IOC放入servletContext的一个域属性中,这样其他组件就可以直接通过servlet.getAttribute()来取得。具体代码如下:

package com.marry.spring.struts2.listeners; /**
 * Created by Administrator on 2016/8/26.
 */

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

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

@WebListener()
public class SpringServletContextListener implements ServletContextListener {

    // Public constructor is required by servlet spec
    public SpringServletContextListener() {
    }

    // -------------------------------------------------------
    // ServletContextListener implementation
    // -------------------------------------------------------
    public void contextInitialized(ServletContextEvent sce) {

//        1获取spring配置文件的名称
        ServletContext servletContext = sce.getServletContext();
        String config = servletContext.getInitParameter("ConfigLocation");
//1.创建IOC容器
        ApplicationContext ctx = new ClassPathXmlApplicationContext(config);
//        2.将IOC容器放入servletContext一个属性中
        servletContext.setAttribute("applicationContext",ctx);
    }

    public void contextDestroyed(ServletContextEvent sce) {
      /* This method is invoked when the Servlet Context
         (the Web application) is undeployed or
         Application Server shuts down.
      */
    }
}

相应的需要在web.xml文件中配置

<?xml version="1.0" encoding="UTF-8"?>
<web-app 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_2_5.xsd" version="2.5">

    <!--配置spring配置文件的名称和位置-->
    <context-param>
        <param-name>ConfigLocation</param-name>
        <param-value>applicationContext.xml</param-value>
    </context-param>

    <!--启动IOC容器的servletContextListener-->
    <listener>
        <listener-class>com.marry.spring.struts2.listeners.SpringServletContextListener</listener-class>
    </listener>
    <servlet>
        <servlet-name>TestServlet</servlet-name>
        <servlet-class>com.marry.spring.struts2.servlets.testServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>TestServlet</servlet-name>
        <url-pattern>/TestServlet</url-pattern>
    </servlet-mapping>
</web-app>

为检验成果,我们可以创建一个类并配置bean

package com.marry.spring.struts2.beans;

/**
 * Created by Administrator on 2016/8/26.
 */
public class Person {
    private String username;

    public void setUsername(String username) {
        this.username = username;
    }

    public void hello(){
        System.out.println("my name is:"+username);
    }
}
<?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="person" class="com.marry.spring.struts2.beans.Person">
        <property name="username" value="malin"/>
    </bean>
</beans>

创建一个servlet进行测试

package com.marry.spring.struts2.servlets;

import com.marry.spring.struts2.beans.Person;
import org.springframework.context.ApplicationContext;

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 java.io.IOException;

/**
 * Created by Administrator on 2016/8/26.
 */
@WebServlet(name = "testServlet")
public class testServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//            1.从application域对象中获取IOC容器
        ServletContext servletContext=getServletContext();
        ApplicationContext ctx= (ApplicationContext) servletContext.getAttribute("applicationContext");
//        2.从IOC容器中获取需要的bean
        Person person= (Person) ctx.getBean("person");
        person.hello();
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
             doPost(request,response);
    }
}
时间: 2024-11-07 12:05:16

模拟Spring如何在WEB中运行的相关文章

Spring 如何在 WEB 应用中使用

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#contextInitialized

[转帖]如何在VirtualBox中运行macOS Catalina Beta版本

如何在VirtualBox中运行macOS Catalina Beta版本 secist2019-08-03共2179人围观系统安全 https://www.freebuf.com/articles/system/208917.html 晚上尝试一下. 本内容是关于如何在Linux上的VirtualBox中运行macOS Catalina Beta版的简短指南. 在开始之前你需要做以下准备: Linux x86_64(我使用的是Mint 19.1)英特尔酷睿CPU,不少于8 GB的内存和一个不错

如何在CocosCodeIDE中运行学习js-tests

我想对于每个Cocos2d游戏开发者来说,js-tests一直都是学习和参考的宝贵资源,也是最权威的指导教程.而,我们知道,CocosCodeIDE是官方推荐的一款强有力的IDE,其功能之强大,之便捷是其他IDE所无法比拟的.那么如何将二者组合在一起,为我们的学习提供帮助呢?本篇博客将带你走进他们的世界. 一.了解CocosCodeIDE和js-tests CocosCodeIDE:官网推出的一款强大的IDE,基于Eclipse改制而成.其主要特色在于两个方面: 便捷实用: CocosCodeI

如何在linux中运行sql文件

1.在linux中进入sql命令行 mysql -u root -p   输入密码 2.假设home下面有a.sql文件 先得use databasename,要不会报错 “No Database Selected” 然后source /home/a.sql 记得home前面要有 / 要不会报错 不能打开这个文件的. ---------------------------------------- 还有一个更好的方法: 使用navicat来连接linux下的mysql数据库 然后再navicat

如何在android中运行C语言程序

问题阐述: 本人使用mini6410开发了一个sqlite数据库的程序,在mini6410的linux系统下已经能够成功运行了.因为Android使用的也是linux内核,所以我想当然的认为按照同样的方法将程序移植到mini6410的android系统中也可以成功运行,但是当我运行程序的时候却提示我不能找到可执行文件(xlisten-arm是交叉编译出来的可执行文件): / # ./xlisten-arm/system/bin/sh: ./xlisten-arm: not found 1.探索:

如何在 Gradle 中运行 Groovy 的 主类以及测试类

完整的Gradle小项目:密码管理集中化 下面是配置范例 build.gradle: apply plugin: 'groovy' repositories { mavenLocal()     mavenCentral() } dependencies {     compile 'org.codehaus.groovy:groovy-all:2.3.7' compile 'org.apache.ant:ant:1.9.4'     testCompile 'junit:junit:4.11'

如何在cmd中运行.py文件

C:\Users\mf>cd C:\Program Files\Python36C:\Program Files\Python36>python const.py 切换到.py文件所在目录

在sublime中运行python

最近sublime越来越火了,甚至大有赶超经典编辑器vim的趋势. 如何在sublime中运行python脚本呢? STEP 0.首先要到python官网下载安装python 推荐安装python3 STEP 1.安装插件 按ctrl+shift+p,在弹出的文本框中输入install package,回车.稍等就会弹出插件管理器(类似linux下的software center) STEP 2.安装如下插件: pylinter python PEP8 Autoformat python 3 S

在apache中运行 cgi程序

cgi 就是网站中各种后台的程序,该程序可以通过网页运行,cgi可以通过C编写,也可以通过shell,python编写 如何在apache中运行各种cgi程序,例如shell perl等程序 1.在apache的主配置文件httpd.conf 中添加 Scriptalias /cgi  "/usr/local/httpd/cgi-bin/" 然后重启 httpd service httpd restart 2.准备一个cgi程序: vi /usr/local/httpd/cgi-bin