Spring Boot系列6-SpringBoot中使用servlet

猿份哥 1年前 ⋅ 759 阅读 ⋅ 0 个赞

介绍在SpringBoot中如何使用servlet

pom.xml

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency> 

 
定义类MyServlet继承HttpServlet

@WebServlet标记servlet,urlPatterns配置映射路径

重写doGet方法

@WebServlet(urlPatterns = "/my/servlet")
public class MyServlet extends HttpServlet {
 
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        super.doGet(req, resp);
        resp.getWriter().print("hello this is MyServlet!");
    }
}


配置启动类

@ServletComponentScan(basePackages = “com.tiankonglanlande.cn.springboot.servlet.servlet”)这个注解作用是 配置要扫描servlet的位置,springboot会自动将包下的servlet注入

 

 
@SpringBootApplication
@ServletComponentScan(basePackages = "com.tiankonglanlande.cn.springboot.servlet.servlet")
public class ServletApplication {
 
	public static void main(String[] args) {
		SpringApplication.run(ServletApplication.class, args);
	}
}
 


异步的servlet

配置@WebServlet的属性asyncSupported = true即可

/**
 * @author 天空蓝蓝的
 */
@WebServlet(urlPatterns = "/my/ayncservlet",asyncSupported = true)
public class MyAyncServlet extends HttpServlet {
 
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        super.doGet(req, resp);
 
        AsyncContext asyncContext = req.getAsyncContext();
        asyncContext.start(()->{
            try {
                resp.getWriter().print("hello this is MyAyncServlet!");
                asyncContext.complete();
            } catch (IOException e) {
                e.printStackTrace();
            }
        });
    }
}
 



测试

在浏览器访问:http://localhost:8080/my/servlet

输出:hello this is MyServlet!

在浏览器访问:http://localhost:8080/my/ayncservlet

输出:hello this is MyAyncServlet!

 

可能遇到的问题

1.HTTP method GET is not supported by this URL 解决方法:doGet方法中去掉super.doGet()方法调用

2.java.lang.IllegalStateException: It is illegal to call this method if the current request is not in asynchronous mode (i.e. isAsyncStarted() returns false) 原因:(1)将req.startAsync()错写成req.getAsyncContext(); (2)asyncContext.complete()需要在任务完成后调用

源码下载链接 https://github.com/tiankonglanlande/springboot


全部评论: 0

    我有话说:

    Spring Boot系列1-helloword

      使用springboot简单轻松创建helloword SpringBoot系列1-helloword 关于springboot这是摘自官方的一段话 Spring Boot

    ...jar没有主清单属性, spring boot或者spring cloud的maven项目 java -jar test.jar 方式启动报错:...jar没有主清单属性

    1.spring boot或者spring cloud的maven项目老是遇到问题...jar没有主清单属性 2.解决方法:在pom.xml添加如下代码 <build> <

    spring boot面试题及答案持续更新

    2019-07-28最新整理的spring boot面试题及答案 1.Spring Boot是什么 这是摘自官方的一段话 Spring Boot is designed to get you up

    Spring Boot系列7-SpringBoot+mybatis+druid+TypeHandler

    介绍在SpringBoot集成mybatis和druid以及自定义TypeHandler 创建数据库表 SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS = 0; -- --------------------...

    SpringBoot系列16-Spring boot2x快速整合swagger2(Open Api3注解版)

    前言:为什么要使用swagger 传统的web开发,前端和后端的HTTP接口文档交互都是使用word文档记录,存在不仅限于这些问题;不能时时更新,不易于传输etc. swagger2可以使用配置文件

    Spring Boot系列8-使用jasypt加密配置文件内容简单版

    文章目录 1.为什么配置文件需要加密 2.首先引入pom依赖文件 3.在application.properties或者application.yml文件配置加密密码 4.获取加密内容例如:我想

    Spring Boot系列2-全局统一异常处理

    原创: 天空和唯美 天空唯美  点击查看原文 为什么要全局统一异常处理呢?如果系统发生了异常,不做统一异常处理,前端会给用户展示一大片看不懂的文字。做统一异常处理后当

    Spring Boot应用或SpringCloud程序设置端口号的几种方式

    前言:springboot项目的每个应用都需要设置端口号,如何设置端口号呢?主要有以下这几种方式 1.通过配置文件设置: (1)在/src/main/resources/路径下的

    SpringBoot系列12-redis-pipeline keys模糊查询替代方案

    keys模糊查询遇到性能问题redis cup 99%以及解决方案 之前写过一篇文章 《java redis通过key模糊删除,批量删除,批量查询相关数据》,在项目我也是这样使用的。刚开始还没有

    springboot1.5.9升级到springboot2.1.3遇到的问题

    1.问题描述: Failed to bind properties under 'spring.datasource.druid.driver' to java.sql.Driver:  

    SpringBoot系列9-使用jasypt自定义stater运行时动态传入加密密码

    文章目录 1.新建springboot-encryption-configuration项目实现stater 2.pom文件引入jasypt 3.在resources/support/下配置

    spring boot系列4-定时任务-springboot自带的scheduled超级简单

    需求:创建一个每天凌晨0点执行的定时任务1.创建任务 /** * @author 天空蓝蓝的 */ @Slf4j @EnableScheduling @Component public class MyTask { @Async @Schedul...

    Spring Boot系列5-定时任务-springboot整合quartz实现动态定时任务

    MyJob实现Job接口,重写execute方法在里面操作我们要执行的业务逻辑。 @Slf4j public class MyJob implements Job { @Autowired private MyService myService;...

    SpringBoot系列15-mysql-multiple-data-sources1

    springboot 多数据源的一个简单示例 多数据源分包加载 新建数据库test1和表tbl_user CREATE TABLE `tbl_user` ( `id` int(11) NOT

    加入公众号
    加入公众号