前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >纯手写SpringMVC到SpringBoot框架项目实战

纯手写SpringMVC到SpringBoot框架项目实战

作者头像
用户5224393
发布2019-08-13 15:57:27
9530
发布2019-08-13 15:57:27
举报
文章被收录于专栏:Java研发军团

引言

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

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

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

1.导入相关依赖

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

代码如下:

代码语言:javascript
复制
<!-- 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视图解析器。

代码如下:

代码语言:javascript
复制
//表示这是一个配置类,配置<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层的,代码如下:

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

}

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

4.加载springMVC的dispatcherservlet

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

代码如下:

代码语言:javascript
复制
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业务类

代码如下:

代码语言:javascript
复制
@Service
public class IndexService {

  public String show() {
    return "我是service层";
  }
}

controller层

代码如下:

代码语言:javascript
复制
@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页面

代码语言:javascript
复制
<%@ 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.启动类

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

代码如下:

代码语言:javascript
复制
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也没有配置要求

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-11-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Java研发军团 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.导入相关依赖
  • 2.加载spring mvc的相关配置信息
  • 3.加载spring容器相关配置信息
  • 4.加载springMVC的dispatcherservlet
  • 5.service层
  • controller层
  • 7.jsp页面
  • 8.启动类
  • 9.测试结果
  • 总结
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档