springboot整合servlet及filter还有listener

SpringBoot整合Servlet及Filter还有istener

整合Servlet

新建项目就不用说了可以参考前面helloworld的介绍
SpringBoot编写HelloWorld
其中目录结构也是相同的

整合Servlet有两种方式

  • 注解扫描
    新建MyServlet类代码如下:
package com.wbb.springbootservletdemo.demo.servlet;


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;

@WebServlet(name = "MyServlet",urlPatterns = "/myServlet")
public class MyServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.setContentType("text/html;charset=utf-8");

        resp.getWriter().write("整合servlet");

        System.out.println("整合servlet");
    }
}

在启动类的@SpringBootApplication下加上@ServletComponentScan
然后运行如图:
同样是在url输入对应信息localhost:8080/myServlet
springbootservlet运行.png
可以看到控制台也对应的输出了整合servlet的信息
至此第一种方案就完成了

  • 通过方法整合
    在servlet包下新建SecondServlet类:
    代码如下:
package com.wbb.springbootservletdemo.demo.servlet;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class SecondServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.setContentType("text/html;charset=utf-8");
        resp.getWriter().append("springboot整合servlet成功");
    }
}

这里就不需要写注解了
在对应的application启动类中增加一个方法方法上用@Bean
代码如下:

package com.wbb.springbootservletdemo.demo;

import com.wbb.springbootservletdemo.demo.servlet.SecondServlet;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.ServletComponentScan;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;

@SpringBootApplication
public class DemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }

    @Bean
    public ServletRegistrationBean getServlet(){
        ServletRegistrationBean bean=new ServletRegistrationBean(new SecondServlet());
        bean.addUrlMappings("/secondServlet");
        return bean;
    }

}

运行结果如图:
springboot整合servlet方法2.png

至此方法二也整合成功


整合Filter

方法与上面差不多

  • 第一种同样是注解方式
    新建filter包目录结构同上
    新建两个类第一个是第一种方法第二个后面写
    第一个MyFilter.java
    代码如下:
package com.wbb.springbootservletdemo.demo.filter;

import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;


@WebFilter(filterName="MyFilter",urlPatterns="/myFilter")
public class MyFilter implements Filter {

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {

    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        System.out.println("进入filter");
        filterChain.doFilter(servletRequest,servletResponse);
        System.out.println("离开filter");
    }

    @Override
    public void destroy() {

    }
}

同时在启动类的@SpringBootApplication下加上@ServletComponentScan
运行在网页输入url:localhost:8080/myFilter
在控制台输出:
filter方法一运行.png

  • 第二种方法注册
    这里我是接着servletlet写的后面listener也是在这个项目中写
    下面是SecondFilter类的代码:
package com.wbb.springbootservletdemo.demo.filter;

import javax.servlet.*;
import java.io.IOException;

public class SecondFilter implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {

    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        System.out.println("进入第二个Filter");
        filterChain.doFilter(servletRequest,servletResponse);
        System.out.println("离开第二个Filter");
    }

    @Override
    public void destroy() {

    }
}

然后是启动类代码:

package com.wbb.springbootservletdemo.demo;

import com.wbb.springbootservletdemo.demo.filter.SecondFilter;
import com.wbb.springbootservletdemo.demo.servlet.SecondServlet;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.boot.web.servlet.ServletComponentScan;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;

@SpringBootApplication
public class DemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }

    @Bean
    public ServletRegistrationBean getServlet(){
        ServletRegistrationBean bean=new ServletRegistrationBean(new SecondServlet());
        bean.addUrlMappings("/secondServlet");
        return bean;
    }
    @Bean
    public FilterRegistrationBean getFilter(){
        FilterRegistrationBean bean=new FilterRegistrationBean((new SecondFilter()));
        bean.addUrlPatterns("/secondFilter");
        return bean;
    }

}

运行后在网页url输入localhost:8080/secondFilter
运行结果:
filter方法二运行.png
至此filter两种方法整合完


整合Listener

同样是两种方法

  • 第一种就不用详细写了
    同样要在在启动类的@SpringBootApplication下加上@ServletComponentScan
    代码:
package com.wbb.demo.listener;

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

@WebListener
public class MyListener implements ServletContextListener {
    @Override
    public void contextInitialized(ServletContextEvent sce) {
        System.out.println("MyListener-init");
    }

    @Override
    public void contextDestroyed(ServletContextEvent sce) {

    }
}
  • 第二种
    启动类的代码
package com.wbb.demo;

import com.wbb.demo.filter.SecondFilter;
import com.wbb.demo.listener.SecondListener;
import com.wbb.demo.servlet.SecondServlet;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.boot.web.servlet.ServletComponentScan;
import org.springframework.boot.web.servlet.ServletListenerRegistrationBean;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;

@SpringBootApplication
public class DemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }

    @Bean
    public ServletListenerRegistrationBean getListener(){
        ServletListenerRegistrationBean<SecondListener> bean=new ServletListenerRegistrationBean<SecondListener>(new SecondListener());
        return bean;
    }

}

listener直接运行就行了,在控制台会输出在contextInitialized方法中的东西

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值