传统的Servlet在spring boot中怎么实现的?

本文主要内容:

1:springboot一些介绍

2:传统的servlete项目在spring boot项目中怎么实现的?web.xml、url-patterns怎么设置?

3:有几种实现方式?分别是什么?

4:代码位置

spring boot 三大特性

组件自动装配:webMVC、webFlux、JDBC等

嵌入式Web容器:Tomcat、Jetty以及undertow

生产准备特性:指标、健康检查、外部化部署等

组件自动装配:

激活自动装配注解:@EnableAutoConfiguration

配置:/META-INF/spring.factories

实现:XXXAutoConfiguration.

我们以spring-boot-autoconfigure的jar下spring.factories为示例:

可以看到key是接口后没是实现。实现就是XXXAutoConfiguration.

嵌入式web 容器:

Web Servlet容器:Tomcat、Jetty以及undertow

Web Reactive容器:Netty Web Server

生产准备特性:

指标:/actuator/metrices

健康检查:/actuator/health

外部化配置:/actuator/configprops

Web应用:

传统的Servlet应用

Servlet组件:Servlet、Filter、listener

Servlet注册到spring boot中:Servlet注解、Spring Bean、RegistrationBean

异步非阻塞:异步Servlet(web 3.0特效)、非阻塞Servlet(servlet 3.1特性)。

来源:凯哥Java(kaigejava)

www.kaigejava.com

传统Servelt应用:

一:添加pom依赖

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-web</artifactId>

</dependency>

二:Servlet组件讲解

我们先来回忆下使用Sevlet怎么写的:

1:写个类继承HttpServlet。然后重新doGet、doPost方法。如下图:

2:在web.xml文件中需要配置servlet-name、servlet-calss、servlete-mapping中需要配置url-pattern。如下图:

然后启动tomcat之后,在地址栏中输入xxx:xx/servlet/HelloWorld.

上面是Servlet的步骤。

在spring boot中,提倡使用注解。那么上面的servlet使用spring boot怎么使用?

spring boot没有web.xml怎么配置?访问url怎么配置?

请看下面代码:

@WebServlet(urlPatterns = "/servlet/HelloWorld")

public class MyServlet extends HttpServlet{

@Override

protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

resp.getWriter().write("my doGet method");

}

@Override

protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

resp.getWriter().write("my doPost method");

}

}

其中@WebServlet注解和UrlPatterns的功能同web.xml中<servlet-mapping>中的urlpattern.

我们在来看看启动类上添加:

@SpringBootApplication

@ServletComponentScan("com.kaigejava.web.servlet")

public class Springbootdemo1Application {

public static void main(String[] args) {

SpringApplication.run(Springbootdemo1Application.class, args);

}

}

其中的ServletComponentScan就是扫描servlet的。可以看做是web.xml中<servlet>标签下的<sevlet-class>。

两者对比:

启动项目,访问:

达到预期效果。说明传统的servlet在springboot项目中可以很好的兼容。

我们总结下:

SpringBoot中使用传统的Servlet。

实现方式:

创建一个类添加@WebServlet,继承HttpServlet,注册到spring boot容器中。

其中URL映射使用注解:@WebServlet(urlPatterns = "/servlet/HelloWorld")

将servlet注册到spring容器中使用注解:ServletComponentScan(basePackages=“com.kaigejava.web.servlet”)

我们知道Sevlete还有其他两个组件:Filter和Listener.

那么这两个组件在springboot中又分别使用哪些注解呢?

根据servlet注解我们可以看到是@webServlet.

所以,filter对应的就是@WebFilter、listener对应的就是@WebListener注解。

实现方式有三种方式:

第一种:使用servlet注解。如上面我们演示的@Webservlet注解。

其实就是@ServletComponentScan+@webServlet

或者+@WebFilter或者+@WebListener注解

方式二:使用spring注解

@Bean+Servlet(Filter\Listener)

方式三:使用RegistrationBean方法

ServletRegistrationBean

FilterRegistrationBean

ServletListenerRegistrationBean

以上三种都可以。

代码已发布到git上面。欢迎大家一起学习。

传统的Servlet在spring boot中怎么实现的?的更多相关文章

  1. Spring boot中使用servlet filter

    Spring boot中使用servlet filter liuyuhang原创,未经允许请勿转载! 在web项目中经常需要一些场景,如参数过滤防止sql注入,防止页面攻击,空参数矫正等, 也可以做成 ...

  2. spring boot中使用servlet、listener和filter

    spring boot中支持使用java Web三大组件(servlet.listener和filter),但是坑比较多,主要是spring boot内嵌tomcat和独立tomcat服务器有一些细节 ...

  3. 从零开始的Spring Boot(2、在Spring Boot中整合Servlet、Filter、Listener的方式)

    在Spring Boot中整合Servlet.Filter.Listener的方式 写在前面 从零开始的Spring Boot(1.搭建一个Spring Boot项目Hello World):http ...

  4. Spring boot中注册Servlet

    Spring boot中注册Servlet 如何在spring boot项目中注册Servlet呢? 如何在spring boot项目中注册Servlet呢? 由于没有web.xml,无法直接在xml ...

  5. Spring Boot中使用Servlet与Filter

    在Spring Boot中使用Servlet,根据Servlet注册方式的不同,有两种使用方式.若使用的是Servlet3.0+版本,则两种方式均可使用:若使用的是Servlet2.5版本,则只能使用 ...

  6. 解决spring boot中rest接口404,500等错误返回统一的json格式

    在开发rest接口时,我们往往会定义统一的返回格式,列如: { "status": true, "code": 200, "message" ...

  7. Spring Boot中Tomcat是怎么启动的

    Spring Boot一个非常突出的优点就是不需要我们额外再部署Servlet容器,它内置了多种容器的支持.我们可以通过配置来指定我们需要的容器. 本文以我们平时最常使用的容器Tomcat为列来介绍以 ...

  8. spring boot(三):Spring Boot中Redis的使用

    spring boot对常用的数据库支持外,对nosql 数据库也进行了封装自动化. redis介绍 Redis是目前业界使用最广泛的内存数据存储.相比memcached,Redis支持更丰富的数据结 ...

  9. Spring Boot中的注解

    文章来源:http://www.tuicool.com/articles/bQnMra 在Spring Boot中几乎可以完全弃用xml配置文件,本文的主题是分析常用的注解. Spring最开始是为了 ...

随机推荐

  1. python 发送邮件,并且带附件

    #!/usr/bin/pythonfrom email.mime.text import MIMETextfrom email.mime.multipart import MIMEMultiparti ...

  2. C#调用C++系列一:简单传值

    因为去实习的时候有一个小任务是C#想调用C++ opencv实现的一些处理,那我主要的想法就是将C++实现的OpenCV处理封装成dll库供C#调用,这里面还会涉及到一些托管和非托管的概念,我暂时的做 ...

  3. centos通过yum安装php

    1.添加php的yum软件仓库 sudo rpm -Uvh https://mirror.webtatic.com/yum/el6/latest.rpm 2.安装php相关软件,执行过程中全部选择ye ...

  4. Java 过滤器Filter,Java Filter 不拦截某些请求 Java 过滤器支持Ajax请求

    ================================ ©Copyright 蕃薯耀 2020-01-10 https://www.cnblogs.com/fanshuyao/ 一.Java ...

  5. PAT Advanced 1110 Complete Binary Tree (25) [完全⼆叉树]

    题目 Given a tree, you are supposed to tell if it is a complete binary tree. Input Specification: Each ...

  6. HCTF2018-admin

    记录一道比较有意思的题目,对于萌新来说能学到很多东西orz.. 三种解法: 1: flask session 伪造 2: unicode欺骗 3: 条件竞争 注册账户查看源码: 发现提示,根据提示和题 ...

  7. iOS 内购相关

    iOS 内购相关 下面总结一下过往订阅和内购的项目的代码方面的实现细节和注意事项,特别是掉单方面的处理. 后台的协议.商品ID.银行卡.内购类型.沙盒账号测试人员都由运营或者产品在苹果后台中申请处理. ...

  8. phpExcel查询数据库导出excel表

    <?php         require_once 'PHPExcel.php';       require_once 'PHPExcel/Writer/Excel5.php';    re ...

  9. 在storyboard中给控制器添加导航栏控制器和标签控制器

    1.选中目标控制器 2.选择xcode的工具栏中的"Editor"->"Embed in"->"Navigation Controller ...

  10. 探讨 Git 代码托管平台的若干问题 - 2019 版

    关于 Git 版本控制软件种类繁多,维基百科收录的最早的版本控制系统是 1972 年贝尔实验室开发的 Source Code Control System.1986 年 Concurrent Vers ...