传统的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. Mac 用终端(命令行)打开vscode编辑器

    1.打开控制面板(⇧⌘P) 2.输入 shell command 在提示里看到 Shell Command: Install ‘code’ command in PATH, 就可以了. 3.使用: c ...

  2. POJ 1942:Paths on a Grid

    Paths on a Grid Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 22918   Accepted: 5651 ...

  3. C++ 一般模板友元关系

    //一般模板友元关系 #include "stdafx.h" #include <iostream> using namespace std; template< ...

  4. 远程过程调用——RPC

    https://www.jianshu.com/p/5b90a4e70783 清晰明了

  5. 1.4CAD2017绘图基础

    1.新建(ctrl+n) 命令:new 回车——默认样板(acadiso.dwt) 2.打开(ctr+o) 3.保存(ctrl+S) 4.鼠标的应用: 左键:点击拖选等: 中间滚轮:a.滚动,放大缩小 ...

  6. Express+MySQL实现图片上传到服务器并把路径保存到数据库中

    demo准备:mysql5.7.20 express4.0 处理图片文件的中间件Multer 先搭建服务器并展示html页面 const express = require("express ...

  7. Java目录下文件夹的含义和运行机制

    Java安装目录下的各个文件夹的意义 >bin 放置Java所有的可执行文件 >include 一些C语言的头文件 >jre Java的运行环境 >lib Java的类库文件 ...

  8. 禁止网站F12和查看源码

    window.onload=function(){ document.onkeydown=function(){ var e=window.event||arguments[0]; if(e.keyC ...

  9. 201604-1 折点计数 Java

    思路: 这个题要小心考虑不全.左右两边都比这个数小 或者 左右两边都比这个数大 import java.util.Scanner; public class Main { public static ...

  10. Gradle project sync failed. Please fix your project and try again

    https://stackoverflow.com/questions/29808199/error-running-android-gradle-project-sync-failed-please ...