diff --git a/sql_script/create.sql b/数据库脚本/create.sql similarity index 100% rename from sql_script/create.sql rename to 数据库脚本/create.sql diff --git a/sql_script/create_data.sql b/数据库脚本/create_data.sql similarity index 100% rename from sql_script/create_data.sql rename to 数据库脚本/create_data.sql diff --git a/sql_script/create_idx.sql b/数据库脚本/create_idx.sql similarity index 100% rename from sql_script/create_idx.sql rename to 数据库脚本/create_idx.sql diff --git a/sql_script/create_procedure.sql b/数据库脚本/create_procedure.sql similarity index 100% rename from sql_script/create_procedure.sql rename to 数据库脚本/create_procedure.sql diff --git a/sql_script/delete.sql b/数据库脚本/delete.sql similarity index 100% rename from sql_script/delete.sql rename to 数据库脚本/delete.sql diff --git a/sql_script/query.sql b/数据库脚本/query.sql similarity index 100% rename from sql_script/query.sql rename to 数据库脚本/query.sql diff --git a/sql_script/root.sql b/数据库脚本/root.sql similarity index 100% rename from sql_script/root.sql rename to 数据库脚本/root.sql diff --git a/sql_script/trigger.sql b/数据库脚本/trigger.sql similarity index 100% rename from sql_script/trigger.sql rename to 数据库脚本/trigger.sql diff --git a/sql_script/update.sql b/数据库脚本/update.sql similarity index 100% rename from sql_script/update.sql rename to 数据库脚本/update.sql diff --git a/sql_script/view.sql b/数据库脚本/view.sql similarity index 100% rename from sql_script/view.sql rename to 数据库脚本/view.sql diff --git a/项目源码/.gitignore b/项目源码/.gitignore new file mode 100644 index 0000000..5ff6309 --- /dev/null +++ b/项目源码/.gitignore @@ -0,0 +1,38 @@ +target/ +!.mvn/wrapper/maven-wrapper.jar +!**/src/main/**/target/ +!**/src/test/**/target/ + +### IntelliJ IDEA ### +.idea/modules.xml +.idea/jarRepositories.xml +.idea/compiler.xml +.idea/libraries/ +*.iws +*.iml +*.ipr + +### Eclipse ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ +build/ +!**/src/main/**/build/ +!**/src/test/**/build/ + +### VS Code ### +.vscode/ + +### Mac OS ### +.DS_Store \ No newline at end of file diff --git a/项目源码/.idea/.gitignore b/项目源码/.idea/.gitignore new file mode 100644 index 0000000..13566b8 --- /dev/null +++ b/项目源码/.idea/.gitignore @@ -0,0 +1,8 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Editor-based HTTP Client requests +/httpRequests/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/项目源码/.idea/encodings.xml b/项目源码/.idea/encodings.xml new file mode 100644 index 0000000..aa00ffa --- /dev/null +++ b/项目源码/.idea/encodings.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/项目源码/.idea/inspectionProfiles/Project_Default.xml b/项目源码/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 0000000..d5e71bf --- /dev/null +++ b/项目源码/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,21 @@ + + + + \ No newline at end of file diff --git a/项目源码/.idea/misc.xml b/项目源码/.idea/misc.xml new file mode 100644 index 0000000..132404b --- /dev/null +++ b/项目源码/.idea/misc.xml @@ -0,0 +1,14 @@ + + + + + + + + + + \ No newline at end of file diff --git a/项目源码/.idea/sonarlint/issuestore/0/1/0180b1b52222467d2a3db2b1be070e545c7ba90c b/项目源码/.idea/sonarlint/issuestore/0/1/0180b1b52222467d2a3db2b1be070e545c7ba90c new file mode 100644 index 0000000..d2212b1 --- /dev/null +++ b/项目源码/.idea/sonarlint/issuestore/0/1/0180b1b52222467d2a3db2b1be070e545c7ba90c @@ -0,0 +1,16 @@ + + +java:S1192"ODefine a constant instead of duplicating this literal "/login_MVC.jsp" 3 times.(ݙ82J$d95f52d8-5e05-412b-b5f8-ec6f6702da65 + +java:S1192)"IDefine a constant instead of duplicating this literal "username" 3 times.(֡82J$7b55891b-0cf8-4920-bd03-a2c91e038e83 + java:S120"ZRename this package name to match the regular expression '^[a-z_]+(\.[a-z_][a-z0-9_]*)*$'.(Ї82J$834470af-a104-4a36-92c8-3ce825af923f + +java:S1989"aHandle the following exceptions that could be thrown by "forward": ServletException, IOException.(ݙ82J$64ff008c-0003-4492-99a0-cabb4c680d8a + +java:S1989"aHandle the following exceptions that could be thrown by "forward": ServletException, IOException.(82J$69a859de-4418-438f-94bc-b41247b47366 + +java:S1989!"cHandle the following exceptions that could be thrown by "loginUser": ServletException, IOException.(82J$1b56fae7-45ef-4717-8961-65010bd5cef4 + +java:S1989#"fHandle the following exceptions that could be thrown by "registerUser": ServletException, IOException.(ŒÖ82J$27fd0d02-b044-4ecc-8823-83648d16a45b + +java:S2226 "XRemove this misleading mutable servlet instance field or make it "static" and/or "final"(82J$69a9fdf9-7d87-4822-9cf8-143cc9525b44 \ No newline at end of file diff --git a/项目源码/.idea/sonarlint/issuestore/0/8/08a919dced6bb16591956b0b3be56dc6d27fa6f7 b/项目源码/.idea/sonarlint/issuestore/0/8/08a919dced6bb16591956b0b3be56dc6d27fa6f7 new file mode 100644 index 0000000..e4bc3b2 --- /dev/null +++ b/项目源码/.idea/sonarlint/issuestore/0/8/08a919dced6bb16591956b0b3be56dc6d27fa6f7 @@ -0,0 +1,8 @@ + + java:S112 "FDefine and throw a dedicated exception instead of using a generic one.(ɐ8ܭ2J$92554d19-e77b-47df-97b8-050d781f1f19 + java:S120"ZRename this package name to match the regular expression '^[a-z_]+(\.[a-z_][a-z0-9_]*)*$'.(J82J$edcf3a5f-7890-4ad8-bab6-555bdc952f92 +x +java:S6437"6Revoke and change this password, as it is compromised.( 82J$2662efc6-7386-4d87-8708-6e7adc3c4ce4 +r java:S106!"+Replace this use of System.out by a logger.(82J$4e0dc0ce-dead-4d7a-9211-bf526242a46f +g +java:S69057"Don't use the query "SELECT *".(ۦ8®2J$88117e75-da0b-4398-9b33-3c9362b93e1c \ No newline at end of file diff --git a/项目源码/.idea/sonarlint/issuestore/0/9/09db676caf1c01dcb05af5eee6120f8c64796c0e b/项目源码/.idea/sonarlint/issuestore/0/9/09db676caf1c01dcb05af5eee6120f8c64796c0e new file mode 100644 index 0000000..f48b630 --- /dev/null +++ b/项目源码/.idea/sonarlint/issuestore/0/9/09db676caf1c01dcb05af5eee6120f8c64796c0e @@ -0,0 +1,2 @@ + + Web:S5254"@Add "lang" and/or "xml:lang" attributes to this "" element(8컫2J$ac1cf941-a7d6-41fd-a02a-9c2ba35ec1b0 \ No newline at end of file diff --git a/项目源码/.idea/sonarlint/issuestore/1/2/128e2f93541febe88c01a04d48cb56ac29f6e431 b/项目源码/.idea/sonarlint/issuestore/1/2/128e2f93541febe88c01a04d48cb56ac29f6e431 new file mode 100644 index 0000000..e69de29 diff --git a/项目源码/.idea/sonarlint/issuestore/1/8/183de4a682ba2e0038893ac1ec0186c4d4c28b70 b/项目源码/.idea/sonarlint/issuestore/1/8/183de4a682ba2e0038893ac1ec0186c4d4c28b70 new file mode 100644 index 0000000..a4712e6 --- /dev/null +++ b/项目源码/.idea/sonarlint/issuestore/1/8/183de4a682ba2e0038893ac1ec0186c4d4c28b70 @@ -0,0 +1,3 @@ + + +java:S1989"PHandle the following exception that could be thrown by "getWriter": IOException.(82J$800f8096-6b96-4b3d-a34e-f8cfd4bcd8a4 \ No newline at end of file diff --git a/项目源码/.idea/sonarlint/issuestore/1/c/1cb318651a0b26d45abfffd6295a7899ac3922dd b/项目源码/.idea/sonarlint/issuestore/1/c/1cb318651a0b26d45abfffd6295a7899ac3922dd new file mode 100644 index 0000000..b08bfdd --- /dev/null +++ b/项目源码/.idea/sonarlint/issuestore/1/c/1cb318651a0b26d45abfffd6295a7899ac3922dd @@ -0,0 +1,2 @@ + + Web:S5254"@Add "lang" and/or "xml:lang" attributes to this "" element(82J$2302c146-affd-4326-a0e9-72a0d8d40491 \ No newline at end of file diff --git a/项目源码/.idea/sonarlint/issuestore/1/c/1cb79762654f870f8d54fd957dd24abe52aa36bf b/项目源码/.idea/sonarlint/issuestore/1/c/1cb79762654f870f8d54fd957dd24abe52aa36bf new file mode 100644 index 0000000..af00979 --- /dev/null +++ b/项目源码/.idea/sonarlint/issuestore/1/c/1cb79762654f870f8d54fd957dd24abe52aa36bf @@ -0,0 +1,4 @@ + + java:S120"ZRename this package name to match the regular expression '^[a-z_]+(\.[a-z_][a-z0-9_]*)*$'.(ЇJ$f18ae985-77eb-4cfc-b960-0b8bbffce4ae + +java:S1989"SHandle the following exception that could be thrown by "sendRedirect": IOException.(J$d953b6eb-f336-4b3d-84bb-92e265b2ebb1 \ No newline at end of file diff --git a/项目源码/.idea/sonarlint/issuestore/2/7/27d1e9446e3bf7aaa97dfc1b07cb5abd3a7ed3fa b/项目源码/.idea/sonarlint/issuestore/2/7/27d1e9446e3bf7aaa97dfc1b07cb5abd3a7ed3fa new file mode 100644 index 0000000..86b92e5 --- /dev/null +++ b/项目源码/.idea/sonarlint/issuestore/2/7/27d1e9446e3bf7aaa97dfc1b07cb5abd3a7ed3fa @@ -0,0 +1,3 @@ + + +java:S1989$"aHandle the following exceptions that could be thrown by "forward": ServletException, IOException.()82J$8b77c1b1-574c-497d-8990-113ab32f5767 \ No newline at end of file diff --git a/项目源码/.idea/sonarlint/issuestore/2/d/2d2d75af380a99a96fb9b8e95f87e10616b18642 b/项目源码/.idea/sonarlint/issuestore/2/d/2d2d75af380a99a96fb9b8e95f87e10616b18642 new file mode 100644 index 0000000..e2493a6 --- /dev/null +++ b/项目源码/.idea/sonarlint/issuestore/2/d/2d2d75af380a99a96fb9b8e95f87e10616b18642 @@ -0,0 +1,3 @@ + +Web:DoctypePresenceCheck":Insert a declaration to before this tag.(8׻2J$adcaf128-56c0-43ba-a76d-d1b37e71b201 + Web:S5254"@Add "lang" and/or "xml:lang" attributes to this "" element(8׻2J$057b0d1c-1901-4a2d-b7c9-9e4908e51131 \ No newline at end of file diff --git a/项目源码/.idea/sonarlint/issuestore/4/4/442292b8a7efeabbe4cc176709b833b1792140ec b/项目源码/.idea/sonarlint/issuestore/4/4/442292b8a7efeabbe4cc176709b833b1792140ec new file mode 100644 index 0000000..e69de29 diff --git a/项目源码/.idea/sonarlint/issuestore/4/4/4472ea3cdf3a629922ee37d5891d3e75795ece34 b/项目源码/.idea/sonarlint/issuestore/4/4/4472ea3cdf3a629922ee37d5891d3e75795ece34 new file mode 100644 index 0000000..52547c4 --- /dev/null +++ b/项目源码/.idea/sonarlint/issuestore/4/4/4472ea3cdf3a629922ee37d5891d3e75795ece34 @@ -0,0 +1,20 @@ + + +java:S1192"VDefine a constant instead of duplicating this literal "机械工业出版社" 3 times.(؁82J$48222dc7-e4a3-4345-8ac1-1cb4f47391b4 +x +java:S6437 "6Revoke and change this password, as it is compromised.( 82J$4c4f836d-54b1-4ae2-b803-96468b14bdc5 +b +java:S6905"Don't use the query "SELECT *".(̪82J$0765286e-bb93-4545-b9de-b42664b02256 +a +java:S6905,"Don't use the query "SELECT *".(̀H82J$ebf1ead0-b692-45a9-af15-1c5f7c22bf76 +s java:S106"+Replace this use of System.out by a logger.(˼82J$3b1c9ea6-a973-49c1-b7de-6e78f4d7b53c +n java:S106"+Replace this use of System.out by a logger.(82J$496bcaab-98e8-4193-9e41-64f10a2e9d4e +n java:S106"+Replace this use of System.out by a logger.(82J$cc555eb3-bccd-425e-aa2c-08c09c5a7616 +n java:S106"+Replace this use of System.out by a logger.(82J$b083ae2f-22ad-4e3b-967b-9c508acebd98 +s java:S106"+Replace this use of System.out by a logger.(ߎ82J$c90b3edb-b773-4e7b-a6cd-7507707bda80 +n java:S106"+Replace this use of System.out by a logger.(82J$037855bc-f78a-4970-a87d-bb99796aba7c +n java:S106"+Replace this use of System.out by a logger.(Ң82J$6f0e25f4-cfa5-4269-b0c3-39f7e97b80ed +n java:S106"+Replace this use of System.out by a logger.(82J$1d60cc13-0df2-47db-b5e4-181d3e67058e +s java:S106"+Replace this use of System.out by a logger.(82J$ca258fb4-4d55-4008-84fa-1423e8b3dbff +s java:S106"+Replace this use of System.out by a logger.(82J$c955066e-491d-4eca-a12d-c21016e100b7 +n java:S106"+Replace this use of System.out by a logger.(82J$fd5b7997-49d4-4a37-bd81-1aebd94c7ae9 \ No newline at end of file diff --git a/项目源码/.idea/sonarlint/issuestore/4/f/4f729cf5d05aa5f634d6388c74376107ed8ee087 b/项目源码/.idea/sonarlint/issuestore/4/f/4f729cf5d05aa5f634d6388c74376107ed8ee087 new file mode 100644 index 0000000..8420464 --- /dev/null +++ b/项目源码/.idea/sonarlint/issuestore/4/f/4f729cf5d05aa5f634d6388c74376107ed8ee087 @@ -0,0 +1,2 @@ + + java:S120"ZRename this package name to match the regular expression '^[a-z_]+(\.[a-z_][a-z0-9_]*)*$'.(82J$c2a14214-3830-4f21-85b0-c9b25797b6c6 \ No newline at end of file diff --git a/项目源码/.idea/sonarlint/issuestore/5/1/510eee06ce2a2d91bf446511ffd106e2d2d7aa07 b/项目源码/.idea/sonarlint/issuestore/5/1/510eee06ce2a2d91bf446511ffd106e2d2d7aa07 new file mode 100644 index 0000000..e69de29 diff --git a/项目源码/.idea/sonarlint/issuestore/6/4/645cab380b5f13ceb77000e2ef600688ba20aec8 b/项目源码/.idea/sonarlint/issuestore/6/4/645cab380b5f13ceb77000e2ef600688ba20aec8 new file mode 100644 index 0000000..8cc233b --- /dev/null +++ b/项目源码/.idea/sonarlint/issuestore/6/4/645cab380b5f13ceb77000e2ef600688ba20aec8 @@ -0,0 +1,13 @@ + + +java:S1161":Add the "@Override" annotation above this method signature(82J$f6d00687-e28f-4311-943f-27a453299a12 + +java:S1989"lHandle the following exception that could be thrown by "setCharacterEncoding": UnsupportedEncodingException.(82J$43eeea7a-aea0-4bc5-8b89-8be926277a39 + +java:S1989"\Handle the following exception that could be thrown by "parseDouble": NumberFormatException.(82J$ecd346e2-884f-444f-b061-0cbbb022fbb7 + +java:S1989"YHandle the following exception that could be thrown by "parseInt": NumberFormatException.(շ82J$be10453d-8807-4e77-b1ea-6584a676f554 + +java:S2441$"MMake "List" and its parameters serializable or don't store it in the session.(8Ÿ2J$047c5bdc-aca5-4942-bb77-595e32910eb6 +u +java:S1989&"SHandle the following exception that could be thrown by "sendRedirect": IOException.(8Ț2 \ No newline at end of file diff --git a/项目源码/.idea/sonarlint/issuestore/7/2/7277fcdd598ab95cf5a2f2f3bd9c49e3c074e066 b/项目源码/.idea/sonarlint/issuestore/7/2/7277fcdd598ab95cf5a2f2f3bd9c49e3c074e066 new file mode 100644 index 0000000..6f0f4b5 --- /dev/null +++ b/项目源码/.idea/sonarlint/issuestore/7/2/7277fcdd598ab95cf5a2f2f3bd9c49e3c074e066 @@ -0,0 +1,7 @@ + + java:S112"FDefine and throw a dedicated exception instead of using a generic one.(ɐ82J$919ccba9-acd2-410b-b236-ddd24f8c97be + java:S120"ZRename this package name to match the regular expression '^[a-z_]+(\.[a-z_][a-z0-9_]*)*$'.(JJ$f12e1ca0-a116-4c34-8e7a-aadad933db35 +w +java:S6437"6Revoke and change this password, as it is compromised.(͐J$386e4f36-2d48-45e7-b09b-3c80a05b6854 +b +java:S6905"Don't use the query "SELECT *".(̪82J$293a1cdb-b689-46dc-b59a-ef6983e88dcd \ No newline at end of file diff --git a/项目源码/.idea/sonarlint/issuestore/7/a/7ac0c2068859590f009f555544e9ec7fe2a72ae7 b/项目源码/.idea/sonarlint/issuestore/7/a/7ac0c2068859590f009f555544e9ec7fe2a72ae7 new file mode 100644 index 0000000..e4fea1b --- /dev/null +++ b/项目源码/.idea/sonarlint/issuestore/7/a/7ac0c2068859590f009f555544e9ec7fe2a72ae7 @@ -0,0 +1,5 @@ + +Web:DoctypePresenceCheck":Insert a declaration to before this tag.(82J$09c8c006-c076-42c7-b050-ed820b92da34 + Web:S5254"@Add "lang" and/or "xml:lang" attributes to this "" element(82J$4e411361-c8ad-4a66-bc38-2ef4d789b5c3 +v Web:S6853K"/A form label must be associated with a control.(ȩ8Ј2J$a3283baf-a1bf-41ec-89cd-82310237ce4d +q Web:S6853O"/A form label must be associated with a control.(8Ј2J$fa6fcd29-17ab-4656-b7d3-b415418b54da \ No newline at end of file diff --git a/项目源码/.idea/sonarlint/issuestore/8/5/85ee523d01e5e19376db640e846c91bbcb0a1c22 b/项目源码/.idea/sonarlint/issuestore/8/5/85ee523d01e5e19376db640e846c91bbcb0a1c22 new file mode 100644 index 0000000..2e1bae5 --- /dev/null +++ b/项目源码/.idea/sonarlint/issuestore/8/5/85ee523d01e5e19376db640e846c91bbcb0a1c22 @@ -0,0 +1,3 @@ + +Web:DoctypePresenceCheck":Insert a declaration to before this tag.(82J$1a1550f2-6ce8-44b2-94bf-7bcb7fc9e4b8 + Web:S5254"@Add "lang" and/or "xml:lang" attributes to this "" element(82J$1075e8c5-e7b5-4aca-a96c-680e9e73fb28 \ No newline at end of file diff --git a/项目源码/.idea/sonarlint/issuestore/8/9/897dd927731b137252f9db6179b57a66d08957fc b/项目源码/.idea/sonarlint/issuestore/8/9/897dd927731b137252f9db6179b57a66d08957fc new file mode 100644 index 0000000..0bbe0f8 --- /dev/null +++ b/项目源码/.idea/sonarlint/issuestore/8/9/897dd927731b137252f9db6179b57a66d08957fc @@ -0,0 +1,5 @@ + +P +java:S1161 ":Add the "@Override" annotation above this method signature( +n +java:S1989"SHandle the following exception that could be thrown by "sendRedirect": IOException.(Ϊ \ No newline at end of file diff --git a/项目源码/.idea/sonarlint/issuestore/9/d/9df36a5c6fd37f12e7b4cb7f159be3f844d1cd68 b/项目源码/.idea/sonarlint/issuestore/9/d/9df36a5c6fd37f12e7b4cb7f159be3f844d1cd68 new file mode 100644 index 0000000..a9602a7 --- /dev/null +++ b/项目源码/.idea/sonarlint/issuestore/9/d/9df36a5c6fd37f12e7b4cb7f159be3f844d1cd68 @@ -0,0 +1,5 @@ + +Web:DoctypePresenceCheck":Insert a declaration to before this tag.(82J$2f14d83c-4737-4dea-a2bb-90f10d330c77 + Web:S5254"@Add "lang" and/or "xml:lang" attributes to this "" element(82J$bef57bc5-25a2-476c-ba4b-a14df38d5363 +v Web:S6853J"/A form label must be associated with a control.(ȩ8ˆ2J$fccdbf86-e3f4-47ab-b939-7381c0785483 +q Web:S6853N"/A form label must be associated with a control.(8ˆ2J$9c97ca86-eaab-4733-a790-f26459b7df65 \ No newline at end of file diff --git a/项目源码/.idea/sonarlint/issuestore/a/4/a433a6b71c63a2e59534399115b360f61a35c334 b/项目源码/.idea/sonarlint/issuestore/a/4/a433a6b71c63a2e59534399115b360f61a35c334 new file mode 100644 index 0000000..9cc6058 --- /dev/null +++ b/项目源码/.idea/sonarlint/issuestore/a/4/a433a6b71c63a2e59534399115b360f61a35c334 @@ -0,0 +1,21 @@ + + +java:S1192G"MDefine a constant instead of duplicating this literal "/addBook.jsp" 4 times.(82J$5705581a-2606-4384-bfd0-525598a78b57 + +java:S1192^"FDefine a constant instead of duplicating this literal "error" 3 times.(8ת2J$8b926d9f-c056-4ad9-9aff-6887fc92268b + +java:S1192A"FDefine a constant instead of duplicating this literal "books" 3 times.(82J$d717ffb5-9583-41bb-88a6-ce5c9a2c0845 + java:S120"ZRename this package name to match the regular expression '^[a-z_]+(\.[a-z_][a-z0-9_]*)*$'.(Ї82J$b2c8e3ba-208c-4687-b2ec-1985111e9925 +i java:S131""Add a default case to this switch.(82J$1ec04239-3d0f-4e18-a3ef-59e8fc9819c2 + +java:S1989"cHandle the following exceptions that could be thrown by "listBooks": ServletException, IOException.(82J$697079e7-cb72-437b-992d-26922b97f837 + +java:S1989 "iHandle the following exceptions that could be thrown by "showAddBookForm": ServletException, IOException.(82J$3b166e67-b265-4498-9fee-2109e3df6a01 + +java:S1989#"dHandle the following exceptions that could be thrown by "deleteBook": ServletException, IOException.(82J$ef2f61d7-f5c2-4cc4-aad7-c9b31c31b818 + +java:S1989."aHandle the following exceptions that could be thrown by "addBook": ServletException, IOException.(82J$679ee7cb-3261-4f1b-a746-3d1f7f09f6a6 + +java:S1130s"wRemove the declaration of thrown exception 'javax.servlet.ServletException', as it cannot be thrown from method's body.(8ת2J$0890ed6c-716d-42f0-95b0-81ac78caf5ee + +java:S2226"XRemove this misleading mutable servlet instance field or make it "static" and/or "final"(82J$fefc6424-9610-42f0-be37-0a993293cd55 \ No newline at end of file diff --git a/项目源码/.idea/sonarlint/issuestore/a/7/a7f5d4cb6c61c1a3f56ad354b2dae0c100f64731 b/项目源码/.idea/sonarlint/issuestore/a/7/a7f5d4cb6c61c1a3f56ad354b2dae0c100f64731 new file mode 100644 index 0000000..e69de29 diff --git a/项目源码/.idea/sonarlint/issuestore/a/9/a9bf0984037a3c5c7ae6b46f58b7e7390e5ce39e b/项目源码/.idea/sonarlint/issuestore/a/9/a9bf0984037a3c5c7ae6b46f58b7e7390e5ce39e new file mode 100644 index 0000000..e69de29 diff --git a/项目源码/.idea/sonarlint/issuestore/c/1/c1c16de72df45ae99c410ff1272348c828a8587e b/项目源码/.idea/sonarlint/issuestore/c/1/c1c16de72df45ae99c410ff1272348c828a8587e new file mode 100644 index 0000000..dd6d390 --- /dev/null +++ b/项目源码/.idea/sonarlint/issuestore/c/1/c1c16de72df45ae99c410ff1272348c828a8587e @@ -0,0 +1,2 @@ + + java:S120"ZRename this package name to match the regular expression '^[a-z_]+(\.[a-z_][a-z0-9_]*)*$'.(J$60ece8fe-15eb-4107-b228-0cd9d4a5320a \ No newline at end of file diff --git a/项目源码/.idea/sonarlint/issuestore/c/9/c981ad8ec25423dbf0f4da89e25263a6436d9404 b/项目源码/.idea/sonarlint/issuestore/c/9/c981ad8ec25423dbf0f4da89e25263a6436d9404 new file mode 100644 index 0000000..9ee30d8 --- /dev/null +++ b/项目源码/.idea/sonarlint/issuestore/c/9/c981ad8ec25423dbf0f4da89e25263a6436d9404 @@ -0,0 +1,3 @@ + +Web:DoctypePresenceCheck":Insert a declaration to before this tag.(82J$4f5155b6-f830-45cf-b4ab-2851c2f595ef + Web:S5254"@Add "lang" and/or "xml:lang" attributes to this "" element(82J$ce437215-e1f9-463f-a128-1f5f53fde49b \ No newline at end of file diff --git a/项目源码/.idea/sonarlint/issuestore/d/9/d92148e02a2078c1d309cf0aee2566e9e82f850b b/项目源码/.idea/sonarlint/issuestore/d/9/d92148e02a2078c1d309cf0aee2566e9e82f850b new file mode 100644 index 0000000..bfda854 --- /dev/null +++ b/项目源码/.idea/sonarlint/issuestore/d/9/d92148e02a2078c1d309cf0aee2566e9e82f850b @@ -0,0 +1,3 @@ + +Web:DoctypePresenceCheck":Insert a declaration to before this tag.(8ɯ2J$83785b02-1001-4df4-839c-776902458fa8 + Web:S5254"@Add "lang" and/or "xml:lang" attributes to this "" element(8ɯ2J$77f815b1-a629-4b3a-bce5-9968b3afcf78 \ No newline at end of file diff --git a/项目源码/.idea/sonarlint/issuestore/d/e/de2f1035d9936a5678e127dc87217fc960adf9c0 b/项目源码/.idea/sonarlint/issuestore/d/e/de2f1035d9936a5678e127dc87217fc960adf9c0 new file mode 100644 index 0000000..8f5da56 --- /dev/null +++ b/项目源码/.idea/sonarlint/issuestore/d/e/de2f1035d9936a5678e127dc87217fc960adf9c0 @@ -0,0 +1,2 @@ + + java:S120"ZRename this package name to match the regular expression '^[a-z_]+(\.[a-z_][a-z0-9_]*)*$'.(J$83fbf896-3e44-4c24-a4e4-cbaa40759ffd \ No newline at end of file diff --git a/项目源码/.idea/sonarlint/issuestore/e/7/e7a26d636a815ab45217ad388a04d73824e80eff b/项目源码/.idea/sonarlint/issuestore/e/7/e7a26d636a815ab45217ad388a04d73824e80eff new file mode 100644 index 0000000..e69de29 diff --git a/项目源码/.idea/sonarlint/issuestore/f/0/f00fb19f6df5a95bc0b1cca9e6f775f1ecab26c5 b/项目源码/.idea/sonarlint/issuestore/f/0/f00fb19f6df5a95bc0b1cca9e6f775f1ecab26c5 new file mode 100644 index 0000000..392ddd9 --- /dev/null +++ b/项目源码/.idea/sonarlint/issuestore/f/0/f00fb19f6df5a95bc0b1cca9e6f775f1ecab26c5 @@ -0,0 +1,3 @@ + +Web:DoctypePresenceCheck":Insert a declaration to before this tag.(82J$450ae604-49f8-4da7-88a4-1bb651ad6064 + Web:S5254"@Add "lang" and/or "xml:lang" attributes to this "" element(82J$6f6d9705-cf88-48ac-ad83-25b84babd76a \ No newline at end of file diff --git a/项目源码/.idea/sonarlint/issuestore/f/b/fb6b5c13a92056ce7b544ddad91688ab61a2798e b/项目源码/.idea/sonarlint/issuestore/f/b/fb6b5c13a92056ce7b544ddad91688ab61a2798e new file mode 100644 index 0000000..eee966f --- /dev/null +++ b/项目源码/.idea/sonarlint/issuestore/f/b/fb6b5c13a92056ce7b544ddad91688ab61a2798e @@ -0,0 +1,3 @@ + +Web:DoctypePresenceCheck":Insert a declaration to before this tag.(82J$330936e9-762d-4493-99c7-279e2ae6d9b1 + Web:S5254"@Add "lang" and/or "xml:lang" attributes to this "" element(82J$eb189698-5f38-4f91-9728-f96249b55d9f \ No newline at end of file diff --git a/项目源码/.idea/sonarlint/issuestore/f/f/ffa8dbf33e10bfe9dc8cd04ae32e8b4e5847d7b1 b/项目源码/.idea/sonarlint/issuestore/f/f/ffa8dbf33e10bfe9dc8cd04ae32e8b4e5847d7b1 new file mode 100644 index 0000000..873768d --- /dev/null +++ b/项目源码/.idea/sonarlint/issuestore/f/f/ffa8dbf33e10bfe9dc8cd04ae32e8b4e5847d7b1 @@ -0,0 +1,2 @@ + + Web:S5254"@Add "lang" and/or "xml:lang" attributes to this "" element(82J$09432971-df0c-4d68-835a-51ed528ff707 \ No newline at end of file diff --git a/项目源码/.idea/sonarlint/issuestore/index.pb b/项目源码/.idea/sonarlint/issuestore/index.pb new file mode 100644 index 0000000..b5d20b8 --- /dev/null +++ b/项目源码/.idea/sonarlint/issuestore/index.pb @@ -0,0 +1,61 @@ + +7 +pom.xml,4/4/442292b8a7efeabbe4cc176709b833b1792140ec +^ +.src/main/java/org/example/servlet/Student.java,a/9/a9bf0984037a3c5c7ae6b46f58b7e7390e5ce39e +e +5src/main/java/org/example/servlet/StudentServlet.java,2/7/27d1e9446e3bf7aaa97dfc1b07cb5abd3a7ed3fa +d +4src/main/java/org/example/servlet/HealthServlet.java,1/8/183de4a682ba2e0038893ac1ec0186c4d4c28b70 +L +src/main/webapp/students.jsp,f/f/ffa8dbf33e10bfe9dc8cd04ae32e8b4e5847d7b1 +I +src/main/webapp/login.jsp,8/5/85ee523d01e5e19376db640e846c91bbcb0a1c22 +N +src/main/webapp/checkLogin.jsp,a/7/a7f5d4cb6c61c1a3f56ad354b2dae0c100f64731 +K +src/main/webapp/success.jsp,2/d/2d2d75af380a99a96fb9b8e95f87e10616b18642 +J +src/main/webapp/logout.jsp,e/7/e7a26d636a815ab45217ad388a04d73824e80eff +^ +.src/main/java/org/example/servlet/Product.java,1/2/128e2f93541febe88c01a04d48cb56ac29f6e431 +O +src/main/webapp/addProduct.html,0/9/09db676caf1c01dcb05af5eee6120f8c64796c0e +h +8src/main/java/org/example/servlet/AddProductServlet.java,6/4/645cab380b5f13ceb77000e2ef600688ba20aec8 +N +src/main/webapp/allProduct.jsp,d/9/d92148e02a2078c1d309cf0aee2566e9e82f850b +g +7src/main/java/org/example/servlet/ClearCartServlet.java,8/9/897dd927731b137252f9db6179b57a66d08957fc +^ +.src/main/java/org/example/servlet/BookDAO.java,4/4/4472ea3cdf3a629922ee37d5891d3e75795ece34 +D +sql/create_table.sql,5/1/510eee06ce2a2d91bf446511ffd106e2d2d7aa07 +^ +.src/main/java/org/example/MVC/dao/UserDAO.java,0/8/08a919dced6bb16591956b0b3be56dc6d27fa6f7 +] +-src/main/java/org/example/MVC/model/User.java,4/f/4f729cf5d05aa5f634d6388c74376107ed8ee087 +l + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/项目源码/.idea/webContexts.xml b/项目源码/.idea/webContexts.xml new file mode 100644 index 0000000..0b9351a --- /dev/null +++ b/项目源码/.idea/webContexts.xml @@ -0,0 +1,13 @@ + + + + + + \ No newline at end of file diff --git a/项目源码/pom.xml b/项目源码/pom.xml new file mode 100644 index 0000000..634b51a --- /dev/null +++ b/项目源码/pom.xml @@ -0,0 +1,42 @@ + + + 4.0.0 + + org.example + ZYG + 1.0-SNAPSHOT + + + 8 + 8 + UTF-8 + + + + + + javax.servlet + javax.servlet-api + 3.1.0 + + + javax.servlet + jstl + 1.2 + + + + mysql + mysql-connector-java + 8.0.29 + + + + + + + war + + \ No newline at end of file diff --git a/项目源码/src/main/java/org/example/Goods/DeleteGoodsByIdServlet.java b/项目源码/src/main/java/org/example/Goods/DeleteGoodsByIdServlet.java new file mode 100644 index 0000000..01d7ab2 --- /dev/null +++ b/项目源码/src/main/java/org/example/Goods/DeleteGoodsByIdServlet.java @@ -0,0 +1,63 @@ +package org.example.Goods; + +import javax.servlet.ServletException; +import javax.servlet.annotation.WebServlet; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.SQLException; + +@WebServlet("/deleteGoodsById") +public class DeleteGoodsByIdServlet extends HttpServlet { + @Override + protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + response.setContentType("text/html;charset=UTF-8"); + request.setCharacterEncoding("UTF-8"); + String goodsIdStr = request.getParameter("id"); + // 先判断获取到的参数是否为空字符串或者为null + if (goodsIdStr == null || goodsIdStr.trim().isEmpty()) { + response.getWriter().print("请输入有效的商品id"); + return; + } + int goodsId; + try { + // 尝试将参数转换为整数,如果格式不对会抛出NumberFormatException异常 + goodsId = Integer.parseInt(goodsIdStr); + } catch (NumberFormatException e) { + response.getWriter().print("输入的商品id格式不正确,请输入整数"); + return; + } + + Connection connection = null; + PreparedStatement preparedStatement = null; + try { + connection = JDBCUtil.getConnection(); + String sql = "DELETE FROM goods WHERE goods_id =?"; + preparedStatement = connection.prepareStatement(sql); + preparedStatement.setInt(1, goodsId); + int rowsAffected = preparedStatement.executeUpdate(); + if (rowsAffected > 0) { + response.getWriter().print("删除成功"); + } else { + response.getWriter().print("未找到对应商品,删除失败"); + } + } catch (SQLException e) { + e.printStackTrace(); + response.getWriter().print("删除操作出现错误"); + } finally { + try { + if (preparedStatement!= null) { + preparedStatement.close(); + } + if (connection!= null) { + JDBCUtil.closeConnection(connection); + } + } catch (SQLException e) { + e.printStackTrace(); + } + } + } +} \ No newline at end of file diff --git a/项目源码/src/main/java/org/example/Goods/InsertGoodsServlet.java b/项目源码/src/main/java/org/example/Goods/InsertGoodsServlet.java new file mode 100644 index 0000000..5a139ee --- /dev/null +++ b/项目源码/src/main/java/org/example/Goods/InsertGoodsServlet.java @@ -0,0 +1,105 @@ +package org.example.Goods; + +import javax.servlet.ServletException; +import javax.servlet.annotation.WebServlet; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.io.PrintWriter; +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.SQLException; +import java.text.ParseException; +import java.text.SimpleDateFormat; + +@WebServlet("/insertGoods") +public class InsertGoodsServlet extends HttpServlet { + @Override + protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + // 设置请求编码格式为UTF-8,确保能正确接收中文等特殊字符参数 + request.setCharacterEncoding("UTF-8"); + // 设置响应内容类型为JSON格式,编码为UTF-8,方便前端统一解析处理返回结果 + response.setContentType("application/json;charset=UTF-8"); + PrintWriter out = response.getWriter(); + + // 获取前端传来的商品信息 + String goodsIdStr = request.getParameter("goods_id"); + String goodsName = request.getParameter("goods_name"); + String specification = request.getParameter("specification"); + String productionDateStr = request.getParameter("production_date"); + String belongingWarehouseIdStr = request.getParameter("belonging_warehouse_id"); + String supplierIdStr = request.getParameter("supplier_id"); + + // 进行参数完整性校验,如果有参数为空,则返回错误提示给前端 + if (goodsIdStr == null || goodsName == null || specification == null || productionDateStr == null || belongingWarehouseIdStr == null || supplierIdStr == null) { + out.print("{\"result\":\"参数不完整,请检查输入信息\",\"success\":false}"); + return; + } + + int goodsId; + int belongingWarehouseId; + int supplierId; + try { + goodsId = Integer.parseInt(goodsIdStr); + belongingWarehouseId = Integer.parseInt(belongingWarehouseIdStr); + supplierId = Integer.parseInt(supplierIdStr); + // 可以在这里添加额外的合法性校验,比如日期格式是否正确等,示例如下: + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + sdf.parse(productionDateStr); + } catch (NumberFormatException e) { + out.print("{\"result\":\"商品ID、所属仓库ID或供应商ID格式不正确,请输入正确的整数\",\"success\":false}"); + return; + } catch (ParseException e) { + out.print("{\"result\":\"生产日期格式不正确,请输入正确的日期格式(yyyy-MM-dd)\",\"success\":false}"); + return; + } + + Connection connection = null; + PreparedStatement preparedStatement = null; + try { + connection = JDBCUtil.getConnection(); + // 构建插入商品的SQL语句,注意字段顺序要与表结构中的定义一致 + String sql = "INSERT INTO goods (goods_id, goods_name, specification, production_date, belonging_warehouse_id, supplier_id) VALUES (?,?,?,?,?,?)"; + preparedStatement = connection.prepareStatement(sql); + preparedStatement.setInt(1, goodsId); + preparedStatement.setString(2, goodsName); + preparedStatement.setString(3, specification); + preparedStatement.setString(4, productionDateStr); + preparedStatement.setInt(5, belongingWarehouseId); + preparedStatement.setInt(6, supplierId); + + // 执行插入操作,executeUpdate()方法返回受影响的行数,对于插入操作成功则返回1 + int rowsAffected = preparedStatement.executeUpdate(); + if (rowsAffected > 0) { + out.print("{\"result\":\"商品插入成功\",\"success\":true}"); + } else { + // 插入失败时,尝试获取更详细的数据库错误信息反馈给前端 + String errorMessage = "商品插入失败,原因:"; + SQLException sqlExceptionCause = preparedStatement.getWarnings(); + if (sqlExceptionCause!= null) { + errorMessage += sqlExceptionCause.getMessage(); + } + out.print("{\"result\":\"" + errorMessage + "\",\"success\":false}"); + } + } catch (SQLException e) { + // 打印异常栈追踪信息(可用于开发调试阶段查看详细错误原因,生产环境建议记录到日志文件) + e.printStackTrace(); + // 返回通用的数据库错误提示给前端 + out.print("{\"result\":\"插入操作出现数据库错误\",\"success\":false}"); + } finally { + try { + // 关闭 PreparedStatement,释放相关资源 + if (preparedStatement!= null) { + preparedStatement.close(); + } + // 关闭数据库连接,释放连接资源 + if (connection!= null) { + JDBCUtil.closeConnection(connection); + } + } catch (SQLException e) { + e.printStackTrace(); + } + } + } +} \ No newline at end of file diff --git a/项目源码/src/main/java/org/example/Goods/JDBCUtil.java b/项目源码/src/main/java/org/example/Goods/JDBCUtil.java new file mode 100644 index 0000000..cb3f6f8 --- /dev/null +++ b/项目源码/src/main/java/org/example/Goods/JDBCUtil.java @@ -0,0 +1,30 @@ +package org.example.Goods; + +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.SQLException; + +public class JDBCUtil { + private static final String URL = "jdbc:mysql://localhost:3306/test?useSSL=false&serverTimezone=UTC"; + private static final String USERNAME = "root"; + private static final String PASSWORD = "123456"; + + public static Connection getConnection() throws SQLException { + try { + Class.forName("com.mysql.cj.jdbc.Driver"); + } catch (ClassNotFoundException e) { + e.printStackTrace(); + } + return DriverManager.getConnection(URL, USERNAME, PASSWORD); + } + + public static void closeConnection(Connection connection) { + if (connection!= null) { + try { + connection.close(); + } catch (SQLException e) { + e.printStackTrace(); + } + } + } +} \ No newline at end of file diff --git a/项目源码/src/main/java/org/example/Goods/QueryAllGoodsServlet.java b/项目源码/src/main/java/org/example/Goods/QueryAllGoodsServlet.java new file mode 100644 index 0000000..3ce9fd4 --- /dev/null +++ b/项目源码/src/main/java/org/example/Goods/QueryAllGoodsServlet.java @@ -0,0 +1,63 @@ +package org.example.Goods; + +import javax.servlet.ServletException; +import javax.servlet.annotation.WebServlet; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.io.PrintWriter; +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; + +@WebServlet("/queryAllGoods") +public class QueryAllGoodsServlet extends HttpServlet { + @Override + protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + response.setContentType("application/json;charset=UTF-8"); + PrintWriter out = response.getWriter(); + Connection connection = null; + PreparedStatement preparedStatement = null; + ResultSet resultSet = null; + try { + connection = JDBCUtil.getConnection(); + String sql = "SELECT * FROM goods"; + preparedStatement = connection.prepareStatement(sql); + resultSet = preparedStatement.executeQuery(); + StringBuilder jsonBuilder = new StringBuilder("["); + while (resultSet.next()) { + int goodsId = resultSet.getInt("goods_id"); + String goodsName = resultSet.getString("goods_name"); + String specification = resultSet.getString("specification"); + String productionDate = resultSet.getString("production_date"); + int belongingWarehouseId = resultSet.getInt("belonging_warehouse_id"); + int supplierId = resultSet.getInt("supplier_id"); + jsonBuilder.append("{\"goods_id\":\"").append(goodsId).append("\",\"goods_name\":\"").append(goodsName).append("\",\"specification\":\"").append(specification).append("\",\"production_date\":\"").append(productionDate).append("\",\"belonging_warehouse_id\":\"").append(belongingWarehouseId).append("\",\"supplier_id\":\"").append(supplierId).append("\"},"); + } + if (jsonBuilder.length() > 1) { + jsonBuilder.deleteCharAt(jsonBuilder.length() - 1); + } + jsonBuilder.append("]"); + out.print(jsonBuilder.toString()); + } catch (SQLException e) { + e.printStackTrace(); + out.print("[]"); + } finally { + try { + if (resultSet!= null) { + resultSet.close(); + } + if (preparedStatement!= null) { + preparedStatement.close(); + } + if (connection!= null) { + JDBCUtil.closeConnection(connection); + } + } catch (SQLException e) { + e.printStackTrace(); + } + } + } +} \ No newline at end of file diff --git a/项目源码/src/main/java/org/example/Goods/QueryGoodsByName.java b/项目源码/src/main/java/org/example/Goods/QueryGoodsByName.java new file mode 100644 index 0000000..76192bf --- /dev/null +++ b/项目源码/src/main/java/org/example/Goods/QueryGoodsByName.java @@ -0,0 +1,79 @@ +package org.example.Goods; + + +import javax.servlet.ServletException; +import javax.servlet.annotation.WebServlet; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.io.PrintWriter; +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; + +@WebServlet("/queryGoodsByName") +public class QueryGoodsByName extends HttpServlet { + @Override + protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + request.setCharacterEncoding("utf-8"); + response.setContentType("application/json;charset=UTF-8"); + PrintWriter out = response.getWriter(); + Connection connection = null; + PreparedStatement preparedStatement = null; + ResultSet resultSet = null; + + String warehouseIdStr = request.getParameter("name"); + if (warehouseIdStr == null || warehouseIdStr.trim().isEmpty()) { + out.print("[]"); + return; + } + int warehouseId; + try { + warehouseId = Integer.parseInt(warehouseIdStr); + } catch (NumberFormatException e) { + out.print("[]"); + return; + } + + try { + connection = JDBCUtil.getConnection(); + String sql = "SELECT * FROM goods WHERE goods_id =?"; + preparedStatement = connection.prepareStatement(sql); + preparedStatement.setInt(1, warehouseId); + resultSet = preparedStatement.executeQuery(); + StringBuilder jsonBuilder = new StringBuilder("["); + while (resultSet.next()) { + int goodsId = resultSet.getInt("goods_id"); + String goodsName = resultSet.getString("goods_name"); + String specification = resultSet.getString("specification"); + String productionDate = resultSet.getString("production_date"); + int supplierId = resultSet.getInt("supplier_id"); + jsonBuilder.append("{\"goods_id\":\"").append(goodsId).append("\",\"goods_name\":\"").append(goodsName).append("\",\"specification\":\"").append(specification).append("\",\"production_date\":\"").append(productionDate).append("\",\"supplier_id\":\"").append(supplierId).append("\"},"); + } + if (jsonBuilder.length() > 1) { + jsonBuilder.deleteCharAt(jsonBuilder.length() - 1); + } + jsonBuilder.append("]"); + out.print(jsonBuilder.toString()); + } catch (SQLException e) { + e.printStackTrace(); + out.print("[]"); + } finally { + try { + if (resultSet!= null) { + resultSet.close(); + } + if (preparedStatement!= null) { + preparedStatement.close(); + } + if (connection!= null) { + JDBCUtil.closeConnection(connection); + } + } catch (SQLException e) { + e.printStackTrace(); + } + } + } +} \ No newline at end of file diff --git a/项目源码/src/main/java/org/example/boundrecord/JDBCUtil.java b/项目源码/src/main/java/org/example/boundrecord/JDBCUtil.java new file mode 100644 index 0000000..1803827 --- /dev/null +++ b/项目源码/src/main/java/org/example/boundrecord/JDBCUtil.java @@ -0,0 +1,30 @@ +package org.example.boundrecord; + +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.SQLException; + +public class JDBCUtil { + private static final String URL = "jdbc:mysql://localhost:3306/test?useSSL=false&serverTimezone=UTC"; + private static final String USERNAME = "root"; + private static final String PASSWORD = "123456"; + + public static Connection getConnection() throws SQLException { + try { + Class.forName("com.mysql.cj.jdbc.Driver"); + } catch (ClassNotFoundException e) { + e.printStackTrace(); + } + return DriverManager.getConnection(URL, USERNAME, PASSWORD); + } + + public static void closeConnection(Connection connection) { + if (connection!= null) { + try { + connection.close(); + } catch (SQLException e) { + e.printStackTrace(); + } + } + } +} \ No newline at end of file diff --git a/项目源码/src/main/java/org/example/boundrecord/QueryAllRecordsServlet.java b/项目源码/src/main/java/org/example/boundrecord/QueryAllRecordsServlet.java new file mode 100644 index 0000000..8f700db --- /dev/null +++ b/项目源码/src/main/java/org/example/boundrecord/QueryAllRecordsServlet.java @@ -0,0 +1,73 @@ +package org.example.boundrecord; + +import javax.servlet.ServletException; +import javax.servlet.annotation.WebServlet; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.io.PrintWriter; +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; + +@WebServlet("/queryAllRecords") +public class QueryAllRecordsServlet extends HttpServlet { + @Override + protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + response.setContentType("application/json;charset=UTF-8"); + PrintWriter out = response.getWriter(); + Connection connection = null; + PreparedStatement preparedStatement = null; + ResultSet resultSet = null; + try { + connection = JDBCUtil.getConnection(); + // 通过关联 goods 表,将 inboundrecord、outboundrecord 和 goods 三个表连接起来查询所有信息 + String sql = "SELECT ir.inbound_id, ir.goods_id, g.goods_name, ir.warehouse_id, ir.quantity_in, ir.inbound_date, orr.quantity_out, orr.outbound_date, g.specification, g.production_date, g.belonging_warehouse_id, g.supplier_id " + + "FROM inboundrecord ir " + + "LEFT JOIN goods g ON ir.goods_id = g.goods_id " + + "LEFT JOIN outboundrecord orr ON ir.goods_id = orr.goods_id"; + preparedStatement = connection.prepareStatement(sql); + resultSet = preparedStatement.executeQuery(); + StringBuilder jsonBuilder = new StringBuilder("["); + while (resultSet.next()) { + int inboundId = resultSet.getInt("inbound_id"); + int goodsId = resultSet.getInt("goods_id"); + String goodsName = resultSet.getString("goods_name"); + int warehouseId = resultSet.getInt("warehouse_id"); + int quantityIn = resultSet.getInt("quantity_in"); + String inboundDate = resultSet.getString("inbound_date"); + int quantityOut = resultSet.getInt("quantity_out"); + String outboundDate = resultSet.getString("outbound_date"); + String specification = resultSet.getString("specification"); + String productionDate = resultSet.getString("production_date"); + int belongingWarehouseId = resultSet.getInt("belonging_warehouse_id"); + int supplierId = resultSet.getInt("supplier_id"); + jsonBuilder.append("{\"inbound_id\":\"").append(inboundId).append("\",\"goods_id\":\"").append(goodsId).append("\",\"goods_name\":\"").append(goodsName).append("\",\"warehouse_id\":\"").append(warehouseId).append("\",\"quantity_in\":\"").append(quantityIn).append("\",\"inbound_date\":\"").append(inboundDate).append("\",\"quantity_out\":\"").append(quantityOut).append("\",\"outbound_date\":\"").append(outboundDate).append("\",\"specification\":\"").append(specification).append("\",\"production_date\":\"").append(productionDate).append("\",\"belonging_warehouse_id\":\"").append(belongingWarehouseId).append("\",\"supplier_id\":\"").append(supplierId).append("\"},"); + } + if (jsonBuilder.length() > 1) { + jsonBuilder.deleteCharAt(jsonBuilder.length() - 1); + } + jsonBuilder.append("]"); + out.print(jsonBuilder.toString()); + } catch (SQLException e) { + e.printStackTrace(); + out.print("[]"); + } finally { + try { + if (resultSet!= null) { + resultSet.close(); + } + if (preparedStatement!= null) { + preparedStatement.close(); + } + if (connection!= null) { + JDBCUtil.closeConnection(connection); + } + } catch (SQLException e) { + e.printStackTrace(); + } + } + } +} \ No newline at end of file diff --git a/项目源码/src/main/java/org/example/boundrecord/QueryRecordsByGoodsIdServlet.java b/项目源码/src/main/java/org/example/boundrecord/QueryRecordsByGoodsIdServlet.java new file mode 100644 index 0000000..6112cae --- /dev/null +++ b/项目源码/src/main/java/org/example/boundrecord/QueryRecordsByGoodsIdServlet.java @@ -0,0 +1,82 @@ +package org.example.boundrecord; + +import javax.servlet.ServletException; +import javax.servlet.annotation.WebServlet; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.io.PrintWriter; +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; + +@WebServlet("/queryRecordsByGoodsId") +public class QueryRecordsByGoodsIdServlet extends HttpServlet { + @Override + protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + response.setContentType("application/json;charset=UTF-8"); + PrintWriter out = response.getWriter(); + Connection connection = null; + PreparedStatement preparedStatement = null; + ResultSet resultSet = null; + + String goodsIdStr = request.getParameter("goods_id"); + if (goodsIdStr == null || goodsIdStr.trim().isEmpty()) { + out.print("[]"); + return; + } + + try { + connection = JDBCUtil.getConnection(); + // 通过商品id关联查询入库记录、出库记录以及商品表的相关信息 + String sql = "SELECT ir.inbound_id, ir.goods_id, g.goods_name, ir.warehouse_id, ir.quantity_in, ir.inbound_date, orr.quantity_out, orr.outbound_date, g.specification, g.production_date, g.belonging_warehouse_id, g.supplier_id " + + "FROM inboundrecord ir " + + "LEFT JOIN goods g ON ir.goods_id = g.goods_id " + + "LEFT JOIN outboundrecord orr ON ir.goods_id = orr.goods_id " + + "WHERE ir.goods_id =?"; + preparedStatement = connection.prepareStatement(sql); + preparedStatement.setInt(1, Integer.parseInt(goodsIdStr)); + resultSet = preparedStatement.executeQuery(); + StringBuilder jsonBuilder = new StringBuilder("["); + while (resultSet.next()) { + int inboundId = resultSet.getInt("inbound_id"); + int goodsId = resultSet.getInt("goods_id"); + String goodsName = resultSet.getString("goods_name"); + int warehouseId = resultSet.getInt("warehouse_id"); + int quantityIn = resultSet.getInt("quantity_in"); + String inboundDate = resultSet.getString("inbound_date"); + int quantityOut = resultSet.getInt("quantity_out"); + String outboundDate = resultSet.getString("outbound_date"); + String specification = resultSet.getString("specification"); + String productionDate = resultSet.getString("production_date"); + int belongingWarehouseId = resultSet.getInt("belonging_warehouse_id"); + int supplierId = resultSet.getInt("supplier_id"); + jsonBuilder.append("{\"inbound_id\":\"").append(inboundId).append("\",\"goods_id\":\"").append(goodsId).append("\",\"goods_name\":\"").append(goodsName).append("\",\"warehouse_id\":\"").append(warehouseId).append("\",\"quantity_in\":\"").append(quantityIn).append("\",\"inbound_date\":\"").append(inboundDate).append("\",\"quantity_out\":\"").append(quantityOut).append("\",\"outbound_date\":\"").append(outboundDate).append("\",\"specification\":\"").append(specification).append("\",\"production_date\":\"").append(productionDate).append("\",\"belonging_warehouse_id\":\"").append(belongingWarehouseId).append("\",\"supplier_id\":\"").append(supplierId).append("\"},"); + } + if (jsonBuilder.length() > 1) { + jsonBuilder.deleteCharAt(jsonBuilder.length() - 1); + } + jsonBuilder.append("]"); + out.print(jsonBuilder.toString()); + } catch (SQLException e) { + e.printStackTrace(); + out.print("[]"); + } finally { + try { + if (resultSet!= null) { + resultSet.close(); + } + if (preparedStatement!= null) { + preparedStatement.close(); + } + if (connection!= null) { + JDBCUtil.closeConnection(connection); + } + } catch (SQLException e) { + e.printStackTrace(); + } + } + } +} \ No newline at end of file diff --git a/项目源码/src/main/java/org/example/employee/DeleteEmployeeByIdServlet.java b/项目源码/src/main/java/org/example/employee/DeleteEmployeeByIdServlet.java new file mode 100644 index 0000000..6d82242 --- /dev/null +++ b/项目源码/src/main/java/org/example/employee/DeleteEmployeeByIdServlet.java @@ -0,0 +1,63 @@ +package org.example.employee; + +import javax.servlet.ServletException; +import javax.servlet.annotation.WebServlet; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.SQLException; + +@WebServlet("/deleteEmployeeById") +public class DeleteEmployeeByIdServlet extends HttpServlet { + @Override + protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + response.setContentType("text/html;charset=UTF-8"); + request.setCharacterEncoding("UTF-8"); + String employeeIdStr = request.getParameter("id"); + // 先判断获取到的参数是否为空字符串或者为null + if (employeeIdStr == null || employeeIdStr.trim().isEmpty()) { + response.getWriter().print("请输入有效的员工id"); + return; + } + int employeeId; + try { + // 尝试将参数转换为整数,如果格式不对会抛出NumberFormatException异常 + employeeId = Integer.parseInt(employeeIdStr); + } catch (NumberFormatException e) { + response.getWriter().print("输入的员工id格式不正确,请输入整数"); + return; + } + + Connection connection = null; + PreparedStatement preparedStatement = null; + try { + connection = JDBCUtil.getConnection(); + String sql = "DELETE FROM employee WHERE employee_id =?"; + preparedStatement = connection.prepareStatement(sql); + preparedStatement.setInt(1, employeeId); + int rowsAffected = preparedStatement.executeUpdate(); + if (rowsAffected > 0) { + response.getWriter().print("删除成功"); + } else { + response.getWriter().print("未找到对应员工,删除失败"); + } + } catch (SQLException e) { + e.printStackTrace(); + response.getWriter().print("删除操作出现错误"); + } finally { + try { + if (preparedStatement!= null) { + preparedStatement.close(); + } + if (connection!= null) { + JDBCUtil.closeConnection(connection); + } + } catch (SQLException e) { + e.printStackTrace(); + } + } + } +} \ No newline at end of file diff --git a/项目源码/src/main/java/org/example/employee/InsertEmployeeServlet.java b/项目源码/src/main/java/org/example/employee/InsertEmployeeServlet.java new file mode 100644 index 0000000..8dc0253 --- /dev/null +++ b/项目源码/src/main/java/org/example/employee/InsertEmployeeServlet.java @@ -0,0 +1,93 @@ +package org.example.employee; + +import javax.servlet.ServletException; +import javax.servlet.annotation.WebServlet; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.io.PrintWriter; +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.SQLException; + +@WebServlet("/insertEmployee") +public class InsertEmployeeServlet extends HttpServlet { + @Override + protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + // 设置请求编码格式为UTF-8,确保能正确接收中文等特殊字符参数 + request.setCharacterEncoding("UTF-8"); + // 设置响应内容类型为JSON格式,编码为UTF-8,方便前端统一解析处理返回结果 + response.setContentType("application/json;charset=UTF-8"); + PrintWriter out = response.getWriter(); + + // 获取前端传来的员工信息 + String employeeIdStr = request.getParameter("employee_id"); + String employeeName = request.getParameter("employee_name"); + String department = request.getParameter("department"); + String contactInfo = request.getParameter("contact_info"); + String managedWarehouseIdStr = request.getParameter("managed_warehouse_id"); + + // 进行参数完整性校验,如果有参数为空,则返回错误提示给前端 + if (employeeIdStr == null || employeeName == null || department == null || contactInfo == null || managedWarehouseIdStr == null) { + out.print("{\"result\":\"参数不完整,请检查输入信息\",\"success\":false}"); + return; + } + + int employeeId; + int managedWarehouseId; + try { + employeeId = Integer.parseInt(employeeIdStr); + managedWarehouseId = Integer.parseInt(managedWarehouseIdStr); + } catch (NumberFormatException e) { + out.print("{\"result\":\"员工ID或管理的仓库ID格式不正确,请输入正确的整数\",\"success\":false}"); + return; + } + + Connection connection = null; + PreparedStatement preparedStatement = null; + try { + connection = JDBCUtil.getConnection(); + // 构建插入员工的SQL语句,注意字段顺序要与表结构中的定义一致 + String sql = "INSERT INTO employee (employee_id, employee_name, department, contact_info, managed_warehouse_id) VALUES (?,?,?,?,?)"; + preparedStatement = connection.prepareStatement(sql); + preparedStatement.setInt(1, employeeId); + preparedStatement.setString(2, employeeName); + preparedStatement.setString(3, department); + preparedStatement.setString(4, contactInfo); + preparedStatement.setInt(5, managedWarehouseId); + + // 执行插入操作,executeUpdate()方法返回受影响的行数,对于插入操作成功则返回1 + int rowsAffected = preparedStatement.executeUpdate(); + if (rowsAffected > 0) { + out.print("{\"result\":\"员工插入成功\",\"success\":true}"); + } else { + // 插入失败时,尝试获取更详细的数据库错误信息反馈给前端 + String errorMessage = "员工插入失败,原因:"; + SQLException sqlExceptionCause = preparedStatement.getWarnings(); + if (sqlExceptionCause!= null) { + errorMessage += sqlExceptionCause.getMessage(); + } + out.print("{\"result\":\"" + errorMessage + "\",\"success\":false}"); + } + } catch (SQLException e) { + // 打印异常栈追踪信息(可用于开发调试阶段查看详细错误原因,生产环境建议记录到日志文件) + e.printStackTrace(); + // 返回通用的数据库错误提示给前端 + out.print("{\"result\":\"插入操作出现数据库错误\",\"success\":false}"); + } finally { + try { + // 关闭 PreparedStatement,释放相关资源 + if (preparedStatement!= null) { + preparedStatement.close(); + } + // 关闭数据库连接,释放连接资源 + if (connection!= null) { + JDBCUtil.closeConnection(connection); + } + } catch (SQLException e) { + e.printStackTrace(); + } + } + } +} \ No newline at end of file diff --git a/项目源码/src/main/java/org/example/employee/JDBCUtil.java b/项目源码/src/main/java/org/example/employee/JDBCUtil.java new file mode 100644 index 0000000..936325b --- /dev/null +++ b/项目源码/src/main/java/org/example/employee/JDBCUtil.java @@ -0,0 +1,30 @@ +package org.example.employee; + +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.SQLException; + +public class JDBCUtil { + private static final String URL = "jdbc:mysql://localhost:3306/test?useSSL=false&serverTimezone=UTC"; + private static final String USERNAME = "root"; + private static final String PASSWORD = "123456"; + + public static Connection getConnection() throws SQLException { + try { + Class.forName("com.mysql.cj.jdbc.Driver"); + } catch (ClassNotFoundException e) { + e.printStackTrace(); + } + return DriverManager.getConnection(URL, USERNAME, PASSWORD); + } + + public static void closeConnection(Connection connection) { + if (connection!= null) { + try { + connection.close(); + } catch (SQLException e) { + e.printStackTrace(); + } + } + } +} \ No newline at end of file diff --git a/项目源码/src/main/java/org/example/employee/QueryAllEmployeesServlet.java b/项目源码/src/main/java/org/example/employee/QueryAllEmployeesServlet.java new file mode 100644 index 0000000..c4cf85d --- /dev/null +++ b/项目源码/src/main/java/org/example/employee/QueryAllEmployeesServlet.java @@ -0,0 +1,62 @@ +package org.example.employee; + +import javax.servlet.ServletException; +import javax.servlet.annotation.WebServlet; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.io.PrintWriter; +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; + +@WebServlet("/queryAllEmployees") +public class QueryAllEmployeesServlet extends HttpServlet { + @Override + protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + response.setContentType("application/json;charset=UTF-8"); + PrintWriter out = response.getWriter(); + Connection connection = null; + PreparedStatement preparedStatement = null; + ResultSet resultSet = null; + try { + connection = JDBCUtil.getConnection(); + String sql = "SELECT * FROM employee"; + preparedStatement = connection.prepareStatement(sql); + resultSet = preparedStatement.executeQuery(); + StringBuilder jsonBuilder = new StringBuilder("["); + while (resultSet.next()) { + int employeeId = resultSet.getInt("employee_id"); + String employeeName = resultSet.getString("employee_name"); + String department = resultSet.getString("department"); + String contactInfo = resultSet.getString("contact_info"); + int managedWarehouseId = resultSet.getInt("managed_warehouse_id"); + jsonBuilder.append("{\"employee_id\":\"").append(employeeId).append("\",\"employee_name\":\"").append(employeeName).append("\",\"department\":\"").append(department).append("\",\"contact_info\":\"").append(contactInfo).append("\",\"managed_warehouse_id\":\"").append(managedWarehouseId).append("\"},"); + } + if (jsonBuilder.length() > 1) { + jsonBuilder.deleteCharAt(jsonBuilder.length() - 1); + } + jsonBuilder.append("]"); + out.print(jsonBuilder.toString()); + } catch (SQLException e) { + e.printStackTrace(); + out.print("[]"); + } finally { + try { + if (resultSet!= null) { + resultSet.close(); + } + if (preparedStatement!= null) { + preparedStatement.close(); + } + if (connection!= null) { + JDBCUtil.closeConnection(connection); + } + } catch (SQLException e) { + e.printStackTrace(); + } + } + } +} \ No newline at end of file diff --git a/项目源码/src/main/java/org/example/employee/QueryEmployeeByNameServlet.java b/项目源码/src/main/java/org/example/employee/QueryEmployeeByNameServlet.java new file mode 100644 index 0000000..f05842b --- /dev/null +++ b/项目源码/src/main/java/org/example/employee/QueryEmployeeByNameServlet.java @@ -0,0 +1,70 @@ +package org.example.employee; + +import javax.servlet.ServletException; +import javax.servlet.annotation.WebServlet; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.io.PrintWriter; +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; + +@WebServlet("/queryEmployeeByName") +public class QueryEmployeeByNameServlet extends HttpServlet { + @Override + protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + response.setContentType("application/json;charset=UTF-8"); + PrintWriter out = response.getWriter(); + Connection connection = null; + PreparedStatement preparedStatement = null; + ResultSet resultSet = null; + + String employeeName = request.getParameter("name"); + if (employeeName == null || employeeName.trim().isEmpty()) { + out.print("[]"); + return; + } + + try { + connection = JDBCUtil.getConnection(); + String sql = "SELECT * FROM employee WHERE employee_name LIKE?"; + preparedStatement = connection.prepareStatement(sql); + preparedStatement.setString(1, "%" + employeeName + "%"); + resultSet = preparedStatement.executeQuery(); + StringBuilder jsonBuilder = new StringBuilder("["); + while (resultSet.next()) { + int employeeId = resultSet.getInt("employee_id"); + String department = resultSet.getString("department"); + String contactInfo = resultSet.getString("contact_info"); + int managedWarehouseId = resultSet.getInt("managed_warehouse_id"); + String employeeNameDB = resultSet.getString("employee_name"); + jsonBuilder.append("{\"employee_id\":\"").append(employeeId).append("\",\"employee_name\":\"").append(employeeNameDB).append("\",\"department\":\"").append(department).append("\",\"contact_info\":\"").append(contactInfo).append("\",\"managed_warehouse_id\":\"").append(managedWarehouseId).append("\"},"); + } + if (jsonBuilder.length() > 1) { + jsonBuilder.deleteCharAt(jsonBuilder.length() - 1); + } + jsonBuilder.append("]"); + out.print(jsonBuilder.toString()); + } catch (SQLException e) { + e.printStackTrace(); + out.print("[]"); + } finally { + try { + if (resultSet!= null) { + resultSet.close(); + } + if (preparedStatement!= null) { + preparedStatement.close(); + } + if (connection!= null) { + JDBCUtil.closeConnection(connection); + } + } catch (SQLException e) { + e.printStackTrace(); + } + } + } +} \ No newline at end of file diff --git a/项目源码/src/main/java/org/example/login/DBUtil.java b/项目源码/src/main/java/org/example/login/DBUtil.java new file mode 100644 index 0000000..46af5b7 --- /dev/null +++ b/项目源码/src/main/java/org/example/login/DBUtil.java @@ -0,0 +1,30 @@ +package org.example.login; + + + +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.SQLException; + +public class DBUtil { + private static final String URL = "jdbc:mysql://localhost:3306/test"; // 修改为你的数据库地址 + private static final String USER = "root"; // 修改为你的数据库用户名 + private static final String PASSWORD = "123456"; // 修改为你的数据库密码 + + static { + try { + Class.forName("com.mysql.cj.jdbc.Driver"); + } catch (ClassNotFoundException e) { + e.printStackTrace(); + } + } + + public static Connection getConnection() { + try { + return DriverManager.getConnection(URL, USER, PASSWORD); + } catch (SQLException e) { + e.printStackTrace(); + throw new RuntimeException("数据库连接失败!"); + } + } +} \ No newline at end of file diff --git a/项目源码/src/main/java/org/example/login/LoginFilter.java b/项目源码/src/main/java/org/example/login/LoginFilter.java new file mode 100644 index 0000000..1271c68 --- /dev/null +++ b/项目源码/src/main/java/org/example/login/LoginFilter.java @@ -0,0 +1,55 @@ +package org.example.login; + + +import javax.servlet.*; +import javax.servlet.annotation.WebFilter; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.servlet.http.HttpSession; +import java.io.IOException; + + +import javax.servlet.Filter; +import javax.servlet.FilterChain; +import javax.servlet.FilterConfig; +import javax.servlet.ServletException; +import javax.servlet.ServletRequest; +import javax.servlet.ServletResponse; + + + + +@WebFilter(filterName = "LoginFilter", urlPatterns = {"/Web/start.html", "/Web/*"}) // 过滤需要登录才能访问的资源 +public class LoginFilter implements Filter { + + public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws ServletException, IOException { + HttpServletRequest request = (HttpServletRequest) req; + HttpServletResponse response = (HttpServletResponse) res; + HttpSession session = request.getSession(false); + + // 获取请求的URL + String requestURI = request.getRequestURI(); + + // 检查用户是否已登录 + if (session != null && session.getAttribute("username") != null) { + // 用户已登录,继续执行请求 + chain.doFilter(req, res); + } else { + // 用户未登录,重定向到登录页面 + // 如果是ajax请求,则返回特定的状态码 + if (requestURI.contains(".do") || "XMLHttpRequest".equals(request.getHeader("X-Requested-With"))) { + response.setStatus(401); // 返回401状态码表示未授权 + } else { + response.sendRedirect(request.getContextPath() + "/index.jsp"); + } + } + } + + public void init(FilterConfig config) throws ServletException { + // 过滤器初始化 + } + + public void destroy() { + // 过滤器销毁 + } +} \ No newline at end of file diff --git a/项目源码/src/main/java/org/example/login/LoginServlet.java b/项目源码/src/main/java/org/example/login/LoginServlet.java new file mode 100644 index 0000000..db67a93 --- /dev/null +++ b/项目源码/src/main/java/org/example/login/LoginServlet.java @@ -0,0 +1,38 @@ +package org.example.login; + + + +import javax.servlet.ServletException; +import javax.servlet.annotation.WebServlet; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.sql.SQLException; +import java.io.PrintWriter; +import javax.servlet.http.HttpSession; + + +@WebServlet("/login") +public class LoginServlet extends HttpServlet { + private UserDAO userDAO = new UserDAO(); + + @Override + protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + response.setContentType("text/html;charset=UTF-8"); + request.setCharacterEncoding("UTF-8"); + String username = request.getParameter("username"); + String password = request.getParameter("password"); + + boolean isLoggedIn = userDAO.login(username, password); + if (isLoggedIn) { + // 登录成功,将用户名存储在session中 + HttpSession session = request.getSession(); + session.setAttribute("username", username); + response.sendRedirect(request.getContextPath() + "/Web/start.html"); // 登录成功跳转到主页 + } else { + request.setAttribute("error", "用户名或密码错误!"); + request.getRequestDispatcher("index.jsp").forward(request, response); + } + } +} \ No newline at end of file diff --git a/项目源码/src/main/java/org/example/login/RegisterServlet.java b/项目源码/src/main/java/org/example/login/RegisterServlet.java new file mode 100644 index 0000000..e9894b3 --- /dev/null +++ b/项目源码/src/main/java/org/example/login/RegisterServlet.java @@ -0,0 +1,35 @@ +package org.example.login; + + + +import javax.servlet.ServletException; +import javax.servlet.annotation.WebServlet; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.sql.SQLException; +import java.io.PrintWriter; + + +@WebServlet("/register") +public class RegisterServlet extends HttpServlet { + private UserDAO userDAO = new UserDAO(); + + @Override + protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + String username = request.getParameter("username"); + String password = request.getParameter("password"); + + boolean isRegistered = userDAO.register(username, password); + if (isRegistered) { + // 注册成功,设置提示信息 + request.setAttribute("success", "注册成功,请登录!"); + request.getRequestDispatcher("register.jsp").forward(request, response); + } else { + // 注册失败,设置错误信息 + request.setAttribute("error", "用户名已存在或注册失败!"); + request.getRequestDispatcher("register.jsp").forward(request, response); + } + } +} \ No newline at end of file diff --git a/项目源码/src/main/java/org/example/login/User.java b/项目源码/src/main/java/org/example/login/User.java new file mode 100644 index 0000000..2f4f73b --- /dev/null +++ b/项目源码/src/main/java/org/example/login/User.java @@ -0,0 +1,41 @@ +package org.example.login; + + +public class User { + private int id; + private String username; + private String password; + + // Constructors + public User() {} + + public User(String username, String password) { + this.username = username; + this.password = password; + } + + // Getters and Setters + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public String getUsername() { + return username; + } + + public void setUsername(String username) { + this.username = username; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } +} \ No newline at end of file diff --git a/项目源码/src/main/java/org/example/login/UserDAO.java b/项目源码/src/main/java/org/example/login/UserDAO.java new file mode 100644 index 0000000..a37ea4c --- /dev/null +++ b/项目源码/src/main/java/org/example/login/UserDAO.java @@ -0,0 +1,45 @@ +package org.example.login; + + + + +import java.sql.*; + + + + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; + +public class UserDAO { + // 注册用户 + public boolean register(String username, String password) { + String sql = "INSERT INTO user (username, password) VALUES (?, ?)"; + try (Connection conn = DBUtil.getConnection(); + PreparedStatement pstmt = conn.prepareStatement(sql)) { + pstmt.setString(1, username); + pstmt.setString(2, password); + pstmt.executeUpdate(); + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + // 验证登录 + public boolean login(String username, String password) { + String sql = "SELECT * FROM user WHERE username = ? AND password = ?"; + try (Connection conn = DBUtil.getConnection(); + PreparedStatement pstmt = conn.prepareStatement(sql)) { + pstmt.setString(1, username); + pstmt.setString(2, password); + ResultSet rs = pstmt.executeQuery(); + return rs.next(); // 如果有结果,说明用户名密码匹配 + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } +} \ No newline at end of file diff --git a/项目源码/src/main/java/org/example/order/DeleteOrderByIdServlet.java b/项目源码/src/main/java/org/example/order/DeleteOrderByIdServlet.java new file mode 100644 index 0000000..3fcba67 --- /dev/null +++ b/项目源码/src/main/java/org/example/order/DeleteOrderByIdServlet.java @@ -0,0 +1,63 @@ +package org.example.order; + +import javax.servlet.ServletException; +import javax.servlet.annotation.WebServlet; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.SQLException; + +@WebServlet("/deleteOrderById") +public class DeleteOrderByIdServlet extends HttpServlet { + @Override + protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + response.setContentType("text/html;charset=UTF-8"); + request.setCharacterEncoding("UTF-8"); + String orderIdStr = request.getParameter("id"); + // 先判断获取到的参数是否为空字符串或者为null + if (orderIdStr == null || orderIdStr.trim().isEmpty()) { + response.getWriter().print("请输入有效的订单id"); + return; + } + int orderId; + try { + // 尝试将参数转换为整数,如果格式不对会抛出NumberFormatException异常 + orderId = Integer.parseInt(orderIdStr); + } catch (NumberFormatException e) { + response.getWriter().print("输入的订单id格式不正确,请输入整数"); + return; + } + + Connection connection = null; + PreparedStatement preparedStatement = null; + try { + connection = JDBCUtil.getConnection(); + String sql = "DELETE FROM `order` WHERE order_id =?"; + preparedStatement = connection.prepareStatement(sql); + preparedStatement.setInt(1, orderId); + int rowsAffected = preparedStatement.executeUpdate(); + if (rowsAffected > 0) { + response.getWriter().print("删除成功"); + } else { + response.getWriter().print("未找到对应订单,删除失败"); + } + } catch (SQLException e) { + e.printStackTrace(); + response.getWriter().print("删除操作出现错误"); + } finally { + try { + if (preparedStatement!= null) { + preparedStatement.close(); + } + if (connection!= null) { + JDBCUtil.closeConnection(connection); + } + } catch (SQLException e) { + e.printStackTrace(); + } + } + } +} \ No newline at end of file diff --git a/项目源码/src/main/java/org/example/order/InsertOrderServlet.java b/项目源码/src/main/java/org/example/order/InsertOrderServlet.java new file mode 100644 index 0000000..44437e6 --- /dev/null +++ b/项目源码/src/main/java/org/example/order/InsertOrderServlet.java @@ -0,0 +1,97 @@ +package org.example.order; + +import javax.servlet.ServletException; +import javax.servlet.annotation.WebServlet; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.io.PrintWriter; +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.SQLException; + +@WebServlet("/insertOrder") +public class InsertOrderServlet extends HttpServlet { + @Override + protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + // 设置请求编码格式为UTF-8,确保能正确接收中文等特殊字符参数 + request.setCharacterEncoding("UTF-8"); + // 设置响应内容类型为JSON格式,编码为UTF-8,方便前端统一解析处理返回结果 + response.setContentType("application/json;charset=UTF-8"); + PrintWriter out = response.getWriter(); + + // 获取前端传来的订单信息 + String orderIdStr = request.getParameter("order_id"); + String customerIdStr = request.getParameter("customer_id"); + String goodsIdStr = request.getParameter("goods_id"); + String orderQuantityStr = request.getParameter("order_quantity"); + String orderDate = request.getParameter("order_date"); + + // 进行参数完整性校验,如果有参数为空,则返回错误提示给前端 + if (orderIdStr == null || customerIdStr == null || goodsIdStr == null || orderQuantityStr == null || orderDate == null) { + out.print("{\"result\":\"参数不完整,请检查输入信息\",\"success\":false}"); + return; + } + + int orderId; + int customerId; + int goodsId; + int orderQuantity; + try { + orderId = Integer.parseInt(orderIdStr); + customerId = Integer.parseInt(customerIdStr); + goodsId = Integer.parseInt(goodsIdStr); + orderQuantity = Integer.parseInt(orderQuantityStr); + } catch (NumberFormatException e) { + out.print("{\"result\":\"订单ID、客户ID、商品ID或订单数量格式不正确,请输入正确的整数\",\"success\":false}"); + return; + } + + Connection connection = null; + PreparedStatement preparedStatement = null; + try { + connection = JDBCUtil.getConnection(); + // 构建插入订单的SQL语句,注意字段顺序要与表结构中的定义一致 + String sql = "INSERT INTO `order` (order_id, customer_id, goods_id, order_quantity, order_date) VALUES (?,?,?,?,?)"; + preparedStatement = connection.prepareStatement(sql); + preparedStatement.setInt(1, orderId); + preparedStatement.setInt(2, customerId); + preparedStatement.setInt(3, goodsId); + preparedStatement.setInt(4, orderQuantity); + preparedStatement.setString(5, orderDate); + + // 执行插入操作,executeUpdate()方法返回受影响的行数,对于插入操作成功则返回1 + int rowsAffected = preparedStatement.executeUpdate(); + if (rowsAffected > 0) { + out.print("{\"result\":\"订单插入成功\",\"success\":true}"); + } else { + // 插入失败时,尝试获取更详细的数据库错误信息反馈给前端 + String errorMessage = "订单插入失败,原因:"; + SQLException sqlExceptionCause = preparedStatement.getWarnings(); + if (sqlExceptionCause!= null) { + errorMessage += sqlExceptionCause.getMessage(); + } + out.print("{\"result\":\"" + errorMessage + "\",\"success\":false}"); + } + } catch (SQLException e) { + // 打印异常栈追踪信息(可用于开发调试阶段查看详细错误原因,生产环境建议记录到日志文件) + e.printStackTrace(); + // 返回通用的数据库错误提示给前端 + out.print("{\"result\":\"插入操作出现数据库错误\",\"success\":false}"); + } finally { + try { + // 关闭 PreparedStatement,释放相关资源 + if (preparedStatement!= null) { + preparedStatement.close(); + } + // 关闭数据库连接,释放连接资源 + if (connection!= null) { + JDBCUtil.closeConnection(connection); + } + } catch (SQLException e) { + e.printStackTrace(); + } + } + } +} \ No newline at end of file diff --git a/项目源码/src/main/java/org/example/order/JDBCUtil.java b/项目源码/src/main/java/org/example/order/JDBCUtil.java new file mode 100644 index 0000000..042a2b1 --- /dev/null +++ b/项目源码/src/main/java/org/example/order/JDBCUtil.java @@ -0,0 +1,30 @@ +package org.example.order; + +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.SQLException; + +public class JDBCUtil { + private static final String URL = "jdbc:mysql://localhost:3306/test?useSSL=false&serverTimezone=UTC"; + private static final String USERNAME = "root"; + private static final String PASSWORD = "123456"; + + public static Connection getConnection() throws SQLException { + try { + Class.forName("com.mysql.cj.jdbc.Driver"); + } catch (ClassNotFoundException e) { + e.printStackTrace(); + } + return DriverManager.getConnection(URL, USERNAME, PASSWORD); + } + + public static void closeConnection(Connection connection) { + if (connection!= null) { + try { + connection.close(); + } catch (SQLException e) { + e.printStackTrace(); + } + } + } +} \ No newline at end of file diff --git a/项目源码/src/main/java/org/example/order/QueryAllOrdersServlet.java b/项目源码/src/main/java/org/example/order/QueryAllOrdersServlet.java new file mode 100644 index 0000000..d882fb5 --- /dev/null +++ b/项目源码/src/main/java/org/example/order/QueryAllOrdersServlet.java @@ -0,0 +1,62 @@ +package org.example.order; + +import javax.servlet.ServletException; +import javax.servlet.annotation.WebServlet; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.io.PrintWriter; +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; + +@WebServlet("/queryAllOrders") +public class QueryAllOrdersServlet extends HttpServlet { + @Override + protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + response.setContentType("application/json;charset=UTF-8"); + PrintWriter out = response.getWriter(); + Connection connection = null; + PreparedStatement preparedStatement = null; + ResultSet resultSet = null; + try { + connection = JDBCUtil.getConnection(); + String sql = "SELECT * FROM `order`"; + preparedStatement = connection.prepareStatement(sql); + resultSet = preparedStatement.executeQuery(); + StringBuilder jsonBuilder = new StringBuilder("["); + while (resultSet.next()) { + int orderId = resultSet.getInt("order_id"); + int customerId = resultSet.getInt("customer_id"); + int goodsId = resultSet.getInt("goods_id"); + int orderQuantity = resultSet.getInt("order_quantity"); + String orderDate = resultSet.getString("order_date"); + jsonBuilder.append("{\"order_id\":\"").append(orderId).append("\",\"customer_id\":\"").append(customerId).append("\",\"goods_id\":\"").append(goodsId).append("\",\"order_quantity\":\"").append(orderQuantity).append("\",\"order_date\":\"").append(orderDate).append("\"},"); + } + if (jsonBuilder.length() > 1) { + jsonBuilder.deleteCharAt(jsonBuilder.length() - 1); + } + jsonBuilder.append("]"); + out.print(jsonBuilder.toString()); + } catch (SQLException e) { + e.printStackTrace(); + out.print("[]"); + } finally { + try { + if (resultSet!= null) { + resultSet.close(); + } + if (preparedStatement!= null) { + preparedStatement.close(); + } + if (connection!= null) { + JDBCUtil.closeConnection(connection); + } + } catch (SQLException e) { + e.printStackTrace(); + } + } + } +} \ No newline at end of file diff --git a/项目源码/src/main/java/org/example/order/QueryOrderByIdServlet.java b/项目源码/src/main/java/org/example/order/QueryOrderByIdServlet.java new file mode 100644 index 0000000..3a33c72 --- /dev/null +++ b/项目源码/src/main/java/org/example/order/QueryOrderByIdServlet.java @@ -0,0 +1,72 @@ +package org.example.order; + +import javax.servlet.ServletException; +import javax.servlet.annotation.WebServlet; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.io.PrintWriter; +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; + +@WebServlet("/queryOrderById") +public class QueryOrderByIdServlet extends HttpServlet { + @Override + protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + response.setContentType("application/json;charset=UTF-8"); + PrintWriter out = response.getWriter(); + Connection connection = null; + PreparedStatement preparedStatement = null; + ResultSet resultSet = null; + + String orderIdStr = request.getParameter("id"); + if (orderIdStr == null || orderIdStr.trim().isEmpty()) { + out.print("{}"); + return; + } + int orderId; + try { + orderId = Integer.parseInt(orderIdStr); + } catch (NumberFormatException e) { + out.print("{}"); + return; + } + + try { + connection = JDBCUtil.getConnection(); + String sql = "SELECT * FROM `order` WHERE order_id =?"; + preparedStatement = connection.prepareStatement(sql); + preparedStatement.setInt(1, orderId); + resultSet = preparedStatement.executeQuery(); + if (resultSet.next()) { + int customerId = resultSet.getInt("customer_id"); + int goodsId = resultSet.getInt("goods_id"); + int orderQuantity = resultSet.getInt("order_quantity"); + String orderDate = resultSet.getString("order_date"); + out.print("{\"order_id\":\"" + orderId + "\",\"customer_id\":\"" + customerId + "\",\"goods_id\":\"" + goodsId + "\",\"order_quantity\":\"" + orderQuantity + "\",\"order_date\":\"" + orderDate + "\"}"); + } else { + out.print("{}"); + } + } catch (SQLException e) { + e.printStackTrace(); + out.print("{}"); + } finally { + try { + if (resultSet!= null) { + resultSet.close(); + } + if (preparedStatement!= null) { + preparedStatement.close(); + } + if (connection!= null) { + JDBCUtil.closeConnection(connection); + } + } catch (SQLException e) { + e.printStackTrace(); + } + } + } +} \ No newline at end of file diff --git a/项目源码/src/main/java/org/example/order/UpdateOrderServlet.java b/项目源码/src/main/java/org/example/order/UpdateOrderServlet.java new file mode 100644 index 0000000..35dafd1 --- /dev/null +++ b/项目源码/src/main/java/org/example/order/UpdateOrderServlet.java @@ -0,0 +1,97 @@ +package org.example.order; + +import javax.servlet.ServletException; +import javax.servlet.annotation.WebServlet; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.io.PrintWriter; +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.SQLException; + +@WebServlet("/updateOrder") +public class UpdateOrderServlet extends HttpServlet { + @Override + protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + // 设置请求编码格式为UTF-8,确保能正确接收中文等特殊字符参数 + request.setCharacterEncoding("UTF-8"); + // 设置响应内容类型为JSON格式,编码为UTF-8,方便前端统一解析处理返回结果 + response.setContentType("application/json;charset=UTF-8"); + PrintWriter out = response.getWriter(); + + // 获取前端传来的修改后的订单信息 + String orderIdStr = request.getParameter("order_id"); + String customerIdStr = request.getParameter("customer_id"); + String goodsIdStr = request.getParameter("goods_id"); + String orderQuantityStr = request.getParameter("order_quantity"); + String orderDate = request.getParameter("order_date"); + + // 进行参数完整性校验,如果有参数为空,则返回错误提示给前端 + if (orderIdStr == null || customerIdStr == null || goodsIdStr == null || orderQuantityStr == null || orderDate == null) { + out.print("{\"result\":\"参数不完整,请检查输入信息\",\"success\":false}"); + return; + } + + int orderId; + int customerId; + int goodsId; + int orderQuantity; + try { + orderId = Integer.parseInt(orderIdStr); + customerId = Integer.parseInt(customerIdStr); + goodsId = Integer.parseInt(goodsIdStr); + orderQuantity = Integer.parseInt(orderQuantityStr); + } catch (NumberFormatException e) { + out.print("{\"result\":\"订单ID、客户ID、商品ID或订单数量格式不正确,请输入正确的整数\",\"success\":false}"); + return; + } + + Connection connection = null; + PreparedStatement preparedStatement = null; + try { + connection = JDBCUtil.getConnection(); + // 构建更新订单的SQL语句,根据订单ID来更新其他字段信息 + String sql = "UPDATE `order` SET customer_id =?, goods_id =?, order_quantity =?, order_date =? WHERE order_id =?"; + preparedStatement = connection.prepareStatement(sql); + preparedStatement.setInt(1, customerId); + preparedStatement.setInt(2, goodsId); + preparedStatement.setInt(3, orderQuantity); + preparedStatement.setString(4, orderDate); + preparedStatement.setInt(5, orderId); + + // 执行更新操作,executeUpdate()方法返回受影响的行数,对于更新操作成功则返回1 + int rowsAffected = preparedStatement.executeUpdate(); + if (rowsAffected > 0) { + out.print("{\"result\":\"订单修改成功\",\"success\":true}"); + } else { + // 更新失败时,尝试获取更详细的数据库错误信息反馈给前端 + String errorMessage = "订单修改失败,原因:"; + SQLException sqlExceptionCause = preparedStatement.getWarnings(); + if (sqlExceptionCause!= null) { + errorMessage += sqlExceptionCause.getMessage(); + } + out.print("{\"result\":\"" + errorMessage + "\",\"success\":false}"); + } + } catch (SQLException e) { + // 打印异常栈追踪信息(可用于开发调试阶段查看详细错误原因,生产环境建议记录到日志文件) + e.printStackTrace(); + // 返回通用的数据库错误提示给前端 + out.print("{\"result\":\"更新操作出现数据库错误\",\"success\":false}"); + } finally { + try { + // 关闭 PreparedStatement,释放相关资源 + if (preparedStatement!= null) { + preparedStatement.close(); + } + // 关闭数据库连接,释放连接资源 + if (connection!= null) { + JDBCUtil.closeConnection(connection); + } + } catch (SQLException e) { + e.printStackTrace(); + } + } + } +} \ No newline at end of file diff --git a/项目源码/src/main/java/org/example/supplier/DeleteSupplierByIdServlet.java b/项目源码/src/main/java/org/example/supplier/DeleteSupplierByIdServlet.java new file mode 100644 index 0000000..f07f51a --- /dev/null +++ b/项目源码/src/main/java/org/example/supplier/DeleteSupplierByIdServlet.java @@ -0,0 +1,61 @@ +package org.example.supplier; + +import javax.servlet.ServletException; +import javax.servlet.annotation.WebServlet; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.SQLException; + +@WebServlet("/deleteSupplierById") +public class DeleteSupplierByIdServlet extends HttpServlet { + @Override + protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + response.setContentType("text/html;charset=UTF-8"); + request.setCharacterEncoding("UTF-8"); + String supplierIdStr = request.getParameter("id"); + if (supplierIdStr == null || supplierIdStr.trim().isEmpty()) { + response.getWriter().print("请输入有效的供应商id"); + return; + } + int supplierId; + try { + supplierId = Integer.parseInt(supplierIdStr); + } catch (NumberFormatException e) { + response.getWriter().print("输入的供应商id格式不正确,请输入整数"); + return; + } + + Connection connection = null; + PreparedStatement preparedStatement = null; + try { + connection = JDBCUtil.getConnection(); + String sql = "DELETE FROM supplier WHERE supplier_id =?"; + preparedStatement = connection.prepareStatement(sql); + preparedStatement.setInt(1, supplierId); + int rowsAffected = preparedStatement.executeUpdate(); + if (rowsAffected > 0) { + response.getWriter().print("删除成功"); + } else { + response.getWriter().print("未找到对应供应商,删除失败"); + } + } catch (SQLException e) { + e.printStackTrace(); + response.getWriter().print("删除操作出现错误"); + } finally { + try { + if (preparedStatement!= null) { + preparedStatement.close(); + } + if (connection!= null) { + JDBCUtil.closeConnection(connection); + } + } catch (SQLException e) { + e.printStackTrace(); + } + } + } +} \ No newline at end of file diff --git a/项目源码/src/main/java/org/example/supplier/InsertSupplierServlet.java b/项目源码/src/main/java/org/example/supplier/InsertSupplierServlet.java new file mode 100644 index 0000000..a67f0c1 --- /dev/null +++ b/项目源码/src/main/java/org/example/supplier/InsertSupplierServlet.java @@ -0,0 +1,80 @@ +package org.example.supplier; + +import javax.servlet.ServletException; +import javax.servlet.annotation.WebServlet; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.io.PrintWriter; +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.SQLException; + +@WebServlet("/insertSupplier") +public class InsertSupplierServlet extends HttpServlet { + @Override + protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + request.setCharacterEncoding("UTF-8"); + response.setContentType("application/json;charset=UTF-8"); + PrintWriter out = response.getWriter(); + + String supplierIdStr = request.getParameter("supplier_id"); + String supplierName = request.getParameter("supplier_name"); + String contactMethod = request.getParameter("contact_method"); + String ratingStr = request.getParameter("rating"); + + if (supplierIdStr == null || supplierName == null || contactMethod == null || ratingStr == null) { + out.print("{\"result\":\"参数不完整,请检查输入信息\",\"success\":false}"); + return; + } + + int supplierId; + int rating; + try { + supplierId = Integer.parseInt(supplierIdStr); + rating = Integer.parseInt(ratingStr); + } catch (NumberFormatException e) { + out.print("{\"result\":\"供应商ID或评分格式不正确,请输入正确的整数\",\"success\":false}"); + return; + } + + Connection connection = null; + PreparedStatement preparedStatement = null; + try { + connection = JDBCUtil.getConnection(); + String sql = "INSERT INTO supplier (supplier_id, supplier_name, contact_method, rating) VALUES (?,?,?,?)"; + preparedStatement = connection.prepareStatement(sql); + preparedStatement.setInt(1, supplierId); + preparedStatement.setString(2, supplierName); + preparedStatement.setString(3, contactMethod); + preparedStatement.setInt(4, rating); + + int rowsAffected = preparedStatement.executeUpdate(); + if (rowsAffected > 0) { + out.print("{\"result\":\"供应商插入成功\",\"success\":true}"); + } else { + String errorMessage = "供应商插入失败,原因:"; + SQLException sqlExceptionCause = preparedStatement.getWarnings(); + if (sqlExceptionCause!= null) { + errorMessage += sqlExceptionCause.getMessage(); + } + out.print("{\"result\":\"" + errorMessage + "\",\"success\":false}"); + } + } catch (SQLException e) { + e.printStackTrace(); + out.print("{\"result\":\"插入操作出现数据库错误\",\"success\":false}"); + } finally { + try { + if (preparedStatement!= null) { + preparedStatement.close(); + } + if (connection!= null) { + JDBCUtil.closeConnection(connection); + } + } catch (SQLException e) { + e.printStackTrace(); + } + } + } +} \ No newline at end of file diff --git a/项目源码/src/main/java/org/example/supplier/JDBCUtil.java b/项目源码/src/main/java/org/example/supplier/JDBCUtil.java new file mode 100644 index 0000000..30986ff --- /dev/null +++ b/项目源码/src/main/java/org/example/supplier/JDBCUtil.java @@ -0,0 +1,30 @@ +package org.example.supplier; + +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.SQLException; + +public class JDBCUtil { + private static final String URL = "jdbc:mysql://localhost:3306/test?useSSL=false&serverTimezone=UTC"; + private static final String USERNAME = "root"; + private static final String PASSWORD = "123456"; + + public static Connection getConnection() throws SQLException { + try { + Class.forName("com.mysql.cj.jdbc.Driver"); + } catch (ClassNotFoundException e) { + e.printStackTrace(); + } + return DriverManager.getConnection(URL, USERNAME, PASSWORD); + } + + public static void closeConnection(Connection connection) { + if (connection!= null) { + try { + connection.close(); + } catch (SQLException e) { + e.printStackTrace(); + } + } + } +} \ No newline at end of file diff --git a/项目源码/src/main/java/org/example/supplier/QueryAllSuppliersServlet.java b/项目源码/src/main/java/org/example/supplier/QueryAllSuppliersServlet.java new file mode 100644 index 0000000..4b9c058 --- /dev/null +++ b/项目源码/src/main/java/org/example/supplier/QueryAllSuppliersServlet.java @@ -0,0 +1,61 @@ +package org.example.supplier; + +import javax.servlet.ServletException; +import javax.servlet.annotation.WebServlet; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.io.PrintWriter; +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; + +@WebServlet("/queryAllSuppliers") +public class QueryAllSuppliersServlet extends HttpServlet { + @Override + protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + response.setContentType("application/json;charset=UTF-8"); + PrintWriter out = response.getWriter(); + Connection connection = null; + PreparedStatement preparedStatement = null; + ResultSet resultSet = null; + try { + connection = JDBCUtil.getConnection(); + String sql = "SELECT * FROM supplier"; + preparedStatement = connection.prepareStatement(sql); + resultSet = preparedStatement.executeQuery(); + StringBuilder jsonBuilder = new StringBuilder("["); + while (resultSet.next()) { + int supplierId = resultSet.getInt("supplier_id"); + String supplierName = resultSet.getString("supplier_name"); + String contactMethod = resultSet.getString("contact_method"); + int rating = resultSet.getInt("rating"); + jsonBuilder.append("{\"supplier_id\":\"").append(supplierId).append("\",\"supplier_name\":\"").append(supplierName).append("\",\"contact_method\":\"").append(contactMethod).append("\",\"rating\":\"").append(rating).append("\"},"); + } + if (jsonBuilder.length() > 1) { + jsonBuilder.deleteCharAt(jsonBuilder.length() - 1); + } + jsonBuilder.append("]"); + out.print(jsonBuilder.toString()); + } catch (SQLException e) { + e.printStackTrace(); + out.print("[]"); + } finally { + try { + if (resultSet!= null) { + resultSet.close(); + } + if (preparedStatement!= null) { + preparedStatement.close(); + } + if (connection!= null) { + JDBCUtil.closeConnection(connection); + } + } catch (SQLException e) { + e.printStackTrace(); + } + } + } +} \ No newline at end of file diff --git a/项目源码/src/main/java/org/example/supplier/QuerySupplierByNameServlet.java b/项目源码/src/main/java/org/example/supplier/QuerySupplierByNameServlet.java new file mode 100644 index 0000000..7fafdf6 --- /dev/null +++ b/项目源码/src/main/java/org/example/supplier/QuerySupplierByNameServlet.java @@ -0,0 +1,69 @@ +package org.example.supplier; + +import javax.servlet.ServletException; +import javax.servlet.annotation.WebServlet; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.io.PrintWriter; +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; + +@WebServlet("/querySupplierByName") +public class QuerySupplierByNameServlet extends HttpServlet { + @Override + protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + response.setContentType("application/json;charset=UTF-8"); + PrintWriter out = response.getWriter(); + Connection connection = null; + PreparedStatement preparedStatement = null; + ResultSet resultSet = null; + + String supplierName = request.getParameter("name"); + if (supplierName == null || supplierName.trim().isEmpty()) { + out.print("[]"); + return; + } + + try { + connection = JDBCUtil.getConnection(); + String sql = "SELECT * FROM supplier WHERE supplier_name LIKE?"; + preparedStatement = connection.prepareStatement(sql); + preparedStatement.setString(1, "%" + supplierName + "%"); + resultSet = preparedStatement.executeQuery(); + StringBuilder jsonBuilder = new StringBuilder("["); + while (resultSet.next()) { + int supplierId = resultSet.getInt("supplier_id"); + String contactMethod = resultSet.getString("contact_method"); + int rating = resultSet.getInt("rating"); + String employeeNameDB = resultSet.getString("supplier_name"); + jsonBuilder.append("{\"supplier_id\":\"").append(supplierId).append("\",\"supplier_name\":\"").append(employeeNameDB).append("\",\"contact_method\":\"").append(contactMethod).append("\",\"rating\":\"").append(rating).append("\"},"); + } + if (jsonBuilder.length() > 1) { + jsonBuilder.deleteCharAt(jsonBuilder.length() - 1); + } + jsonBuilder.append("]"); + out.print(jsonBuilder.toString()); + } catch (SQLException e) { + e.printStackTrace(); + out.print("[]"); + } finally { + try { + if (resultSet!= null) { + resultSet.close(); + } + if (preparedStatement!= null) { + preparedStatement.close(); + } + if (connection!= null) { + JDBCUtil.closeConnection(connection); + } + } catch (SQLException e) { + e.printStackTrace(); + } + } + } +} \ No newline at end of file diff --git a/项目源码/src/main/java/org/example/warehouseServlet/DeleteWarehouseByIdServlet.java b/项目源码/src/main/java/org/example/warehouseServlet/DeleteWarehouseByIdServlet.java new file mode 100644 index 0000000..ada420d --- /dev/null +++ b/项目源码/src/main/java/org/example/warehouseServlet/DeleteWarehouseByIdServlet.java @@ -0,0 +1,63 @@ +package org.example.warehouseServlet; + +import javax.servlet.ServletException; +import javax.servlet.annotation.WebServlet; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.SQLException; + +@WebServlet("/deleteWarehouseById") +public class DeleteWarehouseByIdServlet extends HttpServlet { + @Override + protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + response.setContentType("text/html;charset=UTF-8"); + request.setCharacterEncoding("UTF-8"); + String warehouseIdStr = request.getParameter("id"); + // 先判断获取到的参数是否为空字符串或者为null + if (warehouseIdStr == null || warehouseIdStr.trim().isEmpty()) { + response.getWriter().print("请输入有效的仓库id"); + return; + } + int warehouseId; + try { + // 尝试将参数转换为整数,如果格式不对会抛出NumberFormatException异常 + warehouseId = Integer.parseInt(warehouseIdStr); + } catch (NumberFormatException e) { + response.getWriter().print("输入的仓库id格式不正确,请输入整数"); + return; + } + + Connection connection = null; + PreparedStatement preparedStatement = null; + try { + connection = JDBCUtil.getConnection(); + String sql = "DELETE FROM warehouse WHERE warehouse_id =?"; + preparedStatement = connection.prepareStatement(sql); + preparedStatement.setInt(1, warehouseId); + int rowsAffected = preparedStatement.executeUpdate(); + if (rowsAffected > 0) { + response.getWriter().print("删除成功"); + } else { + response.getWriter().print("未找到对应仓库,删除失败"); + } + } catch (SQLException e) { + e.printStackTrace(); + response.getWriter().print("删除操作出现错误"); + } finally { + try { + if (preparedStatement!= null) { + preparedStatement.close(); + } + if (connection!= null) { + JDBCUtil.closeConnection(connection); + } + } catch (SQLException e) { + e.printStackTrace(); + } + } + } +} \ No newline at end of file diff --git a/项目源码/src/main/java/org/example/warehouseServlet/InsertWarehouseServlet.java b/项目源码/src/main/java/org/example/warehouseServlet/InsertWarehouseServlet.java new file mode 100644 index 0000000..556e27d --- /dev/null +++ b/项目源码/src/main/java/org/example/warehouseServlet/InsertWarehouseServlet.java @@ -0,0 +1,97 @@ +package org.example.warehouseServlet; + +import javax.servlet.ServletException; +import javax.servlet.annotation.WebServlet; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.io.PrintWriter; +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.SQLException; + +@WebServlet("/insertWarehouse") +public class InsertWarehouseServlet extends HttpServlet { + @Override + protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + // 设置请求编码格式为UTF-8,确保能正确接收中文等特殊字符参数 + request.setCharacterEncoding("UTF-8"); + // 设置响应内容类型为JSON格式,编码为UTF-8,方便前端统一解析处理返回结果 + response.setContentType("application/json;charset=UTF-8"); + PrintWriter out = response.getWriter(); + + // 获取前端传来的仓库信息 + String warehouseIdStr = request.getParameter("warehouse_id"); + String name = request.getParameter("warehouse_name"); + String location = request.getParameter("location"); + String capacityStr = request.getParameter("capacity"); + + // 进行参数完整性校验,如果有参数为空,则返回错误提示给前端 + if (warehouseIdStr == null || name == null || location == null || capacityStr == null) { + out.print("{\"result\":\"参数不完整,请检查输入信息\",\"success\":false}"); + return; + } + + int warehouseId; + int capacity; + try { + // 将仓库id和容量字符串转换为int类型,若格式不正确会抛出NumberFormatException异常 + warehouseId = Integer.parseInt(warehouseIdStr); + capacity = Integer.parseInt(capacityStr); + // 可以在这里添加额外的容量合法性校验,比如容量不能为负数等,示例如下: + if (capacity < 0) { + out.print("{\"result\":\"容量不能为负数,请输入正确的整数\",\"success\":false}"); + return; + } + } catch (NumberFormatException e) { + out.print("{\"result\":\"仓库id或容量格式不正确,请输入正确的整数\",\"success\":false}"); + return; + } + + Connection connection = null; + PreparedStatement preparedStatement = null; + try { + connection = JDBCUtil.getConnection(); + // 构建插入仓库的SQL语句,注意字段顺序要与表结构中的定义一致 + String sql = "INSERT INTO warehouse (warehouse_id, warehouse_name, location, capacity) VALUES (?,?,?,?)"; + preparedStatement = connection.prepareStatement(sql); + preparedStatement.setInt(1, warehouseId); + preparedStatement.setString(2, name); + preparedStatement.setString(3, location); + preparedStatement.setInt(4, capacity); + + // 执行插入操作,executeUpdate()方法返回受影响的行数,对于插入操作成功则返回1 + int rowsAffected = preparedStatement.executeUpdate(); + if (rowsAffected > 0) { + out.print("{\"result\":\"仓库插入成功\",\"success\":true}"); + } else { + // 插入失败时,尝试获取更详细的数据库错误信息反馈给前端 + String errorMessage = "仓库插入失败,原因:"; + SQLException sqlExceptionCause = preparedStatement.getWarnings(); + if (sqlExceptionCause!= null) { + errorMessage += sqlExceptionCause.getMessage(); + } + out.print("{\"result\":\"" + errorMessage + "\",\"success\":false}"); + } + } catch (SQLException e) { + // 打印异常栈追踪信息(可用于开发调试阶段查看详细错误原因,生产环境建议记录到日志文件) + e.printStackTrace(); + // 返回通用的数据库错误提示给前端 + out.print("{\"result\":\"插入操作出现数据库错误\",\"success\":false}"); + } finally { + try { + // 关闭 PreparedStatement,释放相关资源 + if (preparedStatement!= null) { + preparedStatement.close(); + } + // 关闭数据库连接,释放连接资源 + if (connection!= null) { + JDBCUtil.closeConnection(connection); + } + } catch (SQLException e) { + e.printStackTrace(); + } + } + } +} \ No newline at end of file diff --git a/项目源码/src/main/java/org/example/warehouseServlet/JDBCUtil.java b/项目源码/src/main/java/org/example/warehouseServlet/JDBCUtil.java new file mode 100644 index 0000000..27886aa --- /dev/null +++ b/项目源码/src/main/java/org/example/warehouseServlet/JDBCUtil.java @@ -0,0 +1,30 @@ +package org.example.warehouseServlet; + +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.SQLException; + +public class JDBCUtil { + private static final String URL = "jdbc:mysql://localhost:3306/test?useSSL=false&serverTimezone=UTC"; + private static final String USERNAME = "root"; + private static final String PASSWORD = "123456"; + + public static Connection getConnection() throws SQLException { + try { + Class.forName("com.mysql.cj.jdbc.Driver"); + } catch (ClassNotFoundException e) { + e.printStackTrace(); + } + return DriverManager.getConnection(URL, USERNAME, PASSWORD); + } + + public static void closeConnection(Connection connection) { + if (connection!= null) { + try { + connection.close(); + } catch (SQLException e) { + e.printStackTrace(); + } + } + } +} \ No newline at end of file diff --git a/项目源码/src/main/java/org/example/warehouseServlet/QueryAllWarehousesServlet.java b/项目源码/src/main/java/org/example/warehouseServlet/QueryAllWarehousesServlet.java new file mode 100644 index 0000000..616169b --- /dev/null +++ b/项目源码/src/main/java/org/example/warehouseServlet/QueryAllWarehousesServlet.java @@ -0,0 +1,61 @@ +package org.example.warehouseServlet; + +import javax.servlet.ServletException; +import javax.servlet.annotation.WebServlet; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.io.PrintWriter; +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; + +@WebServlet("/queryAllWarehouses") +public class QueryAllWarehousesServlet extends HttpServlet { + @Override + protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + response.setContentType("application/json;charset=UTF-8"); + PrintWriter out = response.getWriter(); + Connection connection = null; + PreparedStatement preparedStatement = null; + ResultSet resultSet = null; + try { + connection = JDBCUtil.getConnection(); + String sql = "SELECT * FROM warehouse"; + preparedStatement = connection.prepareStatement(sql); + resultSet = preparedStatement.executeQuery(); + StringBuilder jsonBuilder = new StringBuilder("["); + while (resultSet.next()) { + int warehouseId = resultSet.getInt("warehouse_id"); + String warehouseName = resultSet.getString("warehouse_name"); + String location = resultSet.getString("location"); + int capacity = resultSet.getInt("capacity"); + jsonBuilder.append("{\"warehouse_id\":\"").append(warehouseId).append("\",\"warehouse_name\":\"").append(warehouseName).append("\",\"location\":\"").append(location).append("\",\"capacity\":\"").append(capacity).append("\"},"); + } + if (jsonBuilder.length() > 1) { + jsonBuilder.deleteCharAt(jsonBuilder.length() - 1); + } + jsonBuilder.append("]"); + out.print(jsonBuilder.toString()); + } catch (SQLException e) { + e.printStackTrace(); + out.print("[]"); + } finally { + try { + if (resultSet!= null) { + resultSet.close(); + } + if (preparedStatement!= null) { + preparedStatement.close(); + } + if (connection!= null) { + JDBCUtil.closeConnection(connection); + } + } catch (SQLException e) { + e.printStackTrace(); + } + } + } +} \ No newline at end of file diff --git a/项目源码/src/main/java/org/example/warehouseServlet/QueryEmployeesWithInboundServlet.java b/项目源码/src/main/java/org/example/warehouseServlet/QueryEmployeesWithInboundServlet.java new file mode 100644 index 0000000..d02c75b --- /dev/null +++ b/项目源码/src/main/java/org/example/warehouseServlet/QueryEmployeesWithInboundServlet.java @@ -0,0 +1,67 @@ +package org.example.warehouseServlet; + +import javax.servlet.ServletException; +import javax.servlet.annotation.WebServlet; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.io.PrintWriter; +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; + +@WebServlet("/queryEmployeesWithInbound") +public class QueryEmployeesWithInboundServlet extends HttpServlet { + @Override + protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + response.setContentType("application/json;charset=UTF-8"); + PrintWriter out = response.getWriter(); + Connection connection = null; + PreparedStatement preparedStatement = null; + ResultSet resultSet = null; + + try { + connection = JDBCUtil.getConnection(); + String sql = "SELECT e.employee_id, e.employee_name, e.department " + + "FROM Employee e " + + "WHERE e.managed_warehouse_id IN ( " + + " SELECT DISTINCT ir.warehouse_id " + + " FROM InboundRecord ir)"; + preparedStatement = connection.prepareStatement(sql); + resultSet = preparedStatement.executeQuery(); + StringBuilder jsonBuilder = new StringBuilder("["); + while (resultSet.next()) { + int employeeId = resultSet.getInt("employee_id"); + String employeeName = resultSet.getString("employee_name"); + String department = resultSet.getString("department"); + jsonBuilder.append("{\"employee_id\":").append(employeeId) + .append(",\"employee_name\":\"").append(employeeName) + .append("\",\"department\":\"").append(department).append("\"},"); + } + if (jsonBuilder.length() > 1) { + jsonBuilder.deleteCharAt(jsonBuilder.length() - 1); // 删除最后一个逗号 + } + jsonBuilder.append("]"); + out.print(jsonBuilder.toString()); + } catch (SQLException e) { + e.printStackTrace(); + out.print("[]"); // 如果出现异常,返回空数组 + } finally { + try { + if (resultSet != null) { + resultSet.close(); + } + if (preparedStatement != null) { + preparedStatement.close(); + } + if (connection != null) { + JDBCUtil.closeConnection(connection); + } + } catch (SQLException e) { + e.printStackTrace(); + } + } + } +} \ No newline at end of file diff --git a/项目源码/src/main/java/org/example/warehouseServlet/QueryOrderCustomerGoodsServlet.java b/项目源码/src/main/java/org/example/warehouseServlet/QueryOrderCustomerGoodsServlet.java new file mode 100644 index 0000000..578aa02 --- /dev/null +++ b/项目源码/src/main/java/org/example/warehouseServlet/QueryOrderCustomerGoodsServlet.java @@ -0,0 +1,66 @@ +package org.example.warehouseServlet; + +import javax.servlet.ServletException; +import javax.servlet.annotation.WebServlet; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.io.PrintWriter; +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; + +@WebServlet("/queryOrderCustomerGoods") +public class QueryOrderCustomerGoodsServlet extends HttpServlet { + @Override + protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + response.setContentType("application/json;charset=UTF-8"); + PrintWriter out = response.getWriter(); + Connection connection = null; + PreparedStatement preparedStatement = null; + ResultSet resultSet = null; + + try { + connection = JDBCUtil.getConnection(); + String sql = "SELECT o.order_id, c.customer_name, g.goods_name " + + "FROM `Order` o " + + "JOIN Customer c ON o.customer_id = c.customer_id " + + "JOIN Goods g ON o.goods_id = g.goods_id"; + preparedStatement = connection.prepareStatement(sql); + resultSet = preparedStatement.executeQuery(); + StringBuilder jsonBuilder = new StringBuilder("["); + while (resultSet.next()) { + int orderId = resultSet.getInt("order_id"); + String customerName = resultSet.getString("customer_name"); + String goodsName = resultSet.getString("goods_name"); + jsonBuilder.append("{\"order_id\":").append(orderId) + .append(",\"customer_name\":\"").append(customerName) + .append("\",\"goods_name\":\"").append(goodsName).append("\"},"); + } + if (jsonBuilder.length() > 1) { + jsonBuilder.deleteCharAt(jsonBuilder.length() - 1); // 删除最后一个逗号 + } + jsonBuilder.append("]"); + out.print(jsonBuilder.toString()); + } catch (SQLException e) { + e.printStackTrace(); + out.print("[]"); // 如果出现异常,返回空数组 + } finally { + try { + if (resultSet != null) { + resultSet.close(); + } + if (preparedStatement != null) { + preparedStatement.close(); + } + if (connection != null) { + JDBCUtil.closeConnection(connection); + } + } catch (SQLException e) { + e.printStackTrace(); + } + } + } +} \ No newline at end of file diff --git a/项目源码/src/main/java/org/example/warehouseServlet/QuerySuppliersWithOrdersServlet.java b/项目源码/src/main/java/org/example/warehouseServlet/QuerySuppliersWithOrdersServlet.java new file mode 100644 index 0000000..b913d4a --- /dev/null +++ b/项目源码/src/main/java/org/example/warehouseServlet/QuerySuppliersWithOrdersServlet.java @@ -0,0 +1,73 @@ +package org.example.warehouseServlet; + +import javax.servlet.ServletException; +import javax.servlet.annotation.WebServlet; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.io.PrintWriter; +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; + +@WebServlet("/querySuppliersWithOrders") +public class QuerySuppliersWithOrdersServlet extends HttpServlet { + @Override + protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + response.setContentType("application/json;charset=UTF-8"); + PrintWriter out = response.getWriter(); + Connection connection = null; + PreparedStatement preparedStatement = null; + ResultSet resultSet = null; + + try { + connection = JDBCUtil.getConnection(); + String sql = "SELECT s.supplier_id, s.supplier_name, s.contact_method, s.rating " + + "FROM Supplier s " + + "WHERE s.supplier_id IN ( " + + " SELECT g.supplier_id " + + " FROM Goods g " + + " WHERE g.goods_id IN ( " + + " SELECT o.goods_id " + + " FROM `Order` o " + + " WHERE o.order_quantity > 15))"; + preparedStatement = connection.prepareStatement(sql); + resultSet = preparedStatement.executeQuery(); + StringBuilder jsonBuilder = new StringBuilder("["); + while (resultSet.next()) { + int supplierId = resultSet.getInt("supplier_id"); + String supplierName = resultSet.getString("supplier_name"); + String contactMethod = resultSet.getString("contact_method"); + int rating = resultSet.getInt("rating"); + jsonBuilder.append("{\"supplier_id\":").append(supplierId) + .append(",\"supplier_name\":\"").append(supplierName) + .append("\",\"contact_method\":\"").append(contactMethod) + .append("\",\"rating\":").append(rating).append("},"); + } + if (jsonBuilder.length() > 1) { + jsonBuilder.deleteCharAt(jsonBuilder.length() - 1); // 删除最后一个逗号 + } + jsonBuilder.append("]"); + out.print(jsonBuilder.toString()); + } catch (SQLException e) { + e.printStackTrace(); + out.print("[]"); // 如果出现异常,返回空数组 + } finally { + try { + if (resultSet != null) { + resultSet.close(); + } + if (preparedStatement != null) { + preparedStatement.close(); + } + if (connection != null) { + JDBCUtil.closeConnection(connection); + } + } catch (SQLException e) { + e.printStackTrace(); + } + } + } +} \ No newline at end of file diff --git a/项目源码/src/main/java/org/example/warehouseServlet/QueryTopCustomersServlet.java b/项目源码/src/main/java/org/example/warehouseServlet/QueryTopCustomersServlet.java new file mode 100644 index 0000000..149ed0d --- /dev/null +++ b/项目源码/src/main/java/org/example/warehouseServlet/QueryTopCustomersServlet.java @@ -0,0 +1,73 @@ +package org.example.warehouseServlet; + +import javax.servlet.ServletException; +import javax.servlet.annotation.WebServlet; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.io.PrintWriter; +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; + +@WebServlet("/queryTopCustomers") +public class QueryTopCustomersServlet extends HttpServlet { + @Override + protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + response.setContentType("application/json;charset=UTF-8"); + PrintWriter out = response.getWriter(); + Connection connection = null; + PreparedStatement preparedStatement = null; + ResultSet resultSet = null; + + try { + connection = JDBCUtil.getConnection(); + String sql = "SELECT c.customer_id, c.customer_name, c.customer_contact, c.order_history " + + "FROM Customer c " + + "JOIN ( " + + " SELECT customer_id, COUNT(order_id) AS total_orders " + + " FROM `Order` " + + " GROUP BY customer_id " + + " ORDER BY total_orders DESC " + + " LIMIT 3 " + + ") AS top_customers ON c.customer_id = top_customers.customer_id"; + preparedStatement = connection.prepareStatement(sql); + resultSet = preparedStatement.executeQuery(); + StringBuilder jsonBuilder = new StringBuilder("["); + while (resultSet.next()) { + int customerId = resultSet.getInt("customer_id"); + String customerName = resultSet.getString("customer_name"); + String customerContact = resultSet.getString("customer_contact"); + String orderHistory = resultSet.getString("order_history"); + jsonBuilder.append("{\"customer_id\":").append(customerId) + .append(",\"customer_name\":\"").append(customerName) + .append("\",\"customer_contact\":\"").append(customerContact) + .append("\",\"order_history\":\"").append(orderHistory).append("\"},"); + } + if (jsonBuilder.length() > 1) { + jsonBuilder.deleteCharAt(jsonBuilder.length() - 1); // 删除最后一个逗号 + } + jsonBuilder.append("]"); + out.print(jsonBuilder.toString()); + } catch (SQLException e) { + e.printStackTrace(); + out.print("[]"); // 如果出现异常,返回空数组 + } finally { + try { + if (resultSet != null) { + resultSet.close(); + } + if (preparedStatement != null) { + preparedStatement.close(); + } + if (connection != null) { + JDBCUtil.closeConnection(connection); + } + } catch (SQLException e) { + e.printStackTrace(); + } + } + } +} \ No newline at end of file diff --git a/项目源码/src/main/java/org/example/warehouseServlet/QueryWarehouseByNameServlet.java b/项目源码/src/main/java/org/example/warehouseServlet/QueryWarehouseByNameServlet.java new file mode 100644 index 0000000..5967040 --- /dev/null +++ b/项目源码/src/main/java/org/example/warehouseServlet/QueryWarehouseByNameServlet.java @@ -0,0 +1,65 @@ +package org.example.warehouseServlet; + +import javax.servlet.ServletException; +import javax.servlet.annotation.WebServlet; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.io.PrintWriter; +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; + +@WebServlet("/queryWarehouseByName") +public class QueryWarehouseByNameServlet extends HttpServlet { + @Override + protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + String warehouseName = request.getParameter("name"); + response.setContentType("application/json;charset=UTF-8"); + PrintWriter out = response.getWriter(); + Connection connection = null; + PreparedStatement preparedStatement = null; + ResultSet resultSet = null; + try { + connection = JDBCUtil.getConnection(); + // 修改SQL语句,使用 LIKE 关键字进行模糊查询,在输入的名称前后添加 % 表示匹配包含该名称片段的记录 + String sql = "SELECT * FROM warehouse WHERE warehouse_name LIKE?"; + preparedStatement = connection.prepareStatement(sql); + // 将传入的名称参数前后添加 % 后设置到SQL语句中 + preparedStatement.setString(1, "%" + warehouseName + "%"); + resultSet = preparedStatement.executeQuery(); + StringBuilder jsonBuilder = new StringBuilder("["); + while (resultSet.next()) { + int warehouseId = resultSet.getInt("warehouse_id"); + String name = resultSet.getString("warehouse_name"); + String location = resultSet.getString("location"); + int capacity = resultSet.getInt("capacity"); + jsonBuilder.append("{\"warehouse_id\":\"").append(warehouseId).append("\",\"warehouse_name\":\"").append(name).append("\",\"location\":\"").append(location).append("\",\"capacity\":\"").append(capacity).append("\"},"); + } + if (jsonBuilder.length() > 1) { + jsonBuilder.deleteCharAt(jsonBuilder.length() - 1); + } + jsonBuilder.append("]"); + out.print(jsonBuilder.toString()); + } catch (SQLException e) { + e.printStackTrace(); + out.print("[]"); + } finally { + try { + if (resultSet!= null) { + resultSet.close(); + } + if (preparedStatement!= null) { + preparedStatement.close(); + } + if (connection!= null) { + JDBCUtil.closeConnection(connection); + } + } catch (SQLException e) { + e.printStackTrace(); + } + } + } +} \ No newline at end of file diff --git a/项目源码/src/main/java/org/example/warehouseServlet/QueryWarehouseEmployeeServlet.java b/项目源码/src/main/java/org/example/warehouseServlet/QueryWarehouseEmployeeServlet.java new file mode 100644 index 0000000..efaace3 --- /dev/null +++ b/项目源码/src/main/java/org/example/warehouseServlet/QueryWarehouseEmployeeServlet.java @@ -0,0 +1,65 @@ +package org.example.warehouseServlet; + +import javax.servlet.ServletException; +import javax.servlet.annotation.WebServlet; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.io.PrintWriter; +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; + +@WebServlet("/queryWarehouseEmployee") +public class QueryWarehouseEmployeeServlet extends HttpServlet { + @Override + protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + response.setContentType("application/json;charset=UTF-8"); + PrintWriter out = response.getWriter(); + Connection connection = null; + PreparedStatement preparedStatement = null; + ResultSet resultSet = null; + + try { + connection = JDBCUtil.getConnection(); + String sql = "SELECT w.warehouse_name, e.employee_name, e.department " + + "FROM warehouse w " + + "JOIN employee e ON w.warehouse_id = e.managed_warehouse_id"; + preparedStatement = connection.prepareStatement(sql); + resultSet = preparedStatement.executeQuery(); + StringBuilder jsonBuilder = new StringBuilder("["); + while (resultSet.next()) { + String warehouseName = resultSet.getString("warehouse_name"); + String employeeName = resultSet.getString("employee_name"); + String department = resultSet.getString("department"); + jsonBuilder.append("{\"warehouse_name\":\"").append(warehouseName) + .append("\",\"employee_name\":\"").append(employeeName) + .append("\",\"department\":\"").append(department).append("\"},"); + } + if (jsonBuilder.length() > 1) { + jsonBuilder.deleteCharAt(jsonBuilder.length() - 1); // 删除最后一个逗号 + } + jsonBuilder.append("]"); + out.print(jsonBuilder.toString()); + } catch (SQLException e) { + e.printStackTrace(); + out.print("[]"); // 如果出现异常,返回空数组 + } finally { + try { + if (resultSet != null) { + resultSet.close(); + } + if (preparedStatement != null) { + preparedStatement.close(); + } + if (connection != null) { + JDBCUtil.closeConnection(connection); + } + } catch (SQLException e) { + e.printStackTrace(); + } + } + } +} \ No newline at end of file diff --git a/项目源码/src/main/java/org/example/warehouseServlet/QueryWarehouseInboundServlet.java b/项目源码/src/main/java/org/example/warehouseServlet/QueryWarehouseInboundServlet.java new file mode 100644 index 0000000..87a40dc --- /dev/null +++ b/项目源码/src/main/java/org/example/warehouseServlet/QueryWarehouseInboundServlet.java @@ -0,0 +1,67 @@ +package org.example.warehouseServlet; + +import javax.servlet.ServletException; +import javax.servlet.annotation.WebServlet; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.io.PrintWriter; +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; + +@WebServlet("/queryWarehouseInbound") +public class QueryWarehouseInboundServlet extends HttpServlet { + @Override + protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + response.setContentType("application/json;charset=UTF-8"); + PrintWriter out = response.getWriter(); + Connection connection = null; + PreparedStatement preparedStatement = null; + ResultSet resultSet = null; + + try { + connection = JDBCUtil.getConnection(); + String sql = "SELECT w.warehouse_name, e.employee_name, SUM(ir.quantity_in) AS total_quantity_in " + + "FROM warehouse w " + + "JOIN employee e ON w.warehouse_id = e.managed_warehouse_id " + + "JOIN inboundrecord ir ON w.warehouse_id = ir.warehouse_id " + + "GROUP BY w.warehouse_name, e.employee_name"; + preparedStatement = connection.prepareStatement(sql); + resultSet = preparedStatement.executeQuery(); + StringBuilder jsonBuilder = new StringBuilder("["); + while (resultSet.next()) { + String warehouseName = resultSet.getString("warehouse_name"); + String employeeName = resultSet.getString("employee_name"); + int totalQuantityIn = resultSet.getInt("total_quantity_in"); + jsonBuilder.append("{\"warehouse_name\":\"").append(warehouseName) + .append("\",\"employee_name\":\"").append(employeeName) + .append("\",\"total_quantity_in\":").append(totalQuantityIn).append("},"); + } + if (jsonBuilder.length() > 1) { + jsonBuilder.deleteCharAt(jsonBuilder.length() - 1); // 删除最后一个逗号 + } + jsonBuilder.append("]"); + out.print(jsonBuilder.toString()); + } catch (SQLException e) { + e.printStackTrace(); + out.print("[]"); // 如果出现异常,返回空数组 + } finally { + try { + if (resultSet != null) { + resultSet.close(); + } + if (preparedStatement != null) { + preparedStatement.close(); + } + if (connection != null) { + JDBCUtil.closeConnection(connection); + } + } catch (SQLException e) { + e.printStackTrace(); + } + } + } +} diff --git a/项目源码/src/main/resources/jdbc.properties b/项目源码/src/main/resources/jdbc.properties new file mode 100644 index 0000000..827968b --- /dev/null +++ b/项目源码/src/main/resources/jdbc.properties @@ -0,0 +1,3 @@ +jdbc.url=jdbc:mysql://localhost:3306/test +jdbc.username=root +jdbc.password=123456 \ No newline at end of file diff --git a/项目源码/src/main/webapp/WEB-INF/web.xml b/项目源码/src/main/webapp/WEB-INF/web.xml new file mode 100644 index 0000000..9f88c1f --- /dev/null +++ b/项目源码/src/main/webapp/WEB-INF/web.xml @@ -0,0 +1,7 @@ + + + + Archetype Created Web Application + diff --git a/项目源码/src/main/webapp/Web/QueryAllRecords.html b/项目源码/src/main/webapp/Web/QueryAllRecords.html new file mode 100644 index 0000000..bddcdda --- /dev/null +++ b/项目源码/src/main/webapp/Web/QueryAllRecords.html @@ -0,0 +1,219 @@ + + + + + + Three Tables Record Query + + + + +

基于商品ID查询出入库及商品信息

+ + + +
+ + + + + \ No newline at end of file diff --git a/项目源码/src/main/webapp/Web/employee.html b/项目源码/src/main/webapp/Web/employee.html new file mode 100644 index 0000000..3648a79 --- /dev/null +++ b/项目源码/src/main/webapp/Web/employee.html @@ -0,0 +1,379 @@ + + + + + + Warehouse and Employee Management + + + + +

员工管理

+ + + + + + + + + + + + + + + + + + + + + +

员工管理

+ + + + + + +

插入新员工

+
+ + + + + + +
+ +
+ + + + + \ No newline at end of file diff --git a/项目源码/src/main/webapp/Web/goods.html b/项目源码/src/main/webapp/Web/goods.html new file mode 100644 index 0000000..7eb9d68 --- /dev/null +++ b/项目源码/src/main/webapp/Web/goods.html @@ -0,0 +1,232 @@ + + + + + + Goods Management + + + + +

货物管理

+ + + + + + +

插入新货物

+
+ + + + + + + +
+ +
+ + + + + \ No newline at end of file diff --git a/项目源码/src/main/webapp/Web/order.html b/项目源码/src/main/webapp/Web/order.html new file mode 100644 index 0000000..99b44d9 --- /dev/null +++ b/项目源码/src/main/webapp/Web/order.html @@ -0,0 +1,278 @@ + + + + + + Order Management + + + + +

订单管理

+ + + + +

插入新订单

+
+ + + + + + +
+ +

修改订单

+ + + +
+ +
+ + + + + \ No newline at end of file diff --git a/项目源码/src/main/webapp/Web/page1.html b/项目源码/src/main/webapp/Web/page1.html new file mode 100644 index 0000000..7e5dea3 --- /dev/null +++ b/项目源码/src/main/webapp/Web/page1.html @@ -0,0 +1,34 @@ + + + + + + Page 2 + + + + +

仓库管理系统

+ + + + + + \ No newline at end of file diff --git a/项目源码/src/main/webapp/Web/start.html b/项目源码/src/main/webapp/Web/start.html new file mode 100644 index 0000000..196f0af --- /dev/null +++ b/项目源码/src/main/webapp/Web/start.html @@ -0,0 +1,89 @@ + + + + + + Main Page + + + + + + + +
+ +
+ + + + + \ No newline at end of file diff --git a/项目源码/src/main/webapp/Web/supplier.html b/项目源码/src/main/webapp/Web/supplier.html new file mode 100644 index 0000000..bcdce5a --- /dev/null +++ b/项目源码/src/main/webapp/Web/supplier.html @@ -0,0 +1,214 @@ + + + + + + Supplier Management + + + + +

供应商管理

+ + + + + + +

插入新供应商

+
+ + + + + +
+ +
+ + + + + \ No newline at end of file diff --git a/项目源码/src/main/webapp/Web/warehouse.html b/项目源码/src/main/webapp/Web/warehouse.html new file mode 100644 index 0000000..0b9a3f7 --- /dev/null +++ b/项目源码/src/main/webapp/Web/warehouse.html @@ -0,0 +1,215 @@ + + + + + + Warehouse Management + + + + +

仓库管理

+ + + + + + +

插入新仓库

+
+ + + + + +
+ +
+ + + + + \ No newline at end of file diff --git a/项目源码/src/main/webapp/Web/warehouseInbound.html b/项目源码/src/main/webapp/Web/warehouseInbound.html new file mode 100644 index 0000000..c0add09 --- /dev/null +++ b/项目源码/src/main/webapp/Web/warehouseInbound.html @@ -0,0 +1,163 @@ + + + + + + 仓库入库数量查询 + + + + +

仓库与订单管理查询

+ + + + + + +
+ + + + + \ No newline at end of file diff --git a/项目源码/src/main/webapp/index.jsp b/项目源码/src/main/webapp/index.jsp new file mode 100644 index 0000000..13f5c4e --- /dev/null +++ b/项目源码/src/main/webapp/index.jsp @@ -0,0 +1,118 @@ +<%@ page contentType="text/html; charset=UTF-8" language="java" %> + + + + + 用户登录 + + + + +
+

用户登录

+
+ + + + + +
+ + +

+ <%= request.getAttribute("error") != null ? request.getAttribute("error") : "" %> +

+ + + +
+ + \ No newline at end of file diff --git a/项目源码/src/main/webapp/register.jsp b/项目源码/src/main/webapp/register.jsp new file mode 100644 index 0000000..ea47839 --- /dev/null +++ b/项目源码/src/main/webapp/register.jsp @@ -0,0 +1,129 @@ +<%@ page contentType="text/html; charset=UTF-8" language="java" %> + + + + + 用户注册 + + + + +
+

用户注册

+
+ + + + + +
+ + +

+ <%= request.getAttribute("error") != null ? request.getAttribute("error") : "" %> +

+ + +

+ <%= request.getAttribute("success") != null ? request.getAttribute("success") : "" %> +

+ + + +
+ + \ No newline at end of file