引言

Spring Boot其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。

通过这种方式,springboot是一个快速整合第三方框架的,简化了xml的配置,项目中再也不包含web.xml文件了,完全使用注解来完成操作的,并且内部自带tomcat启动。直接使用jar文件运行即可。

好了大概了解了springboot有啥用处,本章节主要目的就是仿造一个springboot整合jsp的小实战。下面开始代码演示了。

1.导入相关依赖

创建项目之后需要引入tomcat,springmvc,spring-web,jsp相关的jar包。

代码如下:

<!-- tomcat相关jar -->
<dependency>
 <groupId>org.apache.tomcat.embed</groupId>
 <artifactId>tomcat-embed-core</artifactId>
 <version>8.5.34</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.10.RELEASE</version>
 <scope>compile</scope>
</dependency>
<!-- springmvc相关jar -->
<dependency>
 <groupId>org.springframework</groupId>
 <artifactId>spring-webmvc</artifactId>
 <version>5.0.10.RELEASE</version>
 <scope>compile</scope>
</dependency>

2.加载spring mvc的相关配置信息

需要创建一个springmvc相关配置类继承WebMvcConfigurationSupport ,这里只配置一个springmvc视图解析器。

代码如下:

//表示这是一个配置类,配置<beans></beans>
@Configuration
//表示配置视图解析器,开启注解的相关配置,以及<bean></bean>等等。
@EnableWebMvc
//表示包扫描
@ComponentScan(basePackages = {"springboot.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;
 }
}

@Configuration:表示这是一个配置类,配置<beans></beans>。

@EnableWebMvc:开启注解的相关配置(配置视图解析器,以及<bean></bean>)等等。
@ComponentScan:表示包扫描。

viewResolver.setExposeContextBeansAsAttributes(true):jsp页面可以使用el表达式。

 

3.加载spring容器相关配置信息

创建一个SpringBeanScanConfig配置类,这个类主要是扫描service和dao层的,代码如下:

//表示配置类
@Configuration
//如果写了dao层,那么这里也需要扫描一下dao层
@ComponentScan("springboot.service")
public class SpringBeanScanConfig{ }

这个类目前什么都不需要做。

4.加载springMVC的dispatcherservlet

创建一个加载SpringMVC的DispatcherServlet的类。

代码如下:

public class DispatcherServletWebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
 /**
  * 加载spring容器配置信息
  * @return
  */
 @Override
 protected Class<?>[] getRootConfigClasses() {
    return new Class[] {Service_DaoConfig.class};
 }  /**
  * 加载springmvc配置信息
  * @return
  */
 @Override
 protected Class<?>[] getServletConfigClasses() {
   return new Class[]{WebConfig.class};
 }  /**
  * springmvc映射 拦截url所有请求"/"
  * @return
  */
 @Override
 protected String[] getServletMappings() {
   return new String[]{"/"};
 }
}

解释:

getRootConfigClasses():表示加载spring容器配置信息

getServletConfigClasses():表示加载springmvc配置信息

getServletMappings():表示springmvc映射 拦截url所有请求"/"

下面代码就容易理解了。

 

5.service层

 

在service层创建一个IndexService业务类

代码如下:

@Service
public class IndexService {  public String show() {
   return "我是service层";
 }
}

controller层

代码如下:

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

这里我们写了2个方法,index1()方法是返回json字符串形式,index2是跳转jsp页面并且带了一个str参数返回在jsp页面显示的。

7.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>springboot</title>
</head>
<body>
  <h1>这是一个手写的springboot框架</h1>
  这里显示后台返回的数据为:【${str}】
</body>
</html>

${str}:这个表示后台带了一个str参数返回到jsp页面的,值应该为【我是service层】

 

8.启动类

这里就直接贴代码了,注释都写在代码中了。

代码如下:

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/classes", additionWebInfClasses.getAbsolutePath(), "/"));
   tomcatServer.start();
   // 异步等待请求执行
   tomcatServer.getServer().await();
 }
}

9.测试结果

启动程序看控制台显示加载情况:

以上创建的Service_DaoConfig和WebConfig2个配置类都加载成功。

输入地址:http://localhost:8080/index1显示为:“手写springboot。。。”

如图:

输入地址:http://localhost:8080/index2显示为:“这是一个手写的springboot框架 这里显示后台返回的数据为:【我是service层】”

如图:

总结

springboot主要特点为:

1. 创建独立的Spring应用程序

2. 嵌入的Tomcat,无需部署WAR文件

3. 简化Maven配置

4. 自动配置Spring

5. 提供生产就绪型功能,如指标,健康检查和外部配置

6. 绝对没有代码生成并且对XML也没有配置要求

纯手写SpringMVC到SpringBoot框架项目实战的更多相关文章

  1. 纯手写SpringMVC框架,用注解实现springmvc过程

    闲话不多说,直接上代码! 1.第一步,首先搭建如下架构,其中,annotation中放置自己编写的注解,主要包括service controller qualifier RequestMapping ...

  2. 纯手写SpringMVC架构,用注解实现springmvc过程

    1.第一步,首先搭建如下架构,其中,annotation中放置自己编写的注解,主要包括service controller qualifier RequestMapping 第二步:完成对应的anno ...

  3. 手写一个类SpringBoot的HTTP框架:几十行代码基于Netty搭建一个 HTTP Server

    本文已经收录进 : https://github.com/Snailclimb/netty-practical-tutorial (Netty 从入门到实战:手写 HTTP Server+RPC 框架 ...

  4. (二)springMvc原理和手写springMvc框架

    我们从两个方面了解springmvc执行原理,首先我们去熟悉springmvc执行的过程,然后知道原理后通过手写springmvc去深入了解代码中执行过程. (一)SpringMVC流程图 (二)Sp ...

  5. 手写SpringMVC 框架

    手写SpringMVC框架 细嗅蔷薇 心有猛虎 背景:Spring 想必大家都听说过,可能现在更多流行的是Spring Boot 和Spring Cloud 框架:但是SpringMVC 作为一款实现 ...

  6. 手写SpringMVC框架(二)-------结构开发设计

    续接前文, 手写SpringMVC框架(一)项目搭建 本节我们来开始手写SpringMVC框架的第二阶段:结构开发设计. 新建一个空的springmvc.properties, 里面写我们要扫描的包名 ...

  7. springmvc 动态代理 JDK实现与模拟JDK纯手写实现。

    首先明白 动态代理和静态代理的区别: 静态代理:①持有被代理类的引用  ② 代理类一开始就被加载到内存中了(非常重要) 动态代理:JDK中的动态代理中的代理类是动态生成的.并且生成的动态代理类为$Pr ...

  8. 手写SpringMVC框架(三)-------具体方法的实现

    续接前文 手写SpringMVC框架(二)结构开发设计 本节我们来开始具体方法的代码实现. doLoadConfig()方法的开发 思路:我们需要将contextConfigLocation路径读取过 ...

  9. 纯手写Myatis框架

    1.接口层-和数据库交互的方式 MyBatis和数据库的交互有两种方式: 使用传统的MyBatis提供的API: 使用Mapper接口: 2.使用Mapper接口 MyBatis 将配置文件中的每一个 ...

随机推荐

  1. 梯度下降法(BGD、SGD)、牛顿法、拟牛顿法(DFP、BFGS)、共轭梯度法

    一.梯度下降法 梯度:如果函数是一维的变量,则梯度就是导数的方向:      如果是大于一维的,梯度就是在这个点的法向量,并指向数值更高的等值线,这就是为什么求最小值的时候要用负梯度 梯度下降法(Gr ...

  2. Entity Framework Code First(概要)

    EF开源项目地址:https://github.com/aspnet/EntityFramework6 MSDN :https://msdn.microsoft.com/en-us/library/a ...

  3. vim复制粘贴快捷键

    mac下vim复制数据到剪切板: 查看目录是否支持 vim --version |grep "clipboard"

  4. caffe配置文件

    一.数据层及参数 要运行caffe,需要先创建一个模型(model),如比较常用的Lenet,Alex等, 而一个模型由多个屋(layer)构成,每一屋又由许多参数组成.所有的参数都定义在caffe. ...

  5. Git安装及创建版本库

    一.在Windows上安装Git 1.虽然用于开发的系统最好是用Mac或者Linux,但绝大多数新人都是用Windows进行开发.Windows系统上也有提供了Git(Windows版),下载地址:h ...

  6. caffe深度学习进行迭代的时候loss曲线开始震荡原因

    1:训练的batch_size太小 1.       当数据量足够大的时候可以适当的减小batch_size,由于数据量太大,内存不够.但盲目减少会导致无法收敛,batch_size=1时为在线学习. ...

  7. 删除SQL Server大容量日志的方法(转)

    删除SQL Server大容量日志的方法 亲自实践的方法 1.分享数据库,如果提示被其他连接占用,不能分离,刚勾上drop connections 2.复制下所有文件,一定要备份好,以防自己操作失误 ...

  8. spring4.0.0 源码导入eclipse(sts)

    其余步骤请见:http://www.cnblogs.com/xiluhua/p/7450972.html 执行 gradle eclipse -x :eclipse 报错: 解决办法: 找到 行,注释 ...

  9. python windows安装 SQLServer pymssql,

    1.到正儿八经的网站下载文件,找到适合自己的版本 2.把文件放到一个地方,能让pip找到就行, 不放scripts下面的话, 恐怕会报错“FileNotFoundError" 3. 走到pi ...

  10. 这份书单,给那些想学Hadoop大数据、人工智能的人

    一.简单科普类 (文末附下载链接) 1.<人工智能:李开复谈AI如何重塑个人.商业与社会的未来图谱2> 作者:李开复,王咏刚 推荐理由:文章写得一般,但李开复和王永刚老师总结的还可以,算国 ...