文档章节

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

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

一、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);
	}
}

 

本文转载自:http://www.roncoo.com/

共有 人打赏支持
哎小艾
粉丝 12
博文 315
码字总数 161800
作品 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
297
0
Spring Boot(1)——开发你的第一款Spring Boot应用(Edition1)

Spring Boot(1)——开发你的第一款Spring Boot应用(Edition1) 准备工作: java:java 8 或者 java 9; Spring框架:5.0.8.RELEASE或以上; Maven 3.2+ 或 Gradle 4。 开发步骤: im...

梁桦
08/11
0
0
涨姿势:Spring Boot 2.x 启动全过程源码分析

上篇《Spring Boot 2.x 启动全过程源码分析(一)入口类剖析》我们分析了 Spring Boot 入口类 SpringApplication 的源码,并知道了其构造原理,这篇我们继续往下面分析其核心 run 方法。 [t...

Java技术栈
昨天
0
0
Spring、Spring Boot与Spring MVC

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

临江仙卜算子
05/08
0
2
Spring Boot 2.0 新特性解读

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

bjweimengshu
04/13
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

OSChina 周三乱弹 —— 我居然在 osc 里追剧

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @舆情风控小组 :分享王菲的单曲《笑忘书》 《笑忘书》- 王菲 手机党少年们想听歌,请使劲儿戳(这里) @艾尔库鲁斯:如果给大家一个选择的机...

小小编辑
37分钟前
45
4
rabbitMq的客户端使用笔记

1、channel声明队列的queueDeclare方法的参数解析 durable: 是否持久化, 队列的声明默认是存放到内存中的,如果rabbitmq重启会丢失,如果想重启之后还存在就要使队列持久化,保存到Erlang自...

DemonsI
45分钟前
0
0
“全新” 编程语言 Julia开箱体验

本文共 851字,阅读大约需要 3分钟 ! 概 述 Julia 是一个 “全新”的高性能动态编程语言,前两天迎来了其 1.0 正式版的重大更新。Julia集 Python、C、R、Ruby 之所长,感觉就像一种脚本语言...

CodeSheep
今天
11
0
软件自动化测试初学者忠告

题外话 测试入门 很多受过高等教育的大学生经常问要不要去报测试培训班来入门测试。 答案是否。 高等教育的合格毕业生要具备自学能力,如果你不具备自学能力,要好好地反省一下,为什么自己受...

python测试开发人工智能安全
今天
5
0
java并发备忘

不安全的“先检查后执行”,代码形式如下: if(条件满足){ //这里容易出现线程安全问题//doSomething}else{//doOther} 读取-修改-写入 原子操作:使用CAS技术,即首先从V中读取...

Funcy1122
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部