概述
Q7nl1s admin

Java EE开发模式

◼ Java EE – Java Enterprise Edition,Java企业版

◼ 针对企业级应用,也称 J2EE、Java Web

◼ Java EE已成为企业级开发的首选平台之一

◼ Java EE是一系列技术规范,并非一个产品,更不是编程语言

Java EE由一整套服务(Services)、应用程序接口(APIs)和协议构成,它对开发基于Web的多层应用提供了功能支持

Java EE相关技术

◼ Java EE开发涉及到众多开发框架和工具:

​ ◼ 开发语言:Java、Kotlin等

​ ◼ 构建工具:Gradle、Maven等

​ ◼ Servlet容器:Servlet、Tomcat等

​ ◼ 前端模版引擎:JSP、Thymeleaf等

​ ◼ 数据库技术:JDBC、Mysql等

​ ◼ ORM工具:JPA、Mybatis、 Hibernate等

​ ◼ 开发框架:Struts、Spring、Spring MVC等

​ ◼ 安全框架:Security、Shiro等

​ ◼ 缓存技术:Redis等

​ ◼ 消息组件:Rabbit、MQ等

​ ◼ 微服务:Spring Cloud …

SpringBoot 进行整合对以上进行整合

航空母舰:Spring Boot

Spring Boot 是由 Pivotal 团队提供的全新框架,简化创建产品级的 Spring 应用和服务,简化配置文件,使用嵌入式web服务器,含有诸多开箱即用微服务功能…

javaee_0_0

本课程主要内容:

◼ IDE开发环境:Idea Ultimate

◼ 项目构建工具:Maven

◼ 后台开发框架:Spring Boot(MVC架构)

◼ 前端模版引擎:Thymeleaf

◼ 前端框架:Vue

◼ Restful API设计

◼ API调试工具:Postman、Swagger

◼ 过滤器、拦截器、文件上传、定时任务、邮件服务

◼ 数据库相关:MySQL、Mybatis、JPA

◼ 安全框架:Shiro

Java EE基本架构(B/S模式)

javaee_0_1

MVC开发模式

◼ MVC:Model-View-Controller,Web 开发中最常用的 分层开发模式

javaee_0_2

分层开发好处:将应用程序的用户界面和业务逻辑分离,使得代码具备良好的可扩展性、可复用性和可维护性

Spring MVC 模式

javaee_0_3


开发环境搭建

安装Idea Ultimate版

◼ 官网:https://www.jetbrains.com/idea/download/#section=windows

javaee_0_4

自己去社区找破解版

注:IDEA 2022.01 版有大坑(对 JDK 版本 >= 18 有影响),下其余版本(会出现不可避免的中文乱码,每次创建 Project 都需要重新进行配置)

原因分析:由于 JDK 18 相关代码做了一些编码调整,所以在 IDEA 2022.01 下使用 JDK 18 会有乱码问题,具体表现在 IDEA 2022.01 版本下使用 JDK 18 运行 Java 项目,当尝试打印代码中的非 ascii 字符时,会在控制台中打印乱码。

解决方法:下更高级版本的 IDEA ,其在后序的 2022.02 版本中已修复该 BUG。(如你不想修改版本,那你只能重复进行如下操作)

点击 Run -> Edit configurations,在 VM options 里加入 “-Dfile.encoding=gbk” ,(如果没有 VM options 选项,点击右上角 “Modify options(可能为蓝色字体)” -> java | “add VM options”)

安装JDK

◼ 启动Idea → 新建项目

javaee_0_5

配置Maven

◼ 启动 Idea → Customize → All Settings

先查看 Maven 配置

Maven 是一种基于项目对象模型(project object model, POM),通过配置文件(pom.xml)来管理项目构建的一种软件 项目管理工具

javaee_0_6

javaee_0_7

配置阿里云 maven 仓库镜像

◼ 在 .m2 文件夹 中新建 settings.xml 文件:

settings.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
<mirrors>
<mirror>
<id>nexus-aliyun</id>
<mirrorOf>*</mirrorOf>
<name>Nexus aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
</mirrors>
</settings>

安装Postman

Postman是一个 HTTP 请求模拟工具,常用于测试后台接口

◼ 官网: https://www.postman.com/downloads/

javaee_0_8

Postman运行界面

javaee_0_9

安装Mysql数据库(社区版)

◼ 官网: https://dev.mysql.com/downloads/mysql/

javaee_0_10

安装过程中的密码设置

javaee_0_11

使用 MySQL Workbench 连接数据库

◼ Workbench 提供可视化SQL开发、数据库建模、数据库管理等功能。

javaee_0_12


第一个项目

新建项目

◼ 启动Idea → New Project → 选择 Spring Initializr 创建 Spring Boot 项目

javaee_0_13

项目组件配置(选择3项基础配置)

javaee_0_14

demo 构建成功后的目录结构

javaee_0_15

查看 pom.xml:Maven 项目管理文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.6.7</version>
</parent>

<groupId>com.example</groupId>
<artifactId>demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>demo</name>
<description>demo</description>
<properties>
<java.version>11</java.version>
</properties>

<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</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>

代码解释

javaee_0_16

javaee_0_17

javaee_0_18

Spring Boot 入口程序(类)

javaee_0_19

关于注解式编程:

◼ 注解(annotation)可用来定义一个类、属性或方法,以便程序能被编译处理。注解相当于一个说明,告诉应用程序某个被注解的类或属性是什么,要怎么处理。

◼ 注解式编程在Web开发中广泛使用,SpringBoot 提供了大量的注解。

启动应用程序

javaee_0_20

添加控制器(Controller)

◼ 在 com.example.demo 包中新建 controller 包 // 包名小写

◼ 在 controller 包中新建 Java 类: HelloController // 类名首字母大写

javaee_0_21

控制器代码:

HelloController.java

1
2
3
4
5
6
7
8
package com.example.demo.controller;
@Controller // 使用 @Controller 注解控制器类
public class HelloController {
@RequestMapping("/hello") // 在方法上方添加@RequestMapping注解用于配置URL映射,将HTTP请求映射到方法
public String index(){
return "hello/index"; // 文件夹名/视图页面名
}
}

@RequestMapping 注解

◼ @RequestMapping 如果没有指定请求方式,将接收所有的请求方式 (Get、Post、Put、 Delete、 Head、Options 等)

◼ 如果要指定请求方法,例如:

​ ◼ @RequestMapping(value = “/hello”, method = RequestMethod.GET) (简写为:@GetMapping(“/hello”))

​ ◼ @RequestMapping(value = “/hello”, method = RequestMethod.POST) (简写为:@PostMapping(“/hello”))

URL映射到方法示意图

javaee_0_22

添加视图(View)

◼ 在 templates 文件夹中新建视图文件夹:hello文件夹

◼ 在hello文件夹中新建:index.html 页面(HTM5)

hello.html

1
2
3
4
5
6
7
8
9
10
<!DOCTYPE html>		<!-- 表明是html5页面 -->
<html lang="en">
<head>
<meta charset="UTF-8">
<title>测试</title> <!-- 修改标题 -->
</head>
<body>
<h1>hello world</h1> <!-- 新添加的内容 -->
</body>
</html>
javaee_0_23

运行情况:

① 如果项目已经运行,则直接点击“锤子”进行热部署,不用重新启动

javaee_0_24

添加模型(Model)

添加模型包含两步骤:

① 使用系统提供的 Model 对象

② 使用自定义的实体类模型(bean)

使用系统提供的 Model 对象

1
2
3
4
5
6
7
8
9
@Controller
public class HelloController {
@RequestMapping("/hello")
public String index( Model model ) { // 方法中添加 Model 对象
String userName = "wustzz";
model.addAttribute("name", userName); // Model对象使用addAttribute(key,value)添加"键值对"数据,// name:属性名(key);userName:属性值(value)
return "hello/index";
}
}

在视图中访问Model数据:

1
2
3
4
5
6
7
8
9
10
11
12
13
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>测试</title>
</head>
<body>
<h1>hello world</h1>
<div th:text="${name}">hello</div> <!-- 运行时,将获取name属性值,并替换div标签里面的"hello" -->
<!-- ① th:text:thymeleaf模板引擎提供的标签属性,用于进行文本替换 -->
<!-- ② ${ 变量名 }:thymeleaf模板引擎提供的变量表达式,用于获取变量值(或模型属性值) -->
</body>
</html>

静态预览情况:

javaee_0_25

动态运行情况:

javaee_0_26

自定义实体类模型

实体类模型也称作 bean、entity 或 pojo 等

◼ 在 com.example.demo 包中新建 bean 包

◼ 在 bean 包中新建Java类:Student

javaee_0_27

Student.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
package com.example.demo.bean;
public class Student
{
// 模型属性
private Integer id; //学号
private String name; //姓名
// 构造函数
public Student() { }
public Student(Integer id, String name) {
this.id = id;
this.name = name;
}
// getter/setter
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}

使用模型:

◼ 控制器代码:

1
2
3
4
5
6
7
8
9
@Controller
public class HelloController {
@RequestMapping("/test") // 新的请求路径
public String test( Model model ) { // 这里还是使用 Model 对象
Student s=new Student(2020001,"小明"); // 创建实体类对象
model.addAttribute("stu", s ); // 把实体类对象存放在Model对象中
return "hello/test"; // 新建test.html页面
}
}

◼ 在 hello 文件夹中新建:test.html

1
2
3
4
5
6
7
8
9
10
11
12
13
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>测试</title>
</head>
<body>
学号:<span th:text="${stu.id}">学号</span> <br/>
姓名:<span th:text="${stu.name}">姓名</span>
<!-- ${ 对象.属性名 }:会自动调用该属性的get方法 -->
<!-- 相当于 ${ stu.getName() } -->
</body>
</html>

运行情况:(http请求: http://localhost:8080/test)

javaee_0_28

@ResponseBody注解

HelloController.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
@Controller
public class HelloController {
@RequestMapping("/students") // 新的请求路径
@ResponseBody // 在方法上方添加@ResponseBody注解
// 作用:能将Java对象转为json格式数据返回给请求
public List<Student> getAllStudents(){
List<Student> list = new ArrayList<Student>();
Student s1 = new Student(2020001,"小明");
Student s2 = new Student(2020002,"小张");
list.add(s1);
list.add(s2);
return list; // 返回的Java对象将被转换为json格式返回给请求
}
}

运行情况:(http请求: http://localhost:8080/students)

javaee_0_29

URL映射到方法示意图

javaee_0_30

注意:@ResponseBody注解在类上方 – 将影响所有方法

HelloController.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
@Controller
@ResponseBody // @ResponseBody注解写在控制器上方
public class HelloController {
@RequestMapping("/hello")
public String index(Model model){
String userName = "wustzz";
model.addAttribute("name", userName);
return "hello/index"; // 运行测试见后(此处将认为是普通的字符串,不再走视图处理器获取视图)
}

@RequestMapping("/students")
public List<Student> getAllStudents(){
List<Student> list = new ArrayList<Student>();
Student s1 = new Student(2020001,"小明");
Student s2 = new Student(2012002,"小张");
list.add(s1);
list.add(s2);
return list; // 返回的Java对象将被转换为json格式返回给请求
}
}

/hello 请求运行情况:

javaee_0_31

@RestController注解

HelloController.java

1
2
3
4
5
6
7
8
9
@RestController	// @RestController = @Controller + @ResponseBody
// @RestController注解用于标注控制器类,表明该控制器里面的方法默认都以 json 格式返回返回请求
public class HelloController {

@RequestMapping("/students")
public List<Student> getAllStudents() {

}
}

Postman用法

Postman 是一个 HTTP 请求模拟工具,常用于测试后台接口

javaee_0_32

◼ 后台添加 post 请求

1
2
3
4
5
6
7
8
9
10
@RestController
public class HelloController {
@PostMapping("/login") // 使用 @PostMapping 注解方法
public Boolean login(String username, String password) { // 注:参数名推荐小写
if (username!=null&&username.equals("zz") && password!=null&&password.equals("666")) {
return true;
} else
return false;
}
}

◼ @PostMapping 是 @RequestMapping(method = RequestMethod.POST) 的缩写

◼ 被 @PostMapping 注解的方法将用于接收 http post 请求,其参数将接收 post 提交的数据

运行情况

javaee_0_33

此处并未对 post 接收方法做限制,当有限制存在时,须先考虑使用 Params 传参还是使用 Form-Data 传参


练习

◼ 新建 StudentController 控制器

◼ 后台使用 List 来存储数据(模拟数据库)

◼ “/register”请求注册 Student 信息(id 不能相同, post 请求)

◼ “/students”获取所有学生信息(json 格式)

◼ 使用 postman 进行接口 API 测试

StudentController

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
package com.example.demo.controller;

import com.example.demo.bean.Student;
import com.fasterxml.jackson.annotation.JsonAnyGetter;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.ArrayList;
import java.util.List;

@RestController
public class StudentController {
static List<Student> stuList = new ArrayList<Student>();
static {
stuList.add(new Student(2020001, "小明"));
stuList.add(new Student(2020002, "小丽"));
stuList.add(new Student(2020003, "小王"));
}

@GetMapping("/student")
public List<Student> getAllStudents(){
return stuList;
}

@PostMapping("/register")
public void register(Integer id,String name){
Student stu = new Student(id,name);
stuList.add(stu);
return;
}
}

项目配置文件

◼ 配置文件配置文件: application.properties

javaee_0_34

项目配置文件

◼ Spring Boot几乎所有的配置都可以写在这个文件中,如果不配置,则使用默认配置。

◼ 配置文件有两种格式: (两者书写格式有所差别)

​ ◼ application.properties:以 properties 为结尾

​ ◼ application.yml:以 yml 或者 yaml 结尾

配置文件使用示例:

1
2
3
4
5
6
7
8
9
# 服务端口号	 # 表示注释
# 将tomcat默认的端口号8080改为8888
server.port = 8888
# 自定义配置
# 自定义属性
demo.app.name = wust
# 属性值不加引号
demo.app.version = 1.0
demo.app.description = hello ${demo.app.name} ${demo.app.version}

在配置文件中可以通过 “${属性名}” 来引用

在控制器中引用自定义配置

1
2
3
4
5
6
7
8
9
@RestController
public class HelloController {
@Value("${demo.app.description}") // 使用 @Value 注解给变量注入值:@Value("${属性名}")
private String desc;
@RequestMapping("/getDesc")
public String test2(){
return desc;
}
}

http://localhost:8888/getDesc

javaee_0_35

参考:

关于IDEA中运行窗口中文乱码问题

IDEA-291006 (jetbrains.com)

MySQL :: Download MySQL Community Server

RESTful 风格(详细介绍 + 案例实现)_Yan Yang的博客-CSDN博客_restful风格

 Comments
Comment plugin failed to load
Loading comment plugin
Powered by Hexo & Theme Keep
Unique Visitor Page View