纯手写springboot2.0框架及分析

 

 

 

 

 

 

一 丶原理剖析

1. SpringBoot 是一个快速整合第三方框架(maven子父依赖关系,把需要整合的jar包封装好依赖信息);

2.简化XML配置,采用注解化;

在传统的web项目是需要web.xml去加载整个项目的配置文件。

注解是在spring3.0以上提供的,所以SpringMVC内置注解加载整个配置文件,相当于java代码编写SpringMVC配置初始化。

3.内置了Http服务器,有Tomcat和Jetty;

使用java代码创建Tomcat服务器,类加载器加载class文件。最终是以java应用程序执行的;

 

了解了SpringBoot的几大核心,我们来写一个tomcat运行servlet程序

二丶Tomcat运行Servlet

1.创建web maven工程引入相关依赖,操作tomcat所需要的

 

 

 

<!--Java语言操作tomcat -->
<dependency>
  <groupId>org.apache.tomcat.embed</groupId>
  <artifactId>tomcat-embed-core</artifactId>
  <version>8.5.16</version>
</dependency>

<!-- tomcat对jsp支持 -->
<dependency>
  <groupId>org.apache.tomcat</groupId>
  <artifactId>tomcat-jasper</artifactId>
  <version>8.5.16</version>
</dependency>

大家都知道Springmvc的底层也是Servlet

2.创建一个Servlet ,我这里命名IndexServlet;

 

/**
 * @author 严爷
 */
public class IndexServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req, resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.getWriter().print("start tomcat success");
    }
}

3.创建一个Servlet tomcat启动类

public class TomcatIndex {
    private  static  int PORT = 8080;
    private static  String CONTEXT_PASH = "/yanye";
    private static  String SERVLET_NAME = "indexServlet";
    public static void main(String[] args) throws LifecycleException {
        //创建Tomcat服务器
        Tomcat tomcatServer = new Tomcat();
        //绑定端口号
        tomcatServer.setPort(PORT);
        //设置是否自动部署
        tomcatServer.getHost().setAutoDeploy(false);
        //创建上下文
        StandardContext standardContext = new StandardContext();
        //设置上下文
        standardContext.setPath(CONTEXT_PASH);
        //监听上下文
        standardContext.addLifecycleListener(new Tomcat.FixContextListener());
        //tomcat容器添加standardContext
        tomcatServer.getHost().addChild(standardContext);
        //创建Servlet
        tomcatServer.addServlet(CONTEXT_PASH,SERVLET_NAME,new IndexServlet());
        //ServletUrl映射
        standardContext.addServletMappingDecoded("/index",SERVLET_NAME);
        tomcatServer.start();
        System.out.println("启动Tomcat成功");
        //异步进行接收请求
        tomcatServer.getServer().await();
    }
}

 

运行。游览器访问

加上上下文和url映射

访问成功。这样我们就用java代码启动Tomcat访问到了Servlet;

三丶手写Springboot

1.创建Springmvc的启动配置


/*
 * @Author YL
 * @Description //TODO 配置信息 开启Springmvc功能
 * @Date 0:27 2018/8/24
 * @Param
 * @return
 **/
@EnableWebMvc
@Configuration
@ComponentScan(basePackages = {"com.yanye.controller"})
public class WebConfig extends WebMvcConfigurerAdapter {

  
}

2.创建Spring的根配置

/*
 * @Author YL
 * @Description //TODO 根配置
 * @Date 0:30 2018/8/24
 * @Param
 * @return
 **/
@Configuration
@ComponentScan(basePackages = {"com.yanye"})
public class RootConfig {
}

3.创建加载配置类

package com.yanye.config;

import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;

public class AppDispatcherServlet extends AbstractAnnotationConfigDispatcherServletInitializer {
    /*
     * @Author YL
     * @Description //TODO 加载Spring核心
     * @Date 0:26 2018/8/24
     * @Param []
     * @return java.lang.Class<?>[]
     **/
    @Override
    protected Class<?>[] getRootConfigClasses() {
        return new Class[]{RootConfig.class};
    }

    /*
     * @Author YL
     * @Description //TODO 加载 配置信息
     * @Date 0:26 2018/8/24
     * @Param []
     * @return java.lang.Class<?>[]
     **/
    @Override
    protected Class<?>[] getServletConfigClasses() {
        return new Class[]{WebConfig.class};
    }

    /*
     * @Author YL
     * @Description //TODO 拦截url映射 拦截所有请求
     * @Date 0:26 2018/8/24
     * @Param []
     * @return java.lang.String[]
     **/
    @Override
    protected String[] getServletMappings() {
        return new String[]{"/"};
    }
}

 

4.创建controller

import javax.annotation.Resource;

@RestController
public class IndexController {

    @Autowired
    private DemoService demoService;

    @RequestMapping(value="/index",produces = "text/htmml;charset=UTF-8")
    public String index(){
        return demoService.demot();
    }
}

 

5.创建启动类


public class AppTomcat {
    private  static  int PORT = 8081;

    public static void main(String[] args) throws Exception {
        start();
    }

    public static void start() throws Exception {
        //创建Tomcat服务器
        Tomcat tomcatServer = new Tomcat();
        //绑定端口号
        tomcatServer.setPort(PORT);
        //读取项目路径,加载静态资源 我这里加上了项目名,你们要注意下是否需要加,我是idea 下面贴出目录结构,
        StandardContext sdc = (StandardContext) tomcatServer.addWebapp("/", new File("com-yanyespring-boot/src/main").getAbsolutePath());
        //禁止重新载入
        sdc.setReloadable(false);
        //读取class文件位置
        File classFile = new File("target/classes");
        //创建webroot
        WebResourceRoot resource = new StandardRoot(sdc);
        //tomcat读取class文件执行(创建虚拟的文件目录)
        resource.addPreResources(new DirResourceSet(resource,"/WEB-INF/classes",classFile.getAbsolutePath(),"/"));
        //启动
        tomcatServer.start();
        System.out.println("启动Tomcat成功");
        //异步进行接收请求
        tomcatServer.getServer().await();
    }
}

 

 

springmvc注解方式启动

加载spring容器,加载springmvcdispatcherServlet

访问

 

 

四:整合jsp

在配置类上加上视图配置器


/*
 * @Author YL
 * @Description //TODO 配置信息 开启Springmvc功能
 * @Date 0:27 2018/8/24
 * @Param
 * @return
 **/
@EnableWebMvc
@Configuration
@ComponentScan(basePackages = {"com.yanye.controller"})
public class WebConfig extends WebMvcConfigurerAdapter {

    //配置视图器转换器
    @Bean
    public ViewResolver viewResolver(){
        InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
//当时我使用idea的时候有目录webapp,不加上不能访问,注意目录结构
        viewResolver.setPrefix("/webapp/WEB-INF/views/");
        viewResolver.setSuffix(".jsp");
        //设置可以在jsp中通过${}访问beans
        viewResolver.setExposeContextBeansAsAttributes(true);
        return viewResolver;
    }
}

创建controller


@Controller
public class UserController {

    @RequestMapping("/pageIndex")
    public String pageIndex(){
        return "pageIndex";
    }
}

创建jsp

 

访问成功!

 

完成了;已经手写Springb

好的,看完的话,记得分享分享文章!

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值