Listener监听器入门、手工整合Spring到自己的Servlet中、Maven打包依赖

1、前面已经学习了:自己写Servlet,自己写Filter。
现在学习:自己写Listener。套路其实都一样的(继承接口、重写方法;在web.xml中配置一下)。

web.xml中加入:

    <listener>
        <listener-class>com.mydev.MyListener</listener-class>
    </listener>  

这里写图片描述
(新建的几个文件,稍后会一一解释)
配置文件 web.xml 中的<listener-class> 对应其中的MyListener 类文件。

2、关于Listener不着急,下面看看如何手工整合Spring框架到我们自己写的Servlet。

使用maven下载Spring:

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.0.0.RELEASE</version>
        </dependency>

resourece项目资源目录下创建Spring框架的配置文件,比如我这里的mySpring.xml,代码如下:

<?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="myBean" class="com.mydev.MyBean">
        <constructor-arg index="0" value="0"/>
        <constructor-arg index="1" value="jack"/>
    </bean>

</beans>

我们配置了一个<bean>

这个<bean对应的是MyBean这个类,代码如下:


public class MyBean {
    private int id;
    private String name;


    public MyBean(int id, String name) {
        this.id = id;
        this.name = name;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

3、完成MyListener这个监听器类

import org.springframework.context.support.ClassPathXmlApplicationContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

public class MyListener implements ServletContextListener {

    public void contextInitialized(ServletContextEvent servletContextEvent) {
        // 使用配置文件的方式
        ClassPathXmlApplicationContext classPathXmlApplicationContext = new ClassPathXmlApplicationContext("mySpring.xml");

        //  设置一个属性
        servletContextEvent.getServletContext().setAttribute("spring",classPathXmlApplicationContext);
    }

    public void contextDestroyed(ServletContextEvent servletContextEvent) {

    }
}

读取我们的Spring框架配置文件,然后设置了一个名为spring的属性。

4、然后在自己写的Servlet里,获取监听器里设置的属性,然后获取 Bean。

MyServlet.java代码如下:

public class MyServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 获取监听器里设置的属性
        ClassPathXmlApplicationContext classPathXmlApplicationContext = (ClassPathXmlApplicationContext)req.getServletContext().getAttribute("spring");
        // 获取Bean
        MyBean myBean = classPathXmlApplicationContext.getBean("myBean",com.mydev.MyBean.class);


        // 把从Bean获取的值输出
        resp.getWriter().write(myBean.getName());
    }
}

从代码可以看出,请求之后,会输出MyBean类里的name属性的值。
这个name属性值,是在配置文件mySpring里配置好的。

4、到了这一步,以为编译一下,然后把编译之后的target目录下的classes文件夹复制到我们的tomcat站点里就可以了。其实还没有完,因为我们还要外部依赖(我们使用了Spring这个框架),我们需要使用maven把依赖打包一下。

使用maven打包依赖,需要一个插件,还是在pom.xml写上,先下载这个插件:

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-dependency-plugin</artifactId>
                <version>2.10</version>
                <executions>
                    <execution>
                        <id>copy-dependencies</id>
                        <phase>package</phase>
                        <goals>
                            <goal>copy-dependencies</goal>
                        </goals>
                        <configuration>
                            <outputDirectory>${project.build.directory}/lib</outputDirectory>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

然后进入项目根目录,执行:

 mvn package

这里写图片描述
我们把需要的依赖都打包到了lib 这个文件夹里。

5、把target目录下的classeslib 复制到 站点下:
这里写图片描述
(这一切搞定之后,我们开始测试,记得重启tomcat)

访问http://localhost:8080/myjavaweb/1.abc
经过Filter,然后到达Servlet。

会触发doGet()方法,在这个方法中,最后向页面输出Bean组件的属性(name属性)的值。

    <bean id="myBean" class="com.mydev.MyBean">
        <constructor-arg index="0" value="0"/>
        <constructor-arg index="1" value="jack"/>
    </bean>

这是Spring配置文件里,给MyBean属性配置的值。

我们用浏览器查看:
这里写图片描述

猜你喜欢

转载自blog.csdn.net/github_26672553/article/details/78988989