一 丶原理剖析
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
好的,看完的话,记得分享分享文章!