springmvc-嵌入式tomcat基本配置

9 篇文章 0 订阅
1 篇文章 0 订阅

前言

最近在看 springmvc 的相关源码… 不想下载tomcat 等等等等操作.想跟 springboot 一样直接启动… 估做学习记录

整体代码

@ComponentScan
public class AnnotatedBeanDefinitionReaderContext {

    public static void main(String[] args) throws LifecycleException {
        File base = new File(System.getProperty("java.io.tmpdir"));
        Tomcat tomcat = new Tomcat();
        Context context = tomcat.addContext("/", base.getAbsolutePath());
        addFilters(context);
        tomcat.start();
        // 添加 servlet
        addDispatcherServlet(tomcat);
        // 阻塞
        tomcat.getServer().await();

    }

	
    public void setConnector(Tomcat tomcat) {
        //设置Tomcat的端口tomcat.setPort(9091)。两种写法都可以设置端口
        Connector connector = tomcat.getConnector();
        connector.setPort(8080);

    }

    public static void addDispatcherServlet(Tomcat tomcat) {
        //容器添加需要启动的ApplicationContext
        AnnotationConfigWebApplicationContext annotationConfigWebApplicationContext
                = new AnnotationConfigWebApplicationContext();
        annotationConfigWebApplicationContext.register(AnnotatedBeanDefinitionReaderContext.class);
        annotationConfigWebApplicationContext.refresh();
        DispatcherServlet dispatcherServlet = new DispatcherServlet(annotationConfigWebApplicationContext);
        Wrapper wrapper = tomcat.addServlet("/", "app", dispatcherServlet);
        wrapper.setLoadOnStartup(1);
        wrapper.addMapping("/");
    }
    // 添加过滤器
    private static void addFilters(Context context) {
        FilterDef filterDef = new FilterDef();//Filter定义
        filterDef.setFilterName("test-filter"); 
        filterDef.setFilterClass(ReqResFilter.class.getName());
        filterDef.addInitParameter("name", "test-filter");
        context.addFilterDef(filterDef);
        FilterMap filterMap = new FilterMap();//Filter路径映射
        filterMap.setFilterName("test-filter");
        filterMap.addURLPattern("/*");
        context.addFilterMap(filterMap);
    }

    private static void configureListeners(StandardContext context) {
        context.addApplicationEventListener(new TestListener() {
            @Override
            public void addError(Test test, Throwable t) {

            }

            @Override
            public void addFailure(Test test, AssertionFailedError t) {

            }


            @Override
            public void endTest(Test test) {

            }

            @Override
            public void startTest(Test test) {

            }
        });
    }
}


过滤器代码

public class ReqResFilter implements Filter {

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
    }
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain)throws IOException, ServletException {
        System.out.println("测试");
        filterChain.doFilter(servletRequest,servletResponse);
    }
    @Override
    public void destroy() {

    }
}

后言

可以参考我同类上一篇文章… 可以说这一篇文章是上一篇文章的进阶版~~~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值