等标签进行自定义样式(这样既可实现多皮肤功能)。
1.3 使用textarea
wangEditor 从v3版本开始不支持 textarea ,但是可以通过onchange 来实现 textarea 中提交富文本内容。
2、上传图片
默认情况下,编辑器不会显示“上传图片”的tab,因为你还没有配置上传图片的信息。有两种方式可以实现显示“上传图片”的tab,一是在编辑器创建之前添加editor.customConfig. uploadImgShowBase64 = true ,使用 base64 保存图片;二是在编辑器创建之前添加editor.custom Config.uploadImgServer = '/upload' ,上传图片到服务器。
默认情况下,“网络图片”tab是一直存在的。如果不需要,可以在编辑器创建之前添加editor.customConfig.showLinkImg = false ,隐藏“网络图片”tab。
2.1 上传图片到服务器
由于使用base64保存图片上传和文本提交没有多大的区别,所以我这里就不赘述。不懂而又想了解的可以点击这里进入它的官方文档。
这里我重点介绍使用自定义上传图片事件上传图片至服务器和删除服务器多余的图片。
代码示例如下:
index.jsp文件:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
富文本
$(function () {
//获得数据库中新闻数目并赋值给隐藏域
$.ajax({
url:"translate/Servlet",
type:"POST",
data:"opr=count",
dataType:"json",
success:function (da) {
$("#id").val(parseInt(da)+1);
},
error:function () {
alert("统计出错,请重新尝试或联系管理人员!");
}
});
});
var E =window.wangEditor
var editor =new E('#div1');
var $text1 =$('#text1');
// 禁用编辑功能
/* editor.$textElem.attr('contenteditable', false);*/
/* editor.customConfig.uploadImgTimeout = 3000*/
//自定义上传图片事件,将图片上传到服务器
editor.customConfig.customUploadImg =function(files,insert) {
var formData =new FormData();
for(var i =0;i < files.length;i ++) {
formData.append("files[" +i +"]", files[i],files[i].name);
}
$.ajax({
url:'wangedit/upload?id='+$("#id").val(),//这里是个servlet
type:"POST",
data:formData,
async:false,
cache:false,
contentType:false,
processData:false,
success:function(da){
console.log(da.data[j]);
if(da.errno ==0){
for(var j=0;j
insert(da.data[j]);
}
}else{
alert(da.msg);
return;
}
}
});
};
// 将图片大小限制为 3M
editor.customConfig.uploadImgMaxSize =3 *1024 *1024;
/*editor.customConfig.uploadImgTimeout = 5000000;*/
// 限制一次最多上传 5 张图片
editor.customConfig.uploadImgMaxLength =30;
// 或者 var editor = new E( document.getElementById('editor') )
editor.customConfig.onchange =function (html) {
// 监控变化,同步更新到 textarea
$text1.val(html)
}
editor.create();
//全屏初始化
E.fullscreen.init('#div1');
// 初始化 textarea 的值
$text1.val(editor.txt.html());
//单击获取HTML代码
$("#HTML").click(function(){
var content=editor.txt.html();
console.log(content);
alert(content);
})
//单击获取文本内容
$("#TEXT").click(function(){
var content=editor.txt.text();
console.log(content);
alert(content);
})
//单击获取div标签中的json数据
$("#JSON").click(function(){
var content=editor.txt.getJSON();
var jsonStr =JSON.stringify(content);
console.log(jsonStr);
alert(jsonStr);
})
//单击将文本内容和图片提交到数据库
$("#submit").click(function(){
var content=editor.txt.html();
editor.txt.clear();
$.ajax({
url:'Servlet/Dele',//这里是个servlet
type:"POST",
data: {"content":content,"id":$("#id").val(),"title":$("#title").val()},
dataType:"json",
success:function(da){
alert("成功上传");
},
error:function () {
alert("上传失败,请重新尝试或联系管理人员!");
}
});
});
wangedit.java文件(处理图片上传到服务器的路径):
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
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.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;
import java.util.UUID;
@WebServlet(name ="wangedit ",urlPatterns ="/wangedit/upload")
public class wangeditextends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {
req.setCharacterEncoding("UTF-8");
resp.setContentType("text/json;charset=UTF-8");
JSONObject json =new JSONObject();
PrintWriter out = resp.getWriter();
//获取上传文件的id
String id=req.getParameter("id");
//指定上传位置
String path = req.getSession().getServletContext().getRealPath("upload/"+id+"/");
File saveDir =new File(path);
//如果目录不存在,就创建目录
if(!saveDir.exists()){
saveDir.mkdir();
}
DiskFileItemFactory factory =new DiskFileItemFactory();
ServletFileUpload sfu =new ServletFileUpload(factory);
sfu.setHeaderEncoding("UTF-8");// 处理中文问题
sfu.setSizeMax(10 *1024 *1024);// 限制文件大小
String fileName ="";
try {
List fileItems = sfu.parseRequest(req);
JSONArray arr =new JSONArray();//注意摆放的位置
for (FileItem item : fileItems) {
//获取文件的名字
fileName = item.getName();
fileName = fileName.substring(fileName.lastIndexOf(".")+1);
fileName = UUID.randomUUID().toString() +"."+ fileName;
File saveFile =new File(path +"/" + fileName);//将文件保存到指定的路径
item.write(saveFile);
String imgUrl = req.getContextPath()+"/upload/"+id+"/"+fileName;
arr.add(imgUrl);
RouteStr.routeList.add(imgUrl);
}
json.put("errno",0);
json.put("data", arr);
out.print(json);
out.flush();
out.close();
}catch (Exception e) {
e.printStackTrace();
json.put("errno","200");
json.put("msg","服务器异常");
out.print(json.toString());
}
}
}
RouteStr.java文件(用来保存上传图片的路径):
import java.util.ArrayList;
import java.util.List;
public class RouteStr {
public static ListrouteList=new ArrayList();
}
DeleServlet.java文件(删除服务器中多余的图片,这里没有做HTML代码上传数据库的处理):
import com.test.www.pojo.News;
import com.test.www.service.NewsService;
import com.test.www.service.NewsServiceImpl;
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.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;
@WebServlet(name ="DeleServlet",urlPatterns ="/Servlet/Dele")
public class DeleServletextends HttpServlet {
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
this.doGet(request, response);
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
String routeStr = request.getParameter("content");
String id=request.getParameter("id");
String title=request.getParameter("title");
PrintWriter out=response.getWriter();
System.out.println(id);
System.out.println(title);
System.out.println(routeStr);
String[] routeArray=routeStr.split(" ");
List routeActList=new ArrayList();
for (int i=0;i
System.out.println(routeArray[i]);
if (routeArray[i].startsWith("src=\"/")) {
String temp=routeArray[i].replace("\"","").replace("src=","");
routeActList.add(temp);
}
}
boolean isDele=true;
for (int j=0;j
for (int i=0;i
if(routeActList.get(i).equals(RouteStr.routeList.get(j))){
isDele=false;
}
}
if (isDele){
String fileName = RouteStr.routeList.get(j);
fileName=fileName.substring(fileName.lastIndexOf("/")+1);
String path = request.getSession().getServletContext().getRealPath("upload/"+id+"/");
File file =new File(path +"/" + fileName);
if (file.exists()) {
file.delete();
System.out.println("删除成功");
}
}else{
isDele=true;
}
}
NewsService newsService=new NewsServiceImpl();
News news=new News();
news.setId(Integer.parseInt(id));
news.setContent(routeStr);
news.setTitle(title);
boolean isSave=newsService.add(news);
System.out.println("保存"+isSave);
if (isSave){
RouteStr.routeList.clear();
System.out.println("保存成功!");
out.print(true);
}else{
System.out.println("保存失败!");
for (int i=0;i
String fileName = RouteStr.routeList.get(i);
fileName=fileName.substring(fileName.lastIndexOf("/")+1);
String path = request.getSession().getServletContext().getRealPath("upload/"+id+"/");
File file =new File(path +"/" + fileName);
if (file.exists()) {
file.delete();
}
}
RouteStr.routeList.clear();
}
out.flush();
out.close();
}
}
show.jsp文件(展示数据库内容):
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
新闻内容展示
$(function () {
$.ajax({
url:"translate/Servlet",
type:"POST",
data:"opr=count",
dataType:"json",
success:showList,
error:function () {
alert("统计出错,请重新尝试或联系管理人员!");
}
});
function showList(da) {
for (var i=0;i
$("#select").append("第"+(i+1)+"条 ");
}
}
$("#submit").click(function(){
init();
});
function init() {
$.ajax({
url:'translate/Servlet',//这里是个servlet
type:"POST",
data: {"id":$("#select").val(),"opr":"showList"},
dataType:"json",
success:function(da){
$("#title").html(da.title);
$("#context").html(da.content);
},
error:function () {
alert("上传失败,请重新尝试或联系管理人员!");
}
});
}
});
效果展示:
编辑图片的效果:
编辑内容的显示效果
从数据库取出来的内容显示效果:
上面的方法是先利用集合存储上传服务器的图片路径,提交内容以后再通过对比删除多余的图片。其中图片的路径是新闻编号作为目录,缺点是还会有图片的冗余。因为多条新闻可能会有相同的图片。最终的解决办法是定时从数据库里取出路径,和服务端的图片路径进行比对,定时清除。
3、总结
要实现上述功能,需要导入commons-fileupload.jar、commons-io.jar、fastjson.jar、json-lib-2.4-jdk15.jar这四种jar包。
本篇内容实现了利用wangEditor3上传图片到服务端、删除服务端冗余的图片、提交文本和图片信息到数据库、展示数据库的内容等等。
如果这篇文章对你有帮助的话,也麻烦给个赞,激励一下作者,谢谢大家!!!!!
打个广告,本人博客地址是:风吟个人博客
你可能感兴趣的:(wangEditor3上传图片到服务器以及删除服务器多余的图片(包括wangEditor3内容处理以及图片上传和删除))
关于Go那些懒得看又不得不知道的东西
Hock2024
golang 开发语言 后端
写在前面当开始学习go,亦或是cpp、还是java向go进行转职,这部分内容都是比较重要的。go的编译环境,模块管理以及一些基本的语法我认为还是很有必要去学习的,因此重新学习了这个部分并且写下下面的学习笔记!如果有写错或者不全面的地方,还希望大家及时纠正和指导。连接环境首先,作为一个后端er,能使用linux系统是必备的技能,这里我建议可以使用Xshell连接云服务器的方案来完成。云服务器建议使用
C++中map和set的详解
程序员Hagei
c++ 算法 开发语言
C++中map和set的介绍与使用在C++编程中,map和set是标准模板库(STL)中两种非常重要的关联容器。它们基于平衡二叉搜索树(通常是红黑树)的数据结构来实现,提供了高效的数据存储和检索功能。本文将详细介绍map和set的特点、用法以及一些常见的操作示例。一、map的介绍与使用1.map的基本概念map是一个键值对容器,其中每个键都是唯一的,且按照升序排序。map的内部结构是红黑树,这使得
堆数据结构:从基础原理到高效算法实现的技术探讨
Everyrt
课程设计
摘要堆作为一种特殊的树形数据结构,在多种算法场景中发挥着核心作用。本文深入剖析堆的基础原理,详细阐述堆的构建、插入、删除等操作的实现细节,并探讨其在优先队列、堆排序等高效算法中的应用,助力读者全面掌握堆数据结构及其应用技术。一、引言堆数据结构以其独特的特性,能够高效地获取集合中的最大(或最小)元素。无论是操作系统中的进程调度,还是搜索算法中的最优解筛选,堆都扮演着不可或缺的角色。理解堆的原理与实现
CST Microwave Studio助力射频电路多物理场耦合分析
FindEveryone
课程设计
摘要本文重点阐述CSTMicrowaveStudio在射频电路多物理场耦合分析中的关键作用。通过解析射频电路中涉及的电磁场、热场、机械场等多物理场耦合现象,详细介绍如何运用CSTMicrowaveStudio构建多物理场联合模型,进行全面的仿真分析。结合具体案例,深入探讨多物理场耦合对射频电路性能的影响,并依据仿真结果提出有效的优化策略,为提升射频电路在复杂工作环境下的可靠性和稳定性提供理论依据与
4(四) Jmeter自动化报表html生成
夜晚打字声
工具 jmeter 自动化 运维
从JMeter3.0开始已支持自动生成动态报告,我们可以更容易根据生成的报告来完成我们的性能测试报告。如何生成html测试报告如果未生成结果文件(.jtl),可运行如下命令生成报告:jmeter-n-ttest.jmx-lresult.jtl-e-o/tmp/ResultReport参数:-n:以非GUI形式运行Jmeter-t:source.jmx脚本路径-l:运行结果保存路径(.jtl),此文
HBase的架构介绍,安装及简单操作
pk_xz123456
大数据 hbase 架构 数据库
一、HBase安装1.环境准备Java环境:确保系统中已经安装了Java8或更高版本。可以通过在命令行中输入java-version来检查Java版本。Hadoop环境:HBase依赖于Hadoop,需要先安装并配置好Hadoop集群。确保Hadoop的相关服务(如HDFS、YARN等)已经正常启动。2.下载HBase从HBase官方网站(https://hbase.apache.org/)下载适
Nginx负载均衡策略详解:从轮询到智能分发,打造高可用服务架构
egzosn
nginx 负载均衡 架构 运维
Nginx负载均衡策略详解:从轮询到智能分发,打造高可用服务架构一、负载均衡的核心价值当单台服务器无法承载高并发流量时,负载均衡通过将请求分发到多台服务器,实现:横向扩展:突破单机性能瓶颈故障隔离:自动剔除异常节点动态调度:根据策略优化资源利用率二、Nginx原生负载均衡策略1.轮询(RoundRobin)配置示例:upstreambackend{server192.168.1.10:8080;s
蓝桥大使【算法赛】----贪心算法
wyshh119
算法 学习 贪心算法
这里比较的难点在于sort排序的根据是什么,为什么是两人的报酬差,我的理解是当两人报酬差越大,那么总报酬的损失就越大,其实是缺少具体的证明的,但是通过就说明确实是这样。也就不深究证明了。#include#includeusingnamespacestd;longlongans=0;constintN=100005;structnode{//结构体inta;intb;};nodea[N];intma
C语言基础与进阶学习指南(附运行效果图及术语解析)
算法练习生
C语言 c语言 开发语言
C语言基础与进阶学习指南(附运行效果图及术语解析)目录C语言标准与编译流程CPU与内存基础C语言基础语法数据类型详解变量与内存管理运算符与表达式输入输出函数函数与内存管理指针与内存操作结构体与高级应用1.C语言标准与编译流程1.1C语言标准演进K&RC(1978):最初由DennisRitchie和BrianKernighan开发,无标准,依赖文档。ANSIC/C89(1989):首个国际标准,定
Vue相关面试题
努力的搬砖人.
vue.js
以下是150道Vue相关面试题及详细答案:Vue基础1.Vue.js是什么?Vue.js是一个用于构建用户界面的渐进式JavaScript框架,专注于视图层,允许开发者以声明式的方式构建用户界面,具有轻量、高效、易上手等特点。2.Vue实例的作用是什么?Vue实例是应用程序的核心,它管理数据、方法、生命周期钩子等,通过数据双向绑定将数据与视图层连接起来,实现数据驱动视图。3.如何创建一个Vue实例
openwrt路由器禁止某台设备上网操作失败问题解决
无级程序员
智能路由 openwrt rax3000m 智能路由
家有一台移动RAX3000M,改造成了多功能服务器,同时,还能限制小孩上网,但时间长了就发现移除可添加限制上网设备时无法操作。到处搜索也没找到它是怎么限制的,于是用mac地址在/etc目录下搜索,搜索命令:grep-r"62:19"/etc上面的“62:19”是被限制了上网的一个设备mac地址中的一部分。终于发现了是配置在/etc/config/security里面,内容如下:configfire
Linux下文件名中文乱码导致无法访问的问题解决方法
无级程序员
linux 文件名 乱码
一个基于openwrt路由器做文件服务器,硬盘里面有些文件的中文名乱码了,导致无法打开,也无法复制,想改名也无法操作,怎么办呢,网上搜了一大圈,都是说如何转换乱码,但文件都无法访问了,怎么转换?比如其中一个文件名是:“IVItripsummaryV1.0❁´◡`❁.xlsx",我试着如下命令发现能唯一的找到它:ls"IVItripsummaryV1.0"*于是,试着改名:mv"IVItripsum
【概念】Node.js,Express.js MongoDB Mongoose Express-Validator Async Handler
一袋米扛几楼98
各类概念 node.js express javascript
1.Node.js定义:Node.js是一个基于ChromeV8引擎的JavaScript运行时环境,允许你在服务器端运行JavaScript代码。作用:它使得开发者可以使用JavaScript编写服务器端代码,从而实现前后端使用同一种语言。比喻:Node.js就像是“工厂的电力系统”,它为整个工厂(应用程序)提供动力(运行环境)。没有电力系统,工厂的机器(代码)就无法运转。特点:非阻塞I/O:N
linux渲染农场大连教程,Deadline 渲染农场搭建记录
温柔彭于晏
linux渲染农场大连教程
渲染农场的工作模式:多台机器组建集群进行渲染,比如:集群中有2台渲染机器A和B,服务器会同时分配给A和B任务,A渲染第一帧,B渲染第二帧,当A完成那么服务器会继续分配第三帧,同样B服务器完成以后服务器分配第四帧,以此类推。渲染农场分服务端和节点,服务器端也可以加入集群中当做节点,当然节点也可以提交渲染任务建议:服务器端单独安装,主要插件及自定义修改内容可单独存放,当多节点接入或大批量渲染任务上传时
文本转语音常用的几个python库
天蓝海乡
python 开发语言 人工智能 nlp 语音识别
在Python编程领域,文本到语音(Text-to-Speech,TTS)的转换是一个常见的需求,尤其是在开发能够与用户交互的应用程序时。以下是几个流行的Python库,它们可以帮助开发者实现文本到语音的转换,并且有的可以将转换后的语音保存为MP3文件。gTTS(GoogleText-to-Speech)gTTS是一个依赖于Google的文本转语音API的Python库。它能够将文本转换为自然听起
网络管理 Introducing Meraki – Your Complete Network Management S
AI天才研究院
Python实战 自然语言处理 人工智能 语言模型 编程实践 开发语言 架构设计
作者:禅与计算机程序设计艺术1.简介Meraki网络管理平台是一款专为企业级网络管理员设计的网络安全解决方案。它帮助用户轻松管理和监控其组织中的所有网络设备、VLANs及其设置。Meraki网络管理平台包括许多内置功能,如集中管理,安全,可视化分析等。此外,Meraki还提供强大的RESTAPI接口,开发者可以利用这些API来定制属于自己的应用。通过将现有工具、流程和工具合成为一体的网络管理解决方
P2P下载器项目
我的sun&shine
项目
1.项目介绍该项目完成一个在局域网中进行附近文件共享下载功能的工具;能够进行搜索匹配局域网中运行工具的主机;获取到局域网在线主机列表;能够获取指定主机所共享的文件信息列表(指定的共享目录下的文件信息);能够对指定主机上的指定文件进行多进程分块下载来提高传输效率。2.项目使用的技术Socket套接字编程(了解最基本线程池版本任务处理的tcp服务端程序)HTTP协议格式(了解最基本的http服务器中数
CAD二次开发踩过的坑
我的sun&shine
CAD二次开发 c++
CAD二次开发踩过的坑CAD二次开发踩过的坑一、3D图形编译不过二、智能指针三、多文档操作规范流程四、CAD系统变量(参数)大全五、细节注意CAD图纸在软件中出现许多连接线线怎么关闭C++try无法展开无调试信息:重新生成变量已被优化掉,因而不可用两个列表中选中第一个再选第二个时第一个的选中见了预览时无法找到k3DDrawing无法缩放:静态框的通知打开intersectWith无法求交点对话框老
CAD二次开发之图纸特性字段AcDbDatabaseSummaryInfo
我的sun&shine
CAD二次开发 开发语言 c++
一、CAD接口类AcDbDatabaseSummaryInfo接口函数acdbGetSummaryInfo(pDb,pSum);addCustomSummaryInfo(key,value);acdbPutSummaryInfo(pSum);二、使用方法1.实现功能:在一张图纸中定义好字段,插入到另外一张图中,对应的字段会更新值。原图纸需要将对应位置写入字段的表达式例如%%%%%%%%新图纸在创建
CAD开发经验总结
我的sun&shine
CAD二次开发 c++
作为一个拥有三年CAD二次开发经验的C++程序员,今天将积累的经验总结整理了一下,希望对二次开发人员有帮助,一个word文档,放到下载里面了,挣点积分,文档目录截个图
算法设计与分析4(变治法)
songx_99
算法设计与分析 算法
变治法将问题转化为一个或数个有一定关联当形式上不同的更加简单或更加好解决的子问题。变治法的应用:预排序思想用预排序可以简化许多问题,如检查元素唯一性,检查出现次数最多的元素等堆算法堆的定义首先它是一个完全二叉树,完全二叉树表明树的每一层都是满的,只有最后一层最右边的元素有可能缺位。且父结点的值大于它的两个子节点,则称是一个大根堆,若值小于两个子节点,称小根堆堆化有向下调整,向上调整两种,大致思路相
Spring Boot详解
这河里吗l
SpringBoot spring boot 后端 java spring
目录1.SpringBoot介绍1.1什么是SpringBoot1.2SpringBoot特点1.3Javaweb、spring、springmvc和springboot有什么区别?1.4SpringBoot的Starter2.SpringBoot入门HelloWorld3.SpringBoot的全局配置文件3.1properties配置文件3.2yml配置文件3.3yml与properties的
逐行讲解大模型解码超参数大全(temperature、top-k、top-p等所有参数)
Gaffey大杂烩
大模型 机器学习 人工智能
目录简介宏观概览解码策略实现逻辑常见的解码超参数temperature温度系数top_ktop_prepetition_penalty重复惩罚不常见的解码超参数min_ptypical解码ϵ采样η采样Classifier-FreeGuidance(CFG)序列偏置干预HammingDiversity编码器重复惩罚n-gram重复惩罚编码器n-gram重复惩罚bad_token惩罚最小长度限制最小新
FPGA实战1-流水灯实验verilog
马志高
FPGA fpga开发
1.实验要求(1)设计一个流水灯的实验,实现12位流水灯的依次点亮,(2)流水灯的流转时间是(500ms/2Hz),(3)系统时钟位50MHz,(4)定义12个寄存器ledtemp保存12个状态,(5)寄存器的初始值位12'b0000_0000_0001,(6)当移位到12‘b1000_0000_0000时,ledtemp的值回到12'b0000_0000_0001,2.设计代码//coding/
理解 Node.js 中的 process`对象与常用操作
red润
前端 node.js 前端 javascript
理解Node.js中的process对象与常用操作在Node.js中,process是一个全局对象,提供了与当前Node.js进程相关的信息和操作。无论是获取进程信息、处理信号、访问环境变量,还是控制进程行为,process都是不可或缺的工具。看到process不犯怵了1.获取进程信息process提供了许多属性和方法来获取当前进程的信息。process.pid:获取当前进程的PID(进程ID)。
npm详解:掌握 Node.js 包管理的艺术
Lv_Jin_Gang
npm
在现代软件开发领域,包管理和依赖处理是任何项目不可或缺的一部分。对于基于Node.js的应用程序而言,NPM(NodePackageManager)不仅是安装和管理第三方库的标准工具,也是发布、共享和重用代码片段的核心平台。本文将深入探讨NPM的各个方面,从基础概念到高级用法,旨在为你提供一个全面而深入的理解。一、NPM简介与安装1.1NPM的诞生与重要性NPM伴随着Node.js的诞生而出现,它
Hive常用函数 - abs
Called_Kingsley
Hive hive 函数
Hive常用函数-abs官方解释abs(x)-returnstheabsolutevalueofx个人理解就是返回函数括号内数字的绝对值。想要获取该数的绝对值的时候就用这个函数没错使用示例selectabs(-1);>1官方示例abs(x)-returnstheabsolutevalueofxExample:>SELECTabs(0)FROMsrcLIMIT1;0>SELECTabs(-5)FRO
SNMP协议以及JAVA实战代码展示
potato_h
java
SNMP协议以及代码实现主要是为了实现:Java通过SNMP协议和交换机进行交互JAVA开发SNMP明细第一步:(1)首先安装SNMP服务。(控制面板→添加与删除工具→添加与删除组件→管理和监视工具→详细信息→选择“简单网络管理协议”→确定)。(2)启动snmp服务。(3)下载snmp4j.jar(4)新建项目,加如snmp4j.jar,编写代码编写的代码中需要的内容:(1)枚举网元类型(目前只有
Shell 脚本:自动化运维的利器
Waitccy
linux 服务器 运维
Shell脚本:自动化运维的利器一、引言在计算机的世界里,效率就是一切。当我们需要频繁执行一系列命令时,手动输入不仅繁琐,还容易出错。Shell脚本就是为解决这类问题而生的强大工具。它允许用户将一系列的命令组合在一起,形成一个可执行的脚本文件,从而实现自动化任务,提高工作效率。无论是系统管理员进行服务器维护,还是开发者进行项目部署,Shell脚本都发挥着重要的作用。本文将详细介绍Shell脚本的基
JavaScript基础-DOM事件流
難釋懷
javascript 开发语言
在Web开发过程中,理解和掌握DOM事件流是实现高效交互的关键。DOM事件流描述了当一个事件发生时,它在文档树中的传播路径。了解事件流的概念有助于我们更精确地控制事件处理逻辑,避免不必要的行为,并提升用户体验。本文将深入探讨DOM事件流的基本概念,包括事件捕获、目标阶段和事件冒泡,并通过示例展示如何应用这些知识。一、什么是DOM事件流?DOM事件流是指事件在整个页面结构中传播的过程。根据W3C标准
枚举的构造函数中抛出异常会怎样
bylijinnan
java enum 单例
首先从使用enum实现单例说起。
为什么要用enum来实现单例?
这篇文章(
http://javarevisited.blogspot.sg/2012/07/why-enum-singleton-are-better-in-java.html)阐述了三个理由:
1.enum单例简单、容易,只需几行代码:
public enum Singleton {
INSTANCE;
CMake 教程
aigo
C++
转自:http://xiang.lf.blog.163.com/blog/static/127733322201481114456136/
CMake是一个跨平台的程序构建工具,比如起自己编写Makefile方便很多。
介绍:http://baike.baidu.com/view/1126160.htm
本文件不介绍CMake的基本语法,下面是篇不错的入门教程:
http:
cvc-complex-type.2.3: Element 'beans' cannot have character
Cb123456
spring Webgis
cvc-complex-type.2.3: Element 'beans' cannot have character
Line 33 in XML document from ServletContext resource [/WEB-INF/backend-servlet.xml] is i
jquery实例:随页面滚动条滚动而自动加载内容
120153216
jquery
<script language="javascript">
$(function (){
var i = 4;$(window).bind("scroll", function (event){
//滚动条到网页头部的 高度,兼容ie,ff,chrome
var top = document.documentElement.s
将数据库中的数据转换成dbs文件
何必如此
sql dbs
旗正规则引擎通过数据库配置器(DataBuilder)来管理数据库,无论是Oracle,还是其他主流的数据都支持,操作方式是一样的。旗正规则引擎的数据库配置器是用于编辑数据库结构信息以及管理数据库表数据,并且可以执行SQL 语句,主要功能如下。
1)数据库生成表结构信息:
主要生成数据库配置文件(.conf文
在IBATIS中配置SQL语句的IN方式
357029540
ibatis
在使用IBATIS进行SQL语句配置查询时,我们一定会遇到通过IN查询的地方,在使用IN查询时我们可以有两种方式进行配置参数:String和List。具体使用方式如下:
1.String:定义一个String的参数userIds,把这个参数传入IBATIS的sql配置文件,sql语句就可以这样写:
<select id="getForms" param
Spring3 MVC 笔记(一)
7454103
spring mvc bean REST JSF
自从 MVC 这个概念提出来之后 struts1.X struts2.X jsf 。。。。。
这个view 层的技术一个接一个! 都用过!不敢说哪个绝对的强悍!
要看业务,和整体的设计!
最近公司要求开发个新系统!
Timer与Spring Quartz 定时执行程序
darkranger
spring bean 工作 quartz
有时候需要定时触发某一项任务。其实在jdk1.3,java sdk就通过java.util.Timer提供相应的功能。一个简单的例子说明如何使用,很简单: 1、第一步,我们需要建立一项任务,我们的任务需要继承java.util.TimerTask package com.test; import java.text.SimpleDateFormat; import java.util.Date;
大端小端转换,le32_to_cpu 和cpu_to_le32
aijuans
C语言相关
大端小端转换,le32_to_cpu 和cpu_to_le32 字节序
http://oss.org.cn/kernel-book/ldd3/ch11s04.html
小心不要假设字节序. PC 存储多字节值是低字节为先(小端为先, 因此是小端), 一些高级的平台以另一种方式(大端)
Nginx负载均衡配置实例详解
avords
[导读] 负载均衡是我们大流量网站要做的一个东西,下面我来给大家介绍在Nginx服务器上进行负载均衡配置方法,希望对有需要的同学有所帮助哦。负载均衡先来简单了解一下什么是负载均衡,单从字面上的意思来理解就可以解 负载均衡是我们大流量网站要做的一个东西,下面我来给大家介绍在Nginx服务器上进行负载均衡配置方法,希望对有需要的同学有所帮助哦。
负载均衡
先来简单了解一下什么是负载均衡
乱说的
houxinyou
框架 敏捷开发 软件测试
从很久以前,大家就研究框架,开发方法,软件工程,好多!反正我是搞不明白!
这两天看好多人研究敏捷模型,瀑布模型!也没太搞明白.
不过感觉和程序开发语言差不多,
瀑布就是顺序,敏捷就是循环.
瀑布就是需求、分析、设计、编码、测试一步一步走下来。而敏捷就是按摸块或者说迭代做个循环,第个循环中也一样是需求、分析、设计、编码、测试一步一步走下来。
也可以把软件开发理
欣赏的价值——一个小故事
bijian1013
有效辅导 欣赏 欣赏的价值
第一次参加家长会,幼儿园的老师说:"您的儿子有多动症,在板凳上连三分钟都坐不了,你最好带他去医院看一看。" 回家的路上,儿子问她老师都说了些什么,她鼻子一酸,差点流下泪来。因为全班30位小朋友,惟有他表现最差;惟有对他,老师表现出不屑,然而她还在告诉她的儿子:"老师表扬你了,说宝宝原来在板凳上坐不了一分钟,现在能坐三分钟。其他妈妈都非常羡慕妈妈,因为全班只有宝宝
包冲突问题的解决方法
bingyingao
eclipse maven exclusions 包冲突
包冲突是开发过程中很常见的问题:
其表现有:
1.明明在eclipse中能够索引到某个类,运行时却报出找不到类。
2.明明在eclipse中能够索引到某个类的方法,运行时却报出找不到方法。
3.类及方法都有,以正确编译成了.class文件,在本机跑的好好的,发到测试或者正式环境就
抛如下异常:
java.lang.NoClassDefFoundError: Could not in
【Spark七十五】Spark Streaming整合Flume-NG三之接入log4j
bit1129
Stream
先来一段废话:
实际工作中,业务系统的日志基本上是使用Log4j写入到日志文件中的,问题的关键之处在于业务日志的格式混乱,这给对日志文件中的日志进行统计分析带来了极大的困难,或者说,基本上无法进行分析,每个人写日志的习惯不同,导致日志行的格式五花八门,最后只能通过grep来查找特定的关键词缩小范围,但是在集群环境下,每个机器去grep一遍,分析一遍,这个效率如何可想之二,大好光阴都浪费在这上面了
sudoku solver in Haskell
bookjovi
sudoku haskell
这几天没太多的事做,想着用函数式语言来写点实用的程序,像fib和prime之类的就不想提了(就一行代码的事),写什么程序呢?在网上闲逛时发现sudoku游戏,sudoku十几年前就知道了,学生生涯时也想过用C/Java来实现个智能求解,但到最后往往没写成,主要是用C/Java写的话会很麻烦。
现在写程序,本人总是有一种思维惯性,总是想把程序写的更紧凑,更精致,代码行数最少,所以现
java apache ftpClient
bro_feng
java
最近使用apache的ftpclient插件实现ftp下载,遇见几个问题,做如下总结。
1. 上传阻塞,一连串的上传,其中一个就阻塞了,或是用storeFile上传时返回false。查了点资料,说是FTP有主动模式和被动模式。将传出模式修改为被动模式ftp.enterLocalPassiveMode();然后就好了。
看了网上相关介绍,对主动模式和被动模式区别还是比较的模糊,不太了解被动模
读《研磨设计模式》-代码笔记-工厂方法模式
bylijinnan
java 设计模式
声明: 本文只为方便我个人查阅和理解,详细的分析以及源代码请移步 原作者的博客http://chjavach.iteye.com/
package design.pattern;
/*
* 工厂方法模式:使一个类的实例化延迟到子类
* 某次,我在工作不知不觉中就用到了工厂方法模式(称为模板方法模式更恰当。2012-10-29):
* 有很多不同的产品,它
面试记录语
chenyu19891124
招聘
或许真的在一个平台上成长成什么样,都必须靠自己去努力。有了好的平台让自己展示,就该好好努力。今天是自己单独一次去面试别人,感觉有点小紧张,说话有点打结。在面试完后写面试情况表,下笔真的好难,尤其是要对面试人的情况说明真的好难。
今天面试的是自己同事的同事,现在的这个同事要离职了,介绍了我现在这位同事以前的同事来面试。今天这位求职者面试的是配置管理,期初看了简历觉得应该很适合做配置管理,但是今天面
Fire Workflow 1.0正式版终于发布了
comsci
工作 workflow Google
Fire Workflow 是国内另外一款开源工作流,作者是著名的非也同志,哈哈....
官方网站是 http://www.fireflow.org
经过大家努力,Fire Workflow 1.0正式版终于发布了
正式版主要变化:
1、增加IWorkItem.jumpToEx(...)方法,取消了当前环节和目标环节必须在同一条执行线的限制,使得自由流更加自由
2、增加IT
Python向脚本传参
daizj
python 脚本 传参
如果想对python脚本传参数,python中对应的argc, argv(c语言的命令行参数)是什么呢?
需要模块:sys
参数个数:len(sys.argv)
脚本名: sys.argv[0]
参数1: sys.argv[1]
参数2: sys.argv[
管理用户分组的命令gpasswd
dongwei_6688
passwd
NAME: gpasswd - administer the /etc/group file
SYNOPSIS:
gpasswd group
gpasswd -a user group
gpasswd -d user group
gpasswd -R group
gpasswd -r group
gpasswd [-A user,...] [-M user,...] g
郝斌老师数据结构课程笔记
dcj3sjt126com
数据结构与算法
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
yii2 cgridview加上选择框进行操作
dcj3sjt126com
GridView
页面代码
<?=Html::beginForm(['controller/bulk'],'post');?>
<?=Html::dropDownList('action','',[''=>'Mark selected as: ','c'=>'Confirmed','nc'=>'No Confirmed'],['class'=>'dropdown',])
linux mysql
fypop
linux
enquiry mysql version in centos linux
yum list installed | grep mysql
yum -y remove mysql-libs.x86_64
enquiry mysql version in yum repositoryyum list | grep mysql oryum -y list mysql*
install mysq
Scramble String
hcx2013
String
Given a string s1, we may represent it as a binary tree by partitioning it to two non-empty substrings recursively.
Below is one possible representation of s1 = "great":
跟我学Shiro目录贴
jinnianshilongnian
跟我学shiro
历经三个月左右时间,《跟我学Shiro》系列教程已经完结,暂时没有需要补充的内容,因此生成PDF版供大家下载。最近项目比较紧,没有时间解答一些疑问,暂时无法回复一些问题,很抱歉,不过可以加群(334194438/348194195)一起讨论问题。
----广告-----------------------------------------------------
nginx日志切割并使用flume-ng收集日志
liyonghui160com
nginx的日志文件没有rotate功能。如果你不处理,日志文件将变得越来越大,还好我们可以写一个nginx日志切割脚本来自动切割日志文件。第一步就是重命名日志文件,不用担心重命名后nginx找不到日志文件而丢失日志。在你未重新打开原名字的日志文件前,nginx还是会向你重命名的文件写日志,linux是靠文件描述符而不是文件名定位文件。第二步向nginx主
Oracle死锁解决方法
pda158
oracle
select p.spid,c.object_name,b.session_id,b.oracle_username,b.os_user_name from v$process p,v$session a, v$locked_object b,all_objects c where p.addr=a.paddr and a.process=b.process and c.object_id=b.
java之List排序
shiguanghui
list排序
在Java Collection Framework中定义的List实现有Vector,ArrayList和LinkedList。这些集合提供了对对象组的索引访问。他们提供了元素的添加与删除支持。然而,它们并没有内置的元素排序支持。 你能够使用java.util.Collections类中的sort()方法对List元素进行排序。你既可以给方法传递
servlet单例多线程
utopialxw
单例 多线程 servlet
转自http://www.cnblogs.com/yjhrem/articles/3160864.html
和 http://blog.chinaunix.net/uid-7374279-id-3687149.html
Servlet 单例多线程
Servlet如何处理多个请求访问?Servlet容器默认是采用单实例多线程的方式处理多个请求的:1.当web服务器启动的