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>