一、 前言
Express 是 Node.js 的一个流行框架,用于构建 Web 应用程序和 API。它提供了许多功能强大的工具和中间件,使得开发者能够轻松地创建高性能的服务器端应用。然而,实现一个完整的 Web 应用一个重要的方面是前台(客户端)与后台(服务器端)之间的交互。在这篇文章中,我们将探讨如何在 Express 框架下实现有效的前后端交互。
二、简介
实现前台与后台的交互通常要处理以后台路由、前台交互等内容:
1. 后台路由
在 Express 中,后台路由是定义了端点(endpoint)和处理函数的部分。这些路由负责处理来自客户端的请求,并返回相应的数据或执行相应的操作。下面是一个简单的后台路由示例:
const express = require ( 'express' ) ;
const app = express ( ) ;
app. get ( '/api/data' , ( req, res ) => {
const data = { message : '这是来自服务器的数据' } ;
res. json ( data) ;
} ) ;
app. listen ( 3000 , ( ) => {
console. log ( '服务器已启动,端口号: 3000' ) ;
} ) ;
在上面的例子中,我们定义了一个 GET 请求的路由 /api/data
,当客户端发送 GET 请求到这个路由时,服务器将返回一个 JSON 格式的数据。
2. 前台交互
要在前台与后台进行交互,通常使用 JavaScript 来发送请求并处理响应。在浏览器端,可以使用 Fetch API 或 XMLHttpRequest 对象来实现。以下是一个使用 Fetch API 的简单示例:
fetch ( '/api/data' )
. then ( response => {
if ( ! response. ok) {
throw new Error ( '网络请求失败' ) ;
}
return response. json ( ) ;
} )
. then ( data => {
console. log ( data) ;
} )
. catch ( error => {
console. error ( '发生错误:' , error) ;
} ) ;
在这个示例中,我们向 /api/data
路由发送了一个 GET 请求,并在收到响应后处理返回的数据。
三、真实案例
我们以视频网站的【分类编辑】的页面来介来看看在项目中如何实现前台与后台的异步交互;这里涉及到的重点 内容有:
前台如何通过后台读、写数据库中的数据
前台页面中的控件事件挂接
3.1前台通过后台获取数据库中的数据
在实现前台通过后台获取数据库中的数据时,首先需要后台提供相应的数据获取方法供前台调用。在较为优良的实践中,常见的做法是将数据表进行封装,形成模型。这种模型封装可以提供一种结构化的方式来管理和操作数据库中的数据,使得后台的数据访问更加可维护和可扩展。我们以Mysql数据库为例介绍后台的方法,其中数据库链接部分请参阅前面文章,这里只在末尾给出代码以方便调试;
CREATE TABLE `video_site`.`video_categories2` (
`ID` INT NOT NULL AUTO_INCREMENT,
`CategoriesName` VARCHAR(255) NOT NULL,
PRIMARY KEY (`ID`, `CategoriesName`),
UNIQUE INDEX `ID_UNIQUE` (`ID` ASC));
3.1.1 在NodeJs中提供数据表访问代码
创建Model\videoCategoryModel.js
做为视频分类的模型封装,提供对数据表的增、删、改、查功能,其代码如下:
const db = require('./dbUtils');
class VideoCategory {
constructor(data) {
this.id = data.ID;
this.categoryName = data.CategoriesName;
}
// 根据分类ID查询分类
static async findById(id) {
try {
const results = await db.query.withoutConnection('SELECT * FROM video_categories WHERE ID = ?', [id]);
if (results.length > 0) {
const categoryData = results[0];
return new VideoCategory({
id: categoryData.ID,
categoryName: categoryData.CategoriesName
});
}
} catch (err) {
console.error('Error fetching video category by ID:', err);
throw err;
}
}
// 静态方法,用于查询所有分类
static async findAll() {
try {
const results = await db.query.withoutConnection('SELECT * FROM video_categories');
return results.map(categoryData => new VideoCategory(categoryData));
} catch (err) {
console.error('Error fetching all video categories:', err);
throw err;
}
}
// 实例方法,用于保存分类到数据库
async save() {
try {
const results = await db.query.withoutConnection(
'INSERT INTO video_categories (CategoriesName) VALUES (?)',
[this.categoryName]
);
this.id = results.insertId;
} catch (err) {
console.error('Error saving video category:', err);
throw err;
}
}
}
module.exports = VideoCategory;
3.1.2 提供路由
增加routes\categories.js
文件作为视频分类的路由文件,提供数据表内容访问API接口
const express = require('express');
const router = express.Router();
const CategoryModel = require('../model/CategoryModel');
// 渲染分类维护页面,当用户切换到视频分类页面时显示分类编辑页面
router.get('/admin/categories', async (req, res) => {
try {
const categories = await CategoryModel.getAllCategories();
res.render('categories', { categories });
} catch (error) {
console.error('Error rendering categories page:', error);
res.status(500).send('Internal Server Error');
}
});
// API调用获取所有分类
router.get('/admin/categories/api/Categories', async (req, res) => {
try {
const categories = await CategoryModel.getAllCategories();
res.json(categories);
} catch (error) {
console.error('Error fetching categories:', error);
res.status(500).json({ error: 'Internal Server Error' });
}
});
// API调用添加分类
router.post('/admin/categories/api/Categories', async (req, res) => {
try {
const { CategoriesName } = req.body;
await CategoryModel.addCategory(CategoriesName);
res.status(201).json({ message: 'Category added successfully' });
} catch (error) {
console.error('Error adding category:', error);
res.status(500).json({ error: 'Internal Server Error' });
}
});
// API调用更新分类
router.put('/admin/categories/api/Categories/:id', async (req, res) => {
try {
const { id } = req.params;
const { CategoriesName } = req.body;
await CategoryModel.updateCategory(id, CategoriesName);
res.json({ message: 'Category updated successfully' });
} catch (error) {
console.error('Error updating category:', error);
res.status(500).json({ error: 'Internal Server Error' });
}
});
// API调用删除分类
router.delete('/admin/categories/api/Categories/:id', async (req, res) => {
try {
const { id } = req.params;
await CategoryModel.deleteCategory(id);
res.json({ message: 'Category deleted successfully' });
} catch (error) {
console.error('Error deleting category:', error);
res.status(500).json({ error: 'Internal Server Error' });
}
});
module.exports = router;
3.1.3 将路由添加到由表中
在App.js
文件中添加以下代码
//……其它代码
const categoriesRoutes = require('./routes/categories');
//……其它代码
app.use('/', categoriesRoutes); // 挂载分类维护页面的路由
//……其它代码
3.2前台通过后台获取数据库中的数据
3.2.1 前台页面事件说明
在页面中提供一个文本框用于增加分类时输入分类名称,一个【增加】按钮用于增加分类,以及一个表格用于显示分类数据;数据修改及删除通过表格完成;表格显示如下
ID
分类名称
操作
1
初中
删除
2
高中
删除
增加views\categories.ejs
页面,并添加相应的事件,下面就所需要事件展开说明 1 document.addEventListener
事件说明请参阅附2 2 "DOMContentLoaded"
页面加载事件,内部主要实现:
挂接submit
事件,用于添加新分类;
定义window.deleteCategory
删除分类方法,用于挂接在表格中的删除按钮单击事件;
定义fetchCategories()
用于加载所有分类; 以上三个方法放到【"DOMContentLoaded"
】是为保证事件挂接成功,避免某些情况下因页面未完全加载完毕所挂接的控件未定义从而造成的挂接失败;
3 function createTableRow(category)
用于创建表格的方法; 4 async function validateAndUpdateCategory(element, id)
用于在表格中修改分类名称响应函数; 在创建表格时 ${category.CategoriesName}
时,指定了单元修输入后的响应函数; 5 async function updateCategory(id, newName)
用于修改分类名称后调用相应的后台API
3.2.1 前台页面代码细节说明
在categoryForm.addEventListener('submit'
页面提交事件中event.preventDefault()
用于阻止页面的默认提交事件,这样我们才能机会对用户输入内容进行验证,并根据验证结果决定处理动作;
单元格默认是不能编辑的,通过设置contenteditable="true"
至使单元可以编辑。
在增加分类后,这里直接重新加载了页面,若不想重新加载整个页面,可参见单元格编辑响应事件修改此处代码;
3.3 views\categories.ejs
代码如下:
课程分类管理
ID
分类名称? 分类名称不能包含以下字符:\ / : * ? " < > |,长度不能超过255个字符
操作
4. 结论
通过 Express 框架,我们可以轻松地实现前后端之间的数据交互。在后台,通过定义路由来处理来自客户端的请求;在前台,通过 JavaScript 来发送请求并处理响应。这种前后端交互的方式使得我们能够构建功能丰富、动态的 Web 应用程序。
附
1 数据库链接代码
文件名Model\dbUtils.js
,代码如下
const mysql = require('mysql');
// 创建数据库连接池
const pool = mysql.createPool({
connectionLimit: 10,
host: 'localhost',
user: '数据库用户名',
password: '数据库密码',
database: 'video_site', //使用的数据库名
debug: false // 开启调试模式,会输出详细的 SQL 执行日志
});
// 获取数据库连接的方法
const getDBConnection = () => {
return new Promise((resolve, reject) => {
pool.getConnection((error, connection) => {
if (error) {
reject(error);
} else {
resolve(connection);
}
});
});
};
// 执行查询的方法(重载1:带 connection 参数)
const query = {
// 当调用者已经拥有连接时使用的查询方法
withConnection: (connection, sql, params) => {
return new Promise((resolve, reject) => {
connection.query(sql, params, (error, results, fields) => {
if (error) {
reject(error);
} else {
resolve(results);
}
});
});
},
// 当调用者没有连接时使用的查询方法,这个方法会负责获取和释放连接
withoutConnection: async (sql, params) => {
let connection;
try {
connection = await getDBConnection();
const results = await query.withConnection(connection, sql, params);
return results;
} catch (error) {
throw error;
} finally {
if (connection) {
connection.release();
}
}
}
};
module.exports = {
getDBConnection,
query
};
2 document.addEventListener说明
document.addEventListener
是 JavaScript 中用于添加事件监听器的方法之一。它允许开发者在特定的文档对象上监听各种类型的事件,比如鼠标点击、键盘按下、页面加载完成等,以便在事件发生时执行相应的操作。
使用方法
document. addEventListener ( event, function , useCapture) ;
event
: 要监听的事件类型,比如 “click”、“keydown”、“load” 等。
function
: 事件发生时要执行的函数,也称为事件处理程序。
useCapture
(可选): 一个布尔值,表示事件是在捕获阶段(true
)还是冒泡阶段(false
)触发事件处理程序。默认为 false
。
示例
document. addEventListener ( 'click' , function ( event ) {
console. log ( '点击了文档' ) ;
} ) ;
document. addEventListener ( 'keydown' , function ( event ) {
console. log ( '按下了键盘键:' , event. key) ;
} ) ;
在这个示例中,我们分别监听了文档的点击事件和键盘按键事件。当用户点击文档时,会在控制台输出 “点击了文档”;当用户按下键盘时,会在控制台输出相应的按键值。
优势
多事件处理 : 可以同时监听多个不同类型的事件,而不需要像传统的 onclick
或 onkeydown
一样,将事件处理程序直接赋值给特定的属性。
灵活性 : 可以使用匿名函数或命名函数作为事件处理程序,使代码更加模块化和可维护。
事件委托 : 可以利用事件冒泡机制,在父元素上添加一个事件监听器,来代理处理子元素的事件,提高性能和代码简洁度。
总之,document.addEventListener
是 JavaScript 中一种强大的事件处理机制,它为开发者提供了一种灵活、高效的方式来处理各种类型的事件。
你可能感兴趣的:(NodeJs,入门,交互,node.js,express,mysql,数据库)
三菱PLC全套学习资料及应用手册
good2know
本文还有配套的精品资源,点击获取简介:三菱PLC作为工业自动化领域的核心设备,其系列产品的学习和应用需要全面深入的知识。本次资料包为学习者提供从基础到进阶的全方位学习资源,包括各种型号PLC的操作手册、编程指南、软件操作教程以及实际案例分析,旨在帮助用户系统掌握PLC的编程语言、指令系统及在各类工业应用中的实施。1.三菱PLC基础知识入门1.1PLC的基本概念可编程逻辑控制器(PLC)是工业自动化
9、汇编语言编程入门:从环境搭建到简单程序实现
神经网络酱
汇编语言 MEPIS GNU工具链
汇编语言编程入门:从环境搭建到简单程序实现1.数据存储介质问题解决在处理数据存储时,若要使用MEPIS系统,需确保有其可访问的存储介质。目前,MEPIS无法向采用NTFS格式(常用于Windows2000和XP工作站)的硬盘写入数据。不过,若硬盘采用FAT32格式,MEPIS就能进行写入操作。此外,MEPIS还能将文件写入软盘和大多数USB闪存驱动器。若工作站连接到局域网,还可通过FTP协议或挂载
JVM 内存模型深度解析:原子性、可见性与有序性的实现
练习时长两年半的程序员小胡
JVM 深度剖析:从面试考点到生产实践 jvm java 内存模型
在了解了JVM的基础架构和类加载机制后,我们需要进一步探索Java程序在多线程环境下的内存交互规则。JVM内存模型(JavaMemoryModel,JMM)定义了线程和主内存之间的抽象关系,它通过规范共享变量的访问方式,解决了多线程并发时的数据一致性问题。本文将从内存模型的核心目标出发,详解原子性、可见性、有序性的实现机制,以及volatile、synchronized等关键字在其中的作用。一、J
什么是缓存雪崩?缓存击穿?缓存穿透?分别如何解决?什么是缓存预热?
daixin8848
缓存 redis java 开发语言
缓存雪崩:在一个时间段内,有大量的key过期,或者Redis服务宕机,导致大量的请求到达数据库,带来巨大压力-给key设置不同的TTL、利用Redis集群提高服务的高可用性、添加多级缓存、添加降级流策略缓存击穿:给某一个key设置了过期时间,当key过期的时间,恰好这个时间点有大量的并发请求访问这个key,可能会瞬间把数据库压垮-互斥锁:缓存失败时,只允许一个请求去加载数据并更新缓存,其他请求阻塞
在线人数统计业务设计(场景八股文)
业务问题在当经的网站中,在线人数的实时统计已经是一个必不可少的模块了,并且该统计功能最好能够按不同的时间间隔做的统计,现在需要你设计一个在线人数统计的模块,你应该怎么进行设计的呢?背景一个网校下会有多个学员。目前平台大概有十个,平台对应的网校大概五十几个,平均一个网校会有5w个用户,预计总人数为200w,最该学员的在线人数在10w左右。设计思路最开始的时候,想到的就是使用mysql直接实现,但是明
JAVA接口机结构解析
秃狼
SpringBoot 八股文 Java java 学习
什么是接口机在Java项目中,接口机通常指用于与外部系统进行数据交互的中间层,负责处理请求和响应的转换、协议适配、数据格式转换等任务。接口机的结构我们的接口机的结构分为两个大部分,外部接口机和内部接口机,在业务的调度上也是通过mq来实现的,只要的目的就是为了解耦合和做差异化。在接口机中主要的方法就是定时任务,消息的发送和消费,其他平台调用接口机只能提供外部接口机的方法进行调用,外部接口机可以提供消
Aop +反射 实现方法版本动态切换
需求分析在做技术选型的时候一直存在着两个声音,mongo作为数据库比较mysql好,mysql做为该数据比mongo好。当然不同数据库都有有着自己的优势,我们在做技术选型的时候无非就是做到对数据库的扬长避短。mysql最大的优势就是支持事务,事务的五大特性保证的业务可靠性,随之而来的就是事务会产生的问题:脏读、幻读、不可重复度,当然我们也会使用不同的隔离级别来解决。(最典型的业务问题:银行存取钱)
STM32入门之TIM基本定时器
嵌入式白话
STM32入门学习 stm32 嵌入式硬件 单片机
一、定时器简介定时器是嵌入式系统中的关键外设之一,它可以用于生成精确的延时、周期性中断、PWM波形生成等功能。在STM32F1系列单片机中,定时器不仅能为系统提供精确的时钟,还支持外部事件的捕获以及信号输出。对于定时器的功能,我们可以通过一个生活中非常常见的例子来形象地描述:微波炉的定时器。想象你正在使用微波炉加热食物。在微波炉里,定时器的作用就是帮助你控制食物加热的时间。当你设置了加热时间后,定
旧系统UI焕新陷阱:保留业务习惯与引入新交互的平衡点把控
贝格前端工场
ui 交互
摘要**想给老旧系统换上“高颜值新衣”,却遭遇员工集体吐槽“不会用”?满心期待新交互能提升效率,结果用户操作频频出错,业务进度反而被拖慢?旧系统UI焕新本是优化体验的好机会,可在保留多年养成的业务操作习惯,与引入更先进便捷的新交互方式之间,却横亘着巨大鸿沟。稍有不慎,就会陷入“改了不如不改”的尴尬境地。这场关于“守旧”与“创新”的博弈,究竟该如何破局?一、旧系统UI焕新:一场甜蜜又棘手的改造工程旧
mysql复习
立夏的李子
mysql 数据库 database
mysqlselect语法selectfromjoinwheregroupbyhavingorderbylimit联合查询innerjoin()leftjoin(以左表为基准,匹配右表,不匹配的返回左表,右表以null值填充)rightjoind··(去除列重复的数据)索引类型主键索引(PrimaryKey)唯一索引(Unique)常规索引(Index)全文索引(FullText)索引准则索引不是
微信公众号回调java_处理微信公众号消息回调
weixin_39607620
微信公众号回调java
1、背景在上一节中,咱们知道如何接入微信公众号,可是以后公众号会与咱们进行交互,那么微信公众号如何通知到咱们本身的服务器呢?咱们知道咱们接入的时候提供的url是GET/mp/entry,那么公众号以后产生的事件将会以POST/mp/entry发送到咱们本身的服务器上。html2、代码实现,此处仍是使用weixin-java-mp这个框架实现一、引入weixin-java-mpcom.github.
MySQL复习题
一.填空题1.关系数据库的标准语言是SQL。2.数据库发展的3个阶段中,数据独立性最高的是阶段数据库系统。3.概念模型中的3种基本联系分别是一对一、一对多和多对多。4.MySQL配置文件的文件名是my.ini或my.cnf。5.在MySQL配置文件中,datadir用于指定数据库文件的保存目录。6.添加IFNOTEXISTS可在创建的数据库已存在时防止程序报错。7.MySQL提供的SHOWCREA
机器学习必备数学与编程指南:从入门到精通
a小胡哦
机器学习基础 机器学习 人工智能
一、机器学习核心数学基础1.线性代数(神经网络的基础)必须掌握:矩阵运算(乘法、转置、逆)向量空间与线性变换特征值分解与奇异值分解(SVD)为什么重要:神经网络本质就是矩阵运算学习技巧:用NumPy实际操作矩阵运算2.概率与统计(模型评估的关键)核心概念:条件概率与贝叶斯定理概率分布(正态、泊松、伯努利)假设检验与p值应用场景:朴素贝叶斯、A/B测试3.微积分(优化算法的基础)重点掌握:导数与偏导
Android GreenDao介绍和Generator生成表对象代码
目录(?)[-]介绍创建工程转载请注明:http://blog.csdn.net/sinat_30276961/article/details/50052109最近无意中发现了GreenDao,然后查看了一些资料后,发现这个数据库框架很适合用,于是乎,查看了官网的api,并自己写了一个小应用总结一下它的使用方法。介绍按照国际惯例,在开篇,总要先介绍一下什么是GreenDao吧。首先需要说明的是Gr
Android Slices:让应用功能在系统级交互中触手可及
安卓开发者
Android Jetpack android 交互 gitee
引言在当今移动应用生态中,用户每天要面对数十个甚至上百个应用的选择,如何让自己的应用在关键时刻触达用户,成为开发者面临的重要挑战。Google在Android9Pie中引入的Slices技术,正是为了解决这一痛点而生。本文将全面介绍AndroidSlices的概念、实现方法、应用场景以及最佳实践,帮助开发者掌握这一提升用户参与度的强大工具。什么是AndroidSlices?AndroidSlice
免费编程课程大汇总:从入门到精通的一站式资源
大力出奇迹985
人工智能 大数据
在数字化时代,编程已成为一项至关重要的技能,无论是为了职业发展还是个人兴趣,学习编程都极具价值。本文精心汇总了丰富的免费编程课程资源,涵盖从基础入门到精通的各个阶段。通过全面介绍如Coursera、edX等在线学习平台,Codecademy、freeCodeCamp等交互式学习网站,以及B站、网易云课堂等视频课程平台的免费课程,为编程学习者提供了一站式的资源指南,帮助读者轻松开启编程学习之旅,逐步
用 Python 开发小游戏:零基础也能做出《贪吃蛇》
本文专为零基础学习者打造,详细介绍如何用Python开发经典小游戏《贪吃蛇》。无需复杂编程知识,从环境搭建到代码编写、功能实现,逐步讲解核心逻辑与操作。涵盖Pygame库的基础运用、游戏界面设计、蛇的移动与食物生成规则等,让新手能按步骤完成开发,同时融入SEO优化要点,帮助读者轻松入门Python游戏开发,体验从0到1做出游戏的乐趣。一、为什么选择用Python开发《贪吃蛇》对于零基础学习者来说,
大数据技术笔记—spring入门
卿卿老祖
篇一spring介绍spring.io官网快速开始Aop面向切面编程,可以任何位置,并且可以细致到方法上连接框架与框架Spring就是IOCAOP思想有效的组织中间层对象一般都是切入service层spring组成前后端分离已学方式,前后台未分离:Spring的远程通信:明日更新创建第一个spring项目来源:科多大数据
Mac OSX 下的mysql数据库文件存放位置
Bruuuces
mysql mac osx 位置 存放
之前我的mysql的系统数据库里的表被我玩坏了,万般无奈之下只得删除所有mysql的东西重新构建数据库。按照网上搜到的内容删除后重装发现数据库没有什么变化。于是自己在每个可能存放数据库文件的目录查找,最终确认目录位置如下:使用HomeBrew安装为/usr/local/var/mysql使用官方下载的dmg镜像安装为/usr/local/mysql删除这个目录再重新安装mysql就会重新生成系统数
Django学习笔记(一)
学习视频为:pythondjangoweb框架开发入门全套视频教程一、安装pipinstalldjango==****检查是否安装成功django.get_version()二、django新建项目操作1、新建一个项目django-adminstartprojectproject_name2、新建APPcdproject_namedjango-adminstartappApp注:一个project
点淘邀请码是什么怎么输入,点淘邀请码推广(注意细节问题邀请方法)
e95cfad15310
性能优异:安装包体积小,高速下载,浏览更省流量,运行流畅快速点淘邀请码点淘邀请码LRM8XZH9或LRYTO3FS或LRYTO3FS,诚邀你的加入。借助番茄小说强大的精准客户群体,该应用采取了进一步细分市场的策略。现在,用户无论是阅读还是听小说,都可以赚取零花钱。点淘邀请码点淘邀请码:LRM8XZH9、LRYTO3FS或LRYTO3FS,它的主要特点是提供海量的小说和广播节目,同时也具备一些社交互
mac os 10.9 mysql_MAC OSX 10.9 apache php mysql 环境配置
AY05
mac os 10.9 mysql
#终端内运行sudoapachectlstart#启动Apachesudoapachectlrestart#重启Apachesudoapachectlstop#停止Apache#配置Apachesudovi/private/etc/apache2/httpd.conf#将里面的这一行去掉前面的##LoadModulephp5_modulelibexec/apache2/libphp5.so#配置P
mac升级mysql_Mac OSX下的MySQL数据库升级
weixin_39801714
mac升级mysql
MacOSX下的数据库升级最麻烦的不过权限的问题.本文的MySQL的安装方式为OSX下DMG磁盘镜像的安装方式,MacPorts/Homebrew的方式大同小异.从5.6.17升级到5.7.18安装目录信息ls-al/usr/local|grepmysqllrwxr-xr-x1rootwheel30B52100:39mysql@->mysql-5.6.17-osx10.7-x86_64drwxr-
python编程第十四课:数据可视化
小小源助手
Python代码实例 信息可视化 python 开发语言
Python数据可视化:让数据“开口说话”在当今数据爆炸的时代,数据可视化已成为探索数据规律、传达数据信息的关键技术。Python凭借其丰富的第三方库,为数据可视化提供了强大而灵活的解决方案。本文将带你深入了解Matplotlib库的基础绘图、Seaborn库的高级可视化以及交互式可视化工具Plotly,帮助你通过图表清晰地展示数据背后的故事。一、Matplotlib库基础绘图Matplotlib
大学生入门:初识方法及其易踩坑的点
在java学习过程中,我们不难发现有很多重复使用的功能代码块,每次使用如果都要重新写一遍,岂不是很麻烦,就算是“cv”大法,感觉也不是很方便,那么,有什么办法可以解决这个问题呢?方法!java中,一段可重用的,用于执行特定功能的代码块叫做方法,它可以接收参数、返回结果,并且可以被多次使用。一、方法的基本结构[修饰符]返回值类型方法名([参数列表])[throws异常类型]{//方法体}[throw
大学生入门:分支结构及其易踩坑的点
山中月侣
java大学生入门 java 开发语言 经验分享
循环和分支在我们的日常代码中出现频率很高,无论是简单的数据处理还是复杂的业务逻辑,都会经常用到,它们看似简单,但是使用起来还是有很多隐藏的问题的,接下来我们一起学习或者复习一下:一、分支结构1、if语句主要包括三种:if语句、if-else语句、if-elseif-else语句if语句:if(条件表达式){//条件为真时执行的代码块}如果要执行的语句只有一句,可以省略“{}”,但是不建议if-el
【MySQL】MySQL数据库如何改名
武昌库里写JAVA
面试题汇总与解析 spring boot vue.js sql java 学习
MySQL建库授权语句https://www.jianshu.com/p/2237a9649ceeMySQL数据库改名的三种方法https://www.cnblogs.com/gomysql/p/3584881.htmlMySQL安全修改数据库名几种方法https://blog.csdn.net/haiross/article/details/51282417MySQL重命名数据库https://
HikariCP调试日志深度解析:生产环境故障排查完全指南
HikariCP调试日志深度解析:生产环境故障排查完全指南更新时间:2025年7月4日|作者:资深架构师|适用版本:HikariCP5.x+|难度等级:中高级前言在生产环境中,数据库连接池往往是系统性能的关键瓶颈。HikariCP作为当前最流行的Java连接池,其调试日志包含了丰富的运行时信息,能够帮助我们快速定位和解决各种连接池相关问题。本文将深入解析HikariCP的日志体系,提供一套完整的故
大学社团管理系统(11831)
codercode2022
java spring boot spring echarts spring cloud sentinel java-rocketmq
有需要的同学,源代码和配套文档领取,加文章最下方的名片哦一、项目演示项目演示视频二、资料介绍完整源代码(前后端源代码+SQL脚本)配套文档(LW+PPT+开题报告)远程调试控屏包运行三、技术介绍Java语言SSM框架SpringBoot框架Vue框架JSP页面Mysql数据库IDEA/Eclipse开发四、项目截图有需要的同学,源代码和配套文档领取,加文章最下方的名片哦!
前端数据库:IndexedDB从基础到高级使用指南
文章目录前端数据库:IndexedDB从基础到高级使用指南引言一、IndexedDB概述1.1什么是IndexedDB1.2与其他存储方案的比较二、基础使用2.1打开/创建数据库2.2基本CRUD操作添加数据读取数据更新数据删除数据三、高级特性3.1复杂查询与游标3.2事务高级用法3.3性能优化技巧四、实战案例:构建离线优先的待办事项应用4.1数据库设计4.2同步策略实现五、常见问题与解决方案5.
解读Servlet原理篇二---GenericServlet与HttpServlet
周凡杨
java HttpServlet 源理 GenericService 源码
在上一篇《解读Servlet原理篇一》中提到,要实现javax.servlet.Servlet接口(即写自己的Servlet应用),你可以写一个继承自javax.servlet.GenericServletr的generic Servlet ,也可以写一个继承自java.servlet.http.HttpServlet的HTTP Servlet(这就是为什么我们自定义的Servlet通常是exte
MySQL性能优化
bijian1013
数据库 mysql
性能优化是通过某些有效的方法来提高MySQL的运行速度,减少占用的磁盘空间。性能优化包含很多方面,例如优化查询速度,优化更新速度和优化MySQL服务器等。本文介绍方法的主要有:
a.优化查询
b.优化数据库结构
ThreadPool定时重试
dai_lm
java ThreadPool thread timer timertask
项目需要当某事件触发时,执行http请求任务,失败时需要有重试机制,并根据失败次数的增加,重试间隔也相应增加,任务可能并发。
由于是耗时任务,首先考虑的就是用线程来实现,并且为了节约资源,因而选择线程池。
为了解决不定间隔的重试,选择Timer和TimerTask来完成
package threadpool;
public class ThreadPoolTest {
Oracle 查看数据库的连接情况
周凡杨
sql oracle 连接
首先要说的是,不同版本数据库提供的系统表会有不同,你可以根据数据字典查看该版本数据库所提供的表。
select * from dict where table_name like '%SESSION%';
就可以查出一些表,然后根据这些表就可以获得会话信息
select sid,serial#,status,username,schemaname,osuser,terminal,ma
类的继承
朱辉辉33
java
类的继承可以提高代码的重用行,减少冗余代码;还能提高代码的扩展性。Java继承的关键字是extends
格式:public class 类名(子类)extends 类名(父类){ }
子类可以继承到父类所有的属性和普通方法,但不能继承构造方法。且子类可以直接使用父类的public和
protected属性,但要使用private属性仍需通过调用。
子类的方法可以重写,但必须和父类的返回值类
android 悬浮窗特效
肆无忌惮_
android
最近在开发项目的时候需要做一个悬浮层的动画,类似于支付宝掉钱动画。但是区别在于,需求是浮出一个窗口,之后边缩放边位移至屏幕右下角标签处。效果图如下:
一开始考虑用自定义View来做。后来发现开线程让其移动很卡,ListView+动画也没法精确定位到目标点。
后来想利用Dialog的dismiss动画来完成。
自定义一个Dialog后,在styl
hadoop伪分布式搭建
林鹤霄
hadoop
要修改4个文件 1: vim hadoop-env.sh 第九行 2: vim core-site.xml <configuration> &n
gdb调试命令
aigo
gdb
原文:http://blog.csdn.net/hanchaoman/article/details/5517362
一、GDB常用命令简介
r run 运行.程序还没有运行前使用 c cuntinue 
Socket编程的HelloWorld实例
alleni123
socket
public class Client
{
public static void main(String[] args)
{
Client c=new Client();
c.receiveMessage();
}
public void receiveMessage(){
Socket s=null;
BufferedRea
线程同步和异步
百合不是茶
线程同步 异步
多线程和同步 : 如进程、线程同步,可理解为进程或线程A和B一块配合,A执行到一定程度时要依靠B的某个结果,于是停下来,示意B运行;B依言执行,再将结果给A;A再继续操作。 所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回,同时其它线程也不能调用这个方法
多线程和异步:多线程可以做不同的事情,涉及到线程通知
&
JSP中文乱码分析
bijian1013
java jsp 中文乱码
在JSP的开发过程中,经常出现中文乱码的问题。
首先了解一下Java中文问题的由来:
Java的内核和class文件是基于unicode的,这使Java程序具有良好的跨平台性,但也带来了一些中文乱码问题的麻烦。原因主要有两方面,
js实现页面跳转重定向的几种方式
bijian1013
JavaScript 重定向
js实现页面跳转重定向有如下几种方式:
一.window.location.href
<script language="javascript"type="text/javascript">
window.location.href="http://www.baidu.c
【Struts2三】Struts2 Action转发类型
bit1129
struts2
在【Struts2一】 Struts Hello World http://bit1129.iteye.com/blog/2109365中配置了一个简单的Action,配置如下
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configurat
【HBase十一】Java API操作HBase
bit1129
hbase
Admin类的主要方法注释:
1. 创建表
/**
* Creates a new table. Synchronous operation.
*
* @param desc table descriptor for table
* @throws IllegalArgumentException if the table name is res
nginx gzip
ronin47
nginx gzip
Nginx GZip 压缩
Nginx GZip 模块文档详见:http://wiki.nginx.org/HttpGzipModule
常用配置片段如下:
gzip on; gzip_comp_level 2; # 压缩比例,比例越大,压缩时间越长。默认是1 gzip_types text/css text/javascript; # 哪些文件可以被压缩 gzip_disable &q
java-7.微软亚院之编程判断俩个链表是否相交 给出俩个单向链表的头指针,比如 h1 , h2 ,判断这俩个链表是否相交
bylijinnan
java
public class LinkListTest {
/**
* we deal with two main missions:
*
* A.
* 1.we create two joined-List(both have no loop)
* 2.whether list1 and list2 join
* 3.print the join
Spring源码学习-JdbcTemplate batchUpdate批量操作
bylijinnan
java spring
Spring JdbcTemplate的batch操作最后还是利用了JDBC提供的方法,Spring只是做了一下改造和封装
JDBC的batch操作:
String sql = "INSERT INTO CUSTOMER " +
"(CUST_ID, NAME, AGE) VALUES (?, ?, ?)";
[JWFD开源工作流]大规模拓扑矩阵存储结构最新进展
comsci
工作流
生成和创建类已经完成,构造一个100万个元素的矩阵模型,存储空间只有11M大,请大家参考我在博客园上面的文档"构造下一代工作流存储结构的尝试",更加相信的设计和代码将陆续推出.........
竞争对手的能力也很强.......,我相信..你们一定能够先于我们推出大规模拓扑扫描和分析系统的....
base64编码和url编码
cuityang
base64 url
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.io.UnsupportedEncodingException;
web应用集群Session保持
dalan_123
session
关于使用 memcached 或redis 存储 session ,以及使用 terracotta 服务器共享。建议使用 redis,不仅仅因为它可以将缓存的内容持久化,还因为它支持的单个对象比较大,而且数据类型丰富,不只是缓存 session,还可以做其他用途,一举几得啊。1、使用 filter 方法存储这种方法比较推荐,因为它的服务器使用范围比较多,不仅限于tomcat ,而且实现的原理比较简
Yii 框架里数据库操作详解-[增加、查询、更新、删除的方法 'AR模式']
dcj3sjt126com
数据库
public function getMinLimit () { $sql = "..."; $result = yii::app()->db->createCo
solr StatsComponent(聚合统计)
eksliang
solr聚合查询 solr stats
StatsComponent
转载请出自出处:http://eksliang.iteye.com/blog/2169134
http://eksliang.iteye.com/ 一、概述
Solr可以利用StatsComponent 实现数据库的聚合统计查询,也就是min、max、avg、count、sum的功能
二、参数
百度一道面试题
greemranqq
位运算 百度面试 寻找奇数算法 bitmap 算法
那天看朋友提了一个百度面试的题目:怎么找出{1,1,2,3,3,4,4,4,5,5,5,5} 找出出现次数为奇数的数字.
我这里复制的是原话,当然顺序是不一定的,很多拿到题目第一反应就是用map,当然可以解决,但是效率不高。
还有人觉得应该用算法xxx,我是没想到用啥算法好...!
还有觉得应该先排序...
还有觉
Spring之在开发中使用SpringJDBC
ihuning
spring
在实际开发中使用SpringJDBC有两种方式:
1. 在Dao中添加属性JdbcTemplate并用Spring注入;
JdbcTemplate类被设计成为线程安全的,所以可以在IOC 容器中声明它的单个实例,并将这个实例注入到所有的 DAO 实例中。JdbcTemplate也利用了Java 1.5 的特定(自动装箱,泛型,可变长度
JSON API 1.0 核心开发者自述 | 你所不知道的那些技术细节
justjavac
json
2013年5月,Yehuda Katz 完成了JSON API(英文,中文) 技术规范的初稿。事情就发生在 RailsConf 之后,在那次会议上他和 Steve Klabnik 就 JSON 雏形的技术细节相聊甚欢。在沟通单一 Rails 服务器库—— ActiveModel::Serializers 和单一 JavaScript 客户端库——&
网站项目建设流程概述
macroli
工作
一.概念
网站项目管理就是根据特定的规范、在预算范围内、按时完成的网站开发任务。
二.需求分析
项目立项
我们接到客户的业务咨询,经过双方不断的接洽和了解,并通过基本的可行性讨论够,初步达成制作协议,这时就需要将项目立项。较好的做法是成立一个专门的项目小组,小组成员包括:项目经理,网页设计,程序员,测试员,编辑/文档等必须人员。项目实行项目经理制。
客户的需求说明书
第一步是需
AngularJs 三目运算 表达式判断
qiaolevip
每天进步一点点 学习永无止境 众观千象 AngularJS
事件回顾:由于需要修改同一个模板,里面包含2个不同的内容,第一个里面使用的时间差和第二个里面名称不一样,其他过滤器,内容都大同小异。希望杜绝If这样比较傻的来判断if-show or not,继续追究其源码。
var b = "{{",
a = "}}";
this.startSymbol = function(a) {
Spark算子:统计RDD分区中的元素及数量
superlxw1234
spark spark算子 Spark RDD分区元素
关键字:Spark算子、Spark RDD分区、Spark RDD分区元素数量
Spark RDD是被分区的,在生成RDD时候,一般可以指定分区的数量,如果不指定分区数量,当RDD从集合创建时候,则默认为该程序所分配到的资源的CPU核数,如果是从HDFS文件创建,默认为文件的Block数。
可以利用RDD的mapPartitionsWithInd
Spring 3.2.x将于2016年12月31日停止支持
wiselyman
Spring 3
Spring 团队公布在2016年12月31日停止对Spring Framework 3.2.x(包含tomcat 6.x)的支持。在此之前spring团队将持续发布3.2.x的维护版本。
请大家及时准备及时升级到Spring
fis纯前端解决方案fis-pure
zccst
JavaScript
作者:zccst
FIS通过插件扩展可以完美的支持模块化的前端开发方案,我们通过FIS的二次封装能力,封装了一个功能完备的纯前端模块化方案pure。
1,fis-pure的安装
$ fis install -g fis-pure
$ pure -v
0.1.4
2,下载demo到本地
git clone https://github.com/hefangshi/f