SpringBoot-三种方式创建Servlet、Listener、Filter

 

结构

Servlet

public class servlet_one extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("servlet_one_get");
        req.getSession().setAttribute("name","小明");
        resp.getWriter().append("servlet_one_get");
    }

}

public class servlet_two extends HttpServlet {

    @Override
    public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        req.setCharacterEncoding("UTF-8");
        resp.setContentType("text/html;charset=utf-8");
        Object name = req.getSession().getAttribute("name");
        System.out.println("servlet_two_get - session-name - "+name);
        resp.getWriter().append(String.valueOf(name));
    }

}

Listener

public class listener_one implements HttpSessionListener {

    @Override
    public void sessionCreated(HttpSessionEvent se) {
        System.out.println("listener_one-sessionCreated()");

    }

    @Override
    public void sessionDestroyed(HttpSessionEvent se) {
        System.out.println("listener_one-sessionDestroyed()");
    }
}

Filter

public class filter_one implements Filter {


    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println("filter_one-init()");
    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        System.out.println("filter_one-doFilter()");
        filterChain.doFilter(servletRequest,servletResponse);
    }

    @Override
    public void destroy() {
        System.out.println("filter_one-destroy()");
    }
}

public class filter_two implements Filter {


    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println("filter_two-init()");
    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        System.out.println("filter_two-doFilter()");
        filterChain.doFilter(servletRequest,servletResponse);
    }

    @Override
    public void destroy() {
        System.out.println("filter_two-destroy()");
    }
}

第一种方式@Bean

@SpringBootApplication
public class oneApp {

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

    @Bean
    public ServletRegistrationBean servlet_oneBean(){
        return new ServletRegistrationBean(new servlet_one(),"/servlet_one");
    }
    @Bean
    public ServletRegistrationBean servlet_twoBean(){
        return new ServletRegistrationBean(new servlet_two(),"/servlet_two");
    }

    
    @Bean
    public FilterRegistrationBean filter_oneBean(){
        return new FilterRegistrationBean(new filter_one(),servlet_oneBean(),servlet_twoBean());
    }
    @Bean
    public FilterRegistrationBean filter_twoBean(){
        return new FilterRegistrationBean(new filter_two(),servlet_oneBean(),servlet_twoBean());
    }


    @Bean
    public ServletListenerRegistrationBean listener_oneBean(){
        return new ServletListenerRegistrationBean(new listener_one());
    }

}

=========测试============

启动 filter init 初始化

请求http://localhost:8080/servlet_one      过滤 - servlet-get() - 监听

方式二 实现 ServletContextInitializer接口 重写onStartup()方法

1.将servlet,listener、filter 都交给ServletContext中

@SpringBootApplication
public class twoApp implements ServletContextInitializer
{


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

    @Override
    public void onStartup(ServletContext servletContext) throws ServletException {
        servletContext.addServlet("servlet_one", servlet_one.class).addMapping("/servlet_one2");
        servletContext.addServlet("servlet_two",servlet_two.class).addMapping("/servlet_two2");

        servletContext.addFilter("filter_one", filter_one.class)
                .addMappingForServletNames(EnumSet.of(DispatcherType.REQUEST), true, "servlet_one");
        servletContext.addFilter("filter_two", filter_two.class)
                .addMappingForUrlPatterns(EnumSet.of(DispatcherType.REQUEST), true, "/*");

        servletContext.addListener(listener_one.class);
    }
}

第三种方式 注解的方式@ServletComponentScan

1.启动类只需加上@ServletComponentScan注解就可以

@SpringBootApplication
@ServletComponentScan
public class threeApp  {
    public static void main(String[] args) {
        SpringApplication.run(threeApp.class,args);
    }
}

2.servlet、listener、filter也添加相应注解

@WebServlet(name = "servlet_one3" ,urlPatterns = "/servlet_one3")
public class servlet_one extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("servlet_one_get");
        req.getSession().setAttribute("name","小明");
        resp.getWriter().append("servlet_one_get");
    }

}


@WebServlet(name = "servlet_two3",urlPatterns = "/servlet_two3")
public class servlet_two extends HttpServlet {

    @Override
    public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        req.setCharacterEncoding("UTF-8");
        resp.setContentType("text/html;charset=utf-8");
        Object name = req.getSession().getAttribute("name");
        System.out.println("servlet_two_get - session-name - "+name);
        resp.getWriter().append(String.valueOf(name));
    }

}
/**
 * 监听器1
 */
@WebListener
public class listener_one implements HttpSessionListener {

    @Override
    public void sessionCreated(HttpSessionEvent se) {
        System.out.println("listener_one-sessionCreated()");

    }

    @Override
    public void sessionDestroyed(HttpSessionEvent se) {
        System.out.println("listener_one-sessionDestroyed()");
    }
}

 一种是根据ServletName进行过滤,也可以根据url进行过滤

/**
 * 过滤器1
 */
@WebFilter(servletNames = {"servlet_one3"})
public class filter_one implements Filter {
    
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println("filter_one-init()");
    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        System.out.println("filter_one-doFilter()");
        filterChain.doFilter(servletRequest,servletResponse);
    }

    @Override
    public void destroy() {
        System.out.println("filter_one-destroy()");
    }
}

/**
 * 过滤器2
 */
@WebFilter(urlPatterns = "/*")
public class filter_two implements Filter {


    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println("filter_two-init()");
    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        System.out.println("filter_two-doFilter()");
        filterChain.doFilter(servletRequest,servletResponse);
    }

    @Override
    public void destroy() {
        System.out.println("filter_two-destroy()");
    }
}

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值