EDUCODER头哥 SpringBoot初体验

极速版:

  1. 第一个Spring Boot程序
  • step5/demo/src/main/java/com/example/demo/controller/HelloController.java
java 复制代码
package com.example.demo.controller;

import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.RequestMapping;

@RestController
public class HelloController {

    //添加路由并编写相应方法
	/**********   Begin   **********/
    @RequestMapping("/hello")
    public String index() {
        return "Say Hello!";
    }
 
   /**********   End   **********/

}
  • step5/demo/src/main/java/com/example/demo/DemoApplication.java
java 复制代码
package com.example.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class DemoApplication {

	public static void main(String[] args) {
		//启动Spring Boot
		/**********   Begin   **********/
       SpringApplication.run(DemoApplication.class, args);
		/**********   End   **********/

	}

}
  • step5/demo/pom.xml
XML 复制代码
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.1.8.RELEASE</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>
	<groupId>com.example</groupId>
	<artifactId>demo</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>demo</name>
	<description>Demo project for Spring Boot</description>

	<properties>
		<java.version>1.8</java.version>
	</properties>

	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
	</dependencies>

	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>

</project>

  1. 实现登录、注册、下线功能
java 复制代码
package com.educoder.net;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class MyController {

	@RequestMapping("/login")
	@ResponseBody
	public String Login(){
		return "Welcome Login!";
	}

	@RequestMapping("/register")
	@ResponseBody
	public String Register(){
		return "Welcome Register!";
	}
	
	/********* Begin *********/
    @RequestMapping("/logout")
	@ResponseBody
	public String Logout(){
		return "GoodBye!";
	}

	/********* End *********/
}
  1. Spring Boot练习题

  • step4/hello/src/main/java/com/yy/hello/BlogAspect.java
java 复制代码
package com.yy.hello;
import java.util.Enumeration;

import javax.servlet.http.HttpServletRequest;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
@Aspect
@Component
public class BlogAspect {
    private Logger logger = LoggerFactory.getLogger(getClass());
	
    //定义切点
    @Pointcut("execution(public * com.yy.hello.controller.Blog.Login())")
    public void webLog() {

    }
    //前置通知,方法调用前被调用
    @Before("webLog()")
    public void doBefore(JoinPoint joinPoint) throws Throwable {
		  /**********   Begin   **********/
        // 获取HttpServletRequest对象
        ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
        HttpServletRequest request = attributes.getRequest();
        // 打印所给要求中的固定格式
        logger.info("---------------请求内容----------------");
        //打印URL
        logger.info("URL : "+request.getRequestURL());
        //打印请求方式
        logger.info("HTTP_METHOD : "+request.getMethod());
        // 打印所给要求中的固定格式
        logger.info("---------------请求内容----------------");
		  /**********   End   **********/

    }

    //在方法执行完结后打印返回内容
    @AfterReturning(returning = "ret", pointcut = "webLog()")
    public void doAfterReturning(Object ret) throws Throwable {
				  /**********   Begin   **********/
        // 打印所给要求中的固定格式
        logger.info("---------------返回内容----------------");
        // 处理完请求,打印返回内容
        logger.info("RESPONSE : " + ret);
		// 打印所给要求中的固定格式
        logger.info("---------------返回内容----------------");
        
		/**********   End   **********/

    }



}
  • step4/hello/src/main/java/com/yy/hello/controller/Blog.java
java 复制代码
package com.yy.hello.controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class Blog {

    //添加路由映射到/Login并编写相应方法返回Welcome Login!
	/**********   Begin   **********/
    @RequestMapping("/Login")
    public String Login(){
	    return "Welcome Login!";
    }
   /**********   End   **********/

}

以下题目

第1关:第一个Spring Boot程序

任务描述

Spring Boot是构建在所有基于Spring应用程序的起点,旨在用最少的Spring前端配置快速启动和运行。

本关任务:使用Spring Boot创建一个web程序。

相关知识

为了掌握本关知识,你需要掌握:

如何创建一个Spring Boot程序;

如何创建一个web程序。

课程视频 - 搭建一个SpringBoot 程序

创建一个 Spring Boot 程序

这里介绍一种最为简单的方式,官方提供了一个网址可以直接生成Spring Boot工程,地址是 https://start.spring.io/ , 进入这个地址,我们可以看到如下页面:

第一行项目类型选择Maven Project,第二行语言选择Java,第三行是 Spring Boot的版本,选择默认的就可以了,第四行是包的名字,第五行是依赖的包,这里不用填,最后点击下方绿色按钮,就会生成一个Spring Boot项目供我们下载到本地。

那么怎么导入这个工程到idea里面呢?

打开IDE,左上角File -> open,在弹出的对话框中选择下载到本地的项目,然后点击ok,项目即导入成功,如下所示:

项目启动类DemoApplication

它的代码如下:

package com.example.demo;

import org.springframework.boot.SpringApplication;

import org.springframework.boot.autoconfigure.SpringBootApplication;

//注解SpringBootApplication表明项目基于SpringBoot,同时下面的类是整个项目的启动类。

@SpringBootApplication

public class NetApplication {

//启动类有一个main函数是SpringBoot的特点之一,和普通的Java工程一样是使用main函数启动的。

public static void main(String[] args) {

//SpringApplication是SpringBoot框架的一个核心类,run是它的一个静态方法,方法的参数为当前类的Class对象和用户输入args

SpringApplication.run(NetApplication.class, args);

}

}

创建一个Web程序

首先,我们在导入的项目的pom.xml文件里加入如下依赖:

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-web</artifactId>

</dependency>

注:该依赖引入了web模块开发需要的相关jar包,版本信息都由spring-boot-starter-parent控制。

接着创建一个controller包,并在下面创建一个HelloController类:

package com.example.demo.controller;

import org.springframework.web.bind.annotation.RestController;

import org.springframework.web.bind.annotation.RequestMapping;

@RestController

public class HelloController {

@RequestMapping("/")

public String index() {

return "Hello Spring Boot!";

}

}

该类被标记为@RestController,这意味着Spring MVC可以使用它来处理Web请求。 @RequestMapping 注释提供"路由"信息。它告诉Spring,任何带有/路径的HTTP请求都应该映射到index()方法。 从浏览器调用或在命令行上使用curl时,该方法返回纯文本。 这是因为@RestController结合了@Controller和@ResponseBody,两个注释导致Web请求返回数据而不是视图。

这样一个简单的Web程序就搭建起来了,然后就可以运行该程序了,运行成功后,打开浏览器,输入http://localhost:8080,得到的页面如下:

编程要求

请仔细阅读右侧代码,根据方法内的提示,在Begin - End区域内进行代码补充,完成如下任务:

补全代码,当在浏览器输入http://localhost:8080/hello时,页面返回Say Hello!.

测试说明

补充完代码后,点击测评,平台会对你编写的代码进行测试,当你的结果与预期输出一致时,即为通过。


第2关:实现登录、注册、下线功能

任务描述

Spring Boot非常适合Web应用程序开发,你可以使用其自带的Tomcat,Jetty,Undertow或Netty创建HTTP服务器。

本关任务: 使用Spring Boot实现一个'博客系统'的登录,注册,下线功能。

相关知识

Web 请求

Spring Boot既然是Web后台框架,那么它就需要处理Web请求,我们来看一个典型的Web请求(按下F12键,选择网络,然后点击本网站的登录按钮,你看到的第一个请求如下):

图 1 Web请求图

请求网址和地址栏的网址没有本质的区别,地址栏网址请求的是整个页面,而上面的这种网址请求的一般是页面中的一个具体的元素:一张图片,一段音乐等,它的粒度更小。

用Spring Boot处理这种请求的时候,关键是把不同的请求映射到不同的Java 方法上,比如我们可能会用LoginAction()方法来处理/login请求,而用RegisterAction()来处理/register请求。

用 Spring Boot 处理 Web 请求,添加 Java 类

在上一关的代码的基础上做如下修改,我们的项目就能实现登录处理功能。

第一步,我们在controller包下新建一个类BlogController,代码如下所示:

package com.example.demo.controller;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RestController;

//这里也可以有一个@RequestMapping("/test"),如果有,那么下面的第一个方法拦截的就是/test/login结尾的请求,也就是说,这里的注解配置的是上一层的拦截地址。

@RestController

public class BlogController {

//表示下面的方法处理的是以/login结尾的请求。

@RequestMapping("/login")

public String Login(){

return "Welcome Login!";

}

//表示下面的方法处理的是以/register结尾的请求。

@RequestMapping("/register")

public String Register(){

return "Welcome Register!";

}

}

还是按照上一关介绍的方法运行这个项目,运行成功后,打开浏览器,输入http://localhost:8080/login,得到的页面如下:

图 2 页面一

我们再输入http://localhost:8080/register ,得到的页面如下:

图 3 页面二

可以看到,不同的请求被不同的方法做了处理,最终返回相应的结果。

编程要求

本关的编程任务是在右侧的Begin和End中间添加一个具有下线功能的Java方法,要求该方法能处理以/logout结尾的Web请求,然后返回字符串GoodBye!。(方法的名字不做限制)

测试说明

测试过程:

平台将读取用户补全后的MyController.java;

然后启动这个Spring Boot工程;

通过向该工程发送请求http://localhost:8080/logout ,获取相应的返回;

如果添加的方法正确,将返回GoodBye!,否则会直接报错。

以下是测试样例:

预期输出:GoodBye!


第3关:Spring Boot练习题

任务描述

我们已经学习了Spring和Spring Boot,那么我们怎么把Spring中的面向切面思想与Spring Boot结合使用呢?

本关任务:使用Spring中的AOP记录Web请求日志。

相关知识

为了完成本关任务,你需要掌握:

如何获取Web请求对象;

如何获取Web请求返回的内容。

Sprig Boot整合AOP

在pom.xml中添加相关依赖:

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-aop</artifactId>

</dependency>

如何获取 Web 请求对象

在Spring Boot中我们可以通过RequestContextHolder很方便的获取请求对象。

ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();

HttpServletRequest request = attributes.getRequest();

获取HttpServletRequest对象后,我们可以获取其中的许多信息,比如:

request.getRequestURL()可以获取URL;

request.getMethod()可以获取请求方式。

#####如何获取 Web 请求返回的内容

使用@AfterReturning通知在切入点返回内容之后切入内容(用来对处理返回值做一些加工处理)

@AfterReturning(returning = "ret", pointcut = "webLog()")

public void doAfterReturning(Object ret) throws Throwable {

// 获取处理完请求后的返回内容

logger.info("RESPONSE : " + ret);

}

编程要求

请仔细阅读右侧代码,根据方法内的提示,在Begin - End区域内进行代码补充(有个pom.xml需要填充相关依赖),使用AOP记录Web登录请求日志,获取请求URL,请求方式以及请求后的返回内容。

并在请求内容前后输出---------------请求内容----------------

在返回内容前后输出---------------返回内容----------------。

后台会自动启动该Spring Boot工程并请求以/Login结尾的Web请求。

测试说明

补充完代码后,点击测评,平台会对你编写的代码进行测试,当你的结果与预期输出一致时,即为通过。

预期输出:

---------------请求内容----------------

URL : http://localhost:8989/Login

HTTP_METHOD : GET

---------------请求内容----------------

---------------返回内容----------------

RESPONSE : Welcome Login!

---------------返回内容----------------

相关推荐
40岁的系统架构师2 分钟前
1 JVM JDK JRE之间的区别以及使用字节码的好处
java·jvm·python
皓木.2 分钟前
(自用)配置文件优先级、SpringBoot原理、Maven私服
java·spring boot·后端
舞者H5 分钟前
启动异常:Caused by: java.lang.IllegalStateException: Failed to introspect Class
java
代码中の快捷键6 分钟前
java开发面试有2年经验
java·开发语言·面试
壹佰大多8 分钟前
【spring-cloud-gateway总结】
java·spring·gateway
CodeChampion9 分钟前
60.基于SSM的个人网站的设计与实现(项目 + 论文)
java·vue.js·mysql·spring·elementui·node.js·mybatis
谢家小布柔12 分钟前
Java 中的字符串
java·开发语言
码老白12 分钟前
【老白学 Java】HashSet 应用 - 卡拉 OK(五)
java·开发语言
i7i8i9com13 分钟前
java 1.8+springboot文件上传+vue3+ts+antdv
java·spring boot·后端
秋意钟13 分钟前
Spring框架处理时间类型格式
java·后端·spring