纯手写springboot2.0框架及分析

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_36594703/article/details/81333391

1.springboot是一个快速整合第三方常用开发框架,简化XML,完全采用注解化,内置HTTP服务器,最终以java程序运行。

2.重点三部分:快速整合第三方框架、完全无配置文件(注解方式)、内置http服务器。

(1)快速整合第三方框架,原理maven子父依赖关系,相当于需要整合的环境的jar封装好依赖信息

(2)完全无配置文件(采用注解化)

如何初始化?没有web.xml那么tomcat如何启动的?注解在什么时候产生?spring3.0以上(提供注解)springmvc内置注解加载整个springmvc容器。使用java代码编写springmvc配置初始化,传统web项目,通过什么配置文件加载整个项目流程  web.xml----class文件。

(3)内置http服务器:java语言创建tomcat容器,使用类加载器加载class文件。

pom.xml:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>cn.e3mall</groupId>
  <artifactId>springboot-tomcat</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <dependencies>
  	<dependency>
  		<groupId>org.apache.tomcat.embed</groupId>
  		<artifactId>tomcat-embed-core</artifactId>
  		<version>8.5.28</version>
  	</dependency>
  	<!-- Tomcat对jsp支持 -->
  	<dependency>
  		<groupId>org.apache.tomcat</groupId>
  		<artifactId>tomcat-jasper</artifactId>
  		<version>8.5.16</version>
  	</dependency>
  	<dependency>
  		<groupId>org.springframework</groupId>
 		<artifactId>spring-web</artifactId>
 		<version>5.0.4.RELEASE</version>
 		<scope>compile</scope>
  	</dependency>
  	<dependency>
  		<groupId>org.springframework</groupId>
 		<artifactId>spring-webmvc</artifactId>
 		<version>5.0.4.RELEASE</version>
 		<scope>compile</scope>
  	</dependency>
  </dependencies>
</project>

一些配置文件加载springmvc----dispatcherServlet:

//加载springmvc---dispatcherServlet
public class SpittrWebAppInitializer 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[] {"/"};//拦截所有请求
	}	
}

WebConfig这个配置文件是springboot整合jsp配置视图解析器的。

@EnableWebMvc
@Configuration
@ComponentScan(basePackages= {"com.itmayiedu.controller"})
public class WebConfig extends WebMvcConfigurerAdapter{
	//需要配置视图解析器
	//springboot整合jsp最好是war包
	@Bean
	public ViewResolver viewResolver() {
		InternalResourceViewResolver viewResolver=new InternalResourceViewResolver();
		viewResolver.setPrefix("/WEB-INF/jsp/");
		viewResolver.setSuffix(".jsp");
		//可以在jsp页面通过${}访问beans
		viewResolver.setExposeContextBeansAsAttributes(true);
		return viewResolver;
	}
}

根配置其实主要是扫描注解:

//根配置
@Configuration
@ComponentScan("com.itmayiedu")
public class RootConfig {

}

Controller层IndexController:

@RestController
public class IndexController {
	@Autowired
	private UserService userService;
	@RequestMapping(value="/index",produces="text/html;charset=UTF-8")
	public String index() {
		return userService.index();
	}
}

Service层UserService:
 

@Service
public class UserService {
	public String index() {
		return "我正在雪springboot2.0";
	}
}

还有一个转发视图的controller这个是整合的jsp即UserController:

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

启动类,使用java语言写了一个tomcat容器:

public class AppTomcat {
	public static void main(String[] args) throws ServletException, LifecycleException {
		//使用java内置tomcat运行springMVC框架
		//原理:tomcat加载到springmvc注解启动方式,就会创建springmvc容器
		start();
	}
	public static void start() throws ServletException, LifecycleException {
		//创建Tomcat服务器
		//创建Tomcat服务器
		Tomcat tomcatServer=new Tomcat();
		//指定端口号
		tomcatServer.setPort(9090);
		//读取项目路径
		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执行
		resources.addPreResources(new DirResourceSet(resources,"/WEB-INF/classes",additionWebInfClasses.getAbsolutePath(),"/"));
		tomcatServer.start();
		//异步等待请求执行
		tomcatServer.getServer().await();
	}
}

猜你喜欢

转载自blog.csdn.net/qq_36594703/article/details/81333391