搭建一个简单的Springboot框架的步骤

Springboot简介

Spring Boot是所有基于Spring开发的项目的起点。SpringBoot的设计是为了让你尽可能快地跑起来Spring应用程序并尽可能减少你的配置文件。
(1)它使用“习惯优先配置”(项目中存在大量的配置,此外还内置一个习惯性的配置,让你无须进行繁杂的配置)的理念让你的项目快速运行起来。
(2)它并不是什么新的框架,而是默认配置了很多框架的使用方式,就像Maven集合了所有的jar包一样,SpringBoot整合了所有框架。

使用SpringBoot的好处

之前使用SSM框架,搭建过程需要
(1)配置web.xml,加载spring和springmvc
(2)配置数据库连接,配置日志文件
(3)配置在配置文件中的读取,开启注解
(3)配置mapper文件
……
为所有Spring开发者更快地入门
开箱即用,提供各种默认配置来简化项目配置
内嵌式容器简化Web项目
没有冗余代码生成和XML文件配置的要求
总结:
SpringBoot是一个快速开发的框架,能够快速地整合第三方框架,简化xml配置,全部采用注解形式,内置Tomcat容器,帮助开发者能够快速实现开发,SpringBoot的web组件默认是集成的是SpringMVC框架。

项目结构

项目结构图

config层

DispatcherServletWebAppInitializer

package com.hyq.config;

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

/**
 * 加载SpringMVC DispatcherServlet
 * @author hyq
 */
public class DispatcherServletWebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {

    /**
     * 加载根配置信息spring核心
     */
    protected Class<?>[] getRootConfigClasses(){
        return new Class<?>[] {SpringBeanScanConfig.class};
    }

    /**
     * Springmvc加载配置信息
     */
    protected Class<?>[] getServletConfigClasses(){
        return new Class [] {WebConfig.class};
    }
    /**
     * SpringMVC 拦截url映射 拦截所有请求
     */
    protected String[] getServletMappings(){
        return new String[] {"/"};
    }
}

SpringBeanScanConfig

package com.hyq.config;


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

/**
 * 根配置
 * @author hyq
 * @date 2019.11.14
 */

@Configuration
@ComponentScan("com.hyq")
public class SpringBeanScanConfig {

}

WebConfig

package com.hyq.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.ViewResolver;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;
import org.springframework.web.servlet.view.InternalResourceViewResolver;

/**
 * SpringMVC的配置信息
 * @author hyq
 * @date 2019.11.14
 */
//这是一个配置类,配置<beans></beans>
@Configuration
//表示配置视图解析器,开启注解的相关配置,以及<beans></beans>等等
@EnableWebMvc
//表示包扫描
@ComponentScan(basePackages = {"com.hyq.controller"})
public class WebConfig extends WebMvcConfigurationSupport {
    /**
     * 配置springMVC视图解析器
     */
    @Bean
    public ViewResolver viewResolver() {
        InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
        //配置前缀
        viewResolver.setPrefix("/WEB-INF/views/");
        //配置后缀
        viewResolver.setSuffix(".jsp");
        //可以在jsp页面中通过${}访问beans
        viewResolver.setExposeContextBeansAsAttributes(true);
        return viewResolver;
    }
}

controller层

IndexController返回的是jsp页面

package com.hyq.controller;

import com.hyq.service.IndexService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;

@Controller
public class IndexController {

    @Autowired
    private IndexService indexService;
    /**
     * value:访问地址
     * produces:解决乱码问题
     * @return
     *
     */
    @RequestMapping(value = "/index1", produces = "text/html;charset=UTF-8")
    public String index2(Model model) {
        String str = indexService.show();
        model.addAttribute("str",str);//返回到jsp页面显示数据
        return "springboot";
    }
}

UserController返回的是字符串

package com.hyq.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class UserController {

    @RequestMapping(value = "/index2", produces = "text/html;charset=UTF-8")
    public String index1() {

        return "手写springboot字符串";
    }
}

service层

IndexService

package com.hyq.service;

import org.springframework.stereotype.Service;

@Service
public class IndexService {

    public String show() {
        return "我是service层";
    }
}

启动tomcat类

package com.hyq;

import org.apache.catalina.LifecycleException;
import org.apache.catalina.WebResourceRoot;
import org.apache.catalina.core.StandardContext;
import org.apache.catalina.startup.Tomcat;
import org.apache.catalina.webresources.DirResourceSet;
import org.apache.catalina.webresources.StandardRoot;

import javax.servlet.ServletException;
import java.io.File;

public class SpringBootApp {
    public static void main(String[] args) throws LifecycleException, ServletException {
        // 创建Tomcat容器对象
        Tomcat tomcatServer = new Tomcat();
        // 设置端口号
        tomcatServer.setPort(8080);
        // 读取项目路径 加载静态资源
        StandardContext ctx = (StandardContext) tomcatServer.addWebapp("/", new File("src/main").getAbsolutePath());
        // 禁止重新载入
        ctx.setReloadable(false);
        // class文件读取地址
        File additionWebInfClasses = new File("target/classes");
        // 创建WebRoot
        WebResourceRoot resources = new StandardRoot(ctx);
        // tomcat内部读取Class执行(/WEB-INF/classes虚拟出来的路劲)
        resources.addPreResources(
                new DirResourceSet(resources, "/WEB-INF/views", additionWebInfClasses.getAbsolutePath(), "/"));
        tomcatServer.start();
        // 异步等待请求执行
        tomcatServer.getServer().await();
    }
}

jsp页面

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>手写springboot2框架</title>
</head>
<body>

<h1>纯手写SpringBoot框架</h1>

</body>
</html>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值