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

当使用spring-Boot时,嵌入式Servlet容器通过扫描注解的方式注册Servlet、Filter和Servlet规范的所有监听器(如HttpSessionListener监听器)。 
Spring boot 的主 Servlet 为DispatcherServlet,其默认的url-pattern为“/”。也许我们在应用中还需要定义更多的Servlet,该如何使用SpringBoot来完成呢?

在spring boot中添加自己的Servlet有两种方法,代码注册Servlet和注解自动注册(Filter和Listener也是如此)。 
一、代码注册通过ServletRegistrationBean、 FilterRegistrationBean 和ServletListenerRegistrationBean 获得控制。 
也可以通过实现 ServletContextInitializer 接口直接注册。

二、在SpringBootApplication 上使用@ServletComponentScan注解后,Servlet、Filter、Listener 可以直接通过 @WebServlet、@WebFilter、@WebListener 注解自动注册,无需其他代码。

1.通过代码注册Servlet示例代码:

  1. package me.shijunjie.servlet;
  2.  
  3. import java.io.IOException;
  4. import java.io.PrintWriter;
  5.  
  6. import javax.servlet.ServletException;
  7. import javax.servlet.http.HttpServlet;
  8. import javax.servlet.http.HttpServletRequest;
  9. import javax.servlet.http.HttpServletResponse;
  10.  
  11. public class MyServlet1 extends HttpServlet {
  12. private static final long serialVersionUID = 1L;
  13.  
  14. @Override
  15. protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  16.  
  17. System.out.println(">>>>>>>>>>doGet()<<<<<<<<<<<");
  18.  
  19. doPost(req, resp);
  20.  
  21. }
  22.  
  23. @Override
  24. protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  25.  
  26. System.out.println(">>>>>>>>>>doPost()<<<<<<<<<<<");
  27.  
  28. resp.setContentType("text/html");
  29.  
  30. PrintWriter out = resp.getWriter();
  31.  
  32. out.println("<html>");
  33.  
  34. out.println("<head>");
  35.  
  36. out.println("<title>HelloWorld</title>");
  37.  
  38. out.println("</head>");
  39.  
  40. out.println("<body>");
  41.  
  42. out.println("<h1>这是:MyServlet1</h1>");
  43.  
  44. out.println("</body>");
  45.  
  46. out.println("</html>");
  47.  
  48. }
  49. }
  1. package me.shijunjie.testspringboot2;
  2.  
  3. import org.springframework.boot.SpringApplication;
  4. import org.springframework.boot.autoconfigure.SpringBootApplication;
  5. import org.springframework.boot.context.embedded.ServletRegistrationBean;
  6. import org.springframework.context.annotation.Bean;
  7.  
  8. import me.shijunjie.servlet.MyServlet1;
  9.  
  10. @SpringBootApplication
  11. public class App
  12. {
  13.  
  14. /**
  15. * 注册Servlet.不需要添加注解:@ServletComponentScan
  16. * @return
  17. */
  18. @Bean
  19. public ServletRegistrationBean myServlet1(){
  20.  
  21. return new ServletRegistrationBean(new MyServlet1(),"/myServlet/*");
  22. }
  23.  
  24. public static void main( String[] args )
  25. {
  26. SpringApplication.run(App.class, args);
  27. }
  28. }

测试

2.使用注解注册Servlet示例代码 添加@WebServlet注解

  1. package me.shijunjie.servlet;
  2.  
  3. import java.io.IOException;
  4. import java.io.PrintWriter;
  5.  
  6. import javax.servlet.ServletException;
  7. import javax.servlet.annotation.WebServlet;
  8. import javax.servlet.http.HttpServlet;
  9. import javax.servlet.http.HttpServletRequest;
  10. import javax.servlet.http.HttpServletResponse;
  11.  
  12. @WebServlet(urlPatterns="/myServlet2/*",description="Servlet的说明")
  13. public class MyServlet2 extends HttpServlet {
  14. private static final long serialVersionUID = 1L;
  15.  
  16. @Override
  17. protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  18. System.out.println(">>>>>>>>>>doGet()<<<<<<<<<<<");
  19. doPost(req, resp);
  20. }
  21.  
  22. @Override
  23. protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  24.  
  25. System.out.println(">>>>>>>>>>doPost()<<<<<<<<<<<");
  26.  
  27. resp.setContentType("text/html");
  28.  
  29. PrintWriter out = resp.getWriter();
  30.  
  31. out.println("<html>");
  32.  
  33. out.println("<head>");
  34.  
  35. out.println("<title>HelloWorld</title>");
  36.  
  37. out.println("</head>");
  38.  
  39. out.println("<body>");
  40.  
  41. out.println("<h1>这是:MyServlet2</h1>");
  42.  
  43. out.println("</body>");
  44.  
  45. out.println("</html>");
  46.  
  47. }
  48. }

添加@ServletComponentScan注解

  1. package me.shijunjie.testspringboot2;
  2.  
  3. import org.springframework.boot.SpringApplication;
  4. import org.springframework.boot.autoconfigure.SpringBootApplication;
  5. import org.springframework.boot.web.servlet.ServletComponentScan;
  6.  
  7. /**
  8. * Hello world!
  9. *
  10. */
  11. @SpringBootApplication
  12. @ServletComponentScan("me.shijunjie.servlet")
  13. public class App
  14. {
  15.  
  16. /* *//**
  17. * 注册Servlet.不需要添加注解:@ServletComponentScan
  18. * @return
  19. *//*
  20. @Bean
  21. public ServletRegistrationBean myServlet1(){
  22.  
  23. return new ServletRegistrationBean(new MyServlet1(),"/myServlet/*");
  24. }*/
  25.  
  26. public static void main( String[] args )
  27. {
  28. SpringApplication.run(App.class, args);
  29. }
  30. }

测试

[十二]SpringBoot 之 servlet的更多相关文章

  1. 十二.spring-boot使用spring-boot-freemarker

    ①.在springMVC中:它代表着view层组件 ②.为什么使用freemarker:简单容易学.逻辑分明 ③.freemarker优点:它不依赖servlet.网络或者web环境 一.创建一个ma ...

  2. springboot(十二) SpringBoot 性能优化

    代码地址:https://github.com/showkawa/springBoot_2017/tree/master/spb-demo springboot优化主要有三类优化:1.包扫描优化 2. ...

  3. java痛苦学习之路[十二]JSON+ajax+Servlet JSON数据转换和传递

    1.首先client须要引入 jquery-1.11.1.js 2.其次javawebproject里面须要引入jar包  [commons-beanutils-1.8.0.jar.commons-c ...

  4. springboot(二十二)spring-boot使用AOP

    https://blog.csdn.net/w05980598/article/details/79053209

  5. SpringBoot第十二集:度量指标监控与异步调用(2020最新最易懂)

    SpringBoot第十二集:度量指标监控与异步调用(2020最新最易懂) Spring Boot Actuator是spring boot项目一个监控模块,提供了很多原生的端点,包含了对应用系统的自 ...

  6. 【使用篇二】SpringBoot整合Servlet(1)

    两种方式: 通过注解扫描完成 Servlet组件的注册 通过方法完成 Servlet组件的注册 一.通过注解扫描完成 Servlet 组件的注册 1. 编写Servlet类 /** * SpringB ...

  7. (二十二)SpringBoot之使用Druid连接池以及SQL监控和spring监控

    一.引入maven依赖 <dependencies> <dependency> <groupId>org.springframework.boot</grou ...

  8. SpringBoot系列(十二)过滤器配置详解

    SpringBoot(十二)过滤器详解 往期精彩推荐 SpringBoot系列(一)idea新建Springboot项目 SpringBoot系列(二)入门知识 springBoot系列(三)配置文件 ...

  9. springboot源码解析-管中窥豹系列之BeanPostProcessor(十二)

    一.前言 Springboot源码解析是一件大工程,逐行逐句的去研究代码,会很枯燥,也不容易坚持下去. 我们不追求大而全,而是试着每次去研究一个小知识点,最终聚沙成塔,这就是我们的springboot ...

随机推荐

  1. 1.Delphi Rest后台+MUI前台开发App前言

    尽管不是专业的程序猿,但是对Delphi的喜爱已经10多年了.一直以来用Delphi开发一些小应用若干个,同时用Delphi给朋友开发一些中小型的业务平台也有几个.可以说Delphi对于数据库的操作, ...

  2. POJ2513_Colored Sticks_KEY

    题目传送门 题目大意:给你若干根木棍,每根木棍有前后两种颜色,连接两根木棍需要前后颜色相同,求能否将所有木棍连接在一起. Solution: 不要将木棍看成点,将颜色看成点. 其实就是求是否存在欧拉路 ...

  3. python全栈开发- 前⽅⾼能-迭代器

    python_day_12 今日主要内容 1, 函数名的应用,第一类对象 函数名可以像变量一样进行使用 1.赋值 2.作为list元素 3.作为参数 4.作为返回值 2, 闭包 内部函数访问外部函数的 ...

  4. 学习HTML 第一节.小试牛刀

    此贴并非教学,主要是自学笔记,所述内容只是些许个人学习心得的记录和备查积累,难以保证观点正确,也不一定能坚持完成. 如不幸到访,可能耽误您的时间,也难及时回复,贴主先此致歉.如偶有所得,相逢有缘,幸甚 ...

  5. Appium+python 自动发送邮件(2)(转)

    (原文:https://www.cnblogs.com/fancy0158/p/10056418.html) 移动端执行完测试case之后,通过邮件自动发送测试报告.大体流程如下: 1.通过unitt ...

  6. perf + 火焰图用法 小结

    要对新服务做性能测试,分析代码热点,初识perf,做下总结 perf + 火焰图用法 perf简介 Perf (Performance Event), Linux 系统原生提供的性能分析工具, 会返回 ...

  7. Vue学习计划基础笔记(三)-class与style绑定,条件渲染和列表渲染

    Class与style绑定.条件渲染和列表渲染 目标: 熟练使用class与style绑定的多种方式 熟悉v-if与v-for的用法,以及v-if和v-for一起使用的注意事项 class与style ...

  8. 用Micro:bit做床头灯

    这是一个非常简单的项目,给孩子们介绍感应和控制,使用光敏电阻LDR作为光线传感器和床头灯的LED. 这也介绍了模拟输入的概念.数字输入为ON或OFF.只有0和1两种可能的条件.仿真输入是一系列可能值中 ...

  9. Siki_Unity_3-16_3D数学基础

    Unity 3-16 3D数学基础 任务0-1:课程介绍 课程大纲: 1. 3D数学介绍 2. Unity中的几种坐标系: 全局坐标系.屏幕坐标系等 坐标系间的坐标转换:比如屏幕坐标转换到世界坐标 3 ...

  10. gevent协程、select IO多路复用、socketserver模块 改造多用户FTP程序例子

    原多线程版FTP程序:http://www.cnblogs.com/linzetong/p/8290378.html 只需要在原来的代码基础上稍作修改: 一.gevent协程版本 1. 导入geven ...