# TESTKBS **Repository Path**: hm1024/testkbs ## Basic Information - **Project Name**: TESTKBS - **Description**: Javaweb的一个设计 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2022-04-01 - **Last Updated**: 2022-06-06 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 零、技术效应知识库系统的设计与实现 --- ### 介绍 Javaweb的一个设计,技术效应知识库系统。这是我写的一个小项目。拿出来给大家分享下,当时都是自己摸索出来,自己写出来的,东西比较简单,但也是自己投入精力写出来的东西,往大佬轻喷。😳😊 > 当时也不太会,Java只会一个基础,都是网上找教程一点点跟着学,写出来的。✊💪 > **注:** 技术效应知识库其实就是一个==信息管理系统==,不用管什么是技术效应,这个就是个应用背景,底层的实现方法都是一样的。 ### 环境需求 1. Java的jdk为: jdk-13.0.2 2. 编译环境为: ①Eclipse 2019 ②MySql 8.0 ③Tomcat 8.5 3. 导入的jar包: ①commons-fileupload-1.4.jar ②commons-io-2.5.jar ③mysql-connector-java-8.0.19.jar ④taglibs-standard-impl-1.2.5.jar ⑤taglibs-standard-spec-1.2.5.jar ### 私货 当时参考的网站:[菜鸟教程](https://www.runoob.com/) 上面的很基础,也很实用,适合初学者。 再推荐一个B站up写的编程教程网站:[Road 2 Coding](https://www.r2coding.com/#/) 内容很丰富。 再推荐几个B站的up(点击即可跳转): 1. [CodeSheep](https://space.bilibili.com/384068749?spm_id_from=333.788.b_765f7570696e666f.1):Road 2 Coding这个网站就是他写的。👍 2. [技术胖](https://space.bilibili.com/165659472/?spm_id_from=333.999.0.0):搞了很多免费的编程课程,很不错。太良心了😭 3. [稚晖君](https://space.bilibili.com/20259914/?spm_id_from=333.999.0.0):膜拜大佬,感受下凑数的感觉。懂的越多,才知道稚辉君有多强大。🧎♂️🧎🧎♀️👍 4. [017_凌十七](https://space.bilibili.com/400313065/?spm_id_from=333.999.0.0):我是来人间凑数的。🙋 # 一、基本介绍 --- - 技术效应就是指由技术所产生的一种特定的科学现象。 - 技术效应知识库系统可以提供功能、技术效应以及案例三者之间的数据的存储功能,方便用户通过功能来查找实现功能的技术效应及效应所对应的案例,从而帮助用户进行创新设计。 ## 1、使用到的技术、工具 **技术:** - **Bootstrap 框架:** 弹性框架,也美观,好用。 - **JSP:** 数据交互。 - **Servlet:** 数据交互。 - **MySQL:** 数据库,存储数据。 **工具:** - **VS Code:** 写web界面的时候可以实时预览,看到自己写出来的效果。 - **Eclipse(IDEA也挺好):** 开发工具都可,之前学习用的Eclipse就直接用了。 - **Tomcat:** Web应用服务器,用它来开发和调试JSP 程序。 - **Navicat:** 方便的管理数据库。 ## 2、系统功能图  ## 3、数据库表设计  # 二、系统界面设计 --- 所有界面都写了中英文两种 ## 1、首页   ## 2、现象对应效应的展示界面 在**首页搜索选择按钮下的现象表中点击现象**或者**索引项**便可跳转到该现象对应的效应展示界面(下图以现象“测量温度”为例)。  该部分的关键代码是: ```html <%@ page import="Display_Method.DisplayQuery" %> <% request.setCharacterEncoding("UTF-8"); %> ``` ``可以在JSP中声明一个JavaBean,scope指出了bean的作用域,第一行代码的作用是指出数据该传向哪个Java类,setProperty会将keyWord的值传递入数据处理的Java类DisplayQuery,getProperty会接收DisplayQuery类中的返回内容,从而使展示界面良好显示。后续各个表格的展示也是使用了这种方法与数据库进行交互。 ## 3、表的展示界面 提供数据库中的整张表的展示,使用户可以直观的看到整张表的内容。   ## 4、搜索结果展示界面 下图以模糊搜索“位移”为例  ## 5、管理员界面展示 可以从首页、展示界面以及搜索结果展示界面的管理员登录入口进入 - 管理管理员信息🧑💻  - 管理现象表👩💻  - 管理效应表👨💻  - 管理效应详情表🧑💻  - 管理案例表👨💻  ## 6、管理员登录界面  ```html <%-- 管理员模态框 --%> <%-- 管理员模态框头部 --%> 管理员登录 × <%-- 管理员模态框主体 --%> 账号: 密码: <%-- 管理员模态框底部 --%> ``` ## 7、新用户使用指南 一个系统刚开始总得有个新手教程吧,我就在首页放了个弹窗按钮,弹出一个用户指南。用轮播的形式,放入了很多张使用说明。(中英文都有)  ```html <%-- 新手教程模态框 --%> <%-- 新手教程模态框头部 --%> 新用户使用指南 × <%-- 新手教程模态框主体 --%> <%-- 指示符 --%> <%-- 轮播图片 --%> <%-- 左右切换按钮 --%> ``` # 三、功能设计 --- ## 1、搜索功能 - 搜索功能的不同主要体现在查数据库表时候使用的sql语句。 - 设计了三种搜索方式:**模糊搜索、精确搜索、案例搜索**。 - 展示界面的搜索均为同时搜索现象和效应模糊搜索。管理员界面中的搜索功能均为搜索当前表中内容,输入搜索内容即可即时搜索。 - 除管理员界面的搜索外,其余搜索功能均使用传递JDBC形式连接数据库,通过传递SQL语句进入数据库搜索。    此处使用的关键代码: 1. 加载驱动 ```java public KeyWordQuery() { queryResult = new StringBuffer(); try { Class.forName("com.mysql.cj.jdbc.Driver"); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } } ``` 2. 使用getString()方法获取传入该类的关键字,使用setString()方法将传入该类的关键字设定为给定String的值。 ```java public String getKeyWord() { //接收来自页面的关键字 return keyWord; } public void setKeyWord(String keyWord) { this.keyWord = keyWord; try { byte bb[] = keyWord.getBytes("ISO-8859-1"); keyWord = new String(bb,"GB2312"); } catch (UnsupportedEncodingException e) { // TODO Auto-generated catch block e.printStackTrace(); } } ``` 3. 使用返回值类型为StringBuffer的getQueryResult()函数返回前端界面需要接收的返回内容。 ```java public StringBuffer getQueryResult() { String condition = null; condition = "Select * From kbs"; //此处双引号内的字符串为搜索的SQL语句 StringBuffer str = f(condition); //这里的f()函数为与数据库交互的函数 return str; //此处返回与数据库交互得到的内容 } ``` 4. 使用返回值类型为StringBuffer的f()函数返回从数据库接收的返回内容等。使用try,catch捕获并抛出异常,使用try内的前三句连接数据库,第四句将SQL语句传入数据库,使用append()将括号内内容返回前端界面。使用rs.next()获取返回值的下一项,rs.getString()获取数据库返回的数据。con.close()关闭数据库连接。下面代码以首页表格为例。 ```java public StringBuffer f(String condition) { StringBuffer str = new StringBuffer(); Connection con; Statement st; ResultSet rs; try { String url = "jdbc:mysql://localhost:3306/kbs?serverTimezone=UTC" ; con = DriverManager.getConnection(url,"root","123456");//账户密码 st = con.createStatement(); rs = st.executeQuery(condition); str.append(""); //双引号内内容返回页面 str.append(""); str.append(""); str.append(""); str.append(""); str.append("" + "现象"); str.append("" + "索引项 F"); str.append(""); str.append(""); str.append(""); while(rs.next()) { str.append(""); str.append("" + rs.getString(2) + ""); str.append("" + rs.getString(3) + ""); str.append(""); } str.append(""); str.append(""); str.append(""); str.append(""); con.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } return str; } ``` 5. 管理员界面的搜索功能使用的是JavaScript方法实现搜索。 ```javascript function row2() { var input, filter, table, tr, td, i; input = document.getElementById("myInput"); //使用ID名从页面获取关键字 filter = input.value.toUpperCase(); table = document.getElementById("ManagementTable"); //查找的表的ID tr = table.getElementsByTagName("tr"); //此处标识为查找的是列 for (i = 0; i < tr.length; i++) { td = tr[i].getElementsByTagName("td")[1]; //此处的1为搜索的是第2列 if (td) { if (td.innerHTML.toUpperCase().indexOf(filter) > -1) { tr[i].style.display = ""; } else { tr[i].style.display = "none"; } } } } ``` ## 2、管理员登录功能  ## 3、数据管理功能 都以==增加==功能为例,别的功能模块实现方式类似。 ### 3.1 管理员管理  ```html <%-- 增删改三个功能按钮的页面代码 --%>   增加   删除   修改 ``` ```html <%-- 增加管理员的页面代码 --%> 账号:   密码:     增加 ``` ### 3.2 现象表管理  ```html 现象:   索引项F:     增加 ``` ### 3.3 效应表管理  ```html 索引项F:   现象:   索引项E:   效应:     增加 ``` ### 3.4 效应详情表管理  ```html 索引项E:   效应:     增加 效应详情:   PS:在添加效应详情时请使用HTML标签等对文本进行分段、加粗等操作。 ``` ### 3.5 案例表管理  ```html <%-- 案例表不一样的地方就是要上传图像 --%> 索引项E:   效应:   案例:   图像路径:     增加 图像:     上传 PS:图像上传时将图像重命名为:“索引项.后缀”方便管理。如:E1.jpg。添加图像路径格式如:“../Images/E1.jpg” ```