传统的Servlet在spring boot中怎么实现的?
传统的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中怎么实现的?的更多相关文章
- Spring boot中使用servlet filter
Spring boot中使用servlet filter liuyuhang原创,未经允许请勿转载! 在web项目中经常需要一些场景,如参数过滤防止sql注入,防止页面攻击,空参数矫正等, 也可以做成 ...
- spring boot中使用servlet、listener和filter
spring boot中支持使用java Web三大组件(servlet.listener和filter),但是坑比较多,主要是spring boot内嵌tomcat和独立tomcat服务器有一些细节 ...
- 从零开始的Spring Boot(2、在Spring Boot中整合Servlet、Filter、Listener的方式)
在Spring Boot中整合Servlet.Filter.Listener的方式 写在前面 从零开始的Spring Boot(1.搭建一个Spring Boot项目Hello World):http ...
- Spring boot中注册Servlet
Spring boot中注册Servlet 如何在spring boot项目中注册Servlet呢? 如何在spring boot项目中注册Servlet呢? 由于没有web.xml,无法直接在xml ...
- Spring Boot中使用Servlet与Filter
在Spring Boot中使用Servlet,根据Servlet注册方式的不同,有两种使用方式.若使用的是Servlet3.0+版本,则两种方式均可使用:若使用的是Servlet2.5版本,则只能使用 ...
- 解决spring boot中rest接口404,500等错误返回统一的json格式
在开发rest接口时,我们往往会定义统一的返回格式,列如: { "status": true, "code": 200, "message" ...
- Spring Boot中Tomcat是怎么启动的
Spring Boot一个非常突出的优点就是不需要我们额外再部署Servlet容器,它内置了多种容器的支持.我们可以通过配置来指定我们需要的容器. 本文以我们平时最常使用的容器Tomcat为列来介绍以 ...
- spring boot(三):Spring Boot中Redis的使用
spring boot对常用的数据库支持外,对nosql 数据库也进行了封装自动化. redis介绍 Redis是目前业界使用最广泛的内存数据存储.相比memcached,Redis支持更丰富的数据结 ...
- Spring Boot中的注解
文章来源:http://www.tuicool.com/articles/bQnMra 在Spring Boot中几乎可以完全弃用xml配置文件,本文的主题是分析常用的注解. Spring最开始是为了 ...
随机推荐
- Mac 用终端(命令行)打开vscode编辑器
1.打开控制面板(⇧⌘P) 2.输入 shell command 在提示里看到 Shell Command: Install ‘code’ command in PATH, 就可以了. 3.使用: c ...
- POJ 1942:Paths on a Grid
Paths on a Grid Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 22918 Accepted: 5651 ...
- C++ 一般模板友元关系
//一般模板友元关系 #include "stdafx.h" #include <iostream> using namespace std; template< ...
- 远程过程调用——RPC
https://www.jianshu.com/p/5b90a4e70783 清晰明了
- 1.4CAD2017绘图基础
1.新建(ctrl+n) 命令:new 回车——默认样板(acadiso.dwt) 2.打开(ctr+o) 3.保存(ctrl+S) 4.鼠标的应用: 左键:点击拖选等: 中间滚轮:a.滚动,放大缩小 ...
- Express+MySQL实现图片上传到服务器并把路径保存到数据库中
demo准备:mysql5.7.20 express4.0 处理图片文件的中间件Multer 先搭建服务器并展示html页面 const express = require("express ...
- Java目录下文件夹的含义和运行机制
Java安装目录下的各个文件夹的意义 >bin 放置Java所有的可执行文件 >include 一些C语言的头文件 >jre Java的运行环境 >lib Java的类库文件 ...
- 禁止网站F12和查看源码
window.onload=function(){ document.onkeydown=function(){ var e=window.event||arguments[0]; if(e.keyC ...
- 201604-1 折点计数 Java
思路: 这个题要小心考虑不全.左右两边都比这个数小 或者 左右两边都比这个数大 import java.util.Scanner; public class Main { public static ...
- Gradle project sync failed. Please fix your project and try again
https://stackoverflow.com/questions/29808199/error-running-android-gradle-project-sync-failed-please ...