传统的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最开始是为了 ...
随机推荐
- UVA - 10285 Longest Run on a Snowboard(最长的滑雪路径)(dp---记忆化搜索)
题意:在一个R*C(R, C<=100)的整数矩阵上找一条高度严格递减的最长路.起点任意,但每次只能沿着上下左右4个方向之一走一格,并且不能走出矩阵外.矩阵中的数均为0~100. 分析:dp[x ...
- Navicat for Mysql 11.2 的下载,安装与激活
1. Navicat for Mysql 11.2 的下载 链接:https://pan.baidu.com/s/1w54F-MYTLuy4TQwpzUE7bQ 密码:zsfu 2.下载的 ...
- 113.Pageinator和Page类常用的属性和方法
Paginator和Page类: Paginator和Page类都是用来分页的,他们在Django中的路径为django.core.paginator.Pageinator和django.core.p ...
- SpingBoot项目搭建(详细)
SpingBoot (原创:黑小子-余) springboot官网:->点击<- spring官网:->点击<- 一.SpringBoot简介 Spring Boot是由Piv ...
- codeforces 596 C. p-binary
题意:给你一个n和一个p,让你用 (2k+p)进制来表示n,找出用最少的(2k+p)来表示n. 分析:首先我们看到2k,首先下想到二进制,我们可以我们列出式子,也就是 (2x1 + p)+(2x2 + ...
- HDU - 1251 字典树模板题
Ignatius最近遇到一个难题,老师交给他很多单词(只有小写字母组成,不会有重复的单词出现),现在老师要他统计出以某个字符串为前缀的单词数量(单词本身也是自己的前缀). Input输入数据的第一部 ...
- Ubuntu Teamviewer安装使用
关于Ubuntu环境下teamviewer的安装(亲测可用-) 以下内容均转自:https://blog.csdn.net/weixin_41887832/article/details/798329 ...
- TCP/IP与IETF的RFC
究竟是谁控制着 TCP/IP协议族,又是谁在定义新的标准以及其他类似的事情?事实上, 有四个小组在负责Internet技术. 1) Internet协会(ISOC,Internet Society)是 ...
- 相信301跳转大家都知道 rewrite
相信301跳转大家都知道,这样有利于权重集中,但是我在.htaccess文件写上: RewriteEngine on rewriteCond %{http_host} ^phpddt.com [NC] ...
- MyBatis从入门到精通(第9章):Spring集成MyBatis(中)
MyBatis从入门到精通(第9章):Spring集成MyBatis(中) 框架(Framework)是整个或部分系统的可重用设计,表现为一组抽象构件及构件实例间交互的方法.应该将应用自身的设计和具体 ...