From 15f14c758c97d7a843b0170dae597f8767f3c7a5 Mon Sep 17 00:00:00 2001
From: yaoxin <1752800946@qq.com>
Date: Wed, 17 Apr 2024 11:15:15 +0800
Subject: [PATCH] lx
---
.gitignore | 33 ++
pom.xml | 86 +++++
src/main/java/com/bwie/lx/ClientHandler.java | 321 ++++++++++++++++++
src/main/java/com/bwie/lx/D1Test.java | 128 +++++++
src/main/java/com/bwie/lx/D2Test.java | 101 ++++++
src/main/java/com/bwie/lx/LxApplication.java | 13 +
src/main/java/com/bwie/lx/UTest.java | 100 ++++++
.../java/com/bwie/lx/doamin/BookInfo.java | 40 +++
src/main/java/com/bwie/lx/txt/BookInfo.txt | 4 +
src/main/resources/application.properties | 7 +
src/main/resources/static/index.html | 6 +
.../java/com/bwie/lx/LxApplicationTests.java | 13 +
12 files changed, 852 insertions(+)
create mode 100644 .gitignore
create mode 100644 pom.xml
create mode 100644 src/main/java/com/bwie/lx/ClientHandler.java
create mode 100644 src/main/java/com/bwie/lx/D1Test.java
create mode 100644 src/main/java/com/bwie/lx/D2Test.java
create mode 100644 src/main/java/com/bwie/lx/LxApplication.java
create mode 100644 src/main/java/com/bwie/lx/UTest.java
create mode 100644 src/main/java/com/bwie/lx/doamin/BookInfo.java
create mode 100644 src/main/java/com/bwie/lx/txt/BookInfo.txt
create mode 100644 src/main/resources/application.properties
create mode 100644 src/main/resources/static/index.html
create mode 100644 src/test/java/com/bwie/lx/LxApplicationTests.java
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..549e00a
--- /dev/null
+++ b/.gitignore
@@ -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/
diff --git a/pom.xml b/pom.xml
new file mode 100644
index 0000000..fd48f68
--- /dev/null
+++ b/pom.xml
@@ -0,0 +1,86 @@
+
+
+ 4.0.0
+ com.bwie
+ lx
+ 0.0.1-SNAPSHOT
+ lx
+ Demo project for Spring Boot
+
+ 1.8
+ UTF-8
+ UTF-8
+ 2.6.13
+
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ test
+
+
+
+
+ org.projectlombok
+ lombok
+
+
+
+
+ com.alibaba
+ fastjson
+ 1.2.80
+
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-dependencies
+ ${spring-boot.version}
+ pom
+ import
+
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+ 3.8.1
+
+ 1.8
+ 1.8
+ UTF-8
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+ ${spring-boot.version}
+
+ com.bwie.lx.LxApplication
+ true
+
+
+
+ repackage
+
+ repackage
+
+
+
+
+
+
+
+
diff --git a/src/main/java/com/bwie/lx/ClientHandler.java b/src/main/java/com/bwie/lx/ClientHandler.java
new file mode 100644
index 0000000..650e024
--- /dev/null
+++ b/src/main/java/com/bwie/lx/ClientHandler.java
@@ -0,0 +1,321 @@
+package com.bwie.lx;
+
+import com.alibaba.fastjson.JSON;
+import com.bwie.lx.doamin.BookInfo;
+
+import java.io.*;
+import java.lang.reflect.Field;
+import java.net.Socket;
+import java.nio.charset.StandardCharsets;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * @ClassName ClientHandler
+ * @Description 描述
+ * @Author Xin.Yao
+ * @Date 2024/4/15 13:46
+ */
+class ClientHandler implements Runnable {
+ private Socket clientSocket;
+
+ private String fileName="D:\\work\\lx\\src\\main\\java\\com\\bwie\\lx\\txt\\BookInfo.txt";
+
+ public ClientHandler(Socket clientSocket) {
+ this.clientSocket = clientSocket;
+ }
+
+ // 判断对象中是否存在指定名称的属性
+ public static boolean hasField(Object obj, String fieldName) {
+ Class> clazz = obj.getClass();
+
+ try {
+ // 获取指定名称的属性,getField() 方法只能获取公共的属性
+ Field field = clazz.getDeclaredField(fieldName);
+
+ // 如果获取成功,说明属性存在
+ return field != null;
+ } catch (NoSuchFieldException e) {
+ // 如果抛出 NoSuchFieldException 异常,说明属性不存在
+ return false;
+ }
+ }
+
+ public List getBookList(){
+ List bookList = new ArrayList<>();
+ try {
+ BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(fileName), "UTF-8"));
+ String line;
+ List list = new ArrayList<>();
+ while ((line = reader.readLine()) != null) {
+ list.add(line);
+ }
+ list.remove(0);
+
+ bookList = list.stream()
+ .map(book -> {
+ return new BookInfo().bookInfoBuild(book.split("\\|"));
+ }).collect(Collectors.toList());
+ System.out.println(bookList);
+ }catch (IOException e){
+ return null;
+ }
+ return bookList;
+ }
+
+ //对所查询的字段进行拼接
+ public String spliceBookInfo(List bookInfoList,String statsStr){
+
+ String str="";
+ try {
+ if (statsStr.equals("*")){
+ BufferedReader reader = new BufferedReader(new FileReader(fileName));
+ for (int i = 0; i < 1; i++) {
+ statsStr=reader.readLine();
+ }
+ if (bookInfoList!=null){
+ for (BookInfo bookInfo : bookInfoList) {
+ str=str+";"+bookInfo.getString();
+ }
+ str=str.substring(1);
+ }
+ }else{
+ String[] split = statsStr.split(",");
+ String head="";
+ for (String s : split) {
+ head=head+"|"+s;
+ }
+ if (bookInfoList!=null){
+ for (BookInfo bookInfo : bookInfoList) {
+ Class extends BookInfo> aClass = bookInfo.getClass();
+ String fild="";
+ for (String s1 : split) {
+ Field field = aClass.getDeclaredField(s1);
+ field.setAccessible(true);
+ Object o = field.get(bookInfo);
+ fild=fild+"|"+o;
+ }
+ fild=fild.substring(1);
+ str=str+";"+fild;
+ }
+ str=str.substring(1);
+ }
+ statsStr=head.substring(1);
+ }
+ }catch (IOException e){
+ e.printStackTrace();
+ } catch (NoSuchFieldException e) {
+ throw new RuntimeException(e);
+ } catch (IllegalAccessException e) {
+ throw new RuntimeException(e);
+ }
+
+ return "success:"+statsStr+";"+str+";";
+ }
+
+ public List orderList(List bookList,String clientMessage){
+ int orderByInt = clientMessage.indexOf("orderBy");
+ String substring1 = clientMessage.substring(orderByInt + 8, clientMessage.indexOf(";"));
+ String[] s = substring1.split(" ");
+ if (s[0].equals("id")){
+ Collections.sort(bookList, Comparator.comparingLong(BookInfo::getId));
+ if (s[1].equals("desc")){
+ Collections.reverse(bookList);
+ }
+ }
+ if (s[0].equals("name")){
+ Collections.sort(bookList, Comparator.comparing(BookInfo::getName));
+ if (s[1].equals("desc")){
+ Collections.reverse(bookList);
+ }
+ }
+ if (s[0].equals("author")){
+ Collections.sort(bookList, Comparator.comparing(BookInfo::getAuthor));
+ if (s[1].equals("desc")){
+ Collections.reverse(bookList);
+ }
+ }
+ if (s[0].equals("type")){
+ Collections.sort(bookList, Comparator.comparing(BookInfo::getType));
+ if (s[1].equals("desc")){
+ Collections.reverse(bookList);
+ }
+ }
+ if (s[0].equals("country")){
+ Collections.sort(bookList, Comparator.comparing(BookInfo::getCountry));
+ if (s[1].equals("desc")){
+ Collections.reverse(bookList);
+ }
+ }
+ if (s[0].equals("price")){
+ Collections.sort(bookList, Comparator.comparingDouble(BookInfo::getPrice));
+ if (s[1].equals("desc")){
+ Collections.reverse(bookList);
+ }
+ }
+ return bookList;
+ }
+
+ public List whereList(List bookInfoList,String clientMessage){
+ String[] ands = clientMessage.split("and");
+ List bookInfos = new ArrayList<>();
+ boolean whereBoolean=true;
+ try {
+ for (BookInfo bookInfo : bookInfoList) {
+ whereBoolean=true;
+ for (String and : ands) {
+ String replace = and.replace(" ", "");
+ if (replace.contains(">")){
+ String substring = replace.substring(replace.indexOf(">") + 1).replace(" ","");
+ if (bookInfo.getPrice()Double.valueOf(substring)){
+ whereBoolean = false;
+ }
+ }else{
+ String[] split = replace.split("=");
+ Class extends BookInfo> aClass = bookInfo.getClass();
+ Field field = aClass.getDeclaredField(split[0]);
+ field.setAccessible(true);
+ String s = field.get(bookInfo).toString();
+ if (!split[1].equals(s)){
+ whereBoolean = false;
+ }
+ }
+ }
+ if (whereBoolean){
+ bookInfos.add(bookInfo);
+ }
+ }
+ }catch (NoSuchFieldException | IllegalAccessException e){
+ throw new RuntimeException(e);
+ }
+
+ return bookInfos;
+ }
+
+ public String getBookString(String clientMessage){
+ List list = new ArrayList<>();
+ String back="";
+ List bookList = getBookList();
+ int selectInt = clientMessage.indexOf("select");
+ int fromInt = clientMessage.indexOf("from");
+ String substring = clientMessage.substring(selectInt + 6, fromInt).replaceAll("\\s+", "");
+ if (substring.equals("*")){
+ if (clientMessage.contains("where")){
+ if (clientMessage.contains("orderBy")){
+ int whereInt = clientMessage.indexOf("where");
+ String substring1 = clientMessage.substring(whereInt + 5, clientMessage.indexOf("orderBy")).replace(" ","");
+ List bookInfos = whereList(bookList, substring1);
+ List bookInfoList = orderList(bookInfos, clientMessage);
+ back = spliceBookInfo(bookInfoList,substring);
+ }else{
+ int whereInt = clientMessage.indexOf("where");
+ String substring1 = clientMessage.substring(whereInt + 5, clientMessage.indexOf(";")).replace(" ","");
+ List bookInfos = whereList(bookList, substring1);
+ back = spliceBookInfo(bookInfos,substring);
+ }
+ }else{
+ if (clientMessage.contains("orderBy")){
+ List bookInfos = orderList(bookList, clientMessage);
+ back = spliceBookInfo(bookInfos,substring);
+ }else{
+ back = spliceBookInfo(bookList,substring);
+ }
+ }
+ }else{
+ String[] split = substring.split(",");
+ BookInfo bookInfo = new BookInfo();
+ for (String s : split) {
+ if(!hasField(bookInfo,s)){
+ return "error:属性\""+s+"\",不存在";
+ }
+ }
+ if (clientMessage.contains("where")){
+ if (clientMessage.contains("orderBy")){
+ int whereInt = clientMessage.indexOf("where");
+ String substring1 = clientMessage.substring(whereInt + 5, clientMessage.indexOf("orderBy")).replace(" ","");
+ List bookInfos = whereList(bookList, substring1);
+ List bookInfoList = orderList(bookInfos, clientMessage);
+ back = spliceBookInfo(bookInfoList,substring);
+ }else{
+ int whereInt = clientMessage.indexOf("where");
+ String substring1 = clientMessage.substring(whereInt + 5, clientMessage.indexOf(";")).replace(" ","");
+ List bookInfos = whereList(bookList, substring1);
+ back = spliceBookInfo(bookInfos,substring);
+ }
+ }else{
+ if (clientMessage.contains("orderBy")){
+ bookList = orderList(bookList, clientMessage);
+ back = spliceBookInfo(bookList,substring);
+ }else{
+ back = spliceBookInfo(bookList,substring);
+ }
+ }
+
+ }
+ return back;
+ }
+
+ @Override
+ public void run() {
+ try {
+ PrintWriter pw = new PrintWriter(clientSocket.getOutputStream(), true);
+ BufferedReader br = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
+
+// String clientName = clientSocket.getInetAddress().getHostName();
+ String clientId = br.readLine();
+ System.out.println("客户端名称:" + clientId);
+ String clientMessage;
+ while ((clientMessage = br.readLine()) != null) {
+ if (clientMessage.equals("exit")) {
+ System.out.println(clientId + "已断开连接");
+ break;
+ }
+ System.out.println("来自" + clientId + "的消息:" + clientMessage);
+ // 在这里处理收到的消息,并发送响应给客户端
+
+ //判断请求是否为查询
+ if (clientMessage.endsWith(";")){
+ pw.println("error:违法字符串:\";\"");
+ continue;
+ }
+ if(!clientMessage.endsWith(";")){
+ pw.println("error:请求必须以\";\"结尾");
+ continue;
+ }
+ if (clientMessage.startsWith("select")){
+ String bookString = getBookString(clientMessage);
+ pw.println(bookString);
+ } else
+ //判断请求是否为修改
+ if (clientMessage.startsWith("update")){
+ pw.println("success:修改成功");
+ } else
+ //判断请求是否为删除
+ if (clientMessage.startsWith("delete")){
+ pw.println("success:删除成功");
+ } else
+ //判断请求是否为添加
+ if (clientMessage.startsWith("insert")){
+ pw.println("success:添加成功");
+ } else {
+ pw.println("error:请求格式错误");
+ }
+ }
+
+ br.close();
+ pw.close();
+ clientSocket.close();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+
+}
diff --git a/src/main/java/com/bwie/lx/D1Test.java b/src/main/java/com/bwie/lx/D1Test.java
new file mode 100644
index 0000000..c5625ca
--- /dev/null
+++ b/src/main/java/com/bwie/lx/D1Test.java
@@ -0,0 +1,128 @@
+package com.bwie.lx;
+
+import com.alibaba.fastjson.JSON;
+import com.bwie.lx.doamin.BookInfo;
+
+import java.io.*;
+import java.net.Socket;
+import java.nio.charset.StandardCharsets;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Scanner;
+import java.util.stream.Collectors;
+
+/**
+ * @ClassName DTest
+ * @Description 描述
+ * @Author Xin.Yao
+ * @Date 2024/4/15 11:01
+ */
+
+/**
+ * 客户端
+ */
+public class D1Test {
+
+ public static List getBookList(String bookString){
+ List bookList = new ArrayList<>();
+ List list = new ArrayList<>();
+ String[] split = bookString.split(";");
+ if (split.length>1){
+ for (String s : split) {
+ list.add(s);
+ }
+ String handle=list.get(0);
+ String[] handles = handle.split("\\|");
+ list.remove(0);
+ bookList = list.stream()
+ .map(book -> {
+ String[] split1 = book.split("\\|");
+ String s1 = "";
+ for (int i = 0; i < split1.length; i++) {
+ s1 = s1+","+"\""+handles[i]+"\""+":"+"\""+split1[i]+"\"";
+ }
+ s1=s1.substring(1);
+ s1="{"+s1+"}";
+ System.out.println(s1);
+ return JSON.parseObject(s1,BookInfo.class);
+ }).collect(Collectors.toList());
+ }
+ return bookList;
+ }
+ /**
+ *
+ * @param args
+ */
+ public static void main(String[] args) throws Exception {
+ //客户端
+ Socket client_socket = new Socket("localhost",6666);
+ //提示
+ System.out.println("客户端1已启动");
+ //声明类
+ Scanner sc = new Scanner(System.in,"UTF-8");
+ //打印流
+ PrintWriter pw = new PrintWriter(client_socket.getOutputStream());
+ // 设置客户端唯一标识
+ String clientId = "Client1";
+ //写名称
+ pw.println(clientId);
+ //缓冲读流
+ BufferedReader br = new BufferedReader(new InputStreamReader(client_socket.getInputStream()));
+ try {
+ while (true){
+ /*******************1、先写***************************/
+
+ //内容
+ System.out.println("请输入给服务端发送的信息:");
+ String server_msg = sc.nextLine();
+ //写
+ //pw.println(server_msg);
+ pw.println(server_msg);
+ //刷新
+ pw.flush();
+
+ /*******************2、后读***************************/
+
+ //读取
+ String client_msg = br.readLine();
+ //输出
+ System.out.println("服务端发来的信息:"+client_msg);
+ if (client_msg.startsWith("success")){
+ if (server_msg.startsWith("select")){
+ client_msg=client_msg.replace("success:","");
+ List bookList = getBookList(client_msg);
+ if (bookList==null){
+ System.out.println(" 客户端解析:");
+ }else{
+ System.out.println(" 客户端解析:"+ bookList);
+ }
+ }else{
+ client_msg=client_msg.replace("success:","");
+ System.out.println(" 客户端解析:"+ client_msg);
+ }
+ }
+
+// /*******************1、先读***************************/
+// //读取
+// String client_msg = br.readLine();
+// //输出
+// System.out.println(client_msg);
+// /*******************2、后写***************************/
+// //内容
+// String server_msg = sc.next();
+// //写
+// pw.println(server_msg);
+// //刷新
+// pw.flush();
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ } finally {
+ //关闭
+ pw.close();
+ //关闭
+ br.close();
+ }
+ }
+}
diff --git a/src/main/java/com/bwie/lx/D2Test.java b/src/main/java/com/bwie/lx/D2Test.java
new file mode 100644
index 0000000..5f1cfd3
--- /dev/null
+++ b/src/main/java/com/bwie/lx/D2Test.java
@@ -0,0 +1,101 @@
+package com.bwie.lx;
+
+import com.bwie.lx.doamin.BookInfo;
+
+import java.io.BufferedReader;
+import java.io.InputStreamReader;
+import java.io.PrintWriter;
+import java.net.Socket;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Scanner;
+import java.util.stream.Collectors;
+
+/**
+ * @ClassName DTest
+ * @Description 描述
+ * @Author Xin.Yao
+ * @Date 2024/4/15 11:01
+ */
+
+/**
+ * 客户端
+ */
+public class D2Test {
+
+ public static List getBookList(String bookString){
+ List bookList = new ArrayList<>();
+ List list= Arrays.asList(bookString.split(";"));
+ list.remove(0);
+ bookList = list.stream()
+ .map(book -> {
+ return new BookInfo().bookInfoBuild(book.split("\\|"));
+ }).collect(Collectors.toList());
+ System.out.println(bookList);
+
+ return bookList;
+ }
+ /**
+ *
+ * @param args
+ */
+ public static void main(String[] args) throws Exception {
+ //客户端
+ Socket client_socket = new Socket("localhost",6666);
+ //提示
+ System.out.println("客户端2已启动");
+ //声明类
+ Scanner sc = new Scanner(System.in,"UTF-8");
+ //打印流
+ PrintWriter pw = new PrintWriter(client_socket.getOutputStream());
+ // 设置客户端唯一标识
+ String clientId = "Client2";
+ //写名称
+ pw.println(clientId);
+ //缓冲读流
+ BufferedReader br = new BufferedReader(new InputStreamReader(client_socket.getInputStream()));
+ try {
+ while (true){
+ /*******************1、先写***************************/
+
+ //内容
+ System.out.println("请输入给服务端发送的信息:");
+ String server_msg = sc.next();
+ //写
+ //pw.println(server_msg);
+ pw.println(server_msg);
+ //刷新
+ pw.flush();
+
+ /*******************2、后读***************************/
+
+ //读取
+ String client_msg = br.readLine();
+ //输出
+ System.out.println("服务端发来的信息:"+client_msg);
+ List bookList = getBookList(client_msg);
+ System.out.println(" 客户端解析:"+ bookList);
+// /*******************1、先读***************************/
+// //读取
+// String client_msg = br.readLine();
+// //输出
+// System.out.println(client_msg);
+// /*******************2、后写***************************/
+// //内容
+// String server_msg = sc.next();
+// //写
+// pw.println(server_msg);
+// //刷新
+// pw.flush();
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ } finally {
+ //关闭
+ pw.close();
+ //关闭
+ br.close();
+ }
+ }
+}
diff --git a/src/main/java/com/bwie/lx/LxApplication.java b/src/main/java/com/bwie/lx/LxApplication.java
new file mode 100644
index 0000000..7ee9529
--- /dev/null
+++ b/src/main/java/com/bwie/lx/LxApplication.java
@@ -0,0 +1,13 @@
+package com.bwie.lx;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+@SpringBootApplication
+public class LxApplication {
+
+ public static void main(String[] args) {
+ SpringApplication.run(LxApplication.class, args);
+ }
+
+}
diff --git a/src/main/java/com/bwie/lx/UTest.java b/src/main/java/com/bwie/lx/UTest.java
new file mode 100644
index 0000000..992204c
--- /dev/null
+++ b/src/main/java/com/bwie/lx/UTest.java
@@ -0,0 +1,100 @@
+package com.bwie.lx;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.PrintWriter;
+import java.net.ServerSocket;
+import java.net.Socket;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Scanner;
+
+/**
+ * @ClassName UTest
+ * @Description 描述
+ * @Author Xin.Yao
+ * @Date 2024/4/15 11:02
+ */
+
+/**
+ * 服务端
+ */
+public class UTest {
+// //管理多个客户端
+// static List list = new ArrayList<>();
+//
+// /**
+// *
+// * @param args
+// */
+// public static void main(String[] args) throws Exception {
+// //服务端对象
+// ServerSocket server = new ServerSocket(6666);
+// //提示
+// System.out.println("服务端已启动...");
+//
+// //客户端
+// Socket server_socket = server.accept();
+// //提示
+// System.out.println("客户端已被监听到...");
+//
+// //声明类
+// Scanner sc = new Scanner(System.in,"UTF-8");
+//
+// //打印流
+// PrintWriter pw = new PrintWriter(server_socket.getOutputStream());
+// //缓冲读流
+// BufferedReader br = new BufferedReader(new InputStreamReader(server_socket.getInputStream()));
+//
+// try {
+// while (true){
+// //读取
+// String client_msg = br.readLine();
+// if (client_msg.equals("exit")){
+// System.out.println("客户端已断开连接");
+// //关闭
+// br.close();
+// //关闭
+// pw.close();
+// return;
+// }
+// //输出
+// System.out.println("客户端发来的信息:"+client_msg);
+// /*******************2、后写***************************/
+// //内容
+// //写
+// pw.println("id|name|author|type|country|price");
+// //刷新
+// pw.flush();
+// }
+//
+// } catch (Exception e) {
+// e.printStackTrace();
+// } finally {
+// //关闭
+// br.close();
+// //关闭
+// pw.close();
+// }
+// }
+
+ public static void main(String[] args) throws IOException {
+
+ try {
+ ServerSocket serverSocket = new ServerSocket(6666);
+ System.out.println("服务端已启动...");
+ while (true) {
+ Socket clientSocket = serverSocket.accept();
+ System.out.println("客户端已连接:" + clientSocket.getInetAddress().getHostName());
+
+ ClientHandler clientHandler = new ClientHandler(clientSocket);
+ Thread clientThread = new Thread(clientHandler);
+ clientThread.start();
+ }
+ }catch (IOException e){
+ e.printStackTrace();
+ }
+ }
+}
+
diff --git a/src/main/java/com/bwie/lx/doamin/BookInfo.java b/src/main/java/com/bwie/lx/doamin/BookInfo.java
new file mode 100644
index 0000000..9e1d735
--- /dev/null
+++ b/src/main/java/com/bwie/lx/doamin/BookInfo.java
@@ -0,0 +1,40 @@
+package com.bwie.lx.doamin;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.SuperBuilder;
+
+/**
+ * @ClassName BookInfo
+ * @Description 描述
+ * @Author Xin.Yao
+ * @Date 2024/4/15 14:08
+ */
+@Data
+@SuperBuilder
+@AllArgsConstructor
+@NoArgsConstructor
+public class BookInfo {
+ private Long id;
+ private String name;
+ private String author;
+ private String type;
+ private String country;
+ private Double price;
+
+ public BookInfo bookInfoBuild(String[] split){
+ return BookInfo.builder()
+ .id(Long.valueOf(split[0]))
+ .name(split[1])
+ .author(split[2])
+ .type(split[3])
+ .country(split[4])
+ .price(Double.valueOf(split[5]))
+ .build();
+ }
+
+ public String getString(){
+ return id+"|"+name+"|"+author+"|"+type+"|"+country+"|"+price;
+ }
+}
diff --git a/src/main/java/com/bwie/lx/txt/BookInfo.txt b/src/main/java/com/bwie/lx/txt/BookInfo.txt
new file mode 100644
index 0000000..e3a4bda
--- /dev/null
+++ b/src/main/java/com/bwie/lx/txt/BookInfo.txt
@@ -0,0 +1,4 @@
+id|name|author|type|country|price
+1|三国演义|罗贯中|四大名著|中国|19.68
+2|java入门到高薪|张艺兴|技术书籍|中国|36.89
+3|javaweb|范雅婷|技术书籍|中国|65.32
\ No newline at end of file
diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties
new file mode 100644
index 0000000..df8589a
--- /dev/null
+++ b/src/main/resources/application.properties
@@ -0,0 +1,7 @@
+# 应用服务 WEB 访问端口
+server.port=8080
+# 设置字符编码为UTF-8
+server.servlet.encoding.charset=UTF-8
+server.servlet.encoding.enabled=true
+server.servlet.encoding.force=true
+
diff --git a/src/main/resources/static/index.html b/src/main/resources/static/index.html
new file mode 100644
index 0000000..e2d94a2
--- /dev/null
+++ b/src/main/resources/static/index.html
@@ -0,0 +1,6 @@
+
+
+ hello word!!!
+ this is a html page
+
+
\ No newline at end of file
diff --git a/src/test/java/com/bwie/lx/LxApplicationTests.java b/src/test/java/com/bwie/lx/LxApplicationTests.java
new file mode 100644
index 0000000..8d1c807
--- /dev/null
+++ b/src/test/java/com/bwie/lx/LxApplicationTests.java
@@ -0,0 +1,13 @@
+package com.bwie.lx;
+
+import org.junit.jupiter.api.Test;
+import org.springframework.boot.test.context.SpringBootTest;
+
+@SpringBootTest
+class LxApplicationTests {
+
+ @Test
+ void contextLoads() {
+ }
+
+}