新建ServletConfig.java 配置视图解析器
package com.zhouzj.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.WebMvcConfigurer; import org.springframework.web.servlet.view.InternalResourceViewResolver; /** * SpringMVC 配置信息 </br> * * @EnableWebMvc 开启SpringMVC功能 </br> * * @author 作者 :zhouzj </br> * @version 创建时间:2019年5月26日 上午9:52:46 </br> * */ @Configuration @EnableWebMvc @ComponentScan(basePackages = {"com.zhouzj.controller"}) public class ServletConfig implements WebMvcConfigurer { //配置视图解析器 //创建SpringMVC视图解析器 @Bean public ViewResolver viewResolver() { InternalResourceViewResolver viewResolver = new InternalResourceViewResolver(); viewResolver.setPrefix("/WEB-INF/jsp/"); viewResolver.setSuffix(".jsp"); //配置jsp页面可以通过${}访问beans viewResolver.setExposeContextBeansAsAttributes(true); return viewResolver; } }新建RootConfig.java 根配置
/** * @author 作者 :zhouzj </br> * @version 创建时间:2019年5月26日 上午10:12:38 </br> */ package com.zhouzj.config; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; /** * 根配置 </br> * * @author 作者 :zhouzj </br> * @version 创建时间:2019年5月26日 上午10:12:38 </br> * */ @Configuration @ComponentScan(basePackages = {"com.zhouzj"}) public class RootConfig { }新建DispatcherServletInitializerApp.java 创建DispatcherServlet
package com.zhouzj.config; import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer; /** * 加载SpringMVC---DispatcherServlet </br> * * @author 作者 :zhouzj </br> * @version 创建时间:2019年5月26日 上午10:02:17 </br> * */ public class DispatcherServletInitializerApp extends AbstractAnnotationConfigDispatcherServletInitializer { // 加载根配置信息 Spring 核心 @Override protected Class<?>[] getRootConfigClasses() { return new Class[] {RootConfig.class}; } // SpringMVC 加载配置信息 @Override protected Class<?>[] getServletConfigClasses() { return new Class[] {ServletConfig.class}; } // SpringMVC拦截url的映射 @Override protected String[] getServletMappings() { return new String[] { "/" }; } }新建SpringBootApp.java 使用java代码创建tomcat
/** * @author 作者 :zhouzj </br> * @version 创建时间:2019年5月26日 上午10:16:15 </br> */ package com.zhouzj.boot; import java.io.File; import javax.servlet.ServletException; import org.apache.catalina.LifecycleException; import org.apache.catalina.core.StandardContext; import org.apache.catalina.startup.Tomcat; import org.apache.catalina.webresources.DirResourceSet; import org.apache.catalina.webresources.StandardRoot; /** * @author 作者 :zhouzj </br> * @version 创建时间:2019年5月26日 上午10:16:15 </br> * */ public class SpringBootApp { private static int PORT = 8080; private static String PATH = "target/classes"; public static void start() { //创建Tomcat容器 Tomcat tomcat = new Tomcat(); //设置tomcat端口号 tomcat.setPort(PORT); //添加项目读取路径 StandardContext standardContext = null; try { standardContext = (StandardContext) tomcat.addWebapp("/", new File("src/main").getAbsolutePath()); } catch (ServletException e) { e.printStackTrace(); } //禁止重新载入 standardContext.setReloadable(false); //创建WebRoot StandardRoot standardRoot = new StandardRoot(standardContext); //获取class文件读取地址 File fileClasses = new File(PATH); //tomcat读取classes执行 standardRoot.addPreResources(new DirResourceSet(standardRoot, "/WEB-INF/classes", fileClasses.getAbsolutePath(), "/")); try { tomcat.start(); } catch (LifecycleException e) { e.printStackTrace(); } //异步等待请求执行 tomcat.getServer().await(); } }新建SpringBootApplication.java 编写自定义注解类
/** * @author 作者 :zhouzj </br> * @version 创建时间:2019年5月26日 上午11:20:15 </br> */ package com.zhouzj.annotation; import java.lang.annotation.Documented; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; /** * 定义启动类注解 * * @author 作者 :zhouzj </br> * @version 创建时间:2019年5月26日 上午11:20:15 </br> * */ @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface SpringBootApplication { }新建SpringApplication.java 编写注解业务
package com.zhouzj.boot; import org.springframework.util.StringUtils; import com.zhouzj.annotation.SpringBootApplication; /** * * @author 作者 :zhouzj </br> * @version 创建时间:2019年5月26日 上午11:45:05 </br> */ public class SpringApplication { public static void run(Class<?> classes, String[] args) { SpringBootApplication annotation = classes.getDeclaredAnnotation(SpringBootApplication.class); if (!StringUtils.isEmpty(annotation)) { SpringBootApp.start(); } } }新建SpringBootApp.java SpringBoot启动类
package com.zhouzj.boot; import org.springframework.util.StringUtils; import com.zhouzj.annotation.SpringBootApplication; /** * * @author 作者 :zhouzj </br> * @version 创建时间:2019年5月26日 上午11:45:05 </br> */ public class SpringApplication { public static void run(Class<?> classes, String[] args) { SpringBootApplication annotation = classes.getDeclaredAnnotation(SpringBootApplication.class); if (!StringUtils.isEmpty(annotation)) { SpringBootApp.start(); } } }