JavaWeb学习笔记分享(必看篇)
JavaWeb学习笔记分享(必看篇)
自定义列表
:表示列表的范围
**在里面
:上层内容
**在里面
:下层内容
有序列表
:有序列表的范围
--属性 type:设置排序方式,1(默认),a,i、、
**在ol标签里面
具体内容
无序列表
:无序列表的范围
--属性 type:circle(空心圆)、disc(默认的实心圆)、square(实心方块)
**在ul标签里面
具体内容
图像标签
--属性:src、width、height、alt(图片上显示的文字,把鼠标移动到图片上,停留片刻显示内容 或者是图片显示出错时显示的文字,但有些浏览器不显示,没有效果)
**
路径的介绍
*分类:两类
**绝对路径 eg. http://www.baidu.com/b.jpg
***三种相对路径 一个文件相对于另外一个文件的位置
--html文件和图片在同一个路径(目录)下,可以直接写文件名称
--在html文件中,使用与其在同一个路径下的img文件夹下的a.jpg文件 使用方法:img\a.jpg
**d:\htmlstudy\code\4.html
**d:\htmlstudy\code\img\a.jpg
--图片在html文件的上层目录中,此时图片使用方法:../c.png ../表示上层路径
超链接标签
**链接资源
-- 显示在页面上的内容
**href:链接的资源的地址
**target:设置打开的方式,默认是在当前页打开
--_blank :在一个新窗口打开
--_self :在当前页打开 默认的
--链接标题 :当超链接不需要跳转到页面时,在href中添加#(占位符)就可以了
**定位资源
--如果想要定位资源:定义一个位置
顶部
--回到这个位置
回到顶部
--原样输出标签:
需要原样输入的内容
表格标签
*作用:可以对数据进行格式化,使数据显示更加清晰
*属性 border(表格线粗细) bordercolor(表格线颜色) cellspacing(单元格间距离) width height
*
: 表示表格的范围
**在table里面,表示一行
--设置对齐方式 align :left center right
***在tr里面,表示一行里边的单元格
**使用th也可以表示单元格:表示可以实现居中和加粗
*表格的标题,放在table里边
*操作技巧:
**首先数有多少行,在数每行里面有多少个单元格
*合并单元格
**rowspan :跨行(纵向合并)
13
**colspan :跨列(横向合并)
表格练习
表单标签
*例如注册开心网时,可以提交数据到开心网的服务器,这个过程可以使用表单标签实现
*
:定义一个表单范围
*属性:
** action :提交到的地址,默认提交到 当前的页面
** method : 表单的提交方式
--常用的有两种: get 和 post ,默认是get请求
** get 和 post 的区别
1)get请求地址栏会携带提交的数据,post不会携带(数据在请求体里面)
2)get请求安全级别较低,post较高
3)get请求数据大小有限制,post没有限制
** enctype :一般请求下不需要这个属性,做文件上传时候需要设置这个属性
**输入项:可以输入内容或者选择内容的部分
--大部分的输入项可使用
********在输入项里面需要有一个name属性
***普通输入项:
***密码输入项:
***单选输入项:
--在里边需要属性 name
--name的属性值必须要相同
--必须要有一个value值
****实现默认选中的属性
***checked="checked"
***复选输入项:
**在里边需要属性 name
**name的属性值必须要相同
**必须要有一个value值
****实现默认选中的属性
----checked="checked"
***文件输入项:
***下拉输入项(不是在input标签里面的)
请选择
1991
1992
1993
****实现默认选中的属性
----selected="selected"
*** 文本域(如:注册账号时填写个人信息简介的方框)
***隐藏项(不会显示在页面上,但是存在于 html代码里面)
***提交按钮
--提交之前地址:C:\Users\HappyDog\Desktop\index.html
**当在输入项里面写了name属性之后
--file:///c:/users/happydog/desktop/index.html?phone=123123&pwd=12321312&sex=man&love=y&love=pp&birth=1992&tex=1231245
**?输入项name的值=输入的值&
**参数类似于key-value形式
***使用(点击)图片来提交
***重置按钮 :回到输入项的初始状态
***普通按钮(和js在一起使用的)
案例:使用表单标签实现注册页面
表格单元格内容为空时,一般用占位符( (转义空格))来填充
html中的其他的常用标签的使用
** b(加粗) s(删除线) u(下划线) i(斜体) pre(原样输出) sub(下标) sup(上标) div(自动换行) span(在一行显示) p(段落标签)
html的头标签的使用
**html两部分组成 head 和 body
**在head里面的标签就是头标签
**title标签:表示在标签上显示的内容
** 标签 :设置页面的一些相关内容
--
-- 定时跳转到指定页面
**base标签 :设置超链接的基本的设置
--可以统一设置超链接的打开方式
**link标签 :引入外部文件
框架标签的使用
**
**rows :按照行进行划分
分成上下两部分,上边80,下边任意
**cols :按照列进行划分
分成左右两部分,左边80,右边任意
** 具体显示的页面
**
*使用框架标签的时候,不能写在head和body里面,使用了框架标签,需要把body去掉,写在head外边
*如果在左边的页面超链接,想让内容显示在右边的页面中,可以设置超链接里面的target属性,将target的值设置为框架中的名字
**百度
知识总结
1)html操作思想:使用标签把要操作的数据包起来,通过修改标签的属性值,来实现标签内数据样式的变化
2)font标签 属性:size 取值范围1-7 color:十六进制数 #ffffff
3)标题标签
...... :从h1到h6字体越来越小,自动换行
4)注释
CSS的简介
**CSS:层叠样式表
** 层叠:一层一层的
** 样式表:很多的属性和属性值
**使页面显示效果更加好
**CSS将网页内容和显示样式进行分离,提高了显示功能
CSS和html的结合方式(四种结合方式)
1)在每个html标签上面都有一个属性 style,把CSS和html结合在一起
--
天之道,损有余而补不足,是故虚胜实,不足胜有余。
2)使用html的一个标签实现
----代码实现
div{
background-color:blue;
color:red;
}
3)在style标签里面 使用语句
@import url(css文件的路径);
-- 第一步:创建一个css文件
----
@import url(div.css);
4)使用头标签 link,引入外部css文件 放在里边
-- 第一步:创建一个css文件
--
****第三种结合方式的缺点:在某些浏览器下不起作用,一般使用第四种方式
****优先级(一般)
由上到下,由内到外,优先级由低到高。
后加载的优先级高
****格式:选择器名称{属性名:属性值;属性名:属性值;......}
css的基本选择器(三种)
**要对那个标签里面的数据进行操作
1)标签选择器 div {css代码}
--使用标签名作为选择器的名称
div{
background-color:blue;
color:red;
}
aaaaaa
2)class选择器 .名称 {}
**每个html标签都有一个属性 class
**
div.test{
background-color:blue;
color:red;
}
p.test{
background-color:blue;
color:red;
}
可以简写为:
.test{
background-color:blue;
color:red;
}
**
aaaaaa
bbbbbbbbb
3)id选择器 #名称 {}
**每个html标签上面都有一个属性 id
--
cccccccccc
--
div#test{
background-color:blue;
color:red;
}
p#test{
background-color:blue;
color:red;
}
可以简写为:
#test {
background-color:blue;
color:red;
}
--
aaaaaa
bbbbbbbbb
**优先级 style > id选择器 > class选择器 > 标签选择器
css的扩展选择器(了解)
1)关联选择器 嵌套标签的样式的设置
**
**设置div标签里面p标签的样式,嵌套标签里面的样式
--
div p {
background-color:blue;
color:red;
}
--
aaaaaa
2)组合选择器 不同标签设置相同的样式
**
1111
2222
**把div和p标签设置成相同的样式,把不同的标签设置成相同的样式
--
div,p {
background-color:blue;
color:red;
}
--
1111
2222
3)伪(类)元素选择器
** css里面提供了一些定义好的样式,可以拿过来使用
**比如 超链接
**超链接的状态
--原始状态 鼠标放上去 点击 点击之后
:link :hover :active :visited
代码实现:
/*原始状态*/
a:link {
background-color:red;
}
/*悬停状态*/
a:hover {
background-color:green;
}
/*点击状态*/
a:active {
background-color:blue;
}
/*点击之后状态*/
a:visited {
background-color:gray;
}
点击链接到百度网页
css的盒子模型(了解) 对数据进行操作,需要把数据放到一个区域里面(div)
1)边框 border :统一设置
也可以分别设置:上 border-top 下:border-bottom 左:border-left 右:border-right
--
div {
width: 200px;
height: 100px;
border: 2px solid blue;
}
#div12 {
border-right: 2px dashed yellow;
}
--
AAAAAAAAA
BBBBBBBBB
2) 内边距 padding :统一设置 内容距离上下左右四条边的距离
也可以分别设置:上下左右
div {
width: 200px;
height: 100px;
border: 2px solid blue;
}
#div21 {
padding: 20px;
}
#div22 {
padding-left: 30px;
}
AAAAAAAAA
BBBBBBBBB
3) 外边距 margin :统一设置 div距离最外边四条边的距离
也可以分别设置:上下左右。。。
css的布局的漂浮(了解) float :left right
css的布局的定位 (了解)
*position
**属性值:
--static:默认值,无特殊定位
--absolute:
将对象从文档流中拖出,使用left,right,top,bottom等属性相对于其进行绝对定位
--relative:不会将对象从文档流中拖出,对象不可层叠,但将依据left,right,top,bottom等属性在正常文档流中偏移位置。
案例:图文混排案例
**图片和文字在一起显示
案例:图像签名
javascript的简介:是基于对象和事件驱动的脚本语言,主要应用在客户端
*基于对象:提供好了很多对象,可以直接拿过来使用
*事件驱动:html做网站静态效果,javascript动态效果
*客户端:专门指的是浏览器
* js的特点:
1)交互性 信息的动态交互
2)安全性 js不能访问本地磁盘的文件
3)跨平台性 java里面跨平台性,虚拟机;只要能够支持js的浏览器,都可以运行
*javascript和java的区别:两者之间没有什么任何关系
1)java是sun公司,现在是Oracle;js是网景公司
2)java是面向对象的,js是基于对象的
3)java是强类型的语言,js是弱类型的语言
--比如:java里面 int i = "10";会报错
--js: var i = 10; var i = "10";都不报错
4)js只需要解析就可以执行,而java需要先编译成字节码文件,在执行
*js的组成(三部分):
1)ECMAScript
-- ECMA :欧洲计算机协会
--由ECMA组织制定的js语法,语句...
2)BOM
--broswer object model:浏览器对象模型
3)DOM
--document object model:文档对象模型
js与html的结合方式(两种)
1)使用一个标签
2)使用script标签,引入一个外部的js文件
-- 创建一个js文件,写js代码
--
注意:使用第二种方式的时候,就不要在script标签里面写js代码了,不会执行
js的原始类型和声明变量
*java的基本数据类型:byte short int long float double char bolean
*js定义变量 都是用关键字 var
*js的原始类型(五个)
--string 字符串 var str = "abc";
--number 数字类型 var m = 123;
--boolean true和false var flag = true;
--null var date = new Date();
**获取对象的引用,null表示对象引用为空,所有对象的引用也是object
--undifined 定义一个变量,但是没有赋值 var aa;
* typeof(变量名称) 查看当前变量的数据类型
js的语句
**java里面的语句 if判断("="表示赋值;"=="等于,表示判断) switch语句 循环语句(for while do-while)
**js里面的这些语句
--if判断语句
--switch(a) {
case 5: ...
break;
case 6: ...
break;
default:...
........
}
**循环语句 for while do-while
--var i = 5;
while(i>0) {
alert(i);
i--;
}
--for(var i = 0;i<=5;i++){
alert(i);
}
js的运算符
**js里面不区分整数和小数
--var j = 123;
alert(j/1000*1000);
** j/1000*1000 在java里面得到结果是0
** 在js里面不区分整数和小数, 123/1000*1000 = 0.123*1000 = 123
**字符串的相加和相减的操作
--var str = "123";
alert(str + 1); 在java和js中的结果都是1231,做的是字符串的连接
alert(str - 1); 相减时候,执行减法的运算,如果str中不是数字,会提示NaN:表示不是一个数字
**boolean类型也可以操作
***如果设置成true,相当于这个值是1;如果设置成false,相当于这个值是0;
** == 和 === 区别
**都是做判断
** == 比较的只是值; === 比较的是值和类型
**直接向页面输出的语句(可以把内容显示在页面上),可以向页面输出变量,固定值和html代码。Document.write("") 里面是双引号,如果设置标签的属性需要使用单引号。
-- document.write("aaaa");
-- document.write("
");
***document.write("
");
练习:实现99乘法表
js的数组
*java里面的数组 定义 int[] arr = {1,2,3};
*js数组的定义方式(三种)
1)var arr = [1,2,3];var arr = [1,"2",3];var arr = [1,2,true]; 都可以
2)使用内置对象 Array对象
var arr1 = new Array(5); // 定义一个数组,数组的长度是5
arr1[0] = "1";
......
3)使用内置对象 Array对象
var arr2 = new Array(3,4,5); // 定义一个数组,数组里的元素是3,4,5
* 数组里面有一个属性 length :获取到数组的长度
* 数组的长度是可变的,数组可以存放不同的数据类型的数据。
js的函数(方法)
**在js里面定义函数(方法)有三种方式 函数的参数列表里面,不需要写var,直接写参数名称
1)使用到一个关键字 function
*** function 方法名(参数列表) {
方法体;
返回值可有可无(根据实际需要);
}
代码实现:// 使用第一种方式创建函数
function test() {
alert("qqqqqq");
}
// 调用方法
test();
// 定义一个有参数的方法 实现两个数的相加
function add1(a,b) {
var sum = a+b;
alert(sum);
}
add1(3,5);
function add2(a,b,c) {
var sum1 = a+b+c;
return sum1;
}
alert(add2(7,8,9));
2)匿名函数
var add = function(参数列表) {
方法体和返回值;
}
代码实现: var add3 = function(m,n) {
alert(m+n);
}
// 调用方法
add3(8,9);
3)一般也称为动态函数,用的少,了解即可
*使用到js里面的一个内置对象 Function
var add = new Function("参数列表","方法体和返回值");
var add4 = new Function("x,y","var sum;sum=x+y;return sum;");
alert(add4(9,10));
// 或者下边的代码
var canshu = "x,y";
var fangfati = "var sum;sum=x+y;return sum;";
var add4 = new Function(canshu,fangfati);
alert(add4(5,3));
js的全局变量和局部变量
**全局变量:在script标签里面定义一个变量,这个变量在页面中js部分都可以使用
--在方法外部使用,在方法内部使用,在另一个script标签使用
**局部变量:在方法内部定义一个变量,只能在方法内部使用
--只能在方法内部使用,如果在方法的外部调用这个变量,提示出错
--ie自带了一个调试工具,ie8以上的版本中,键盘上的F12,再页面下方出现一个条 看控制台可以看到错误
script标签应该放置的位置
**建议把script标签放到
后面
**如果现在有这样一个需求:
--在js里面需要获取到input里面的值,如果把script标签放在head里面,会出现问题
--html解析是从上到下解析的,script标签放到的是head里面,直接在里面取input的值,因为页面还没有解析到input那一行,肯定取不到
js的重载 js不存在重载,但是可以模拟实现
例子:function add11(a,b) {
return a+b;
}
function add11(a,b,c) {
return a+b+c;
}
function add11(a,b,c,d) {
return a+b+c+d;
}
alert(add11(2,2)); // NaN
alert(add11(2,2,3)); // NaN
alert(add11(2,2,4,5)); // 13
js的String对象
** 创建String对象 var str = "abc';
**方法和属性(文档)
--属性 length :字符串的长度
--方法
1)与html相关的方法
-- bold():加粗 fontcolor():设置字符串的颜色 fontsize():设置字体的大小 link():将字符串显示成超链接
2)与java相似的方法
--concat():连接字符串 charAt():返回指定位置的字符串 indexOf():返回字符串位置 split():切分字符串 成数组 replace("",""):替换字符串--传递两个参数:第一个参数是原始字符,第二个参数是要替换成的字符 substr(5,3)从第五位开始,向后截取三个字符 substring(3,5) 从第三位开始包括第三位到第五位结束,不包括第五位 [3,5)
js的Array对象
**创建数组的三种方法
1)var arr1 = [1,2,3];
2)var arr1 = new Array(3); // 长度是三
3)var arr1 = new Array(1,2,3); // 元素是1,2,3
var arr = []; //创建一个空数组
**属性 length:查看数组的长度
**方法
concat();连接数组 join();根据指定的字符分割数组 push();向数组末尾添加元素,返回数组的新的长度**如果添加的是一个数组,这个时候把数组当做一个整体字符串添加进去 pop();删除并返回数组的最后一个元素 reverse();颠倒数组中的元素的顺序
js的Date对象
** 在java里面获取当前时间
Date date = new Date();
// 格式化 //toLocaleString()
** js里面获取当前时间
var date = new Date();
// 转换成习惯的格式 date.toLocaleString();
js的Math对象 数学的运算
** 里面的都是静态方法,使用可以直接使用 Math.方法();
js的全局函数
**由于不属于任何一个对象,直接写名称使用
** eval(); 执行js代码(如果字符串是一个js代码,使用方法直接执行)
-- var str = "alert('1234');";
// alert(str); //alert('1234');
eval(str); // 1234
** .....
js的函数的重载 什么是重载?方法名相同,参数不同
*js不存在函数的重载,只会调用最后一个方法,但是可以通过其他方式模拟重载。js的函数把传递的参数保存到 arguments数组里面 可以利用判断arguments数组的长度 来对应返回不同的处理结果
模拟重载效果代码实现:
function add1() {
if(arguments.length ==2 ) {
return arguments[0] + arguments[1];
} else if ( arguments.length == 3) {
return arguments[0] + arguments[1] + arguments[2];
} else if ( arguments.length == 4) {
return arguments[0] + arguments[1] + arguments[2] + arguments[3];
} else {
return 0;
}
}
// 调用
alert(add1(1,2)); //3
alert(add1(1,2,3)); //6
alert(add1(1,2,3,4)); //10
alert(add1(1,2,3,4,5)); //0
js的bom对象
**bom :broswer object model:浏览器对象模型
**有哪些对象?
-- navigator :获取客户机的信息(浏览器的信息)
-- screen : 获取屏幕的信息
-- location :请求的url地址
*** href属性
1)获取到请求的url地址
--document.write(location.href);
2)设置url地址
--页面上安置一个按钮,按钮上绑定一个事件,当点击这个按钮,页面可以跳转到另外一个页面
function href1() {
//alert("aaaa");
location.href = "http://www.baidu.com";
}
-- history :请求的url的历史记录
-- 创建三个页面(模拟上下历史的效果)
1)创建一个页面a.html 写一个超链接 到 b.html
2)创建 b.html 超链接到 c.html
3)创建 c.html
-- 到访问的上一个页面
history.back();
history,go(-1);
-- 到访问的下一个页面
history.forward();
history.go(1);
-- window(重点掌握) 窗口对象 顶层对象(所有bom对象都是在window里面操作的)
**方法
-- window.alert(); 简写为:alert(); 页面弹出一个窗口,显示内容
-- confirm("显示的消息内容"); 确认提示框 有返回值 true和false
-- prompt(); 输入的对话框(现在使用的不多) ,有两个参数:显示内容和默认值
-- open("url地址","","窗口特征,比如窗口宽度和高度"); 打开一个新窗口
-- close(); 关闭窗口(浏览器兼容性比较差)
-- 做一些定时器
*** setInterval("js代码",毫秒数); window.setInterval("alert('123');",3000); 表示每三秒执行一次alert方法
*** setTimeout("js代码",毫秒数); 表示在毫秒数之后执行,但是只会执行一次
***clearInterval(); 清除掉setInterval设置的定时器
-- var id1 = setInterval("alert('123');",3000);
clearInterval(id1);
***clearTimeout(); 清除掉setTimeout设置的定时器
js的dom对象
**dom :document object model: 文档对象类型
**文档:超文本文档(超文本标记文档) html、xml
**对象:提供了属性和方法
**模型:使用属性和方法操作超文本标记型文档
***可以使用js里面的dom里面提供的对象,使用这些对象的属性和方法,对标记型文档进行操作
***想要对标记型文档进行操作,首先需要把标记型文档里面的所有内容封装成对象
-- 需要把html里面的标签、属性、文本内容都封装成对象
***要想对标记型文档进行操作,解析标记型文档
***解析过程:根据html的层级结构,会在内存中分配一个树形结构,需要把html中的每部分封装成对象
*只能有一个根节点
在根节点下面可以有多个子节点,没有子节点的节点称为叶子节点
-- document对象:整个html文档
-- element对象:标签对象
-- 属性对象
-- 文本对象
** Node节点对象:是这些对象的父对象
DHTML:是很多技术的简称
** html:封装数据
** css:使用属性和属性值设置样式
** dom:操作html文档(标记型文档)
** javascript:专门指的是js的语法语句(ECMAScript)
document对象 表示整个文档
**常用方法
-- write()方法:1)向页面输出变量 2)向页面输出html代码
-- getElementById(); 表示通过id得到元素(标签)
// 使用getElementById得到input标签的对象
var input1 = document.getElementById("nameid");
// 得到input里面的value值
alert(input1.value);
// 向input里面设置一个值value
input1.value = "bbbbbbb";
-- getElementsByName(); 通过标签的name的属性值得到标签,返回的是一个集合(数组)
var input1 = document.getElementsByName("name1"); // 传递的参数是标签里面的name的值
for(var i =0;i
var inputs = input1[i]; // 每次循环得到input对象,赋值到inputs里面
alert(inputs.value); // 得到每个input标签里面的value值
}
-- getElementsByTagName("标签的名称"); 返回的是一个集合(数组)
var inputs1 = document.getElementsByTagName("input"); //传递的参数是标签的名称
for(var i =0;i
var input1 = inputs1[i];
alert(input1.value);
}
****注意的地方:只有一个标签,这个标签只能使用name获取到,这个时候,使用getElementsByName返回的是一个数组,但是现在只有一个元素,这个时候不需要遍历,而是可以直接通过数组的下标获取到值
var input1 = document.getElementsByName("name1")[0];
alert(input1.value);
案例:window弹窗案例
**实现过程:1)需要创建一个页面:两个输入项和一个按钮,按钮上边有一个事件,作用是弹出一个新窗口
2)创建弹出页面:表格 每一行表格上有一个按钮和编号和姓名;按钮上有一个事件:把当前的编号和姓名,赋值到第一个页面相应的位置
**跨页面的操作 opener :可以得到创建这个窗口的窗口,也就是可以得到父窗口
案例:在末尾添加节点
1)创建li标签
2)创建文本
3)把文本加入到li下面
4)把li加入到ul下面
function add1() {
// 获取到ul标签
var ul1 = document.getElementById("ulid");
// 创建标签
var li1 = document.createElement("li");
// 创建文本
var tex1 = document.createTextNode("4444");
// 把文本加入到li下面
li1.appendChild(tex1);
// 把li加入到ul下面
ul1.appendChild(li1);
}
元素对象(element对象):要操作element,首先必须要获取到element 使用document里面相应的方法获取
**方法
****获取属性里面的值 getAttribute("属性名称");
****设置属性的值 setAttribute(name,value);
****删除属性 removeAttribute("属性名称"); 不能删除value
// 先要获取input标签
var input1 = document.getElementById("inputid");
// alert(input1.value);
alert(input1.getAttribute("value")); //获取属性里面的值
alert(input1.getAttribute("class"));
input1.setAttribute("class","haha"); // 设置属性的值
alert(input1.getAttribute("class"));
input1.removeAttribute("name");
** 想要获取标签下面的子标签
**使用属性 childNodes,但是这个属性兼容性很差
**获得标签下面子标签的唯一有效方法,使用getElementsByTagName方法
// 获取到ul标签
var ul1 = document.getElementById("ulid1");
// 获取ul下面的子标签
// var lis = ul1.childNodes;//兼容性很差
// alert(lis.length); // 有的显示的是3 有的显示的是7
var lis = ul1.getElementsByTagName("li");
alert(lis.length);
Node对象的属性
**nodeName
**nodeType
**nodeValue
**使用dom解析html时候,需要html里面的标签,属性和文本都封装成对象
**标签节点对应的值
nodeType : 1
nodeName : 大写标签名称,比如SPAN
nodeValue : null
**属性节点对应的值
nodeType : 2
nodeName : 属性名称
nodeValue : 属性的值
**文本节点对应的值
nodeType : 3
nodeName : #text
nodeValue : 文本内容
**
文本内容
// 获取标签对象
var span1 = document.getElementById("spanid");
// alert(span1.nodeType); // 1
// alert(span1.nodeName); // SAPN
// alert(span1.nodeValue); // null
// 属性
var id1 = span1.getAttributeNode("id");
// alert(id1.nodeType); // 2
// alert(id1.nodeName); //id
// alert(id1.nodeValue); // spanid
//获取文本
var text1 = span1.getfirstChild;
// alert(text1.nodeType); // 3
// alert(text1.nodeName); //#text
// alert(text1.nodeValue); // 文本内容
Node对象的属性二
**父节点 ul是li的父节点
*** parentNode :父节点
**子节点 li是ul的子节点
*** childNodes : 得到所有子节点,但是兼容性很差
*** firstChild : 获取第一个子节点
*** lastChild : 获取最后一个子节点
**同辈节点 li与li之间是同辈节点
**nextSibling : 返回一个给定节点的下一个兄弟节点
**previousSibling : 返回一个给定节点的上一个兄弟节点
/* // 得到li1
var li1 = document.getElementById("li1");
// 得到ul
var ul1 = li1.parentNode;
alert(ul1.id); */
/* // 获取ul的第一个子节点
// 得到ul
var ul1 = document.getElementById("ulid");
// 第一个子节点
var li1 = ul1.firstChild;
alert(li1.id);
var li4 = ul1.lastChild;
alert(li4.id); */
//获取li的id是li3的上一个和下一个兄弟节点
var li3 = document.getElementById("li3");
var li4 = li3.nextSibling;
var li2 = li3.previousSibling;
alert(li4.id);
alert(li2.id);
操作dom树
** appendChild方法:
*** 添加子节点到末尾
*** 特点:类似于剪切粘贴的效果
** insertBefore(newNode,oldNode);
*** 在某个节点之前插入一个新的节点 通过父节点添加
*** 两个参数 1)要插入的节点 2)在谁之前插入
*** 插入一个节点,节点不存在,创建
1)创建标签
2)创建文本
3)把文本添加到标签下面
**代码实现:(在
貂蝉 之前添加
董小宛 )
// 在
貂蝉 之前添加 董小宛
function insert1() {
// 1、获取到li13标签
var li13 = document.getElementById("li13");
// 2、创建li
var li15 = document.createElement("li");
// 3、创建文本
var text15 = document.createTextNode("董小宛");
// 4、把文本添加到li下面
li15.appendChild(text15);
// 5、获取ul
var ul21 = document.getElementById("ulid21");
// 6、把li添加到ul下面(在
貂蝉 之前添加 董小宛 )
ul21.insertBefore(li15,li13);
}
**removeChild方法:删除节点
***通过父节点删除,不能自己删除自己
**代码实现 : 删除
杨玉环
// 删除
杨玉环
function remove1() {
// 1、获取到li24标签
var li24 = document.getElementById("li24");
// 2、获取父节点ul标签
// 有两种方式 1)通过id获取 2)通过属性 parentNode获取
var ul31 = document.getElementById("ulid31");
// 3、执行删除(通过父节点删除)
ul31.removeChild(li24);
}
** replaceChild(newNode,oldNode); 替换节点
***两个参数:1)新的节点(替换成的节点) 2)旧的节点(被替换的节点)
***不能自己替换自己,通过父节点替换
** cloneNode(boolean) : 复制节点
**代码实现:把ul列表复制到另外一个div里面
// 把ul列表复制到另外一个div里面
/*
1、获取到ul
2、执行复制方法 cloneNode方法复制 参数true
3、把复制之后的内容放到div里面去
** 获取到div
** appendChild方法
*/
function clone1() {
// 1、获取ul
var ul41 = document.getElementById("ulid41");
// 2、复制ul,放到类似剪切板里面
var ulcopy = ul41.cloneNode(true);
// 3、获取到div
var divv = document.getElementById("divv");
// 4、把副本放到div里面去
divv.appendChild(ulcopy);
}
**操作dom总结:
**获取节点使用方法
getElementById() : 通过节点的id属性,查找对应节点
getElementsByName() : 通过节点的name属性,查找对应节点
getElementsByTagName() : 通过节点名称,查找对应节点
**插入节点的方法
insertBefore方法 : 在某个节点之前插入
appendChild方法 : 在末尾添加,类似于剪贴粘贴
**删除节点的方法
removeChild方法 : 通过父节点删除
**替换节点的方法
replaceChild方法 : 通过父节点替换
innerHTML属性(重点)
** 这个属性不是dom的组成部分,但是大多数浏览器都支持的属性
** 第一个作用:获取文本内容
var span1 = document.getElementById("sid");
alert(span1.innerHTML);
** 第二个作用:向标签里面设置内容(可以是html代码)
测试文本
// 获取span标签
var span1 = document.getElementById("sid");
//alert(span1.innerHTML); // 测试文本
// 向div里面设置内容
AAAAA
// 获取div
var div11 = document.getElementById("div11");
div11.innerHTML = "
AAAAA "; // 设置内容
** 练习:向div里面添加一个表格
var tab = "
";
div11.innerHTML = tab;
案例:动态显示时间
** 得到当前时间
var date = new Date();
var d1 = date.toLocaleString();
** 需要让页面每一秒获取时间
setInterval方法 定时器
** 显示到页面上
每一秒向div里面写一次时间 使用innerHTML属性
** 代码实现 动态显示时间
function getD1() {
// 当前时间
var date = new Date();
// 格式化
var d1 = date.toLocaleString();
// 获取div
var div1 = document.getElementById("times");
div1.innerHTML = d1;
}
// 使用定时器实现每一秒写一次时间
setInterval("getD1();",1000);
案例:全选练习
** 使用复选框上面一个属性判断是否选中
** checked 属性
** checked = true; 选中
** checked = false; 未选中
** 创建一个页面
** 复选框 和 按钮
***四个复选框表示爱好
***还有一个复选框操作全选和全不选 有一个事件
***三个按钮 全选 全不选 反选 每个按键都分别有事件
**代码实现
全选/全不选
篮球
排球
羽毛球
乒乓球
// 实现全选操作
function selAll() {
/*
1、获取要操作的复选框 使用getElementsByName();
2、返回的是数组
**属性 checked 判断复选框是否选中
** checked = true; // 表示选中
** checked = false; // 表示未选中
**遍历数组,得到的是每一个checkbox
** 把每一个checkbox属性设置为true 即checked = true;
*/
// 获取要操作的复选框
var loves = document.getElementsByName("love");
// 遍历数组,得到每一个复选框
for(var i=0;i
var love1 = loves[i]; // 得到每一个复选框
love1.checked = true; // 设置属性为true
}
}
// 实现全不选操作
function selNo() {
/*
1、获取到要操作的复选框
2、返回的是数组,遍历数组
3、得到每一个复选框
4、设置复选框的属性 checked = false;
*/
// 获取要操作的复选框
var loves = document.getElementsByName("love");
// 遍历数组,得到每一个复选框
for(var i=0;i
var love1 = loves[i]; // 得到每一个复选框
love1.checked = false; // 设置属性为true
}
}
function selOther() { // 实现反选
var loves = document.getElementsByName("love");
// 遍历数组,得到每一个复选框
for(var i=0;i
var love1 = loves[i]; // 得到每一个复选框
if(love1.checked == true) {
love1.checked = false;
}
else {
love1.checked = true;
}
}
}
function selAllNo() { // 一个多选框实现全选 全不选切换
/*
1、得到上边的复选框 通过id来获取
2、判断该复选框是否选中 if条件 checked == true
3、如果是选中,下面是全选
4、如果不是选中,下面是全不选
*/
var box1 = document.getElementById("boxid");
if(box1.checked == true) {
selAll();
}
else {
selNo();
}
}
案例:下拉列表左右选择
** 下拉选择框
111
111
** 创建一个页面
** 两个下拉框 设置属性multiple
** 四个按钮, 都有事件
** 代码实现:
1111111
22222222
33333333
444444444
// 实现选中添加到右边
function selToRight() {
/*
1、获取 select1 里面的 option
* 使用getElementsByTagName(); 返回的是数组
* 遍历数组,得到每一个 option
2、判断option是否被选中
* 属性 selected ,判断是否被选中
** selected = true; 选中
** selected = false;未选中
3、如果选中,把选择的添加到右边去
4、得到 select2
5、添加选择的部分
* appendChild 方法
*/
// 获取到 select1 里面的option
// 得到 select1
var select1 = document.getElementById("select1");
// 得到 select2
var select2 = document.getElementById("select2");
// 得到 option
var options1 = select1.getElementsByTagName("option");
// 遍历数组
for(var i=0;i
// 第一次循环 i=0 length:5
// 第二次循环 i=1 length:4
// 第三次循环 i=2 length:3
// 再往后就不满足条件了 后边的都循环不到了
var option1 = options1[i]; // 得到每一个option对象
// 判断是否被选中
if(option1.selected == true) {
// 添加到 select2 里面
select2.appendChild(option1);
i--; // 注意这一点,不写 会出问题
}
}
}
// 全部添加到右边
function allToRight() {
var select2 = document.getElementById("select2");
var select1 = document.getElementById("select1");
var options1 = select1.getElementsByTagName("option");
for(var i=0;i
var option1 = options1[i];
select2.appendChild(option1);
i--;
}
}
// 右边的添加到左边的操作类似
案例:下拉框联动效果(省市联动)
** 创建一个页面,有两个下拉选择框
** 在第一个下拉框里面有一个事件:改变事件 onchange事件
** 方法 add1(this.value); 表示当前改变的 option 里面的value值
** 创建一个二维数组,存储数据
** 每个数组中第一个元素是国家名称,后面的元素是国家里面的城市
**代码实现:
--请选择--
中国
美国
德国
日本
// 创建一个数组存储数据
// 使用二维数组
var arr = new Array(4);
arr[0] = ["中国","南京","抚州","临洮","日喀则","哈密"];
arr[1] = ["美国","华盛顿","底特律","休斯顿","纽约"];
arr[2] = ["德国","慕尼黑","柏林","法兰克福","狼堡"];
arr[3] = ["日本","东京","北海道","大阪","广岛","长崎"];
function add1(val) {
/* 实现步骤:
1、遍历二维数组
2、得到的也是一个数组(国家对应关系)
3、拿到数组中的第一个值和传递过来开的值作比较
4、如果相同,获取到第一个值后面的元素
5、得到 city 的 select
6、添加过去 使用 appendChild 方法
** 需要创建option (三步操作)
*/
// 由于每次都要向city里面添加option,第二次添加,前边第一次的会保留,追加
// 所以每次添加之前,判断一下city里面是否有option,如果有,删除
// 获取 city 的 select
var city1 = document.getElementById("cityid");
// 得到 city 里面的 option
var options1 = city1.getElementsByTagName("option");
// 遍历数组
for(var k=0;k
// 得到每一个 option
var op = options1[k];
// 删除这个 option 通过父节点删除
city1.removeChild(op);
k--;// 每次删除 长度都会减一 k都会增加一 不执行此操作 会出错
}
// 遍历二维数组
for(var i=0;i
// 得到二维数组里面的每一个数组
var arr1 = arr[i];
// 得到遍历之后的数组的第一个值
var firstvalue = arr1[0];
// 判断传递过来的值和第一个值是否相同
if(firstvalue == val) { // 相同
// 得到第一个值后面的元素
// 遍历数组 arr1
for(var j=1;j
var value1 = arr1[j]; // 得到国家之后 城市的名称
// alert(value1);
// 创建 option
var option1 = document.createElement("option");
// 创建文本
var text1 = document.createTextNode(value1);
// 把文本添加到option里面
option1.appendChild(text1);
// 添加值到 city 的 select 里面
city1.appendChild(option1);
}
}
}
}
以上这篇JavaWeb学习笔记分享(必看篇)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。
你可能感兴趣的:(JavaWeb学习笔记分享(必看篇))
python 读excel每行替换_Python脚本操作Excel实现批量替换功能
weixin_39646695
python 读excel每行替换
Python脚本操作Excel实现批量替换功能大家好,给大家分享下如何使用Python脚本操作Excel实现批量替换。使用的工具Openpyxl,一个处理excel的python库,处理excel,其实针对的就是WorkBook,Sheet,Cell这三个最根本的元素~明确需求原始excel如下我们的目标是把下面excel工作表的sheet1表页A列的内容“替换我吧”批量替换为B列的“我用来替换的
男士护肤品哪个牌子好?十大男士护肤品排行榜
高省APP珊珊
很多男生意识到护肤的必要性,开始着手护肤,但不知道该选哪个男士护肤品品牌使用好。目前市面上很多男士护肤品品牌,可谓琳琅满目,让人眼花缭乱。男士挑选护肤品时,根据自己皮肤需求去正规渠道挑选合适的知名护肤品比较放心靠谱。高省APP,是2021年推出的平台,0投资,0风险、高省APP佣金更高,模式更好,终端用户不流失。【高省】是一个自用省钱佣金高,分享推广赚钱多的平台,百度有几百万篇报道,也期待你的加入
程翔授《评价一篇记叙文》
行吟斯基
桂林十一中高一2中学生自读程老师学生文章板书课题师巡看。看完举手。问:它是记叙文。不商量。独立打分。学生评价打分。师:高低都正常,不受干扰。师巡,略评。打完举手。调查:分层次举手——高分先举手。最低分。最高95分。最低45分。女:差距太大!师:同一篇,相差55分。若是你的文章,愿落谁手?男:身临其境感觉。师:你有此经历?没也没关系。女:不优美……,结尾无升华……无感悟……师:辞藻不美?(师追问)男
日更006 终极训练营day3
懒cici
人生创业课(2)今天的主题:学习方法一:遇到有用的书,反复读,然后结合自身实际,列践行清单,不要再写读书笔记思考这本书与我有什么关系,我在哪些地方能用到,之后我该怎么用方法二:读完书没映像怎么办?训练你的大脑,方法:每读完一遍书,立马合上书,做一场分享,几分钟都行对自己的学习要求太低,要逼自己方法三:学习深度不够怎么办?找到细分领域的榜样,把他们的文章、书籍、产品都体验一遍,成为他们的超级用户,向
自律打卡第四天:比昨天进步一点点
花儿的念想
今天新闻我们县城又确诊了一例,截止目前已经确诊的三例了,打开,看了一篇简友写的武汉的真实情况,有病住不了院,还没等到床位已经去世的消息,心里更加的难受,武汉尚且这样,如果是我们这没有高速没有火车的十八线的小县城发生这种情况,那情况将是更加的不堪设想,不敢想,唯有祈求灾难早点快去,平安才是最大的福气。突然觉得我的自律打卡,比昨天进步一点点。更希望疫情战争每一天都要比昨天好一点,希望一觉醒来听到的是好
25-1-2019
树藤与海岛呢
hello八月来报道了今天看到了一篇文章就只想记下那两句话:良田千顷不过一日三餐广夏万间只睡卧榻三尺大概的意思就是要珍惜当下不要等来不及的时候才珍惜分享今天的两餐最近没有时间运动呢下个月补回好了说完了哈哈goodnight图片发自App图片发自App
2023-11-02
一帆f
发现浸润心田的感觉:今天一个机缘之下突然想分享我的婆媳关系,我一边分享一边回忆我之前和儿媳妇关系的微妙变化,特别是分享到我能感受到儿媳妇的各种美好,现在也能心平气和的和老公平等对话,看到自己看到老公,以己推人以人推己自然而然的换位思考,心中有一种美好的能量在涌动,一种浸润心田的感觉从心胸向全身扩散,美好极了……我很想记住这种感觉,赶紧把它写下来以留纪念,也就是当我看见他人的美好,美好的美妙的浸润心
别再讲道理啦,对方听不进去的
方所
我之前写过一篇叫做《你总妄想改变他人》,然后就有朋友跟我说,有一些方法可以改变他人之类的。嗯,是这样,但是任何具体的问题,都要限定好语境,描述清楚前提条件,然后再表达观点,我的这位朋友的说法就犯了一刀切的错误,这样并不能让讨论正常展开(这篇我得先给她看看,不然可能会挨揍)。好了,hhhh,谁让她不能写文章呢,我就来再说一说吧。我前面说过,我们在学到一个道理、学会一种方法之后,总是迫不及待地想要去与
Spring进阶 - SpringMVC实现原理之DispatcherServlet处理请求的过程
倾听铃的声
后端 spring java mvc 开发语言 分布式
前文我们有了IOC的源码基础以及SpringMVC的基础,我们便可以进一步深入理解SpringMVC主要实现原理,包含DispatcherServlet的初始化过程和DispatcherServlet处理请求的过程的源码解析。本文是第二篇:DispatcherServlet处理请求的过程的源码解析。@pdaiSpring进阶-SpringMVC实现原理之DispatcherServlet处理请求的
中原焦点团队吴瑕瑜焦点解决初级第18期坚持分享第695天 2021年12月6号
卿安
中原焦点团队吴瑕瑜焦点解决初级第18期坚持分享第695天2021年12月6号相信相信的力量。很多时候我们忽视了相信的力量,当看到孩子遇到困难、挫折,或者可能犯错时,我们急于去帮忙,这至少部分暗含不相信孩子有能力自己解决,“等不及”,少了对孩子有权决定是否需要帮忙的尊重,缺乏界限,容易引起冲突,并影响孩子的独立能力。对孩子的成长,很多时候,家长的相信比具体帮助更重要。
Flowable 高级扩展:自定义元素与性能优化实战
练习时长两年半的程序员小胡
Flowable 流程引擎实战指南 流程图 flowable BPMN 流程引擎 java
在前五篇文章中,我们从基础概念、流程设计、API实战、SpringBoot集成,到外部系统协同,逐步构建了Flowable的应用体系。但企业级复杂场景中,原生功能往往难以满足定制化需求——比如需要特殊的审批规则网关、与决策引擎联动实现动态路由,或是在高并发场景下优化流程引擎性能。本文将聚焦Flowable的高级扩展能力,详解如何自定义流程元素、集成规则引擎,并掌握大型系统中的性能调优策略。一、自定
车载刷写架构 --- 整车刷写中为何增加了ECU 队列刷写策略?
汽车电子实验室
电子电器架构——刷写方案 车载电子电气架构 架构 开发语言 车载诊断进阶篇 汽车中央控制单元HPC软件架构 关于网关转发性能引起的思考
我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师:周末洗了一个澡,换了一身衣服,出了门却不知道去哪儿,不知道去找谁,漫无目的走着,大概这就是成年人最深的孤独吧!旧人不知我近况,新人不知我过往,近况不该旧人知,过往不与新人讲。纵你阅人何其多,再无一人恰似我。时间不知不觉中,来到新的一年。2025开始新的忙碌。成年人的我也不知道去哪里渡
车载诊断架构 ---面向售后的DTC应该怎么样填写?
汽车电子实验室
车载电子电气架构 漫谈UDS诊断协议系列 EV(电动汽车)常规知识必备 架构 面向售后的DTC 车载诊断架构 OEM怎么掌握软件开发能力 车载通信网络槪述 android ZEVonUDS-J1979
我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师:简单,单纯,喜欢独处,独来独往,不易合同频过着接地气的生活,除了生存温饱问题之外,没有什么过多的欲望,表面看起来很高冷,内心热情,如果你身边有这样灵性的人,一定要好好珍惜他们眼中有神有光,干净,给人感觉很舒服,有超强的感知能力有形的无形的感知力很强,能感知人的内心变化喜欢独处,好静,
车载诊断架构 --- 关于诊断时间参数P4的浅析
汽车电子实验室
车载电子电气架构 漫谈UDS诊断协议系列 架构 开发语言 关于网关转发性能引起的思考 汽车中央控制单元HPC软件架构 车载诊断进阶篇
关于诊断时间参数P4的浅析我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师:所谓鸡汤,要么蛊惑你认命,要么怂恿你拼命,但都是回避问题的根源,以现象替代逻辑,以情绪代替思考,把消极接受现实的懦弱,伪装成乐观面对不幸的豁达,往不幸上面喷“香水”来掩盖问题。无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事.而不是让内心的烦
车载刷写架构 --- 刷写思考扩展
汽车电子实验室
电子电器架构——刷写方案 架构 开发语言 关于网关转发性能引起的思考 汽车中央控制单元HPC软件架构 车载诊断进阶篇
我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师:做到欲望极简,了解自己的真实欲望,不受外在潮流的影响,不盲从,不跟风。把自己的精力全部用在自己。一是去掉多余,凡事找规律,基础是诚信;二是系统思考、大胆设计、小心求证;三是“一张纸制度”,也就是无论多么复杂的工作内容,要在一张纸上描述清楚;四是要坚决反对虎头蛇尾,反对繁文缛节,反对老
免费排版助手:智能修正段落 + 删除干扰符,杂乱文本一键变规范
各位文字工作者们!你们有没有被排版折磨到崩溃的时候?我跟你们说,我之前排版一篇文章,那简直就像在走迷宫,头晕眼花的!不过后来我发现了一款软件——排版助手!软件下载地址安装包这玩意儿是个文章智能排版工具,专门给新闻编辑、文摘网站这些文字工作者用的。它功能老多了,能修正段落,把那些乱七八糟的段落变得规规矩矩;还能删除干扰符,就像给文章做了个大扫除,把没用的东西都清理掉;简繁转换也不在话下,不管是简体还
平静得接受自己的笨拙 20190118 晨间日记
吴伯符
图片发自App最近做了一个关于微习惯的分享,这里有八个字:微量开始,超额完成。这里的言下之意其实是要你在一开始的时候,平静地接受自己的笨拙。接受自己的笨拙,理解自己的笨拙,放慢速度尝试,观察哪里可以改进,再反复练习,观察自己哪里可以再进一步改进,再反复…这是学习一切技能的必须的过程。这里的两个关键点是:1.尽快的开始这个过程,这就能够用到微习惯的微量开始。2.尽快的度过这个过程,这就需要用到超额完
小白买保险科普篇-意外险
手牵手走
意外险顾名思义,就是️对因意外导致的损失进行经济补偿的保险产品。我们看保险产品一定要看包含的责任。意外险通常包含:意外身故理赔金,额度10万-几百万不等。意外残疾理赔金,额度10万-几百万不等。意外医疗理赔金,额度通常在1-5万之间。这里的意外到底包含哪些意外事件,不能一概而论。综合意外险,我们重点看免责条款里的除外责任。比如:酒驾、违法不属于赔偿范围。这类产品小朋友和老人家往往有专属产品。年轻人
人物系列首篇|总会有人陪你走一段路
诗小蛮5786400
主题纲要:1.总会有人陪你走一段路2.不打扰也是一种幸福3.留在身边的,哪怕瞎逼逼一番也是珍贵一、总会有人陪你走一段路在综艺《向往的生活》,任嘉伦曾问过这样一个问题:“你们有没有过那样一种朋友:你们小时候关系很好,但因为你事业越来越好;他觉得你们之间的距离越来越远,然后他就自己疏远你的那种。”何炅说:我们要接受这是常态,我们每个人都有在乎的、喜欢的人,但我从来没有奢望,要把谁留在身边一辈子,因为这
基于redis的Zset实现作者的轻量级排名
周童學
Java redis 数据库 缓存
基于redis的Zset实现轻量级作者排名系统在今天的技术架构中,Redis是一种广泛使用的内存数据存储系统,尤其在需要高效检索和排序的场景中表现优异。在本篇博客中,我们将深入探讨如何使用Redis的有序集合(ZSet)构建一个高效的笔记排行榜系统,并提供相关代码示例和详细的解析。1.功能背景与需求假设我们有一个笔记分享平台,用户可以发布各种笔记,系统需要根据用户发布的笔记数量来生成一个实时更新的
【 焦点咨询的“无为”】邹庆会,持续分享第690天,2020年1月23日
邹庆会
焦点课堂上,刘老师强调,焦点咨询师要“无为”,当时我就很困惑:我们“无为”,我们什么都不做,那来访者找我们做什么呢?那我们又怎么样来引领来访者呢?又怎么样让来访者在咨询当中有更多的收获呢?带着这个困惑,我逐渐在咨询中,包括在陪伴儿子的过程中,试着慢慢地放下期待、忘掉技术,寻找“无为”的感觉,寻找“无为”的痕迹,以及“无为”之后的一些效果的呈现。也慢慢的悟出一些自己的感受和体会。就像《道德经》中所说
Java并发核心:线程池使用技巧与最佳实践! | 多线程篇(五)
bug菌¹
Java实战(进阶版) java Java零基础入门 Java并发 线程池 多线程篇
本文收录于「Java进阶实战」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!环境说明:Windows10+IntelliJIDEA2021.3.2+Jdk1.8本文目录前言摘要正文何为线程池?为什么需要线程池?线程池的好处线程池使用场景如何创建线程池?线程池的常见配置源码解析案例分享案例代码演示案例运行
我最喜欢的公众号
素颜创始人小云
一年多前,也是因为工作的原因。认识了她,她是我七个人物法其一,她在我心里也是很敬佩的一个女孩子。她会讲一些护肤知识,哪些产品好用哪些不好用而他讲解的产品都是我跃跃欲试的。图片发自App她做的每一篇文章都很精美,可以吸引到我从头看到尾,看每一个字都会很珍惜很期待,做事也特别的认真仔细。去年出了一本《活得漂亮》我也看了她的创业故事,很厉害!她的认真及敬业精神我觉得是很难学得来的,现在怀孕3个月了,依然
云集怎么赚钱?云集APP分享购物赚钱攻略
古楼
云集app怎么赚钱?云集app作为是一个全面的电商导购平台,提供诸如淘宝、京东、拼多多等各大平台的优惠券,其他同类型的导购平台相比,更加的全面,线上线下全面出击。如果你想通过云集赚钱,那你可以把这款APP推荐给淘宝(10亿用户)、拼多多(3亿用户)、京东(1亿用户)使用,那你能赚到他们购物返佣,也可以自己购物领优惠券能省不少钱,以后还有更多的商家与粉象合作,这么免费的App人人都需要,很好推广。至
心力践行营十二期一阶学习打卡
LX_王彤彤
姓名:王彤彤时间:2021年4月24日一:朗读师父的十大人生哲学二:师父的早安分享感悟很喜欢这句话:所有的行动都是基于目标的尝试,没有所谓的失败,只是不同尝试后得到的不同结果,让我们更好地调整下一次的行动。三:感恩日记1.我太幸福了,我很感恩姑姑,因为姑姑放假又投喂了我,还给我带了饺子回家,这让我感觉很幸福。谢谢,谢谢,谢谢。2.我太幸福了,我很感恩师父晚上的直播,因为听他的分享我知道怎么更好的去
提升在直返APP中的等级:解锁更多特权与收益的秘诀
古楼
在直返APP的世界里,每个用户都渴望提升自己的等级,以解锁更多特权与收益。那么,如何提升在直返APP中的等级呢?接下来,我们将为您揭示这一秘密。【高省】APP(高佣金领导者)是一个自用省钱佣金高,分享推广赚钱多的平台,百度有几百万篇报道,运行三年,稳定可靠。高省APP,是2021年推出的平台,0投资,0风险、高省APP佣金更高,模式更好,终端用户不流失。高省是公认的返利最高的软件。古楼导师高省邀请
2018-08-29精进打卡
米兰王
姓名:王兰英【日精进打卡第25天】【知~学习】《六项精进》1遍共39遍《大学》1遍共50遍【经典名句分享】一切都是最好的安排。【行~实践】一、修身:(对自己个人)1,散步1小时。2,每天坚持读书。二、齐家:(对家庭和家人)1,指导孩子开车。2,和家人一起逛超市。三、建功:(对工作)用心做好每件事。{积善}:发愿从2018年8月5日起1年内365个善事。今日1善,累计27善。【省~觉悟】正人先正己。
父母拼尽一切孩子却不领情?一定要学会这一招
四叶草_add9
中原焦点团队李金梅坚持分享第601天2021.5.28中国的父母是世界上最累的父母,从孩子出生,他们就开始了操劳的父母生涯:孩子年幼时,照顾他的吃喝拉撒;孩子上学后,忙完工作回到家还要辅导孩子的功课,辅导不了要报辅导班;孩子长大成人了,父母仍然要操心孩子的工作和婚姻;孩子结婚的房子,父母帮着买;孩子生了孩子,父母帮着带……父母的大半生都把孩子排在自己前面,一切为了孩子,最后却往往落不着好:孩子要么
中原焦点团队 坚持原创分享第 1172天
金JJ
信阳案例督导:在学生出现危机时,学校启动心理应急程序,一位心理老师安抚个案的同时,其他心理老师给班级同学进行团体心理辅导,学校方面马上通知家长前来学校。学校危机干预应急流程的成熟,能有效降低个案的自杀风险。个案不愿谈及家庭及自己自杀行为等问题时,用沙盘、玩具等分散注意力,谈论他感兴趣的话题,老师温和的态度,关切的言语,个案的情绪逐渐平复。从个案自己说的,流露的非言语,家长、老师、同学、以往的记录,
求解——妊娠纹霜哪个牌子好?皮肤专家推荐的热门秘诀!
zhangxing0100
妊娠纹会严重影响女性的美观,那孕期的女性朋友该如何避免减少妊娠纹的出现呢?下面美腹丽人小编为大家分享了预防妊娠纹的方法,赶紧一起来学习吧!一、预防妊娠纹的饮食习惯1、多食用对皮肤内胶原纤维有利的食品来增强皮肤的弹性。2、控制糖分摄入,少吃色素含量高的食物。3、早晚两杯脱脂牛奶,多食用维丰富的蔬菜、水果和富含维生素及矿物质的食物,增加细胞膜的通透性和皮肤的新陈代谢功能。4、正确的喝水习惯可以提速皮肤
JAVA基础
灵静志远
位运算 加载 Date 字符串池 覆盖
一、类的初始化顺序
1 (静态变量,静态代码块)-->(变量,初始化块)--> 构造器
同一括号里的,根据它们在程序中的顺序来决定。上面所述是同一类中。如果是继承的情况,那就在父类到子类交替初始化。
二、String
1 String a = "abc";
JAVA虚拟机首先在字符串池中查找是否已经存在了值为"abc"的对象,根
keepalived实现redis主从高可用
bylijinnan
redis
方案说明
两台机器(称为A和B),以统一的VIP对外提供服务
1.正常情况下,A和B都启动,B会把A的数据同步过来(B is slave of A)
2.当A挂了后,VIP漂移到B;B的keepalived 通知redis 执行:slaveof no one,由B提供服务
3.当A起来后,VIP不切换,仍在B上面;而A的keepalived 通知redis 执行slaveof B,开始
java文件操作大全
0624chenhong
java
最近在博客园看到一篇比较全面的文件操作文章,转过来留着。
http://www.cnblogs.com/zhuocheng/archive/2011/12/12/2285290.html
转自http://blog.sina.com.cn/s/blog_4a9f789a0100ik3p.html
一.获得控制台用户输入的信息
&nbs
android学习任务
不懂事的小屁孩
工作
任务
完成情况 搞清楚带箭头的pupupwindows和不带的使用 已完成 熟练使用pupupwindows和alertdialog,并搞清楚两者的区别 已完成 熟练使用android的线程handler,并敲示例代码 进行中 了解游戏2048的流程,并完成其代码工作 进行中-差几个actionbar 研究一下android的动画效果,写一个实例 已完成 复习fragem
zoom.js
换个号韩国红果果
oom
它的基于bootstrap 的
https://raw.github.com/twbs/bootstrap/master/js/transition.js transition.js模块引用顺序
<link rel="stylesheet" href="style/zoom.css">
<script src=&q
详解Oracle云操作系统Solaris 11.2
蓝儿唯美
Solaris
当Oracle发布Solaris 11时,它将自己的操作系统称为第一个面向云的操作系统。Oracle在发布Solaris 11.2时继续它以云为中心的基调。但是,这些说法没有告诉我们为什么Solaris是配得上云的。幸好,我们不需要等太久。Solaris11.2有4个重要的技术可以在一个有效的云实现中发挥重要作用:OpenStack、内核域、统一存档(UA)和弹性虚拟交换(EVS)。
spring学习——springmvc(一)
a-john
springMVC
Spring MVC基于模型-视图-控制器(Model-View-Controller,MVC)实现,能够帮助我们构建像Spring框架那样灵活和松耦合的Web应用程序。
1,跟踪Spring MVC的请求
请求的第一站是Spring的DispatcherServlet。与大多数基于Java的Web框架一样,Spring MVC所有的请求都会通过一个前端控制器Servlet。前
hdu4342 History repeat itself-------多校联合五
aijuans
数论
水题就不多说什么了。
#include<iostream>#include<cstdlib>#include<stdio.h>#define ll __int64using namespace std;int main(){ int t; ll n; scanf("%d",&t); while(t--)
EJB和javabean的区别
asia007
bean ejb
EJB不是一般的JavaBean,EJB是企业级JavaBean,EJB一共分为3种,实体Bean,消息Bean,会话Bean,书写EJB是需要遵循一定的规范的,具体规范你可以参考相关的资料.另外,要运行EJB,你需要相应的EJB容器,比如Weblogic,Jboss等,而JavaBean不需要,只需要安装Tomcat就可以了
1.EJB用于服务端应用开发, 而JavaBeans
Struts的action和Result总结
百合不是茶
struts Action配置 Result配置
一:Action的配置详解:
下面是一个Struts中一个空的Struts.xml的配置文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
&quo
如何带好自已的团队
bijian1013
项目管理 团队管理 团队
在网上看到博客"
怎么才能让团队成员好好干活"的评论,觉得写的比较好。 原文如下: 我做团队管理有几年了吧,我和你分享一下我认为带好团队的几点:
1.诚信
对团队内成员,无论是技术研究、交流、问题探讨,要尽可能的保持一种诚信的态度,用心去做好,你的团队会感觉得到。 2.努力提
Java代码混淆工具
sunjing
ProGuard
Open Source Obfuscators
ProGuard
http://java-source.net/open-source/obfuscators/proguardProGuard is a free Java class file shrinker and obfuscator. It can detect and remove unused classes, fields, m
【Redis三】基于Redis sentinel的自动failover主从复制
bit1129
redis
在第二篇中使用2.8.17搭建了主从复制,但是它存在Master单点问题,为了解决这个问题,Redis从2.6开始引入sentinel,用于监控和管理Redis的主从复制环境,进行自动failover,即Master挂了后,sentinel自动从从服务器选出一个Master使主从复制集群仍然可以工作,如果Master醒来再次加入集群,只能以从服务器的形式工作。
什么是Sentine
使用代理实现Hibernate Dao层自动事务
白糖_
DAO spring AOP 框架 Hibernate
都说spring利用AOP实现自动事务处理机制非常好,但在只有hibernate这个框架情况下,我们开启session、管理事务就往往很麻烦。
public void save(Object obj){
Session session = this.getSession();
Transaction tran = session.beginTransaction();
try
maven3实战读书笔记
braveCS
maven3
Maven简介
是什么?
Is a software project management and comprehension tool.项目管理工具
是基于POM概念(工程对象模型)
[设计重复、编码重复、文档重复、构建重复,maven最大化消除了构建的重复]
[与XP:简单、交流与反馈;测试驱动开发、十分钟构建、持续集成、富有信息的工作区]
功能:
编程之美-子数组的最大乘积
bylijinnan
编程之美
public class MaxProduct {
/**
* 编程之美 子数组的最大乘积
* 题目: 给定一个长度为N的整数数组,只允许使用乘法,不能用除法,计算任意N-1个数的组合中乘积中最大的一组,并写出算法的时间复杂度。
* 以下程序对应书上两种方法,求得“乘积中最大的一组”的乘积——都是有溢出的可能的。
* 但按题目的意思,是要求得这个子数组,而不
读书笔记-2
chengxuyuancsdn
读书笔记
1、反射
2、oracle年-月-日 时-分-秒
3、oracle创建有参、无参函数
4、oracle行转列
5、Struts2拦截器
6、Filter过滤器(web.xml)
1、反射
(1)检查类的结构
在java.lang.reflect包里有3个类Field,Method,Constructor分别用于描述类的域、方法和构造器。
2、oracle年月日时分秒
s
[求学与房地产]慎重选择IT培训学校
comsci
it
关于培训学校的教学和教师的问题,我们就不讨论了,我主要关心的是这个问题
培训学校的教学楼和宿舍的环境和稳定性问题
我们大家都知道,房子是一个比较昂贵的东西,特别是那种能够当教室的房子...
&nb
RMAN配置中通道(CHANNEL)相关参数 PARALLELISM 、FILESPERSET的关系
daizj
oracle rman filesperset PARALLELISM
RMAN配置中通道(CHANNEL)相关参数 PARALLELISM 、FILESPERSET的关系 转
PARALLELISM ---
我们还可以通过parallelism参数来指定同时"自动"创建多少个通道:
RMAN > configure device type disk parallelism 3 ;
表示启动三个通道,可以加快备份恢复的速度。
简单排序:冒泡排序
dieslrae
冒泡排序
public void bubbleSort(int[] array){
for(int i=1;i<array.length;i++){
for(int k=0;k<array.length-i;k++){
if(array[k] > array[k+1]){
初二上学期难记单词三
dcj3sjt126com
sciet
concert 音乐会
tonight 今晚
famous 有名的;著名的
song 歌曲
thousand 千
accident 事故;灾难
careless 粗心的,大意的
break 折断;断裂;破碎
heart 心(脏)
happen 偶尔发生,碰巧
tourist 旅游者;观光者
science (自然)科学
marry 结婚
subject 题目;
I.安装Memcahce 1. 安装依赖包libevent Memcache需要安装libevent,所以安装前可能需要执行 Shell代码 收藏代码
dcj3sjt126com
redis
wget http://download.redis.io/redis-stable.tar.gz
tar xvzf redis-stable.tar.gz
cd redis-stable
make
前面3步应该没有问题,主要的问题是执行make的时候,出现了异常。
异常一:
make[2]: cc: Command not found
异常原因:没有安装g
并发容器
shuizhaosi888
并发容器
通过并发容器来改善同步容器的性能,同步容器将所有对容器状态的访问都串行化,来实现线程安全,这种方式严重降低并发性,当多个线程访问时,吞吐量严重降低。
并发容器ConcurrentHashMap
替代同步基于散列的Map,通过Lock控制。
&nb
Spring Security(12)——Remember-Me功能
234390216
Spring Security Remember Me 记住我
Remember-Me功能
目录
1.1 概述
1.2 基于简单加密token的方法
1.3 基于持久化token的方法
1.4 Remember-Me相关接口和实现
位运算
焦志广
位运算
一、位运算符C语言提供了六种位运算符:
& 按位与
| 按位或
^ 按位异或
~ 取反
<< 左移
>> 右移
1. 按位与运算 按位与运算符"&"是双目运算符。其功能是参与运算的两数各对应的二进位相与。只有对应的两个二进位均为1时,结果位才为1 ,否则为0。参与运算的数以补码方式出现。
例如:9&am
nodejs 数据库连接 mongodb mysql
liguangsong
mongodb mysql node 数据库连接
1.mysql 连接
package.json中dependencies加入
"mysql":"~2.7.0"
执行 npm install
在config 下创建文件 database.js
java动态编译
olive6615
java HotSpot jvm 动态编译
在HotSpot虚拟机中,有两个技术是至关重要的,即动态编译(Dynamic compilation)和Profiling。
HotSpot是如何动态编译Javad的bytecode呢?Java bytecode是以解释方式被load到虚拟机的。HotSpot里有一个运行监视器,即Profile Monitor,专门监视
Storm0.9.5的集群部署配置优化
roadrunners
优化 storm.yaml
nimbus结点配置(storm.yaml)信息:
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional inf
101个MySQL 的调节和优化的提示
tomcat_oracle
mysql
1. 拥有足够的物理内存来把整个InnoDB文件加载到内存中——在内存中访问文件时的速度要比在硬盘中访问时快的多。 2. 不惜一切代价避免使用Swap交换分区 – 交换时是从硬盘读取的,它的速度很慢。 3. 使用电池供电的RAM(注:RAM即随机存储器)。 4. 使用高级的RAID(注:Redundant Arrays of Inexpensive Disks,即磁盘阵列
zoj 3829 Known Notation(贪心)
阿尔萨斯
ZOJ
题目链接:zoj 3829 Known Notation
题目大意:给定一个不完整的后缀表达式,要求有2种不同操作,用尽量少的操作使得表达式完整。
解题思路:贪心,数字的个数要要保证比∗的个数多1,不够的话优先补在开头是最优的。然后遍历一遍字符串,碰到数字+1,碰到∗-1,保证数字的个数大于等1,如果不够减的话,可以和最后面的一个数字交换位置(用栈维护十分方便),因为添加和交换代价都是1