• 内嵌tomcat最简单用法


    maven项目引入内嵌tomcat依赖

    <dependency>
        <groupId>org.apache.tomcat.embed</groupId>
        <artifactId>tomcat-embed-core</artifactId>
        <version>8.5.37</version>
    </dependency>

    编写如下main方法

     1 package com;
     2 
     3 import org.apache.catalina.Context;
     4 import org.apache.catalina.LifecycleException;
     5 import org.apache.catalina.startup.Tomcat;
     6 import org.apache.tomcat.util.descriptor.web.FilterDef;
     7 import org.apache.tomcat.util.descriptor.web.FilterMap;
     8 import org.springframework.web.filter.OncePerRequestFilter;
     9 
    10 import javax.servlet.Filter;
    11 import javax.servlet.FilterChain;
    12 import javax.servlet.ServletException;
    13 import javax.servlet.http.HttpServlet;
    14 import javax.servlet.http.HttpServletRequest;
    15 import javax.servlet.http.HttpServletResponse;
    16 import java.io.IOException;
    17 import java.nio.charset.Charset;
    18 
    19 /**
    20  * @author allen
    21  * @date 2019-01-22 13:20
    22  */
    23 public class TomcatWebServer {
    24     public static void main(String[] args) {
    25         Tomcat tomcat = new Tomcat();
    26         HttpServlet httpServlet = new HttpServlet() {
    27             @Override
    28             protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
    29                 resp.getWriter().write("hello, i'm embed tomcat");
    30             }
    31 
    32             @Override
    33             protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException {
    34                 doGet(req, resp);
    35             }
    36         };
    37         tomcat.setHostname("localhost");
    38         tomcat.setPort(8080);
    39         final Context context = tomcat.addContext("/embed-tomcat", null);
    40         Tomcat.addServlet(context, "dispatch", httpServlet);
    41         context.addServletMappingDecoded("/dispatch", "dispatch");
    42         Filter filter = new OncePerRequestFilter() {
    43             @Override
    44             protected void doFilterInternal(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, FilterChain filterChain) throws ServletException, IOException {
    45                 System.out.println("filter do something");
    46                 filterChain.doFilter(httpServletRequest, httpServletResponse);
    47             }
    48         };
    49         FilterDef filterDef = new FilterDef();
    50         filterDef.setFilter(filter);
    51         filterDef.setFilterName("myFilter");
    52         filterDef.addInitParameter("userName", "Allen");
    53 
    54         FilterMap filterMap = new FilterMap();
    55         filterMap.addURLPatternDecoded("/*");
    56         filterMap.addServletName("*");
    57         filterMap.setFilterName("myFilter");
    58         filterMap.setCharset(Charset.forName("UTF-8"));
    59 
    60         context.addFilterDef(filterDef);
    61         context.addFilterMap(filterMap);
    62         try {
    63             tomcat.init();
    64             tomcat.start();
    65             tomcat.getServer().await();
    66         } catch (LifecycleException e) {
    67             e.printStackTrace();
    68         }
    69     }
    70 }

    注意其中OncePerRequestFilter是spring提供的对filter接口的实现类,没有引入spring依赖的可自行改用其他实现类。

    运行main方法,一个最简单的tomcat实例已经运行起来。浏览器打开http://localhost:8080/embed-tomcat/dispatch,页面可以看到输出内容,控制台也打印了过滤器执行的内容。

    springboot默认就是使用tomcat作为内嵌容器的,基本原理通上述代码,只不过spring做了更深层次的封装,结合其ioc容器,可以实现只要往ioc容器中注入servlet、filter接口的实现类,spring的适配器可自动完成配置。

  • 相关阅读:
    IP查询网和traceroute找到的网络出口不一致的原因
    [转载] 深入理解VMware虚拟机网络通信原理
    https工作流程
    HTTP1.1协议-RFC2616-中文版
    条件变量调用Signal的时候是否需要持有mutex
    HTTP Get一定是幂等的吗,统计访问量的时候呢?
    unix网络编程
    MySQL-SQL基础-DCL
    MySQL-SQL基础-查询1
    MySQL-SQL基础-子查询
  • 原文地址:https://www.cnblogs.com/xiao-tao/p/10304174.html
Copyright © 2020-2023  润新知