栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java嵌入式tomcat整合SpringMVC

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java嵌入式tomcat整合SpringMVC

前言:

本文将介绍如何使用Java的方式启动tomcat,并整合Spring MVC,做到就像Springboot使用main方法启动,就可以访问controller资源的效果;

首先导入依赖:

 
        9.0.21
    

    

        
            org.apache.tomcat.embed
            tomcat-embed-core
            ${embed.tomcat.version}
        

        
            org.apache.tomcat.embed
            tomcat-embed-jasper
            ${embed.tomcat.version}
            
        


        
            org.springframework
            spring-context
            5.0.8.RELEASE
        
        
            org.springframework
            spring-webmvc
            5.0.8.RELEASE
        
    

创建AppConfig配置类:

package com.hu.config;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;


@Configuration
//添加包扫描路径
@ComponentScan({"com.hu"})
public class AppConfig {
}

创建 MyWebApplicationInitializer 类实现 WebApplicationInitializer接口,重写onstartup方法

package com.hu.config;

import org.springframework.web.WebApplicationInitializer;
import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;
import org.springframework.web.servlet.DispatcherServlet;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRegistration;


public class MyWebApplicationInitializer implements WebApplicationInitializer {



    public void onStartup(ServletContext servletContext) throws ServletException {
        //通过注解的方式初始化Spring的上下文
        AnnotationConfigWebApplicationContext ac = new AnnotationConfigWebApplicationContext();
      
        //注册spring的配置类(替代传统项目中xml的configuration)
        ac.register(AppConfig.class);
        ac.refresh();


        //基于java代码的方式初始化DispatcherServlet
        DispatcherServlet servlet = new DispatcherServlet(ac);
        //绑定servlet
        ServletRegistration.Dynamic registration = servletContext.addServlet("dispatcherServlet", servlet);
        
        //设置tomcat启动立即加载 servlet
        registration.setLoadOnStartup(1);
        //浏览器访问uri
        registration.addMapping("/app
public class MyServletContainerInitializer implements ServletContainerInitializer {


    
    public void onStartup(Set> set, ServletContext servletContext) throws ServletException {
        System.out.println("加载.......");
    }
}

在resources目录下,创建meta-INF/services/javax.servlet.ServletContainerInitializer
在文件中添加 MyServletContainerInitializer 类的全限定名,servlet3.0规范,规定了tomcat在启动时会去扫描项目包括项目的jar包下这个(meta-INF/services)目录下的 javax.servlet.ServletContainerInitializer 这个文件,加载这个文件中配置的类的全限定名,实例化并调用这个类中的onstartup方法(所以这个类必须实现ServletContainerInitializer这个接口)

创建启动类在main方法中实例化tomcat并启动

package com.hu.core;

import org.apache.catalina.LifecycleException;
import org.apache.catalina.connector.Connector;
import org.apache.catalina.startup.Tomcat;


public class SpringBootApplication {

    private static int port = 8080;
    private static String contextPath = "/";


    public static void run(){
        Tomcat tomcat = new Tomcat();
        String baseDir = Thread.currentThread().getContextClassLoader().getResource("").getPath();
        //设置tomcat启动后的工作目录
        tomcat.setbaseDir(baseDir);
        //设置端口
        tomcat.setPort(port);
        //获取执行器,并设置io协议
        Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
        //设置端口
        connector.setPort(port);
        //设置执行器
        tomcat.setConnector(connector);

        tomcat.addWebapp(contextPath, baseDir);
        tomcat.enableNaming();
        try {
            tomcat.start();
        } catch (LifecycleException e) {
            System.err.println("tomcat 启动失败");
        }
        //tomcat启动后,让其阻塞,不让当前线程结束,等待处理请求,
        tomcat.getServer().await();
    }

    public static void main(String[] args) {
        run();
    }
}

创建controller:

package com.hu.controller;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;


@RestController
public class TestController {


    @GetMapping("/test")
    public String test(){

        return "hello";
    }
}

浏览器访问:
http://localhost:8080/app/test

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/631678.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号