内嵌tomcat最简单用法
maven项目引入内嵌tomcat依赖
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-core</artifactId>
<version>8.5.37</version>
</dependency>
编写如下main方法
package com; import org.apache.catalina.Context;
import org.apache.catalina.LifecycleException;
import org.apache.catalina.startup.Tomcat;
import org.apache.tomcat.util.descriptor.web.FilterDef;
import org.apache.tomcat.util.descriptor.web.FilterMap;
import org.springframework.web.filter.OncePerRequestFilter; import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.nio.charset.Charset; /**
* @author allen
* @date 2019-01-22 13:20
*/
public class TomcatWebServer {
public static void main(String[] args) {
Tomcat tomcat = new Tomcat();
HttpServlet httpServlet = new HttpServlet() {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
resp.getWriter().write("hello, i'm embed tomcat");
} @Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException {
doGet(req, resp);
}
};
tomcat.setHostname("localhost");
tomcat.setPort(8080);
final Context context = tomcat.addContext("/embed-tomcat", null);
Tomcat.addServlet(context, "dispatch", httpServlet);
context.addServletMappingDecoded("/dispatch", "dispatch");
Filter filter = new OncePerRequestFilter() {
@Override
protected void doFilterInternal(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, FilterChain filterChain) throws ServletException, IOException {
System.out.println("filter do something");
filterChain.doFilter(httpServletRequest, httpServletResponse);
}
};
FilterDef filterDef = new FilterDef();
filterDef.setFilter(filter);
filterDef.setFilterName("myFilter");
filterDef.addInitParameter("userName", "Allen"); FilterMap filterMap = new FilterMap();
filterMap.addURLPatternDecoded("/*");
filterMap.addServletName("*");
filterMap.setFilterName("myFilter");
filterMap.setCharset(Charset.forName("UTF-8")); context.addFilterDef(filterDef);
context.addFilterMap(filterMap);
try {
tomcat.init();
tomcat.start();
tomcat.getServer().await();
} catch (LifecycleException e) {
e.printStackTrace();
}
}
}
注意其中OncePerRequestFilter是spring提供的对filter接口的实现类,没有引入spring依赖的可自行改用其他实现类。
运行main方法,一个最简单的tomcat实例已经运行起来。浏览器打开http://localhost:8080/embed-tomcat/dispatch,页面可以看到输出内容,控制台也打印了过滤器执行的内容。
springboot默认就是使用tomcat作为内嵌容器的,基本原理通上述代码,只不过spring做了更深层次的封装,结合其ioc容器,可以实现只要往ioc容器中注入servlet、filter接口的实现类,spring的适配器可自动完成配置。
内嵌tomcat最简单用法的更多相关文章
- Spring Boot 内嵌Tomcat的端口号的修改
操作非常的简单,不过如果从来没有操作过,也是需要查找一下资料的,所以,在此我简单的记录一下自己的操作步骤以备后用! 1:我的Eclipse版本,不同的开发工具可能有所差异,不过大同小异 2:如何进入对 ...
- spring boot 2 内嵌Tomcat Stopping service [Tomcat]
我在使用springboot时,当代码有问题时,发现控制台打印下面信息: Connected to the target VM, address: '127.0.0.1:42091', transpo ...
- 如何优雅的关闭基于Spring Boot 内嵌 Tomcat 的 Web 应用
背景 最近在搞云化项目的启动脚本,觉得以往kill方式关闭服务项目太粗暴了,这种kill关闭应用的方式会让当前应用将所有处理中的请求丢弃,响应失败.这种形式的响应失败在处理重要业务逻辑中是要极力避免的 ...
- 精尽Spring Boot源码分析 - 内嵌Tomcat容器的实现
该系列文章是笔者在学习 Spring Boot 过程中总结下来的,里面涉及到相关源码,可能对读者不太友好,请结合我的源码注释 Spring Boot 源码分析 GitHub 地址 进行阅读 Sprin ...
- 基于内嵌Tomcat的应用开发
为什么使用内嵌Tomcat开发? 开发人员无需搭建Tomcat的环境就可以使用内嵌式Tomcat进行开发,减少搭建J2EE容器环境的时间和开发时容器频繁启动所花时间,提高开发的效率. 怎么搭建内嵌To ...
- 内嵌tomcat启动速度慢
项目上最近要把内置的jetty换成tomcat, 来更好的支持servlet 3.0 本来以为换个容器, 几十行代码就好了. 实际上换了tomcat后, 一开始启动tomcat, 非常的慢. jett ...
- 查看和指定SpringBoot内嵌Tomcat的版本
查看当前使用的Tomcat版本号 Maven Repository中查看 比如我们需要查Spring Boot 2.1.4-RELEASE的内嵌Tomcat版本, 可以打开链接: https://mv ...
- Spring Boot内嵌Tomcat session超时问题
最近让Spring Boot内嵌Tomcat的session超时问题给坑了一把. 在应用中需要设置session超时时间,然后就习惯的在application.properties配置文件中设置如下, ...
- springboot去除内嵌tomcat和打包在tomcat中运行需要做的步骤
去除内嵌tomcat和添加jsp依赖 去除内嵌tomcat 在springboot启动依赖中去除内嵌tomcat <dependency> <groupId>org.sprin ...
随机推荐
- Socket编程 之使用fsockopen()函数
fsockopen函数:初始化一个套接字连接到指定主机(hostname) get方式: client.php <?php //创建连接 $fp=fsockopen('localhost',80 ...
- Ubuntu16.04 使用sudo cat EOF 编辑文件,提示Permission denied错误的解决办法
一.执行命令报错 在Ubuntu16.04下,使用如下命令,修改hosts主机文件,居然提示权限错误: catty@node186:~$ sudo cat <<EOF > /etc/ ...
- tensorbordX使用
安装: pip install tensorflow-1.7.0 pip install tensorbord pip install tensorbordX 启动 tensorboard --log ...
- Project D | Digital life
I have a dream. 1999年黑客帝国就已经提出了数字化生命的雏形,近些年的黑镜和其他科幻电影更是脑洞大开,但是生命科学的进展却差强人意. 当今人类世界里有三大复杂系统:以细胞为基础的生命 ...
- Oracle使用
Oracle数据库首先必须在服务器端安装,安装完成后在DBCA中创建数据库,然后在Net Configuration Assistant中配置监听程序和本地Net服务名.然后安装本地Oracle客户端 ...
- 菜鸟脱壳之脱壳的基础知识(六)——手动查找IAT和修复Dump的程序
前面讲了如何寻找OEP和脱壳,有的时候,Dump出来的时候不能正常运行,是因为还有一个输入表没有进行处理,一些加密壳会在IAT加密上面大做文章,用HOOK - API的外壳地址来代替真是的IAT的地址 ...
- MySQL备份脚本-亲试ok
#!/bin/bash # 以下配置信息请自己修改mysql_user="USER" #MySQL备份用户mysql_password="123456" #My ...
- K8s+jenkins实现提升效率 —— 一些小记录
尝试下K8s + jenkins的组合,非常方便.在这里记录一下: kubernetes版本: 1.10 + deployment.yaml apiVersion: v1 kind: Service ...
- python pyqt4问题记录
在python中在终端中使用pip无法完成pyqt4的安装. 在官网下载相应的最新文件,在cmd中使用命令也无法实现安装 最终发现python最新的版本(现在已是3.7版本),无法安装. 解决办法为将 ...
- 论文选读一: Towards end-to-end reinforcement learning of dialogue agents for information access
Towards end-to-end reinforcement learning of dialogue agents for information access KB-InfoBot 与知识库交 ...