一、填空题
- Spring Boot Maven 项目的依赖配置文件是:pom.xml,默认的视图模板文件夹 是:resources/templates。
- Spring Boot 项目中的@Controller 注解完成的功能是:实现 MVC 控制器, @GetMapping 注解的功能是:响应 GET 请求。
- SSE 的含义是服务器发送事件, WebSocket 是一种在单个 TCP 连接上进行全 双工通讯的技术。
- REST 的含义是:表现出状态转移。
- @CrossOrigin 注解的作用是:跨域配置。
- Spring Boot 项目的打包命令是:mvn package,两种打包发布方式分别是: jar、war。
- Spring Boot 项 目 中 若 采集表单 参数,应 在 响应函数 的 参数中使用 @RequestParam 注解,若采集客户端发送的 JSON 数据,应采用@RequestBody 注解.
- 多对一实体映射对应的注解是:@ManyToOne,一对一实体映射对应的注解 是:@OneToOne。
- 互联网 IP 地址的作用是用于区分联网的计算机设备,端口号的作用是用于标识计算机的应用程序, Http 服务器的默认端口号是: 80, Spring Boot 应用程序的 默认端口号是:8080。如果要配置 Spring Boot 应用程序的端口号为 9000, 则应 修改应用程序配置文件 application.properties,添加配置语句: server.port=9000。
- Spring Boot MVC 应用程序默认的静态页面文件夹是: resources/public 或 resources/static, Spring Boot Maven 项目的依赖配置文件是: pom.xml。
- 在设计RESTful API时, 一般将DELETE请求用于删除资源, GET请求用于获取资源,PATCH请求用于修改资源。
二、单项选择题
- Spring MVC程序中若某Thymeleaf视图模板文件中需要引入user属性,在下面渲染user属性值的正确写法是:( )
A) <span th:text="#{user}"></span>
B) <span th:text="*{name}"></span>
C) <span th:text="${name}"></span>
D) <span th:text="@{name}"></span> -
控制器类的方法若要采集查询参数,则应使用如下的哪个注解?(
A) @RequestParamB) @RequesBody
C) @ResponseBody
D) @PathVariable
- 以下Thymeleaf依赖配置中,正确的是:( )
A)
<dependency><groupId>org.springframework.boot</groupId>
<artifactid>spring-boot-thymeleaf</artifactId>
</dependency>
B)
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactid>spring-boot-starter-thymeleaf</artifactId>
</dependency>
C) <dependencies>
<groupId>org.springframework.boot</groupId>
<artifactid>spring-boot-thymeleaf</artifactId>
</dependencies>
D)
<dependencies>
<groupId>org.springframework.boot</groupId>
<artifactid>spring-boot-starter-thymeleaf</artifactId>
</dependencies>
- 控制器的类方法中若要采集前端提交的路由参数,应采用如下的哪个注解?( )
A) @PathVariable B)@RequestParam
C) @RequestBody D)@ResponseBody
- 若某RESTful API的服务localhost/students是删除学生信息的操作,则应使用哪个动词HTTP动词进行设计?( )
A) GET
B) POST
C) PUT
D) DELETE
- 控制器类的方法若要采集前端输入的路径参数,则该方法的注解写法正确的是( )
A) @GetMapping("/person/{name}/{age}")
B) @GetMapping("/person/{:name}/{:age}")
C) @GetMapping("/person/[name]/[age]")
D) @GetMapping("/person/(name)/(age)")
- 下列用于标注MyBatis接口的注解是( )
A) @Mapper;
B) @Entity;
C) @Table;
D) @Configuratio
三、程序阅读题
- 本例Spring MVC程序主要功能是使用Thymeleaf模板引擎显示学生成绩表。该程序需要在文件Student.java中定义一个Student模型, 在HomeController.java中定义控制器,在index.html中使用Thymeleaf模板引擎渲染学生成绩信息。请补全各自文件中的代码。
模型文件Student.java public class Student {
private String sid; //学号
private String name; //姓名
private float score; //成绩
public Student(String sid, String name, float score) {
this.sid = sid;
this.name = name;
this.score = score;
}
public String getSid() {
return sid;
}
public void setSid(String sid) {
this.sid = sid;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public float getScore() {
return score;
}
public void setScore(float score) {
this.score = score;
}
控制器文件HomeController.java import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import java.util.ArrayList;
import java.util.List;
@Controller
public class HomeController {
private List<Student> list;
public HomeController() {
this.list=new ArrayList<Student>();
this.list.add(new Student("18001","Mr. wang", 90.0f)); this.list.add(new Student("18002","Mrs. Zhang", 80.0f));
this.list.add(new Student("18003","Mr. Liang", 70.0f));
this.list.add(new Student("18004","Mr. Kang", 85.0f));
}
@GetMapping("/")
public String index(Model model){
model.addAttribute("caption", "《Java 高级程序设计》成绩单");
model.addAttribute("students", list);
return index;
}
}视图模板文件index.html <!DOCTYPE html>
<html lang="en" xmlns:th="http://www.w3.org/1999/xhtml">
<head>
<meta charset="UTF-8">
<title>学生成绩单</title>
<style>
caption{
font-size:20px;
}
</style>
</head>
<body>
<div style="width:75%; margin:10px auto 10px auto">
<table border="1" width="100%">
<caption th:text="${caption}"></caption>
<thead>
<tr>
<th width="10%">学号</th>
<th>姓名</th>
<th>成绩</th>
</tr>
</thead>
<tbody>
<tr th:each="student:${students}">
<td th:text="${student.sid}">学号</td>
<td th:text="${student.name}">姓名</td>
<td th:text="${student.score}">成绩</td>
</tr>
</tbody>
</table>
</div>
</body>
</html>
- 本例程序使用Spring Data JPA访问MySQL数据库,实现图书管理系统的RESTful API。该程序需要编写图书模型文件Book.java, 图书仓储接口文件BookRepository.java, 控制器文件BookController.java。
MySQL数据库表设计如下:
drop database if exists books_db;
create database books_db default charset=utf8;
use books_db;
create table books(id integer auto_increment primary key,
isbn varchar(15) not null unique, //书号,非空,不能重复
name varchar(50) not null, //书名,非空
press varchar(50) not null //出版社, 非空
); // 表名为books//Book.java文件如下,请补全空格处的代码。
package cn.anntek;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name="books")
public class Book {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
@Column (nullable = false, unique = true)
private String isbn;//书号
@Column(nullable = false)
private String name;//书名
@Column(nullable = false)
private String press;//出版社
public Book() {
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getIsbn() {
return isbn;
}
public void setIsbn(String isbn) {
this.isbn = isbn;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPress() {
return press;
}
public void setPress(String press) {
this.press = press;
}
}
//BookRepository.java文件如下,请补全空格处的代码。
package cn.anntek;
import org.springframework.data.jpa.repository.JpaRepository;
public interface BookRepository extends JpaRepository<Book, Integer> {
}
//BookController.java文件如下,请补全空格处的代码。
package cn.anntek;
import jdk.nashorn.internal.runtime.options.Option;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
@RestController
public class BookController {
@Autowired
private BookRepository bookRepository;
// 获取书籍列表
@GetMapping("/books")
public List<Book> getBooks(){
return bookRepository.findAll();
}
// 增加书籍
@PostMapping("/books")
public Book saveBook(@RequestBody Book book){
System.out.println(book.getName());
bookRepository.save(book);
return book;
}
// 修改书籍
@PutMapping ("/books/{id}")
//修改
public Book updateBook(@RequestBody Book book, @PathVariable Integer id){
Optional<Book> op=bookRepository.findById(id);
if(op.isPresent()){
Book book_fd=op.get();
book_fd.setIsbn(book.getIsbn());
book_fd.setName(book.getName());
book_fd.setPress(book.getPress());
bookRepository.save(book_fd);
return book_fd;
}else{
return null;
}
}
@DeleteMapping ("/books/{id}")
//删除书籍
public void deleteBook(@PathVariable Integer id){
bookRepository.deleteById(id);
}
}
四、简答题
- MVC的含义是什么?请简述Spring MVC Web开发方式的基本过程和方法。
MVC 的含义是模型、视图与控制器。MVC 程序的主要特点是控制器响应浏览器发送的请求, 将模型数据渲染到视图中并输出到浏览器。 创建 Spring MVC 程序时,依赖项需要勾选 Spring Web 和是视图渲染引擎(常用 Thymeleaf), 然后编写模型文件,控制器文件,以及视图文件。在控制器文件中定义方法,返回视图模板文 件名或重定向路由。- 请简述Spring Boot 相比于传统的 SSM 框架主要优点。
采用自动化配置,解决了 SSM(spring、spring mvc 、mybatis)框架配置复杂度高的 问题; ² 可以使用其他持久层框架,比如 JPA 以及 MongoDB 等数据库框架; ² 可以开发反应式 Web 程序(Webflux);- 请简述Websocket的特性。
WebSocket 是 HTML5 开始提供的一种在单个 TCP 连接上进行全双工通讯的协议。- 请简述Spring Boot应用程序如何实现安全性?。
为了实现 Spring Boot 的安全性,使用 spring-boot-starter-security 依赖项,并且必须添加安全配置。它只需要很少的代码。配置类将必须扩展 WebSecurityConfigurerAdapter 并覆盖其方法。- 请简述基于会话信息(cookie 和session)的认证技术的原理和过程。
5.1、用户向服务器发送用户名和密码
5.2、服务器验证通过后,在当前对话(session)里面保存相关数据,比如用户角色、登录时间等等。
5.3、服务器向用户返回一个session_id,写入用户的Cookie。
5.4、用户随后的每一次请求,都会通过Cookie,将session_id 传回服务器。
5.5、服务器收到session_id,找到前期保存的数据,由此得知用户的身份。- 请简述基于JWT(json web token)的认证技术的原理和过程。
5.1、用户向服务器发送用户名和密码
5.2、服务器验证通过后,回发一个 JWT 给合法用户。
5.3、客户端每次访问服务都要一起发送 JWT 给服务器。
5.4、用户随后的每一次请求,都会通过Cookie,将session_id 传回服务器。
5.5、服务器完全只靠这个 JWT 对象认定用户身份。为了防止用户篡改数据,服务器在生成这个 对象的时候,会加上签名。- 请简述Swagger框架的主要作用是什么?
Swagger 是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful API,是一个非常流行的 API 文档生成工具。Swagger 可以自动生成完善的 RESTful API 文档,并根据后台的代码同步更新。Swagger 也提供了完善的测试功能- 请简述如何实现 Spring Boot 应用程序的安全性?
为了实现 Spring Boot 的安全性,我们使用 spring-boot-starter-security 依赖项,并且必须添加安全配置。