搜索引擎项目(四)

SearchEngine · 王宇璇/submit - 码云 - 开源中国 (gitee.com)

基于Servlet完成前后端交互

@WebServlet("/searcher")
public class DocSearcherServlet extends HttpServlet {private static DocSearcher docSearcher = new DocSearcher();private ObjectMapper objectMapper = new ObjectMapper();protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//1.先解析请求,拿到用户提交的查询词String query = request.getParameter("query");if(query==null||query.equals("")){String msg = "非法输入,没有获取query的值。";System.out.println(msg);response.sendError(404 , msg);return;}//2.打印记录query的值System.out.println("query:"+query);//3.调用搜索模块进行搜索List<Result> results = docSearcher.search(query);//4.把当前的搜索结果进行打包response.setContentType("application/json; charset=utf-8");objectMapper.writeValue(response.getWriter(), results);}
}

总体思路就是接收前端用户输入的query传入后端,将后端的搜索结果返回给前端展示,不要忘记引用Servlet依赖。

前端代码

先创建一个web文件夹因为我们之后是要部署到服务器上的。

创建一个js文件夹保存js文件可以简化我们前端代码的构建。

前端代码就是对数据的接收以及页面设置。这里挑一些重要的属性介绍给大家。

 html,body{height: 100%;background-image: url(preview.jpg);background-repeat: no-repeat;background-position: center;background-size: cover;}

这个jpg文件就是浏览器的背景图,大家可以根据自己的喜好进行修改。

因为图片和前端页面在同一路径下(直接将图片粘贴到WebApp下),所以直接用相对路径表示。

Smart TomCat配置与使用(本地测试)

1.首先先在官网下载tomcat。

2.打开idea,找到插件商城搜索SmartTomcat下载。

3.右上角最近配置,点击编辑当前配置。

4.点击右上角+号,添加SmartTomcat配置

配置内容,名称随便填

TomcatServer从文件中查找,打开刚才下载好的Tomcat的文件路径即可。

有一点值得注意的是Deployment Directory最终子目录一定是webapp。

完成之后启动tomcat就可以本地访问此网站了。http://localhost:8080/SearchEngine/

如果没有问题的话就可以向服务器上部署了。

部署到云服务器:

更改代码引用路径:

我们可以用FileZilla Client来传输本地与云服务器的文件。

将DocSearcher中的停用词文档传输到云服务器上,包括正排索引和倒排索引的两个文件

此时将STOP_WORD_PATH和INDEX_PATH改为云服务器上的路径即可。

打包

首先在pom.xml文件进行配置 ,主要就是配置打war包并且包的名称

 <packaging>war</packaging><build><finalName>SearchEngine</finalName></build>

此时进行打包,云服务器大家可以选择腾讯或者阿里云,终端选择Xshell 7

连接云服务器,在云服务器中下载jdk以及tomcat,jdk的版本一定要与代码运行时jdk版本一致

这里说我遇到的一个bug:

我电脑上jdk版本是22,但是云服务器上是17

在我们的代码中有一处地方是去掉重复的文件,

 while (!queue.isEmpty()){Pos minPos = queue.poll();Weight curWeight = source.get(minPos.row).get(minPos.col);//2.4看看取到的Weight中的DocId和上一个是否相同//相同就合并if(!target.isEmpty()){Weight lastWeight = target.get(target.size() - 1);if(lastWeight.getDocId() == curWeight.getDocId()){//合并WeightlastWeight.setWeight(lastWeight.getWeight() + curWeight.getWeight());}else{target.add(curWeight);}
target.get(target.size() - 1);这个方法之前是getLast()也就是jdk22对取数组最后一个元素的方法进行了封装,但是jdk17没有这个方法,就导致了bug的出现。

此时我们打开项目的文件所在位置,其目录下有一个target文件,我们打的war包就在此目录下,我们将此文件传输到云服务器的Tomcat,Webapps目录下,就会自动解压。此时在浏览器上访问云服务器http://47.94.142.181:8080/SearchEngine/就可以访问到我们的项目了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/51843.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Luma AI发布文生视频大模型Dream Machine——可免费在线试玩

Sora模型的文生视频能力&#xff0c;想必一定惊艳过你。虽然Sora模型很惊艳&#xff0c;但是并没有开放给普通大众。Luma AI发布文生视频大模型Dream Machine模型&#xff0c;可以免费供大家使用&#xff0c;任何人只要到Luma AI的官方网站&#xff0c;就可体验Luma AI的文生视…

java使用JNA调用C/C++动态库,char*无法转换问题

java使用JNA调用C/C动态库&#xff0c;char*无法转换问题 例如&#xff1a; C如下写法 char* test01(const char* &name, const int &age);对应&#xff1a; java中序如下写法 //导入的包 import com.sun.jna.Pointer;//java中需要对应的写法 Pointer test01(String…

六个开源的PDF转Markdown项目

✨ 1: gptpdf gptpdf 是一个利用VLLM解析PDF为Markdown的工具&#xff0c;几乎完美支持数学公式、表格等。 GPTPDF 是一个使用视觉大模型&#xff08;如 GPT-4o&#xff09;将 PDF 文件解析成 Markdown 文件的工具。它主要用于高效地解析 PDF 文档中的排版、数学公式、表格、…

React Native新架构系列-新架构介绍

从今天起&#xff0c;会陆续更新React Native新架构相关的系列内容&#xff0c;本系列基于React Native 0.73.4版本&#xff0c;从一名Android开发者的视角进行介绍。本系列介绍的内容默认读者对React Native有一定的了解&#xff0c;对基础的开发内容不再赘述。 前言 首先介绍…

【优选算法】——leetcode——438.找到字符串中所有字母异位词

目录 1.题目 2.题目理解 3.算法原理 1.如何快速判断两个字符串是否是异位词 2.解决问题 暴力求解——>滑动窗口哈希表 滑动窗口 利用滑动窗口哈希表解决问题 优化&#xff1a;更新结果的判断条件 4.编程代码 C代码 1.频率统计 2. 双指针 C语言代码 1.字符频率…

MATLAB C++语言编写MEX函数示例:求解本源根

作为一种提升运行效率的手段&#xff0c;MATLAB的MEX函数最初支持C语言编写&#xff0c;从2018a才开始支持基于C11的“现代”C编写MEX&#xff0c;并实现更多现代特性&#xff08;尤其是程序安全性方面&#xff09;。目前&#xff0c;MATLAB官方已不推荐继续用传统C语言编写新的…

【qt小系统】传感器云平台3D散点图(附源码)

摘要&#xff1a;本文主要使用QT5&#xff0c;实现了一个传感器云平台的小示例&#xff0c;模拟的是各类传感器的添加&#xff0c;例如&#xff1a;热成像传感器、温度传感器、超声波传感器&#xff0c;模拟添加完成后&#xff0c;会自动将此传感器的三维坐标增加到3D散点图上&…

Vmware安装openstack

安装虚拟机 创建完成后&#xff0c;点击开启虚拟机 稍等执行成功后 上传压缩包到指定目录。将yoga_patch.tar.gz包上传至/root目录下&#xff0c;将stack3_without_data.tar.gz包使用WinSCP上传至/opt目录下 vim run_yoga.sh #/bin/bash cd /root sudo apt-get update tar -xzv…

添加好友

目录 添加好友的思路&#xff1a; 1.假设A添加B a.如果B在线 b.如果B不在线 添加好友的思路&#xff1a; 1.假设A添加B A给服务端发送要添加B的消息&#xff0c;服务端接受后&#xff0c;先把A添加B的信息存入数据库&#xff0c;再去个人信息表查看B是否在线 a.如果B在线…

「问题解决」jdk高版本导致请求返回对象转换报错

报错&#xff1a;Caused by: java.lang.reflect.InaccessibleObjectException: Unable to make protected native java.lang.Object java.lang.Object.clone() throws java.lang.CloneNotSupportedException accessible: module java.base does not “opens java.lang” to unn…

UnityShaderUI编辑器扩展

前言&#xff1a; 当我们在制作通用Shader的时候&#xff0c;避免不了许多参数混杂在一起&#xff0c;尽管在材质面板已经使用过Header标签来区分&#xff0c;但是较长的Shader参数就会导致冗余&#xff0c;功能块不够简约明了&#xff0c;如图&#xff1a; 对于Shader制作者来…

FPGA开发——蜂鸣器的控制

一、概述 在项目开发的过程当中&#xff0c;我会通常会需要一个东西就行报警显示&#xff0c;有使用语音报警&#xff0c;信息报警等注入此类的方式&#xff0c;但最为简单使用的还是蜂鸣器的使用&#xff0c;蜂鸣器控制简单&#xff0c;成本低&#xff0c;是最为常用的模块之…

测试面试宝典(三十七)—— 接口测试中的加密参数如何处理?

1&#xff09;先了解接口使用的加密方式(md5、rsa...) 2&#xff09;检查接口测试工具是否支持这种加密方式&#xff0c;如果支持的话&#xff0c;直接使用对应功能就行了(比如Jmeter支持md5)&#xff1b;如果加密方式是公司内部特有的算法&#xff0c;可以在接口测试工具中调…

柯尔莫哥洛夫-阿诺德网络

柯尔莫哥洛夫-阿诺德网络&#xff08;Kolmogorov-Arnold Network&#xff0c;简称KAN&#xff09;是一个理论框架&#xff0c;主要用于描述高维函数如何通过一组低维函数的组合来近似表示。这个理论的基础源自安德烈柯尔莫哥洛夫和弗拉基米尔阿诺德在函数逼近理论中的工作&…

NSSRound#4 Team

[NSSRound#4 SWPU]1zweb 考察&#xff1a;phar的反序列化 1.打开环境&#xff0c;审计代码 1.非预期解 直接用file伪协议读取flag,或直接读取flag file:///flag /flag 2.正常解法 用读取文件读取index.php,upload.php的源码 index.php: <?php class LoveNss{publi…

3. Docker的数据管理与持久化

在Docker容器化应用中&#xff0c;数据的持久化和管理是一个关键问题。容器的生命周期短暂&#xff0c;容器的停止和删除会导致数据丢失。因此&#xff0c;了解Docker的数据卷&#xff08;Volumes&#xff09;和挂载&#xff08;Mounts&#xff09;的管理方式&#xff0c;对保障…

环境搭建-Docker搭建ClickHouse

Docker搭建ClickHouse 一、前言二、ClickHouse安装2.1 拉取镜像运行ClickHouse服务 三、测试安装3.1 进入clickhouse容器3.2 命令补充说明 四、测试连接五、设置CK的用户名密码 一、前言 本文使用的Docker使用Windows搭建&#xff0c;Linux版本的搭建方式一样。 Windows系统搭…

Data Race: 并发编程中的数据竞争问题

Data Race: 并发编程中的数据竞争问题 &#x1f50d; &#x1f680; Data Race: 并发编程中的数据竞争问题 &#x1f50d;摘要引言正文内容一、什么是数据竞争&#xff1f; &#x1f914;1.1 数据竞争的定义1.2 数据竞争的特征 二、数据竞争的原因和影响 &#x1f6a8;2.1 原因…

Redis学习笔记——第18章 发布与订阅

第18章 发布与订阅 18.1 频道的订阅与退订 订阅关系保存在字典中&#xff0c;Key为频道&#xff0c;value为订阅该频道的客户端链表 18.2 模式的订阅与退订 可以使用通配符&#xff0c;如果订阅了news.*类型的频道&#xff0c;则会将news.*保存为一个Key&#xff0c;value为…

SpringBoot2整合Kafka

引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency><groupId>org.springframework.kafka</groupId><artifactId>s…