文档章节

Spring Boot基础教程——web 应用开发-Servlets, Filters, listeners

哎小艾
 哎小艾
发布于 2017/06/04 12:39
字数 587
阅读 20
收藏 1
点赞 0
评论 0

一、Web 开发使用 Controller 基本上可以完成大部分需求, 但是我们还可能会用到 Servlet、 Filter、Listener 等等。


二、在 spring boot 中的三种实现方式
方法一: 通过注册 ServletRegistrationBean、 FilterRegistrationBean 和ServletListenerRegistrationBean 获得控制。

1、自定义servlet

/**
* 自定义 servlet
*
* @author wujing
*/
public class CustomServlet extends HttpServlet {
   /**
   *
   */
   private static final long serialVersionUID = 1L;

   @Override
   protected void doGet(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
       System.out.println("servlet get method");
       doPost(request, response);
   }

   @Override
   protected void doPost(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
       System.out.println("servlet post method");
       response.getWriter().write("hello world");
   }
}

2、自定义filter

/**
   * 自定义 filter
   *
   * @author wujing
   */
public class CustomFilter implements Filter {
   @Override
   public void init(FilterConfig filterConfig) throws ServletException {
      System.out.println("init filter");
  }

  @Override
  public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
  throws IOException, ServletException {
     System.out.println("do filter");
  chain.doFilter(request, response);
  }

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

3、自定义listener

/**
 * 自定义 listener
 *
 * @author wujing
 */
public class CustomListener implements ServletContextListener {
 @Override
 public void contextInitialized(ServletContextEvent sce) {
    System.out.println("contextInitialized");
 }

 @Override
 public void contextDestroyed(ServletContextEvent sce) {
    System.out.println("contextDestroyed");
 }
}

4、在启动类里面注册bean

@Bean
public ServletRegistrationBean servletRegistrationBean() {
   return new ServletRegistrationBean(new CustomServlet(), "/roncoo");
}

@Bean
public FilterRegistrationBean filterRegistrationBean() {
   //return new FilterRegistrationBean(new CustomFilter(), servletRegistrationBean());表示仅对/roncoo进行拦截;return new FilterRegistrationBean(new CustomFilter());表示对所有请求进行拦截
   return new FilterRegistrationBean(new CustomFilter(), servletRegistrationBean());
}

@Bean
public ServletListenerRegistrationBean<CustomListener> servletListenerRegistrationBean() {
   return new ServletListenerRegistrationBean<CustomListener>(new CustomListener());
}

方法二:启动类通过实现 ServletContextInitializer 接口直接注册

implements ServletContextInitializer {
   @Override
   public void onStartup(ServletContext servletContext) throws
   ServletException {
   servletContext.addServlet("customServlet", new CustomServlet()).addMapping("/roncoo");
   servletContext.addFilter("customFilter", new
   CustomFilter()).addMappingForServletNames(EnumSet.of(DispatcherType.REQUEST), true,     "customServlet");
   servletContext.addListener(new CustomListener());
}


方法三: 在 SpringBootApplication 上使用@ServletComponentScan 注解后,直接通过@WebServlet、@WebFilter、 @WebListener 注解自动注册

1、自定义servlet

import java.io.IOException;

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

/**
 * 自定义servlet
 * 
 * @author wujing
 */
@WebServlet(name = "customServlet", urlPatterns = "/roncoo")
public class CustomServlet extends HttpServlet {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	@Override
	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		System.out.println("servlet get method");
		doPost(request, response);
	}

	@Override
	protected void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		System.out.println("servlet post method");
		response.getWriter().write("hello world");
		response.flushBuffer();
	}

}

2、自定义filter

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;

/**
 * @author wujing
 */
// /*表示对所有请求进行拦截  /roncoo 表示仅对该请求拦截
@WebFilter(filterName = "customFilter", urlPatterns = "/*")
public class CustomFilter implements Filter {

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

	@Override
	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
			throws IOException, ServletException {
		System.out.println("do filter");
		chain.doFilter(request, response);
	}

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

}

3、自定义listener

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

/**
 * @author wujing
 */
@WebListener
public class CustomListener implements ServletContextListener {

	@Override
	public void contextInitialized(ServletContextEvent sce) {
		System.out.println("contextInitialized");
	}

	@Override
	public void contextDestroyed(ServletContextEvent sce) {
		System.out.println("contextDestroyed");
	}

}

4、启动类

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.ServletComponentScan;

@ServletComponentScan
@SpringBootApplication
public class SpringBootDemo103Application {

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

 

© 著作权归作者所有

共有 人打赏支持
哎小艾
粉丝 11
博文 191
码字总数 149558
作品 0
深圳
程序员
转Spring Boot 教程系列学习

Spring Boot基础教程1-Spring Tool Suite工具的安装 Spring Boot基础教程2-RESTfull API简单项目的快速搭建 Spring Boot基础教程3-配置文件详解:Properties和YAML Spring Boot基础教程4-配置...

小花卷juan ⋅ 2017/06/14 ⋅ 0

Spring、Spring Boot与Spring MVC

总论 Spring框架就像一个家族,有众多衍生产品例如boot、security、jpa等等。但他们的基础都是Spring的ioc和aop。ioc提供了依赖注入的容器,aop解决了面向横切面的编程;然后在此二者的基础上...

临江仙卜算子 ⋅ 05/08 ⋅ 2

Spring Boot 2.0 新特性解读

点击上方“程序员小灰”,选择“置顶公众号” 有趣有内涵的文章第一时间送达! 本文转载自公众号 InfoQ 作者|翟永超编辑|郭蕾Spring Boot 2.0 来啦,有哪些新特性?升级吗?写在前面 北京时...

bjweimengshu ⋅ 04/13 ⋅ 0

5分钟构建spring web mvc REST风格HelloWorld

当然写本文的目的不是为了速度,只是表明现在构建一个Spring web mvc Rest风格的HelloWorld应用会很简单。不过如果看过Spring Boot这个项目,可能只需要最多3分钟就能构建一个简单的Rest风格...

黄金小猪2号 ⋅ 2014/01/07 ⋅ 2

Spring Boot 2.0——SpringApplication 深入探索

前言 在 Spring Boot 项目的启动类中常见代码如下: 其中也就两个比较引人注意的地方: 对于第一个注解 ,我已经在博客 Spring Boot 2.0系列文章(六):Spring Boot 2.0中SpringBootApplicati...

Java-老刘 ⋅ 05/03 ⋅ 0

Spring Boot干货系列:(七)默认日志logback配置解析

转载自:点击打开链接 前言 今天来介绍下Spring Boot如何配置日志logback,我刚学习的时候,是带着下面几个问题来查资料的,你呢 如何引入日志? 日志输出格式以及输出方式如何配置? 代码中如...

u012843873 ⋅ 04/23 ⋅ 0

spring boot 2.0 源码分析(三)

通过上一章的源码分析,我们知道了spring boot里面的listeners到底是什么(META-INF/spring.factories定义的资源的实例),以及它是创建和启动的,今天我们继续深入分析一下SpringApplicati...

java高级架构牛人 ⋅ 06/05 ⋅ 0

微服务架构 spring boot 那些最基础的知识点

一、创建SpringBoot项目 概念 Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再...

烂猪皮 ⋅ 05/09 ⋅ 0

Spring Boot 2.0.0参考手册_中英文对照_Part IV_23

文章作者:Tyan 博客:noahsnail.com | CSDN | 简书 Part IV. Spring Boot features This section dives into the details of Spring Boot. Here you can learn about the key features that......

quincuntial ⋅ 2016/11/17 ⋅ 0

Spring Boot 启动过程分析

1. Spring Boot 入口——main方法 从上面代码可以看出,Annotation定义(@SpringBootApplication)和类定义(SpringApplication.run)最为耀眼,所以分析 Spring Boot 启动过程,我们就从这两...

徐志毅 ⋅ 05/27 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Spring Boot整合模板引擎thymeleaf

项目结构 引入依赖pom.xml <!-- 引入 thymeleaf 模板依赖 --><dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId......

yysue ⋅ 18分钟前 ⋅ 0

ConstraintLayout使用解析

AndroidStudio3.0创建Project默认的布局就是ConstraintLayout。 AndroidStudio3.0前的可以自己修改,使用ConstraintLayout。 为了要使用ConstraintLayout,我们需要在app/build.gradle文件中...

_OUTMAN_ ⋅ 30分钟前 ⋅ 0

OSChina 周三乱弹 —— 这样的女人私生活太混乱了

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @ 胖达panda :你经历过体验到人生的大起大落吗?我一朋友在10秒内体验了,哈哈。@小小编辑 请点一首《almost lover》送给他。 《almost love...

小小编辑 ⋅ 今天 ⋅ 9

自己动手写一个单链表

文章有不当之处,欢迎指正,如果喜欢微信阅读,你也可以关注我的微信公众号:好好学java,获取优质学习资源。 一、概述 单向链表(单链表)是链表的一种,其特点是链表的链接方向是单向的,对...

公众号_好好学java ⋅ 今天 ⋅ 0

Centos7重置Mysql 8.0.1 root 密码

问题产生背景: 安装完 最新版的 mysql8.0.1后忘记了密码,向重置root密码;找了网上好多资料都不尽相同,根据自己的问题总结如下: 第一步:修改配置文件免密码登录mysql vim /etc/my.cnf 1...

豆花饭烧土豆 ⋅ 今天 ⋅ 0

熊掌号收录比例对于网站原创数据排名的影响[图]

从去年下半年开始,我在写博客了,因为我觉得业余写写博客也还是很不错的,但是从2017年下半年开始,百度已经推出了原创保护功能和熊掌号平台,为此,我也提交了不少以前的老数据,而这些历史...

原创小博客 ⋅ 今天 ⋅ 0

LVM讲解、磁盘故障小案例

LVM LVM就是动态卷管理,可以将多个硬盘和硬盘分区做成一个逻辑卷,并把这个逻辑卷作为一个整体来统一管理,动态对分区进行扩缩空间大小,安全快捷方便管理。 1.新建分区,更改类型为8e 即L...

蛋黄Yolks ⋅ 今天 ⋅ 0

Hadoop Yarn调度器的选择和使用

一、引言 Yarn在Hadoop的生态系统中担任了资源管理和任务调度的角色。在讨论其构造器之前先简单了解一下Yarn的架构。 上图是Yarn的基本架构,其中ResourceManager是整个架构的核心组件,它负...

p柯西 ⋅ 今天 ⋅ 0

uWSGI + Django @ Ubuntu

创建 Django App Project 创建后, 可以看到路径下有一个wsgi.py的问题 uWSGI运行 直接命令行运行 利用如下命令, 可直接访问 uwsgi --http :8080 --wsgi-file dj/wsgi.py 配置文件 & 运行 [u...

袁祾 ⋅ 今天 ⋅ 0

JVM堆的理解

在JVM中,我们经常提到的就是堆了,堆确实很重要,其实,除了堆之外,还有几个重要的模块,看下图: 大 多数情况下,我们并不需要关心JVM的底层,但是如果了解它的话,对于我们系统调优是非常...

不羁之后 ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部