转git仓库

This commit is contained in:
xx
2026-10-11 14:59:26 +08:00
commit 91dc5fa253
45 changed files with 13453 additions and 0 deletions
+45
View File
@@ -0,0 +1,45 @@
# Maven 构建产物
target/
*/target/
**/target/
# IntelliJ IDEA 配置文件
.idea/
*.iws
*.iml
*.ipr
out/
# 系统临时文件
*.tmp
*.temp
*~
# Windows 系统文件
Thumbs.db
Desktop.ini
# 日志文件
logs/
*.log
**/logs/
**/*.log
# 测试报告
test-reports/
surefire-reports/
failsafe-reports/
jacoco.exec
jacoco-report/
# 打包文件
*.jar
*.war
*.ear
*.zip
*.tar.gz
*.tar.bz2
# 敏感配置文件
*.key
*.pem
+16
View File
@@ -0,0 +1,16 @@
<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.itheima</groupId>
<artifactId>http-server-demo</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
</properties>
</project>
@@ -0,0 +1,92 @@
package com.inmind;
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
import java.nio.charset.StandardCharsets;
/*
* 自定义web服务器
*/
public class Server {
public static void main(String[] args) throws IOException {
ServerSocket ss = new ServerSocket(8080); // 监听指定端口
System.out.println("server is running...");
while (true){
Socket sock = ss.accept();
System.out.println("connected from " + sock.getRemoteSocketAddress());
//开启线程处理请求
Thread t = new Handler(sock);
t.start();
}
}
}
class Handler extends Thread {
Socket sock;
public Handler(Socket sock) {
this.sock = sock;
}
public void run() {
try (InputStream input = this.sock.getInputStream(); OutputStream output = this.sock.getOutputStream()) {
handle(input, output);
} catch (Exception e) {
try {
this.sock.close();
} catch (IOException ioe) {
}
System.out.println("client disconnected.");
}
}
private void handle(InputStream input, OutputStream output) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(input, StandardCharsets.UTF_8));
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(output, StandardCharsets.UTF_8));
// 读取HTTP请求:
boolean requestOk = false;
String first = reader.readLine();
if (first.startsWith("GET / HTTP/1.")) {
requestOk = true;
}
for (;;) {
String header = reader.readLine();
if (header.isEmpty()) { // 读取到空行时, HTTP Header读取完毕
break;
}
System.out.println(header);
}
System.out.println(requestOk ? "Response OK" : "Response Error");
if (!requestOk) {// 发送错误响应:
writer.write("HTTP/1.0 404 Not Found\r\n");
writer.write("Content-Length: 0\r\n");
writer.write("\r\n");
writer.flush();
} else { // 发送成功响应:
//读取html文件,转换为字符串
InputStream is = Server.class.getClassLoader().getResourceAsStream("html/a.html");
BufferedReader br = new BufferedReader(new InputStreamReader(is));
StringBuilder data = new StringBuilder();
String line = null;
while ((line = br.readLine()) != null){
data.append(line);
}
br.close();
int length = data.toString().getBytes(StandardCharsets.UTF_8).length;
writer.write("HTTP/1.1 200 OK\r\n");
writer.write("Connection: keep-alive\r\n");
writer.write("Content-Type: text/html\r\n");
writer.write("Content-Length: " + length + "\r\n");
writer.write("\r\n"); // 空行标识Header和Body的分隔
writer.write(data.toString());
writer.flush();
}
}
}
@@ -0,0 +1,39 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<table border="1" cellspacing="0" width="500">
<tr>
<th>序号</th>
<th>品牌名称</th>
<th>企业名称</th>
</tr>
<tr align="center">
<td>010</td>
<td>三只松鼠</td>
<td>三只松鼠</td>
</tr>
<tr align="center">
<td>009</td>
<td>优衣库</td>
<td>优衣库</td>
</tr>
<tr align="center">
<td>008</td>
<td>小米</td>
<td>小米科技有限公司</td>
</tr>
</table>
</body>
</html>
+45
View File
@@ -0,0 +1,45 @@
<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<!--项目描述坐标-->
<groupId>com.inmind</groupId>
<artifactId>maven-project01</artifactId>
<version>1.0-SNAPSHOT</version>
<!--依赖管理坐标-->
<dependencies>
<!--logback日志框架-->
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.4</version>
<!--依赖范围-->
<!-- <scope>compile</scope>-->
<scope>test</scope>
</dependency>
</dependencies>
<!-- 打包插件 -->
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.4.1</version>
<configuration>
<descriptorRefs><descriptorRef>jar-with-dependencies</descriptorRef></descriptorRefs>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals><goal>single</goal></goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
@@ -0,0 +1,11 @@
package com.inmind;
//import org.slf4j.Logger;
public class HelloWorld {
// Logger logger;
public static void main(String[] args) {
System.out.println("Hello Maven");
}
}
@@ -0,0 +1,8 @@
package com.inmind;
import org.slf4j.Logger;
public class DemoTest {
Logger logger;
}
+30
View File
@@ -0,0 +1,30 @@
<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.itheima</groupId>
<artifactId>maven-project02</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.3</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
</dependencies>
</project>
+38
View File
@@ -0,0 +1,38 @@
<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<!--项目坐标信息-->
<groupId>com.inmind</groupId>
<artifactId>maven-projectA</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
</properties>
<!--依赖管理-->
<dependencies>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.3</version>
</dependency>
<dependency>
<groupId>com.inmind</groupId>
<artifactId>maven-projectB</artifactId>
<version>1.0-SNAPSHOT</version>
<!--排除依赖【面试题】-->
<exclusions>
<exclusion>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
</project>
+32
View File
@@ -0,0 +1,32 @@
<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<!--项目坐标信息-->
<groupId>com.inmind</groupId>
<artifactId>maven-projectB</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
</properties>
<!--项目B的依赖管理-->
<dependencies>
<dependency>
<groupId>com.inmind</groupId>
<artifactId>maven-projectC</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
</dependency>
</dependencies>
</project>
+25
View File
@@ -0,0 +1,25 @@
<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<!--项目坐标信息-->
<groupId>com.inmind</groupId>
<artifactId>maven-projectC</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
</properties>
<!--项目C的依赖管理-->
<dependencies>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.11.0</version>
</dependency>
</dependencies>
</project>
+84
View File
@@ -0,0 +1,84 @@
-- auto-generated definition
create table tb_emp
(
id int unsigned auto_increment comment 'ID'
primary key,
username varchar(20) not null comment '用户名',
password varchar(32) default '123456' null comment '密码',
name varchar(10) not null comment '姓名',
gender tinyint unsigned not null comment '性别, 说明: 1 男, 2 女',
image varchar(300) null comment '图像',
job tinyint unsigned null comment '职位, 说明: 1 班主任,2 讲师, 3 学工主管, 4 教研主管',
entrydate date null comment '入职时间',
dept_id int unsigned null comment '部门ID',
create_time datetime not null comment '创建时间',
update_time datetime not null comment '修改时间',
constraint username
unique (username)
)
comment '员工表';
-- ========================================基本查询==========================================
-- DML:数据操作语言
-- DML : 插入数据 - insert
-- 1. 为 tb_emp 表的 username, name, gender 字段插入值
insert into tb_emp (username,name,gender,create_time,update_time)
values('wuji','张无忌1',1,now(),now());
-- 2. 为 tb_emp 表的 所有字段插入值
insert into tb_emp values
(null,'zs','123','张三',1
,'1.png',1,'2015-01-01',1,now(),now());
insert into tb_emp
(id, username, password, name, gender, image, job, entrydate, dept_id, create_time, update_time)
values
(null,'zs1','1234','张三1',1
,'1.png',1,'2015-01-01',1,now(),now());
-- 3. 批量为 为 tb_emp 表的 username , name , gender 字段插入数据
insert into tb_emp
(username,name,gender,create_time,update_time)
values
('wuji2','张无忌2',1,now(),now()),
('wuji3','张无忌3',1,now(),now()),
('wuji4','张无忌4',1,now(),now())
;
-- DML : 更新数据 - update
-- 1. 将 tb_emp 表的ID为1员工 姓名name字段更新为 '张四'
update tb_emp set name = '张四' where id = 1;
update tb_emp set name = '张四' ;
-- 2. 将 tb_emp 表的所有员工的入职日期更新为 '2010-01-01'
update tb_emp set entrydate='2010-01-01',update_time=now();
-- DML : 删除数据 - delete
-- 1. 删除 tb_emp 表中 ID为1的员工
delete from tb_emp where id = 1;
-- 2. 删除 tb_emp 表中的所有员工
delete from tb_emp;
-- ======================================DQL===================================
-- 基本查询
-- 1. 查询指定字段 name,entrydate 并返回
select name,entrydate from tb_emp;
-- 2. 查询返回所有字段
-- 方式一: 推荐 , 效率高 . 更直观
select id, username, password, name, gender,
image, job, entrydate, dept_id,
create_time, update_time from tb_emp;
-- 方式二:不推荐(不直观,性能低)
select * from tb_emp;
-- 3. 查询所有员工的 name,entrydate, 并起别名(姓名、入职日期) --- as 关键字可以省略
select name as '姓名',entrydate as '入职日期' from tb_emp;
select name '姓名',entrydate '入职日期' from tb_emp;
-- 4. 查询员工有哪几种职位(不要重复) -- distinct
select distinct job from tb_emp;
+129
View File
@@ -0,0 +1,129 @@
-- ===========================条件查询=======================
-- 数据准备
-- 员工管理(带约束)
create table tb_emp (
id int unsigned primary key auto_increment comment 'ID',
username varchar(20) not null unique comment '用户名',
password varchar(32) default '123456' comment '密码',
name varchar(10) not null comment '姓名',
gender tinyint unsigned not null comment '性别, 说明: 1 男, 2 女',
image varchar(300) comment '图像',
job tinyint unsigned comment '职位, 说明: 1 班主任,2 讲师, 3 学工主管, 4 教研主管',
entrydate date comment '入职时间',
create_time datetime not null comment '创建时间',
update_time datetime not null comment '修改时间'
) comment '员工表';
-- 准备测试数据
INSERT INTO tb_emp (id, username, password, name, gender, image, job, entrydate, create_time, update_time)
VALUES
(1, 'jinyong', '123456', '金庸', 1, '1.jpg', 4, '2000-01-01', '2022-10-27 16:35:33', '2022-10-27 16:35:35'),
(2, 'zhangwuji', '123456', '张无忌', 1, '2.jpg', 2, '2015-01-01', '2022-10-27 16:35:33', '2022-10-27 16:35:37'),
(3, 'yangxiao', '123456', '杨逍', 1, '3.jpg', 2, '2008-05-01', '2022-10-27 16:35:33', '2022-10-27 16:35:39'),
(4, 'weiyixiao', '123456', '韦一笑', 1, '4.jpg', 2, '2007-01-01', '2022-10-27 16:35:33', '2022-10-27 16:35:41'),
(5, 'changyuchun', '123456', '常遇春', 1, '5.jpg', 2, '2012-12-05', '2022-10-27 16:35:33', '2022-10-27 16:35:43'),
(6, 'xiaozhao', '123456', '小昭', 2, '6.jpg', 3, '2013-09-05', '2022-10-27 16:35:33', '2022-10-27 16:35:45'),
(7, 'jixiaofu', '123456', '纪晓芙', 2, '7.jpg', 1, '2005-08-01', '2022-10-27 16:35:33', '2022-10-27 16:35:47'),
(8, 'zhouzhiruo', '123456', '周芷若', 2, '8.jpg', 1, '2014-11-09', '2022-10-27 16:35:33', '2022-10-27 16:35:49'),
(9, 'dingminjun', '123456', '丁敏君', 2, '9.jpg', 1, '2011-03-11', '2022-10-27 16:35:33', '2022-10-27 16:35:51'),
(10, 'zhaomin', '123456', '赵敏', 2, '10.jpg', 1, '2013-09-05', '2022-10-27 16:35:33', '2022-10-27 16:35:53'),
(11, 'luzhangke', '123456', '鹿杖客', 1, '11.jpg', 2, '2007-02-01', '2022-10-27 16:35:33', '2022-10-27 16:35:55'),
(12, 'hebiweng', '123456', '鹤笔翁', 1, '12.jpg', 2, '2008-08-18', '2022-10-27 16:35:33', '2022-10-27 16:35:57'),
(13, 'fangdongbai', '123456', '方东白', 1, '13.jpg', 1, '2012-11-01', '2022-10-27 16:35:33', '2022-10-27 16:35:59'),
(14, 'zhangsanfeng', '123456', '张三丰', 1, '14.jpg', 2, '2002-08-01', '2022-10-27 16:35:33', '2022-10-27 16:36:01'),
(15, 'yulianzhou', '123456', '俞莲舟', 1, '15.jpg', 2, '2011-05-01', '2022-10-27 16:35:33', '2022-10-27 16:36:03'),
(16, 'songyuanqiao', '123456', '宋远桥', 1, '16.jpg', 2, '2010-01-01', '2022-10-27 16:35:33', '2022-10-27 16:36:05'),
(17, 'chenyouliang', '12345678', '陈友谅', 1, '17.jpg', null, '2015-03-21', '2022-10-27 16:35:33', '2022-10-27 16:36:07'),
(18, 'zhang1', '123456', '张一', 1, '2.jpg', 2, '2015-01-01', '2022-10-27 16:35:33', '2022-10-27 16:36:09'),
(19, 'zhang2', '123456', '张二', 1, '2.jpg', 2, '2012-01-01', '2022-10-27 16:35:33', '2022-10-27 16:36:11'),
(20, 'zhang3', '123456', '张三', 1, '2.jpg', 2, '2018-01-01', '2022-10-27 16:35:33', '2022-10-27 16:36:13'),
(21, 'zhang4', '123456', '张四', 1, '2.jpg', 2, '2015-01-01', '2022-10-27 16:35:33', '2022-10-27 16:36:15'),
(22, 'zhang5', '123456', '张五', 1, '2.jpg', 2, '2016-01-01', '2022-10-27 16:35:33', '2022-10-27 16:36:17'),
(23, 'zhang6', '123456', '张六', 1, '2.jpg', 2, '2012-01-01', '2022-10-27 16:35:33', '2022-10-27 16:36:19'),
(24, 'zhang7', '123456', '张七', 1, '2.jpg', 2, '2006-01-01', '2022-10-27 16:35:33', '2022-10-27 16:36:21'),
(25, 'zhang8', '123456', '张八', 1, '2.jpg', 2, '2002-01-01', '2022-10-27 16:35:33', '2022-10-27 16:36:23'),
(26, 'zhang9', '123456', '张九', 1, '2.jpg', 2, '2011-01-01', '2022-10-27 16:35:33', '2022-10-27 16:36:25'),
(27, 'zhang10', '123456', '张十', 1, '2.jpg', 2, '2004-01-01', '2022-10-27 16:35:33', '2022-10-27 16:36:27'),
(28, 'zhang11', '123456', '张十一', 1, '2.jpg', 2, '2007-01-01', '2022-10-27 16:35:33', '2022-10-27 16:36:29'),
(29, 'zhang12', '123456', '张十二', 1, '2.jpg', 2, '2020-01-01', '2022-10-27 16:35:33', '2022-10-27 16:36:31');
-- 1. 查询 姓名 为 杨逍 的员工
select * from tb_emp where name = '杨逍';
-- 2. 查询在 id小于等于5 的员工信息
select * from tb_emp where id <= 5;
-- 3. 查询 没有分配职位 的员工信息 -- 判断 null , 用 is null
select * from tb_emp where job is null;
-- 4. 查询 有职位 的员工信息 -- 判断 不是null , 用 is not null
select * from tb_emp where job is not null;
-- 5. 查询 密码不等于 '123456' 的员工信息
select * from tb_emp where password != '123456';
select * from tb_emp where password <> '123456';
-- 6. 查询入职日期 在 '2000-01-01' (包含) 到 '2010-01-01'(包含) 之间的员工信息
select * from tb_emp where entrydate >= '2000-01-01' and entrydate <= '2010-01-01';
select * from tb_emp where entrydate between '2000-01-01' and '2010-01-01';
-- 7. 查询 入职时间 在 '2000-01-01' (包含) 到 '2010-01-01'(包含) 之间 且 性别为女 的员工信息
select * from tb_emp where entrydate between '2000-01-01' and '2010-01-01' and gender = 2;
-- 8. 查询 职位是 2 (讲师), 3 (学工主管), 4 (教研主管) 的员工信息
select * from tb_emp where job = 2 or job = 3 or job = 4;
select * from tb_emp where job in (2,3,4);
-- 9. 查询姓名为两个字的员工信息 【_匹配一个字符 %匹配0或多个字符】
select * from tb_emp where name like '__';
-- 10. 查询姓 '张' 的员工信息
select * from tb_emp where name like '张%';
-- 11. 查询姓名中包含 '三' 的员工信息
select * from tb_emp where name like '%三%';
-- 练习 : 员工管理列表查询
-- 条件 : name , gender , entrydate
select * from tb_emp where name like '%张%'
and gender = 1
and entrydate between '2000-01-01' and '2010-01-01';
-- 分组查询---聚合函数
-- 1. 统计该企业员工数量 -- count
-- count(字段)
select count(id) from tb_emp;
select count(name) from tb_emp;
select count(job) from tb_emp; -- 注意:所有的聚合函数是排除null计算的!!!!
select count(*) from tb_emp;
select count(0) from tb_emp;-- 统计总数推荐count(0)
-- 2. 统计该企业最早入职的员工的入职日期
select min(entrydate) from tb_emp;
-- 3. 统计该企业最近入职的员工的入职日期
select max(entrydate) from tb_emp;
-- 4. 统计该企业员工的 ID 之和
select sum(id) from tb_emp;
-- 5. 统计该企业员工 ID 的平均值
select avg(id) from tb_emp;
-- 6. 不用avg如何计算平均值
select sum(id)/count(0) from tb_emp;
-- 分组查询
-- 1. 根据性别分组 , 统计男性和女性员工的数量 -- count(*)
-- 注意:分组之后能查询的字段只能是分组字段或者聚合函数才有意义
select gender, count(1) from tb_emp group by gender;
-- 2. 先查询入职时间在 '2015-01-01' (包含) 以前的员工 , 并对结果根据职位分组 , 获取员工数量大于等于2的职位 -- count
select job,count(0) from tb_emp
where entrydate <= '2015-01-01'
group by job
having count(0)>= 2;
+2
View File
@@ -0,0 +1,2 @@
/mvnw text eol=lf
*.cmd text eol=crlf
+63
View File
@@ -0,0 +1,63 @@
<?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>
<!--父工程是org.springframework.boot-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>4.1.1</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<!--当前项目maven坐标-->
<groupId>com.inmind</groupId>
<artifactId>springboot-web-quickstart</artifactId>
<version>0.0.1-SNAPSHOT</version>
<!--springboot相关配置-->
<name>springboot-web-quickstart</name>
<description>springboot-web-quickstart</description>
<url/>
<licenses>
<license/>
</licenses>
<developers>
<developer/>
</developers>
<scm>
<connection/>
<developerConnection/>
<tag/>
<url/>
</scm>
<!--pom文件中配置的统一版本配置信息-->
<properties>
<java.version>17</java.version>
</properties>
<!--依赖管理-->
<dependencies>
<!--springbootweb项目的起步依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webmvc</artifactId>
</dependency>
<!--springbootweb项目的测试起步依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webmvc-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<!--springboot-打包插件-->
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
@@ -0,0 +1,15 @@
package com.inmind;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
//springboot项目启动项,默认注解
@SpringBootApplication
public class SpringbootWebQuickstartApplication {
public static void main(String[] args) {
//springboot启动的固定代码
SpringApplication.run(SpringbootWebQuickstartApplication.class, args);
}
}
@@ -0,0 +1,15 @@
package com.inmind.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
//标记当前类是一个请求处理类
@RestController
public class HelloController {
@RequestMapping(value = "/hello")
public String hello(){
System.out.println("接收了一个请求");
return "hello Springboot";
}
}
@@ -0,0 +1,2 @@
spring.application.name=springboot-web-quickstart
#server.port=8083
@@ -0,0 +1,23 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>请求方式演示-GET-POST</title>
</head>
<body>
<form action="" method="get">
姓 名: <input type="text" name="name"> <br>
密 码: <input type="password" name="password"><br>
<input type="submit" value="提交表单GET"><br>
</form>
<br><br><br>
<form action="" method="post">
姓 名: <input type="text" name="name"> <br>
密 码: <input type="password" name="password"><br>
<input type="submit" value="提交表单POST"><br>
</form>
</body>
</html>
@@ -0,0 +1,13 @@
package com.inmind;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
class SpringbootWebQuickstartApplicationTests {
@Test
void contextLoads() {
}
}
+33
View File
@@ -0,0 +1,33 @@
HELP.md
target/
.mvn/wrapper/maven-wrapper.jar
!**/src/main/**/target/
!**/src/test/**/target/
### STS ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
.sts4-cache
### IntelliJ IDEA ###
.idea
*.iws
*.iml
*.ipr
### NetBeans ###
/nbproject/private/
/nbbuild/
/dist/
/nbdist/
/.nb-gradle/
build/
!**/src/main/**/build/
!**/src/test/**/build/
### VS Code ###
.vscode/
@@ -0,0 +1,3 @@
wrapperVersion=3.3.4
distributionType=only-script
distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.9.16/apache-maven-3.9.16-bin.zip
+65
View File
@@ -0,0 +1,65 @@
<?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>4.1.1</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.inmind</groupId>
<artifactId>springboot-web-req-resp</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>springboot-web-req-resp</name>
<description>springboot-web-req-resp</description>
<url/>
<licenses>
<license/>
</licenses>
<developers>
<developer/>
</developers>
<scm>
<connection/>
<developerConnection/>
<tag/>
<url/>
</scm>
<properties>
<java.version>17</java.version>
</properties>
<!--依赖管理-->
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webmvc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webmvc-test</artifactId>
<scope>test</scope>
</dependency>
<!--XML解析依赖-->
<dependency>
<groupId>org.dom4j</groupId>
<artifactId>dom4j</artifactId>
<version>2.1.3</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
@@ -0,0 +1,13 @@
package com.inmind;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class SpringbootWebReqRespApplication {
public static void main(String[] args) {
SpringApplication.run(SpringbootWebReqRespApplication.class, args);
}
}
@@ -0,0 +1,31 @@
package com.inmind.controller;
import com.inmind.pojo.Emp;
import com.inmind.pojo.Result;
import com.inmind.service.EmpService;
import com.inmind.service.impl.EmpServiceImplA;
import com.inmind.utils.XmlParserUtils;
import jakarta.annotation.Resource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@RestController//底层带有@Controller,本身是交给IOC容器管理
public class EmpController {
//设置一个员工业务对象
@Autowired//运行时,IOC容器会提供该类型的bean对象,并赋值给该变量----依赖注入
@Qualifier("empServiceImplA") //优先级更高,比@Primary,优先级高
//@Resource(name = "empServiceImplB")//jdk提供的注解,不用
private EmpService empService ;
@RequestMapping("/listEmp")
public Result listEmp(){
//1.获取请求数据,交给业务层处理
List<Emp> emps = empService.listEmp();
//2.响应处理好的数据
return Result.success(emps);
}
}
@@ -0,0 +1,84 @@
package com.inmind.controller;
import com.inmind.pojo.User;
import jakarta.servlet.http.HttpServletRequest;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.web.bind.annotation.*;
import java.time.LocalDateTime;
import java.util.Arrays;
import java.util.List;
@RestController
public class RequestController {
//原始方式接收请求数据
/*@RequestMapping( "/simpleParam")
public String simpleParam(HttpServletRequest request){
//获取请求参数
String name = request.getParameter("name");
String ageStr = request.getParameter("age");
//手动的数据类型转换
int age = Integer.parseInt(ageStr);
System.out.println("name:"+name+",age:"+age);
return "OK";
}*/
//springboot方式获取请求参数(简单参数)
@RequestMapping( "/simpleParam")
//@RequestParam(name = "name" ) 的作用是从请求对象中获取name属性值,将值赋给username变量
public String simpleParam(@RequestParam(name = "name",required = false ) String username, Integer age){
System.out.println("name:"+username+",age:"+age);
return "OK";
}
//实体参数
@RequestMapping( "/simplePojo")
public String simplePojo(User user){
System.out.println(user);
System.out.println("name:"+user.getName()+",age:"+user.getAge());
System.out.println("address:"+user.getAddress());
return "OK";
}
//数组参数
@RequestMapping( "/arrayParam")
public String arrayParam(String[] hobby){
System.out.println(Arrays.toString(hobby));
return "OK";
}
//集合参数
@RequestMapping( "/listParam")
public String listParam(@RequestParam List<String> hobby){//由于默认采用数组参数直接获取,使用list接收,会报错,需要使用@RequestParam注解
System.out.println(hobby);
return "OK";
}
//日期参数
@RequestMapping( "/dateParam")
public String dateParam(@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime updateTime){//由于前端的时间格式的多样性,一般前后端约定固定格式,如yyyy-MM-dd HH:mm:ss,所以这里要用一个注解
System.out.println(updateTime);
return "OK";
}
//json参数
@RequestMapping( "/jsonParam")
//@RequestBody: 将请求体中的json数据,映射为java对象
public String jsonParam(@RequestBody User user){
System.out.println(user);
return "OK";
}
//路径参数
@RequestMapping( "/path/{id}/{name}")
//@PathVariable: 将路径参数映射为方法参数
public String pathParam(@PathVariable Integer id,@PathVariable String name){
System.out.println("id:"+id);
System.out.println("name:"+name);
return "OK";
}
}
@@ -0,0 +1,35 @@
package com.inmind.controller;
import com.inmind.pojo.Address;
import com.inmind.pojo.Result;
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 ResponseController {
@RequestMapping("/hello")
public Result hello(){
System.out.println("hello world");
return Result.success("hello world");
}
@RequestMapping("/getAddr")
public Result getAddr(){
Address address = new Address();
address.setCity("常州");
address.setProvince("江苏");
return Result.success(address);
}
@RequestMapping("/listAddr")
public Result listAddr(){
ArrayList<Address> list = new ArrayList<>();
list.add(new Address("江苏", "常州"));
list.add(new Address("浙江", "杭州"));
return Result.success(list);
}
}
@@ -0,0 +1,9 @@
package com.inmind.dao;
import com.inmind.pojo.Emp;
import java.util.List;
//定义一个获取员工数据的规范
public interface EmpDao {
List<Emp> listEmp();
}
@@ -0,0 +1,19 @@
package com.inmind.dao.impl;
import com.inmind.dao.EmpDao;
import com.inmind.pojo.Emp;
import com.inmind.utils.XmlParserUtils;
import org.springframework.stereotype.Repository;
import java.util.List;
@Repository//将当前类交给IOC容器管理,让它称为IOC容器中的bean对象---IOC控制反转
public class EmpDaoImplA implements EmpDao {
@Override
public List<Emp> listEmp() {
//1.加载并解析emp.xml数据
String file = this.getClass().getClassLoader().getResource("emp.xml").getFile();
List<Emp> emps = XmlParserUtils.parse(file, Emp.class);
return emps;
}
}
@@ -0,0 +1,39 @@
package com.inmind.pojo;
public class Address {
private String province;
private String city;
public Address() {
}
public Address(String province, String city) {
this.province = province;
this.city = city;
}
public String getProvince() {
return province;
}
public void setProvince(String province) {
this.province = province;
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
@Override
public String toString() {
return "Address{" +
"province='" + province + '\'' +
", city='" + city + '\'' +
'}';
}
}
@@ -0,0 +1,71 @@
package com.inmind.pojo;
public class Emp {
private String name;
private Integer age;
private String image;
private String gender;
private String job;
public Emp() {
}
public Emp(String name, Integer age, String image, String gender, String job) {
this.name = name;
this.age = age;
this.image = image;
this.gender = gender;
this.job = job;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getImage() {
return image;
}
public void setImage(String image) {
this.image = image;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public String getJob() {
return job;
}
public void setJob(String job) {
this.job = job;
}
@Override
public String toString() {
return "Emp{" +
"name='" + name + '\'' +
", age=" + age +
", image='" + image + '\'' +
", gender='" + gender + '\'' +
", job='" + job + '\'' +
'}';
}
}
@@ -0,0 +1,55 @@
package com.inmind.pojo;
/**
* 统一响应结果封装类
*/
public class Result {
private Integer code ;//1 成功 , 0 失败
private String msg; //提示信息
private Object data; //数据 date
public Result() {
}
public Result(Integer code, String msg, Object data) {
this.code = code;
this.msg = msg;
this.data = data;
}
public Integer getCode() {
return code;
}
public void setCode(Integer code) {
this.code = code;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public Object getData() {
return data;
}
public void setData(Object data) {
this.data = data;
}
public static Result success(Object data){
return new Result(1, "success", data);
}
public static Result success(){
return new Result(1, "success", null);
}
public static Result error(String msg){
return new Result(0, msg, null);
}
@Override
public String toString() {
return "Result{" +
"code=" + code +
", msg='" + msg + '\'' +
", data=" + data +
'}';
}
}
@@ -0,0 +1,50 @@
package com.inmind.pojo;
public class User {
private String name;
private Integer age;
private Address address;
public User() {
}
public User(String name, Integer age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", age=" + age +
", address=" + address +
'}';
}
public Address getAddress() {
return address;
}
public void setAddress(Address address) {
this.address = address;
}
}
@@ -0,0 +1,10 @@
package com.inmind.service;
import com.inmind.pojo.Emp;
import java.util.List;
//业务层操作,对数据进行逻辑处理,返回处理后的数据
public interface EmpService {
List<Emp> listEmp();
}
@@ -0,0 +1,47 @@
package com.inmind.service.impl;
import com.inmind.dao.EmpDao;
import com.inmind.pojo.Emp;
import com.inmind.service.EmpService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Primary;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;
import java.util.List;
@Primary //当DI依赖注入EmpService的变量时,优先使用当前实现类
@Service //将当前类交给IOC容器管理,让它称为IOC容器中的bean对象---IOC控制反转
public class EmpServiceImplA implements EmpService {
//设置一个dao的成员变量
@Autowired//运行时,IOC容器会提供该类型的bean对象,并赋值给该变量----依赖注入
private EmpDao empDao ;
@Override
public List<Emp> listEmp() {
//调用dao层的功能,获取员工信息即可
List<Emp> emps = empDao.listEmp();
//逻辑处理
//2.对数据进行处理优化(处理性别,处理职位)
emps.stream().forEach(emp -> {
String gender = emp.getGender();
//处理 gender 1:男 2:女
if (gender.equals("1")) {
emp.setGender("男");
} else {
emp.setGender("女");
}
//处理job- 1:讲师 2:班主任 3:就业指导
String job = emp.getJob();
if ("1".equals(job)) {
emp.setJob("讲师");
} else if ("2".equals(job)) {
emp.setJob("班主任");
}else if ("3".equals(job)) {
emp.setJob("就业指导");
}
});
return emps;
}
}
@@ -0,0 +1,45 @@
package com.inmind.service.impl;
import com.inmind.dao.EmpDao;
import com.inmind.pojo.Emp;
import com.inmind.service.EmpService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service //将当前类交给IOC容器管理,让它称为IOC容器中的bean对象---IOC控制反转
public class EmpServiceImplB implements EmpService {
//设置一个dao的成员变量
@Autowired//运行时,IOC容器会提供该类型的bean对象,并赋值给该变量----依赖注入
private EmpDao empDao ;
@Override
public List<Emp> listEmp() {
//调用dao层的功能,获取员工信息即可
List<Emp> emps = empDao.listEmp();
//逻辑处理
//2.对数据进行处理优化(处理性别,处理职位)
emps.stream().forEach(emp -> {
String gender = emp.getGender();
//处理 gender 1:男 2:女
if (gender.equals("1")) {
emp.setGender("男士");
} else {
emp.setGender("女士");
}
//处理job- 1:讲师 2:班主任 3:就业指导
String job = emp.getJob();
if ("1".equals(job)) {
emp.setJob("讲师");
} else if ("2".equals(job)) {
emp.setJob("班主任");
}else if ("3".equals(job)) {
emp.setJob("就业指导");
}
});
return emps;
}
}
@@ -0,0 +1,52 @@
package com.inmind.utils;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import java.io.File;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;
public class XmlParserUtils {
public static <T> List<T> parse(String file , Class<T> targetClass) {
ArrayList<T> list = new ArrayList<T>(); //封装解析出来的数据
try {
//1.获取一个解析器对象
SAXReader saxReader = new SAXReader();
//2.利用解析器把xml文件加载到内存中,并返回一个文档对象
Document document = saxReader.read(new File(file));
//3.获取到根标签
Element rootElement = document.getRootElement();
//4.通过根标签来获取 user 标签
List<Element> elements = rootElement.elements("emp");
//5.遍历集合,得到每一个 user 标签
for (Element element : elements) {
//获取 name 属性
String name = element.element("name").getText();
//获取 age 属性
String age = element.element("age").getText();
//获取 image 属性
String image = element.element("image").getText();
//获取 gender 属性
String gender = element.element("gender").getText();
//获取 job 属性
String job = element.element("job").getText();
//组装数据
Constructor<T> constructor = targetClass.getDeclaredConstructor(String.class, Integer.class, String.class, String.class, String.class);
constructor.setAccessible(true);
T object = constructor.newInstance(name, Integer.parseInt(age), image, gender, job);
list.add(object);
}
} catch (Exception e) {
e.printStackTrace();
}
return list;
}
}
@@ -0,0 +1 @@
spring.application.name=springboot-web-req-resp
@@ -0,0 +1,36 @@
<?xml version="1.0" encoding="UTF-8" ?>
<emps>
<emp>
<name>金毛狮王111</name>
<age>55</age>
<image>https://inmind-test.oss-cn-shanghai.aliyuncs.com/01878908-cdaf-4df9-b2b0-e09299da5cc3.jpg</image>
<!-- 1: 男, 2: 女 -->
<gender>1</gender>
<!-- 1: 讲师, 2: 班主任 , 3: 就业指导 -->
<job>1</job>
</emp>
<emp>
<name>白眉鹰王</name>
<age>65</age>
<image>https://inmind-test.oss-cn-shanghai.aliyuncs.com/01878908-cdaf-4df9-b2b0-e09299da5cc3.jpg</image>
<gender>1</gender>
<job>1</job>
</emp>
<emp>
<name>青翼蝠王</name>
<age>45</age>
<image>https://inmind-test.oss-cn-shanghai.aliyuncs.com/01878908-cdaf-4df9-b2b0-e09299da5cc3.jpg</image>
<gender>1</gender>
<job>2</job>
</emp>
<emp>
<name>紫衫龙王</name>
<age>38</age>
<image>https://inmind-test.oss-cn-shanghai.aliyuncs.com/01878908-cdaf-4df9-b2b0-e09299da5cc3.jpg</image>
<gender>2</gender>
<job>3</job>
</emp>
</emps>
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -0,0 +1,60 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>员工信息</title>
</head>
<link rel="stylesheet" href="element-ui/index.css">
<script src="./js/vue.js"></script>
<script src="./element-ui/index.js"></script>
<script src="./js/axios-0.18.0.js"></script>
<body>
<h1 align="center">员工信息列表展示</h1>
<div id="app">
<el-table :data="tableData" style="width: 100%" stripe border >
<el-table-column prop="name" label="姓名" align="center" min-width="20%"></el-table-column>
<el-table-column prop="age" label="年龄" align="center" min-width="20%"></el-table-column>
<el-table-column label="图像" align="center" min-width="20%">
<template slot-scope="scope">
<el-image :src="scope.row.image" style="width: 80px; height: 50px;"></el-image>
</template>
</el-table-column>
<el-table-column prop="gender" label="性别" align="center" min-width="20%"></el-table-column>
<el-table-column prop="job" label="职位" align="center" min-width="20%"></el-table-column>
</el-table>
</div>
</body>
<style>
.el-table .warning-row {
background: oldlace;
}
.el-table .success-row {
background: #f0f9eb;
}
</style>
<script>
new Vue({
el: "#app",
data() {
return {
tableData: []
}
},
mounted(){
axios.get('/listEmp').then(res=>{
if(res.data.code){
this.tableData = res.data.data;
}
});
},
methods: {
}
});
</script>
</html>
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,13 @@
package com.inmind;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
class SpringbootWebReqRespApplicationTests {
@Test
void contextLoads() {
}
}