微服务技术系列教程(02) - SpringBoot - Web开发

简介: 微服务技术系列教程(02) - SpringBoot - Web开发

代码已提交至Github,有兴趣的同学可以下载来看看:https://github.com/ylw-github/SpringBoot-Web-Demo

本文目录结构:

l____1.静态资源访问

l____2.渲染Web页面

l_______2.1 使用FreeMarker模板引擎渲染Web视图

l_______2.2 使用JSP渲染Web视图

l____3.异常捕获

l____总结

1. 静态资源访问

在我们开发Web应用的时候,需要引用大量的js、css、图片等静态资源。

Spring Boot默认提供静态资源目录位置需置于classpath下,目录名需符合如下规则:

/static
/public
/resources  
/META-INF/resources

举例:我们可以在src/main/resources/目录下创建static,在该位置放置一个图片文件。启动程序后,尝试访问http://localhost:8080/sun.png。如能显示图片,配置成功。

项目结构图:

运行程序后:

2. 渲染Web页面

在之前的示例中,我们都是通过@RestController来处理请求,所以返回的内容为json对象。那么如果需要渲染html页面的时候,要如何实现呢?

答:可以使用到模板引擎

在动态HTML实现上Spring Boot依然可以完美胜任,并且提供了多种模板引擎的默认配置支持,所以在推荐的模板引擎下,我们可以很快的上手开发动态网站。

Spring Boot提供了默认配置的模板引擎主要有以下几种:

  • Thymeleaf
  • FreeMarker
  • Velocity
  • Groovy
  • Mustache

Spring Boot建议使用这些模板引擎,避免使用JSP,若一定要使用JSP将无法实现Spring Boot的多种特性。当你使用上述模板引擎中的任何一个,它们默认的模板配置路径为:src/main/resources/templates

2.1 使用FreeMarker模板引擎渲染Web视图

1.添加Maven依赖:

<!-- 引入FreeMarker的依赖包 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-freemarker</artifactId>
    <version>2.1.3.RELEASE</version>
</dependency>

2.在src/main/resources/创建一个templates文件夹,后缀为*.ftl,创建index.ftl:

<!DOCTYPE html>
<html>
    <head lang="en">
        <meta charset="UTF-8"/>
        <title>首页</title>
    </head>
    <body>
        ${name}
        <#if sex=="1">
        <#elseif sex=="2">
        <#else>
            其他
        </#if>
        <#list userlist as user>
            ${user}
        </#list>
    </body>
</html>

3.IndexController

package com.ylw.springboot.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@Controller
public class IndexController {
    @RequestMapping("/index")
    public String index(Map<String, Object> result) {
        result.put("name", "Dumas");
        result.put("sex", "male");
        List<String> listResult = new ArrayList<String>();
        listResult.add("Jim");
        listResult.add("David");
        listResult.add("Hary");
        result.put("userlist", listResult);
        return "index";
    }
}

4.运行程序,浏览器输入 localhost:8080/index

关于Freemarker配置:

可以新建application.properties文件:

########################################################
###FREEMARKER (FreeMarkerAutoConfiguration)
########################################################
spring.freemarker.allow-request-override=false
spring.freemarker.cache=true
spring.freemarker.check-template-location=true
spring.freemarker.charset=UTF-8
spring.freemarker.content-type=text/html
spring.freemarker.expose-request-attributes=false
spring.freemarker.expose-session-attributes=false
spring.freemarker.expose-spring-macro-helpers=false
#spring.freemarker.prefix=
#spring.freemarker.request-context-attribute=
#spring.freemarker.settings.*=
spring.freemarker.suffix=.ftl
spring.freemarker.template-loader-path=classpath:/templates/
#comma-separated list
#spring.freemarker.view-names= # whitelist of view names that can be resolved

2.2 使用JSP渲染Web视图

1.添加Maven依赖:

<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-tomcat</artifactId>
   <version>2.1.6.RELEASE</version>
</dependency>
<dependency>
   <groupId>org.apache.tomcat.embed</groupId>
   <artifactId>tomcat-embed-jasper</artifactId>
   <version>8.5.31</version>
</dependency>

2.新建webapp/WEB-INF/jsp/index1.jsp文件

3.编写Controller

@RequestMapping("/indexJsp")
public String indexJsp() {
    return "index1";
}

4.浏览器输入:http://localhost:8080/indexJsp,运行程序:

注意:创建SpringBoot整合JSP,一定要为war类型,否则会找不到页面

3.异常捕获

@ExceptionHandler 表示拦截异常

  • @ControllerAdvice 是 controller 的一个辅助类,最常用的就是作为全局异常处理的切面类
  • @ControllerAdvice 可以指定扫描范围
  • @ControllerAdvice 约定了几种可行的返回值,如果是直接返回 model 类的话,需要使用 @ResponseBody 进行 json 转换

请求返回的格式有如下几种:

  • 返回 String,表示跳到某个 view
  • 返回 modelAndView
  • 返回 model + @ResponseBody

例如:

测试方法:

@RequestMapping("/testException")
public String testException() {
    throw new RuntimeException("模拟运行时异常!");
}

浏览区输入:http://localhost:8080/testException,运行:

总结

目录
相关文章
|
2月前
|
Kubernetes Java 容器
部署 Spring Boot 应用到 K8S 教程
部署 Spring Boot 应用到 K8S 教程
48 0
|
13天前
|
JSON Java fastjson
Spring Boot 底层级探索系列 04 - Web 开发(2)
Spring Boot 底层级探索系列 04 - Web 开发(2)
21 0
|
13天前
|
Java 关系型数据库 MySQL
一套java+ spring boot与vue+ mysql技术开发的UWB高精度工厂人员定位全套系统源码有应用案例
UWB (ULTRA WIDE BAND, UWB) 技术是一种无线载波通讯技术,它不采用正弦载波,而是利用纳秒级的非正弦波窄脉冲传输数据,因此其所占的频谱范围很宽。一套UWB精确定位系统,最高定位精度可达10cm,具有高精度,高动态,高容量,低功耗的应用。
一套java+ spring boot与vue+ mysql技术开发的UWB高精度工厂人员定位全套系统源码有应用案例
|
14天前
|
存储 数据可视化 安全
Java全套智慧校园系统源码springboot+elmentui +Quartz可视化校园管理平台系统源码 建设智慧校园的5大关键技术
智慧校园指的是以物联网为基础的智慧化的校园工作、学习和生活一体化环境,这个一体化环境以各种应用服务系统为载体,将教学、科研、管理和校园生活进行充分融合。无处不在的网络学习、融合创新的网络科研、透明高效的校务治理、丰富多彩的校园文化、方便周到的校园生活。简而言之,“要做一个安全、稳定、环保、节能的校园。
39 6
|
23天前
|
消息中间件 监控 Java
微服务技术发展
微服务技术发展
|
28天前
|
Java Docker 微服务
理解微服务架构:Java Web开发的新趋势
【4月更文挑战第3天】微服务架构因应对快速迭代、高可用性和可扩展性的需求而兴起,成为Java Web开发主流。它将复杂应用拆分成独立小服务,通过轻量级通信机制交互,实现模块化、独立部署、可扩展性、技术多样性和容错性。Spring Boot、Spring Cloud和Docker等工具可简化微服务实现。通过创建微服务项目、编写代码、集成Spring Cloud、创建其他服务及部署,开发者可入门微服务架构。
|
2月前
|
自然语言处理 运维 Cloud Native
云原生技术专题 | 探索云原生化的服务架构体系的技术风向,攻克云原生化微服务架构的痛点和特性
云原生技术专题 | 探索云原生化的服务架构体系的技术风向,攻克云原生化微服务架构的痛点和特性
35 0
|
2月前
|
人工智能 自然语言处理 运维
云原生技术专题 | 年终盘点探索服务架构体系的技术风向,构建微服务核心能力
云原生技术专题 | 年终盘点探索服务架构体系的技术风向,构建微服务核心能力
33 0
|
2月前
|
Java fastjson 数据安全/隐私保护
【Dubbo3技术专题】「云原生微服务开发实战」 一同探索和分析研究RPC服务的底层原理和实现
【Dubbo3技术专题】「云原生微服务开发实战」 一同探索和分析研究RPC服务的底层原理和实现
40 0
|
2月前
|
Cloud Native Dubbo 应用服务中间件
【Dubbo3技术专题】拥有新时代的通信协议,引领云原生迈向更高的舞台 | 解密Dubbo3是如何从微服务升华到云原生领域
【Dubbo3技术专题】拥有新时代的通信协议,引领云原生迈向更高的舞台 | 解密Dubbo3是如何从微服务升华到云原生领域
39 1