【项目日记(四)】搜索引擎-Web模块

❣博主主页: 33的博客❣
▶️文章专栏分类:项目日记◀️
🚚我的代码仓库: 33的代码仓库🚚
🫵🫵🫵关注我带你了解更多项目内容

在这里插入图片描述

目录

  • 1.前言
  • 2.前端模块
    • 2.1页面设计
    • 2.2后端交互
  • 3.部署到云服务器
  • 4.总结

1.前言

在前面的文章中我们以及完成了后端的基本模块,那么,接下来,我们对前端模块进行设计。

2.前端模块

2.1页面设计

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Java 文档搜索</title>
</head>
<body><!-- 通过 .container 来表示整个页面元素的容器 --><div class="container"><!-- 1. 搜索框 + 搜索按钮 --><div class="header"><input type="text"><button id="search-btn">搜索</button></div><!-- 2. 显示搜索结果 --><div class="result"><!-- 包含了很多条记录 --><!-- 每个 .item 就表示一条记录 --><!-- 接下来要通过访问服务器的方式获取到搜索结果, 并且由 JS 动态生成页面元素 -->        </div></div>
<style>/* 这部分代码来写样式 *//* 先去掉浏览器的默认样式 */* {margin: 0;padding: 0;box-sizing: border-box;}/* 给整体的页面指定一个高度(和浏览器窗口一样高) */html, body {height: 100%;/* 设置背景图 */background-image: url(image/Pic.jpg);/* 设置背景图不平铺 */background-repeat: no-repeat;/* 设置背景图的位置 */background-position: center center;/* 设置背景图的大小 */background-size: cover;}/* 针对 .container 也设置样式, 实现版心效果 */.container {/* 此处的宽度也可以设置成百分数的形式, 当前就使用一个固定宽度 */width: 1200px;height: 100%;/* 设置水平居中 */margin: 0 auto;/* 设置背景色, 让版心和背景图能够区分开 */background-color: rgba(255, 255, 255, 0.6);/* 设置圆角矩形 */border-radius: 10px;/* 设置内边距, 避免文字内容紧贴着边界 */padding: 20px;/* 加上这个属性, 超出元素的部分就会自动生成一个滚动条. */overflow: auto;}.header {width: 100%;height: 50px;display: flex;justify-content: space-between;align-items: center;}.header>input {width: 1050px;height: 50px;font-size: 22px;line-height: 50px;padding-left: 10px;border-radius: 10px;}.header>button {width: 100px;height: 50px;background-color: rgb(42,107,205);color: #fff;font-size: 22px;line-height: 50px;border-radius: 10px;border: none;}.header>button:active {background: gray;}.result .count {color: gray;margin-top: 10px;}.item {width: 100%;margin-top: 20px;}.item a {display: block;height: 40px;font-size: 22px;line-height: 40px;font-weight: 700;color: rgb(42,107,205);}.item .desc {font-size: 18px;}.item .url {font-size: 18px;color: rgb(0, 128, 0);}.item .desc i {color: red;/* 去掉斜体 */font-style: normal;}</style>

2.2后端交互

<script src="js/jquery.js"></script><script>// 放置用户自己写的 js 代码let button = document.querySelector("#search-btn");button.onclick = function() {// 先获取到输入框的内容let input = document.querySelector(".header input");let query = input.value;console.log("query: " + query);// 然后构造一个 ajax 请求发给服务器$.ajax({type: "GET",url: "searcher?query=" + query,success: function(data, status) {// success 这个函数会在请求成功后调用. // data 参数就表示拿到的结果数据// status 参数就表示 HTTP 状态码// 根据收到的数据结果, 构造出页面内容. // console.log(data);buildResult(data);}})}function buildResult(data) {// 通过这个函数, 来把响应数据给构造成页面内容. // 要做的工作就是, 遍历 data 中的每个元素, // 针对每个元素都创建一个 div.item, 然后把标题, url, 描述都构造好// 再把这个 div.item 给加入到 div.result 中// 这些操作都是基于 DOM API 来展开~// 获取到 .result 这个标签let result = document.querySelector('.result');// 清空上次的结果. result.innerHTML = '';// 先构造一个 div 用来显示结果的个数let countDiv = document.createElement('div');countDiv.innerHTML = '当前找到 ' + data.length + '个结果!';countDiv.className = 'count';result.appendChild(countDiv);// 这就相当于 java 中的 for each// 此处得到的 item 就会分别代表 data 中的每个元素for (let item of data) {let itemDiv = document.createElement('div');itemDiv.className = 'item';// 构造一个标题let title = document.createElement('a');title.href = item.url;title.innerHTML = item.title;title.target = '_blank';itemDiv.appendChild(title);// 构造一个描述let desc = document.createElement('div');desc.className = 'desc';desc.innerHTML = item.desc;itemDiv.appendChild(desc);// 构造一个 urllet url = document.createElement('div');url.className = 'url';url.innerHTML = item.url;itemDiv.appendChild(url);// 把 itemDiv 加到 .result 中result.appendChild(itemDiv);}}</script>

3.部署到云服务器

我们需要把本地程序,部署到云服务器上,供大家使用,我使用的是腾讯云服务器,值得注意的是,在我们打Jar包之前,我们需要把索引文件也复制到到云服务器中,并修改索引加载路径,只有这样在加载的时候才能找到对应路径。
在这里插入图片描述

4.总结

结果展示:
在这里插入图片描述
在这里插入图片描述

我把所学知识加以利用,完成了搜索引擎这个项目,对于我来说,这个项目最大的难点就是去重重操作,以及进行通过多线程进行优化的时候,即要考虑线程安全问题又要最大限度的实现高并发。

项目网址:http://119.91.235.248:8080/index.html
码云地址:https://gitee.com/thirtythree-code/progect_blog
下期预告:项目日记-博客系统

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

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

相关文章

nginx.conf配置参数解析

nginx配置文件解析 /usr/local/nginx/conf vim /etc/security/limits.conf #配置生效只能重新启动* soft nproc 65535 #能打开的进程最大数是软限制655335,65535是最大值 * hard nproc 65535 * soft nofile 65535 # 进程打开文件数的最大值65535 * hard nof…

ExtendSim在商业和服务行业中的仿真

仿真使企业能够做出明智的、数据驱动的预测&#xff0c;从而指导决策、产生积极成果并建立竞争优势。 精益分析 使用 ExtendSim 中的精益分析方法对欧洲的供应链网络进行建模&#xff0c;一家制造商实现了对最终客户的服务水平提高了 98%&#xff0c;而且现在可以在库存减少约 …

python 实现docx指定语言翻译(不丢失格式)

我这边有个需求需要把一份docx翻译成指定语言的文档并且保存&#xff0c;研究了下&#xff0c;记录。 首先先安装依赖 pip install python-docx1.1.2 googletrans4.0.0rc1 python-docx是用来读取docx的&#xff0c;googletrans使用来翻译的。 googletrans PyPI 这个是官方文…

用Vue3和Rough.js绘制一个交互式3D图

本文由ScriptEcho平台提供技术支持 项目地址&#xff1a;传送门 基于Rough.js和GSAP创建交互式SVG图形卡片 应用场景 本代码适用于需要创建动态交互式SVG图形卡片的场景&#xff0c;例如网页设计、数据可视化和交互式艺术作品。 基本功能 该代码利用Rough.js和GSAP库&…

前端学习(五)CSS浮动与补白

目录&#xff1a; 内容&#xff1a; //设置左右浮动 .left{float:left; } .right{float:right; } /*必须设置不同浮动*/ //创建div <div> <dic class"left">左边</div> <div class"right">右边</div> </div> //设置浮…

地铁车厢火灾3D模拟逃生演习减少了资源损耗和风险

在消防安全领域&#xff0c;为了更好地提升安全实训效果&#xff0c;我们在VR安全培训领域打造了多款消防安全VR模拟实训系统&#xff0c;不仅实现了与现实世界无异的交互操作&#xff0c;更在虚拟空间中超越了现实的限制&#xff0c;模拟出那些现实中难以搭建的复杂场景。 利用…

mysql:部署MySQL 8.0 环境

mysql网址&#xff1a;MySQL 点击 MySQL Community Server 选择合适的版本 选择8.0版本 下载完成&#xff0c;点击mysql-installer-community-8.0.26.0.msi文件&#xff0c;打开安装向导。 选择自定义安装类型 打开“Select Products” 窗口&#xff0c;可以定制需要安装的产…

成都晨持绪:开一家抖音网店到底能不能赚钱

在数字化时代的浪潮中&#xff0c;抖音以其独特的魅力迅速占领了社交媒体的舞台。众多创业者纷纷把目光投向这个新兴平台&#xff0c;企图在短视频的海洋里找到属于自己的财富岛屿。但是&#xff0c;开一家抖音网店到底能不能赚钱呢? 我们要认识到&#xff0c;抖音作为一个流量…

lt6911UXC 国产原装 高性能HDMI2.0转MIPI DSI / CSI芯片方案 提供LT 开发资料包及在线软硬件技术支持!

1.说明 LT6911UXC是一款高性能HDMI2.0到MIPI DSI / CSI转换器&#xff0c;用于VR&#xff0c;智能电话&#xff0c;显示应用。 HDMI2.0输入支持高达6Gbps的数据速率&#xff0c;从而为4k 60Hz视频提供足够的带宽。还支持HDCP2.2进行数据解密。 对于MIPI DSI / CSI输出&#xf…

【路由交换技术】Cisco Packet Tracer基础入门教程(五)

这一期我们来学习端口聚合&#xff0c;这是针对交换机的技术 前言 不知道大家有没有注意到&#xff0c;我们之前的实验在交换机与交换机之间只用一条线连接&#xff0c;像这样 通过今天的学习&#xff0c;我们要用两条线来连接交换机&#xff0c;就像这样&#xff08;为了能…

人力资源中的人工智能:你应该知道的一切

人工智能已经成为行业讨论更广泛的突出话题。人力资源(HR)对于人力资源专业人士来说&#xff0c;了解这门课程也是如此。除了简要介绍什么是人工智能&#xff0c;以及你可能遇到的主要人工智能类型(或者你可能很快就会遇到它&#xff01;)此外&#xff0c;本文还将探讨人工智能…

并发控制-事务的调度、数据不一致问题(更新丢失、脏读、不可重复读)、非串行调度的的可串行化

一、引言 1、数据库管理系统DBMS的事务处理技术实现的另一个主要功能部分是并发控制机制。并发控制机制完成的功能就是对并发执行的事务进行控制&#xff0c;保证事务的隔离性&#xff0c;从而进一步保持数据库的一致性。 2、事务的并发控制就是对并发执行的不同事务中的数据…

Java基础:爬虫

1.本地爬虫 Pattern:表示正则表达式 Matcher:文本匹配器&#xff0c;作用按照正则表达式的规则去读取字符串&#xff0c;从头开始读取。在大串中去找符合匹配规则的子串。 1.2.获取Pattern对象 通过Pattern p Pattern.compile("正则表达式");获得 1.3.…

【安全攻防】网络安全中的序列化与反序列

1.序列化与反序列化 首先要了解序列化与反序列化的定义&#xff0c;以及序列化反序列化所用到的基本函数。 序列化&#xff1a;把对象转换为字节序列的过程称为对象的序列化&#xff0c;相当于游戏中的存档。 PHP中的序列化函数serialize() **serialize()**函数用于序列化对…

VScode使用ssh连接服务器

VScode是一款有丰富插件的编译器&#xff0c;非常好用&#xff01;除非你不会用&#xff0c;因为太过繁琐或着频繁出错导致想把电脑砸了&#xff1b; 插件选择 ssh 配置文件 Host myblablaHostName xxx.xx.xxx.xxxUser username用户名一般是服务器上创建有什么用户名&#xf…

【Vue】使用html、css实现鱼骨组件

文章目录 组件测试案例预览图 组件 <template><div class"context"><div class"top"><div class"label-context"><div class"label" v-for"(item, index) in value" :key"index">…

深入探讨JavaScript中的队列,结合leetcode全面解读

前言 队列作为一种基本的数据结构&#xff0c;为解决许多实际问题提供了有效的组织和处理方式&#xff0c;对于提高系统的稳定性、可靠性和效率具有重要作用&#xff0c;所以理解队列是很重要的。 本文深入探讨JavaScript中的队列这种数据结构,结合leetcode题目讲解 题目直达…

DolphinScheduler部署安装or基础介绍(一)

DolphinScheduler概述 Apache DolphinScheduler是一个分布式、易扩展的可视化DAG工作流任务调度平台。致力于解决数据处理流程中错综复杂的依赖关系&#xff0c;使调度系统在数据处理流程中开箱即用 DolphinScheduler核心架构 DolphinScheduler的主要角色如下&#xff1a; Ma…

2024攻防演练:亚信安全推出MSS/SaaS短期定制服务

随着2024年攻防演练周期延长的消息不断传出&#xff0c;各参与方将面临前所未有的挑战。面对强大的攻击队伍和日益严格的监管压力&#xff0c;防守单位必须提前进行全面而周密的准备和部署。为应对这一形势&#xff0c;亚信安全特别推出了为期三个月的MSS/SaaS短期订阅方案。该…

一站式配套,全方位服务升级——全力打造企业新家园

国际数字影像产业园通过完善配套设施和优化服务&#xff0c;为入园企业提供了高效、便捷、专业的服务支持&#xff0c;助力企业实现快速发展和转型升级。同时&#xff0c;园区的数字化和智能化发展策略也为整个数字影像产业的繁荣发展提供了有力支撑。 一、完善配套设施 1、高…