純手寫SpringBoot框架之註解方式啓動SpringMVC容器

使用Java語言建立Tomcat容器,而且經過Tomcat執行Servlet,接下來,將會使用Java語言在SpringBoot建立內置Tomcat,使用註解方式啓動SpringMVC容器。html

代碼實現。
1.pom.xml文件,須要依賴的jar包。web

<dependencies>
        <!--Java語言操做Tomcat-->
        <dependency>
            <groupId>org.apache.tomcat.embed</groupId>
            <artifactId>tomcat-embed-core</artifactId>
            <version>8.5.23</version>
        </dependency>
        <!--tomcat對jsp的支持-->
        <dependency>
            <groupId>org.apache.tomcat</groupId>
            <artifactId>tomcat-jasper</artifactId>
            <version>7.0.47</version>
        </dependency>
        <!--spring-web-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <version>5.0.8.RELEASE</version>
        </dependency>
        <!--spring-webmvc-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>5.0.8.RELEASE</version>
        </dependency>
    </dependencies>

2.配置SpringMVC、Spring、DispatcherServlet的初始化類:spring

/**
 * 加載springmvc====dispatcherservlet
 */
public class SpringWebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
    //加載根配置信息 spring核心
    protected Class<?>[] getRootConfigClasses() {
        return new Class[0];
    }
    //springmvc 加載配置信息
    protected Class<?>[] getServletConfigClasses() {
        return new Class[]{WebConfig.class};
    }
    //springmvc攔截的url映射,攔截全部請求
    protected String[] getServletMappings() {
        return new String[]{"/"};//攔截全部請求
    }
}

AbstractAnnotationConfigDispatcherServletInitializer這個類負責"初始化Spring容器、SpringMVC容器、配置DispatcherServlet"。apache

  • getRootConfigClasses()方法用於獲取Spring應用容器的配置文件,這裏咱們給定預先定義的RootConfig.class;
  • getServletConfigClasses負責獲取Spring MVC應用容器,這裏傳入預先定義好的WebConfig.class;
  • getServletMappings()方法負責指定須要由DispatcherServlet映射的路徑,這裏給定的是"/",意思是由DispatcherServlet處理全部向該應用發起的請求。

SpringMVC配置,加載SpringMVC容器。這裏的@Configuration至關於springmvc.xml配置文件;@ComponentScan(basePackages = "com.jiuyue.controller")至關於配置文件sringmvc.xml的掃描controler應該還有印象吧;@EnableWebMvc則是開啓SpringMVC功能。tomcat

/**
 * SpringMVC配置信息
 */
@Configuration  //至關於配置文件springmvc.xml
@EnableWebMvc //開啓SpringMVC功能
@ComponentScan(basePackages = "com.jiuyue.controller")//掃springMVC的
public class WebConfig extends WebMvcConfigurerAdapter {
    //配置視圖轉換器
}

根配置,加載Spring容器。服務器

/**
 * 根配置
 */
@Configuration
@ComponentScan(basePackages = "com.jiuyue")//掃整個spring項目的
public class RootConfig {
}

3.啓動類mvc

public class APP {
    public static void main(String[] args) throws ServletException, LifecycleException {
        //使用Java內置tomcat運行SpringMVC框架
        //原理:tomcat加載到SpringMVC註解啓動方式,就會建立SpringMVC容器
        start();
    }
    public static void start() throws LifecycleException, ServletException {
        //建立tomcat服務器
        Tomcat tomcatServer = new Tomcat();
        //設置port
        tomcatServer.setPort(8085);
        //讀取項目路徑,'/'能夠加載靜態資源
        StandardContext ctx = (StandardContext) tomcatServer.addWebapp("/", new File("src/main").getAbsolutePath());
        //禁止從新載入
        ctx.setReloadable(false);
        //class文件讀取地址
        File addtionWebInfoClasses = new File("target/classes");
        //建立WebRoot
        WebResourceRoot resources = new StandardRoot(ctx);
        //tomcat內部讀取class文件進行執行
        //內部虛擬Tomcat空間
        resources.addPreResources(new DirResourceSet(resources,"/WEB-INF/classes",addtionWebInfoClasses.getAbsolutePath(),"/"));
        tomcatServer.start();
        System.out.println("Java語言建立Tomcat啓動成功");
        //異步進行接收請求
        tomcatServer.getServer().await();

    }
}

controller類app

@Controller
public class IndexController {
    @RequestMapping(value = "/index",produces = "text/html;charset=UTF-8")
    @ResponseBody
    public String index(){
        return "純手寫Java語言實現SpringBoot註解啓動SpringMVC容器";
    }
}

訪問效果圖框架

配置視圖解析器異步

直接下WebConfig配置類中配置就能夠,WebConfig就至關於springmvc.xml配置文件,前面咱們在裏面配置了掃包與開啓springMVC功能,接下來就在下面繼續配置視圖解析器。

@Configuration  //至關與配置文件
@EnableWebMvc //開啓SpringMVC功能
@ComponentScan(basePackages = "com.jiuyue.controller")//掃springMVC的
public class WebConfig extends WebMvcConfigurerAdapter {
    //配置視圖轉換器
    //SpringMVC視圖解析器
    @Bean
    public ViewResolver viewResolver(){
        InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
        viewResolver.setPrefix("/WEB-INF/jsp/");
        viewResolver.setSuffix(".jsp");
        //能夠在JSP頁面中經過${}訪問bean
        viewResolver.setExposeContextBeansAsAttributes(true);
        return viewResolver;
    }
}

JspController控制器類

@Controller
public class JspController {
    @RequestMapping(value = "/jspIndex")
    public String jspIndex(){
        return "jspIndex";
    }
}

WEB-INF/jsp目錄

訪問jspIndex返回jsp頁面

業務邏輯層

將根配置,配置到初始化類

/**
 * 根配置
 */
@Configuration
@ComponentScan(basePackages = "com.jiuyue")//掃整個spring項目的
public class RootConfig {
}

public class SpringWebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
    //加載根配置信息 spring核心
    protected Class<?>[] getRootConfigClasses() {
        return new Class[]{RootConfig.class};
    }
    //springmvc 加載配置信息
    protected Class<?>[] getServletConfigClasses() {
        return new Class[]{WebConfig.class};
    }
    //springmvc攔截的url映射,攔截全部請求
    protected String[] getServletMappings() {
        return new String[]{"/"};//攔截全部請求
    }
}

Service類

@Service
public class IndexService {
    public String index(){
        return "純手寫Java語言實現SpringBoot註解啓動SpringMVC容器";
    }
}

控制器類

 

若是文章有錯的地方歡迎指正,你們互相交流。

相關文章
相關標籤/搜索