JavaWeb知识点总结

》一:

创建Web项目
项目说明:
1、java Resources:java源文件
2、WebContent:网页内容
html、css、js、jsp、资源、配置文件等


HTML:Hyper Text Markup Language超文本标记语言
作用:
标记描述网页内容
语法规则:
1、不区分大小写
2、固定标签
3、标签成对出现,单标签
4、标签可以嵌套使用
5、属性的值必须使用双引号


HTML中属性,一般不建议使用
属性名称固定,属性的值都需要使用双引号

网页中颜色:
1、rgb(r,g,b)
2、#xxxx
3、英文单词
网页中单位:
1、数字或数字px
2、数字%:占用屏幕的比例
网页中注释

路径:
1、相对路径
不带盘符的路径,相对,一般都是相对当前项目
2、绝对路径
带盘符的路径,又叫物理路径


一、文档标签:
1、 该标签告知浏览器文档所使用的 HTML 规范
2、标签告知浏览器这是一个 HTML 文档。
html 元素是 HTML 文档中最外层的元素。
html 元素也可称为根元素
3、不会出现在网页正文中
4、出现在可以标记编码格式、刷新、作者、描述、搜索关键字等
5、网页正在内容
常用标签都是出现在中


二、文字标签
1、出现在<head>中,网页标题<br>2、<h1>-<h6>标题,从1-到6逐渐变小<br>3、<font> 规定文本的字体、字体尺寸、字体颜色</p> <p>三、列表标签<br>1、<ul>无序标签,前面没有序号,属性:type:可以更改列表签名的符号<br>2、<li>列表中元素标签<br>3、<ol>有序标签,前面有序号,属性:start:起始的值,type:类型,数字、字母等</p> <p>四、块标签<br>1、<span>行内块标签<br>2、<p>段落,默认换行<br>3、<div>块,将网友分割成若干部分,常用属性:align:对齐方式,left\right\center</p> <p>五、表格标签<br>1、<table>表格,一般有行和列组成<br>常用属性:<br>1、width:宽度<br>2、border:边框的宽度<br>3、bgcolor:背景色<br>4、cellspacing:表格之间的间距--外边距<br>5、cellpadding:表格内容的间距--内边矩<br>2、<tr>:行,内部只能出现<th>或<td><br>常用属性:<br>1、align:对齐方式,内部元素的对齐<br>3、<th>列的标题,出现在tr中,表头单元格<br>4、<td>列,数据单元格<br>常用属性:<br>1、colspan:跨列,切记要包含自己<br>2、rowspan:跨行<br>th和td的区别?<br>th就是内部文字:加粗、居中<br>td内部文字正常。居左</p> <p>5、<caption>表格的标题<br>6、<thead>表格的头部,一般内部存放<th><br>7、<tbody>表格的内容,一般存储数据<br>8、<tfoot>表格的底部</p> <p>六、表单标签<br>1、<form>:表单标签,可以搜集用户的信息并提交给指定的服务器<br>2、<input>:用户输入标签<br>常用属性:<br>1、type:类型<br>取值:<br>text:文本框<br>password:密码框<br>checkbox:复选框,可以选择多个<br>radio:单选框,只能选择其一,但是要求拥有相同的name<br>button:按钮<br>submit:提交,结合<form>表单,将表单内的数据提交给action<br>reset:重置,结合<form>表单,清空表单的内容</p> <p>2、name:为当前的标签命名,将来获取标签数据时,会用到<br>3、class:为当前标签起个类名,主要用在CSS中<br>4、value:值,标签的值,主要用在按钮上<br>5、checked:是否选中,h4支持checked,h5支持true或false<br>3、<select>:下拉框,实现多个元素的单选或复选,需要结合<option>使用<br>常用属性:<br>multiple:是否多选<br>name:名称<br>disabled:是否可用<br>4、<textarea>文本域,可以输入多行和多列数据<br>常用属性:<br>1、rows:行数<br>2、cols:列数</p> <p>七、图像&超链接标签<br>1、<img>图片<br>常用属性:<br>1、alt:鼠标进入时的文字<br>2、src:加载的图片路径<br>3、width:设置图片的宽度<br>4、height:设置图片的高度<br>2、<a>超链接标签,可以跳转到指定的url<br>常用属性:<br>1、href:要打开的路径<br>2、name:名称</p> <p>八、框架标签<br>1、<frameset>框架集合标签,主要用来包括框架的标签<br>常用属性:<br>1、cols:内部框架按照宽进行排布<br>2、rows:内部框架按照高度进行排布<br>2、<frame>框架,引用其他网页<br>常用属性:<br>1、src:要加载的路径<br>2、scrolling:滚动条的样式,取值:yes 、no 、auto </p> <p>九、HTML的特殊字符<br>1、< <<br>2、> ><br>3、空格  <br>4、版本编号 ©</p> <p>十、H5新增标签<br>1、<video>视频,可以在网页播放视频<br>格式:<br><video src="movie.ogg" controls="controls"><br></video><br>2、<audio>音频<br>3、<canvas>画布<br>可以绘制2d或3d图<br>切记画布需要结合js使用</p> <p> </p> <p>form表单的get提交和post提交的区别<br>HTTP协议的get请求和postde 区别<br>get:得到,将传递的参数随着url进行传输<br>特点:<br>1、大小有限制<br>2、不安全,拼接url<br>3、中文乱码,url编码为ISO-8859-1(不支持中文)<br>4、效率高<br>post:传输,将传递的参数以流的形式传输<br>特点:<br>1、大小无限制<br>2、安全<br>3、乱码好解决<br>4、效率低</p> <p> </p> <p>十一、其他标签<br>1、<br/>换行<br>2、<hr/>分割线<br>3、 一个空格</p> <p> </p> <p><strong>》二 CSS</strong></p> <p>HTML:超文本标记语言<br>描述内容显示在网页中<br>语法规则:<br>不区分大小写<br>标签成对,但是单标签<br>属性值必须双引号<br>标签固定<br>标签嵌套使用</p> <p>常用标签:<br>meta<br>title<br>div<br>p<br>span<br>a:href<br>img:src<br>input<br>select<br>textarea<br>form:action&method<br>table:border</p> <p>get和post</p> <p> </p> <p>MIME类型:<br>就是标记文档的类型<br>格式:大类型/小类型<br>css:text/css<br>js:text/javascript<br>图片:image/jpg<br>所有图片:image/*</p> <p> </p> <p>1、CSS是什么?<br>层叠样式表 (Cascading Style Sheets) <br>定义如何显示HTML元素的样式<br>2、CSS的作用是什么?<br>1、提高工作效率<br>2、多样式层叠<br>3、提高了内容和样式的分离</p> <p>就是美化HTML显示的内容</p> <p>3、CSS的语法规则<br>规则:<br>选择器{属性名称:值;属性名称:值}<br>eg:<br>h1{color:red;}<br>CSS不区分大小写,但是id和class选择器区分大小写</p> <p>4、CSS的引入方式有多少?<br>1、内嵌样式<br>Html元素都有一个属性:style,直接在html元素内使用<br>eg:<br><h1 style="font-size:20px">今天好好听课</h1><br>2、内部样式<br>在html文档的<head>标签中使用<br><style type="text/css"><br>选择器{属性名称:值}<br></style><br>3、外部样式表<br>创建css文件,在网页中的<head>中通过<link>标签引用<br>eg:<br><link rel="stylesheet" type="text/css" href="theme.css" /><br>rel:文本类型,告知引用的类型<br>type:MIME类型<br>href:外部样式文件所在路径<br>4、导入式外部样式<br>@import url("外部样式文件路径")<br>不推荐使用,主要针对IE老版本</p> <p>样式作用的优先级:<br>内嵌->内部->外部<br>就近原则</p> <p>5、CSS的选择器<br>1、标签选择器<br>格式:HTML标签名称{属性名:值}<br>2、类选择器<br>要求html的标签使用class属性命名类名<br>格式:.类名{属性名:值}<br>HTML标签可以拥有同一个class<br>3、ID选择器<br>要求HTML的标签使用id属性名称,id名不可重复<br>格式:#id名称{属性名:值}<br>4、派生选择器<br>规则:选择器(标签、类、id) 内部标签名称{属性名:值}<br>就是通过标签的内部嵌套来修改指定标签的样式<br>5、属性选择器<br>规则:标签名称(可以省略)[属性名称="值"]{属性名:值}<br>就是通过标签的属性名称来修改指定标签的样式</p> <p>6、伪类选择器<br>规则:标签名称:伪类名称{属性名:值}<br>常用的伪类:<br>:active 向被激活的元素添加样式。 1 <br>:focus 向拥有键盘输入焦点的元素添加样式。 2 <br>:hover 当鼠标悬浮在元素上方时,向元素添加样式。 1 <br>:link 向未被访问的链接添加样式。 1 <br>:visited 向已被访问的链接添加样式。 1 <br>:first-child 向元素的第一个子元素添加样式。 2 <br>:lang 向带有指定 lang 属性的元素添加样式。 <br>:first-letter 向文本的第一个字母添加特殊样式。 1 <br>:first-line 向文本的首行添加特殊样式。 1 <br>:before 在元素之前添加内容。 2 <br>:after 在元素之后添加内容。 </p> <p><br>6、CSS的属性<br>1、背景属性<br>background:背景色/图<br>background-color:背景色<br>background-image:背景图<br>图片过小,标签过大默认会出现背景重复<br>background-repeat:设置重复样式<br>取值:<br>repeat 默认。背景图像将在垂直方向和水平方向重复。 <br>repeat-x 背景图像将在水平方向重复。 <br>repeat-y 背景图像将在垂直方向重复。 <br>no-repeat 背景图像将仅显示一次。<br>background-position:定位,显示的位置<br>取值:<br>left<br>right<br>top<br>bottom<br>center<br>具体数值<br>background-attachment:设置背景图是否跟着一起动<br>取值:<br>scroll 默认值。背景图像会随着页面其余部分的滚动而移动。 <br>fixed 当页面的其余部分滚动时,背景图像不会移动。 <br>2、文本属性 <br>1、text-indent:缩进<br>2、text-align:对齐方式<br>3、letter-spacing: 字母的间距<br>4、word-spacing:单词的间距<br>5、text-transform:变换,大小写转换<br>取值:<br>none <br>uppercase <br>lowercase <br>6、 text-decoration:文本装饰<br>取值:<br>none 默认。定义标准的文本。 <br>underline 定义文本下的一条线。 <br>overline 定义文本上的一条线。 <br>line-through 定义穿过文本下的一条线。 <br>blink 定义闪烁的文本。 <br>7、direction: 文本方向<br>取值:<br>ltr 默认。文本方向从左到右。 <br>rtl 文本方向从右到左。 <br>3、字体属性<br>1、font-family:字体类型<br>楷体、黑体、宋体等<br>2、font-style:设置是否倾斜<br>3、font-weight:设置字体的粗细<br>取值:<br>[100,900]<br>正常:400<br>加粗:700<br>4、font-size:字体大小<br>4、列表属性(不常用)<br>1、list-style-image 将图象设置为列表项标志。 <br>2、list-style-type 设置列表项标志的类型 </p> <p>5、表格属性<br>1、width:宽<br>2、height:高<br>3、border:边框<br>4、text-align 属性设置水平对齐方式,比如左对齐、右对齐或者居中<br>5、vertical-align 属性设置垂直对齐方式,比如顶部对齐、底部对齐或居中对齐:</p> <p>6、轮廓属性(不常用)<br>1、outline-color 设置轮廓的颜色。 <br>2、outline-style 设置轮廓的样式。 <br>取值:<br>none 默认。定义无轮廓。 <br>dotted 定义点状的轮廓。 <br>dashed 定义虚线轮廓。 <br>solid 定义实线轮廓。 <br>double 定义双线轮廓。双线的宽度等同于 outline-width 的值。 <br>groove 定义 3D 凹槽轮廓。此效果取决于 outline-color 值。 <br>ridge 定义 3D 凸槽轮廓。此效果取决于 outline-color 值。 <br>inset 定义 3D 凹边轮廓。此效果取决于 outline-color 值。 <br>outset 定义 3D 凸边轮廓。此效果取决于 outline-color 值。 </p> <p>3、outline-width 设置轮廓的宽度。 </p> <p> </p> <p>7、CSS新增属性</p> <p>CSS的注释方式:<br>在<style>标签下使用<br>/*注释内容*/<br>文字的尺寸<br>em:自动适应尺寸,方便字体的放大或缩小<br>1em=16px<br>0.75em=12px</p> <p>默认字体大小16px<br>px:像素,表达字体大小,缩放的时候有点不好用<br>为了网页的实用性,推荐字体大小单位em<br>%:百分比表达字体大小<br>italic和oblique的区别?<br>体(italic)是一种简单的字体风格,对每个字母的结构有一些小改动,来反映变化的外观。<br>与此不同,倾斜(oblique)文本则是正常竖直文本的一个倾斜版本。<br>通常情况下,italic 和 oblique 文本在 web 浏览器中看上去完全一样。</p> <p> </p> <p><strong>》三HTML+CSS综合案例</strong></p> <p> </p> <p>网页中:多个空格会起到一个空格的作用,换行也会起到一个空格的作用</p> <p>注释:<br>java中的注释:<br>1、单行注释 eg://注释<br>2、多行注释 eg:/*多行注释*/<br>3、文档注释 eg:/**文档注释*/<br>HTML中的注释:<br>1、<!--html的注释--><br>CSS中的注释:只出现在<style>或css文件中<br>1、/*CSS注释*/<br>JavaScript中的注释:只出现在<script>或js文件中<br>1、单行注释 eg://单行注释<br>2、多行注释 eg:/*多行注释*/</p> <p> </p> <p>1、JS是什么?<br>JavaScript:脚本语言,运行浏览器<br>让HTML进行交互</p> <p>JAVA和JS没任何关系</p> <p>2、JS的作用是什么?<br>1、获取和设置HTML元素<br>2、动态改变页面<br>3、校验、检测、对事件做出响应等<br>4、获取浏览器、Cookie等信息</p> <p><br>3、JS的引用方式?<br>1、在<head>引用<br><head><br><script type="text/javascript"></p> <p></script><br>2、在<body>引用<br>eg:<br><body><br><script type="text/javascript"></p> <p></script><br></body><br></head><br>3、引用外部js文件<br><script type="text/javascript" src="js文件路径"/></p> <p>js写在head和body的区别?<br>head中,获取不到HTML元素,因为此时HTML还未加载完成(函数外)<br>body中,可以获取HTML元素</p> <p><br>4、JS的数据类型<br>java的数据类型:<br>1、基本数据类型:byte short int long float double char boolean<br>2、引用数据类型:数组、枚举、类、集合、接口等</p> <p>JS的数据类型:<br>1、原始数据类型<br>Undefined 、number、boolean、string、NULL<br>原始就是声明之后直接赋值而不通过new来创建<br>var v=12;<br>var v=true;<br>var v="aaa";<br>2、引用数据类型<br>Number\Boolean\String\内置类型<br>就是通过new 创建的额类型都属于引用类型</p> <p>js中的typeof&instanceof 区别?<br> typeof:主要用来显示原始类型,如果显示引用类型无论什么类型都为Object<br> 格式:typeof 变量名称<br> eg: typeof v1</p> <p> instanceof:主要用来验证引用类型,返回值为boolean类型<br> 格式: 变量名称 instanceof 引用数据类型 返回true或flase <br> eg: v1 instanceof Boolean</p> <p>例如:<br><body><br><script type="text/javascript"></p> <p>var v1=new Number(2);</p> <p>document.write("<br/>类型:"+(typeof v1));//类型:object<br>document.write("<br/>类型:"+(v1 instanceof Boolean));//类型:false </p> <p></script><br></body></p> <p>5、JS的基本语法</p> <p>JS的语法规则:<br>1、区分大小写<br>2、变量可以声明也可以不声明<br>3、出现在<script>标签内部或js文件中<br>4、定义函数需要使用关键字function<br>5、函数可以有参数和返回值<br>6、JS内置了很多对象可以直接使用</p> <p><br>1、变量<br>格式:var 变量名称[=值]<br>js的变量可以不声明直接使用<br>var v;<br>v=12;<br>t=11;</p> <p>变量命名规则:<br>1、变量对大小写敏感(y 和 Y 是两个不同的变量) <br>2、变量必须以字母或下划线开始 <br>3、不能是关键字</p> <p><br>JS中的变量<br>全局变量:声明在函数外的变量或者是函数内不带var的变量<br>局部变量:声明在函数内的变量且带有var,作用域在函数内部</p> <p>变量如果在函数内部不使用var进行声明,那么默认为全局变量<br>如果使用var进行声明那么就属于局部变量</p> <p>2、运算符<br>java的运算符:算术、比较、赋值、逻辑、位、三目、字符串连接运算符<br>JS运算符差不多<br>需要特别注意的:<br>1、==和===的区别<br>==只比较内容(number)<br>===比较内容和类型</p> <p>例:<br>x=5;<br>运算符 描述 例子 <br> == 等于 x==8 为 false <br> === 全等(值和类型) x===5 为 true;x==="5" 为 false <br><br>1.1 逻辑运算符&&和||和!<br> 逻辑运算符<br> 逻辑运算符用于测定变量或值之间的逻辑。</p> <p> 给定 x=6 以及 y=3,下表解释了逻辑运算符:</p> <p> 运算符 描述 例子 <br> && and (x < 10 && y > 1) 为 true <br> || or (x==5 || y==5) 为 false <br> ! not !(x==y) 为 true </p> <p><br>2、js也支持三目运算符<br>X?Y:Z</p> <p>程序结构:<br>1、顺序结构<br>2、分支结构<br>3、循环结构<br>3、分支语句<br>1、if(条件)<br>2、switch</p> <p>4、循环<br>4.1for语句<br>格式:for(表达式1;表达式2;表达式3)<br> {循环体}<br>执行过程:<br>先执行表达式1再验证表达式2true则执行循环体接着执行表达式3再执行表达式2true继续false结束<br>4.2while语句<br>格式:while(表达式)<br> {<br> 循环体;<br> }<br>4.3do/while语句<br>格式:do{<br> 循环体;<br>}while(表达式);</p> <p> </p> <p><br>6、JS的消息框<br>js主要提供了三种消息框<br> 1、普通警告框<br> alert("内容");<br> 2、确认框<br> confirm("内容")<br>会返回一个boolean值,如果点击"确定"返回true,反之false<br> 3、提示框<br> prompt("提示内容","默认值");<br>会返回提示框中的输入框的内容</p> <p>7、JS函数<br>也就是java中的方法<br>提高代码的复用<br>格式:</p> <p> function 函数名称([参数名]) {</p> <p> //代码块<br> [return 返回值] //return 返回值 可有可没有<br> }<br><br>例:<br><head><br><script type="text/javascript"></p> <p> function show1(){<br> document.write("OK<br/>");<br>}<br></script><br></head></p> <p>8、JS事件<br>就是HTML的事件属性<br>事件属性的值一般都是JS函数<br>常用事件:<br>onclick 单击<br>ondblclick 双击<br>onkeydown:键盘键按下<br>onmouseout 鼠标移出 <br>onmouseover 鼠标进入<br>onblur 失去焦点<br>onfocus 获取焦点<br>onchange 内容变化<br>onselect 选择<br>onsubmit 提交-表单<br>onload 加载完</p> <p> </p> <p> </p> <p><br>9、JS常用对象</p> <p> </p> <p>10、JS之Window、History 、Location </p> <p> </p> <p>11、JS的DOM</p> <p>二级联动</p> <p> </p> <p>12、JS综合案例<br>点名、抽奖、贪吃蛇、瀑布流等</p> <p> </p> <p><strong>》四</strong></p> <p> </p> <p>注释:<br>java中的注释:<br>1、单行注释 eg://注释<br>2、多行注释 eg:/*多行注释*/<br>3、文档注释 eg:/**文档注释*/<br>HTML中的注释:<br>1、<!--html的注释--><br>CSS中的注释:只出现在<style>或css文件中<br>1、/*CSS注释*/<br>JavaScript中的注释:只出现在<script>或js文件中<br>1、单行注释 eg://单行注释<br>2、多行注释 eg:/*多行注释*/</p> <p> </p> <p>1、JS是什么?<br>JavaScript:脚本语言,运行浏览器<br>让HTML进行交互</p> <p>JAVA和JS没任何关系</p> <p>2、JS的作用是什么?<br> 2.1、获取和设置HTML元素<br> 2.2、动态改变页面<br> 2.3、校验、检测、对事件做出响应等<br> 2.4、获取浏览器、Cookie等信息</p> <p><br>3、JS的引用方式?<br> 3.1、在<body>引用<br> eg:<br> <body><br> <script type="text/javascript"><br><br> </script><br> </body><br> 3.2、在<head>引用<br> <head><br> <script type="text/javascript"><br><br> </script><br> </head><br> 3.3、引用外部js文件<br> <script type="text/javascript" src="js文件路径"/></p> <p>js写在head和body的区别?<br> head中,获取不到HTML元素,因为此时HTML还未加载完成(函数外)<br> body中,可以获取HTML元素</p> <p><br>4、JS的数据类型<br> java的数据类型:<br> 1、基本数据类型:byte short int long float double char boolean<br> 2、引用数据类型:数组、枚举、类、集合、接口等</p> <p>JS的数据类型:<br>1、原始数据类型<br> Undefined 、number、boolean、string、NULL<br> 原始就是声明之后直接赋值而不通过new来创建<br> var v=12;<br> var v=true;<br> var v="aaa";<br> 2、引用数据类型<br>Number\Boolean\String\内置类型<br>就是通过new 创建的额类型都属于引用类型</p> <p>js中的typeof&instanceof 区别?<br> typeof:主要用来显示原始类型,如果显示引用类型无论什么类型都为Object<br> 格式:typeof 变量名称<br> instanceof:主要用来验证引用类型,返回值为boolean类型<br> 格式: 变量名称 instanceof 引用数据类型 返回true或flase </p> <p>5、JS的基本语法</p> <p>JS的语法规则:<br> 1、区分大小写<br> 2、变量可以声明也可以不声明<br> 3、出现在<script>标签内部或js文件中<br> 4、定义函数需要使用关键字function<br> 5、函数可以有参数和返回值<br> 6、JS内置了很多对象可以直接使用</p> <p><br>1、变量<br> 格式:var 变量名称[=值]<br> js的变量可以不声明直接使用<br> var v;<br> v=12;<br> t=11;</p> <p>变量命名规则:<br> 1、变量对大小写敏感(y 和 Y 是两个不同的变量) <br> 2、变量必须以字母或下划线开始 <br> 3、不能是关键字</p> <p><br>JS中的变量<br> 全局变量:声明在函数外的变量或者是函数内不带var的变量<br> 局部变量:声明在函数内的变量且带有var,作用域在函数内部<br> 变量如果在函数内部不使用var进行声明,那么默认为全局变量<br> 如果使用var进行声明那么就属于局部变量</p> <p>2、运算符<br>java的运算符:算术、比较、赋值、逻辑、位、三目、字符串连接运算符<br> JS运算符差不多<br> 需要特别注意的:<br> 1、==和===的区别<br> ==只比较内容(number)<br> ===比较内容和类型<br> 2、js也支持三目运算符<br> X?Y:Z</p> <p>程序结构:<br> 1、顺序结构<br> 2、分支结构<br> 3、循环结构<br> 3、分支语句<br> 1、if(条件)<br> 2、switch</p> <p>4、循环<br> 4.1for语句<br> 格式:for(表达式1;表达式2;表达式3)<br> {循环体}<br> 执行过程:<br> 先执行表达式1再验证表达式2true则执行循环体接着执行表达式3再执行表达式2true继续false结束<br> 4.2while语句<br> 格式:while(表达式)<br> {<br> 循环体;<br> }<br> 4.3do/while语句<br> 格式:do{<br> 循环体;<br> }while(表达式);</p> <p> </p> <p><br>6、JS的消息框<br>js主要提供了三种消息框<br> 6.1、普通警告框<br> alert("内容");<br> 6.2、确认框<br> confirm("内容")<br> 会返回一个boolean值,如果点击"确定"返回true,反之false<br> 6.3、提示框<br> prompt("提示内容","默认值");<br> 会返回提示框中的输入框的内容</p> <p>7、JS函数<br>也就是java中的方法<br> 提高代码的复用<br> 格式:<br> function 函数名称([参数名]) {<br><br> //代码块<br> [return 返回值]<br> }</p> <p> </p> <p>8、JS事件<br>就是HTML的事件属性<br>事件属性的值一般都是JS函数<br>常用事件:<br> onclick 单击<br> ondblclick 双击<br> onkeydown:键盘键按下<br> onmouseout 鼠标移出 <br> onmouseover 鼠标进入<br> onblur 失去焦点<br> onfocus 获取焦点<br> onchange 内容变化<br> onselect 选择<br> onsubmit 提交-表单<br> onload 加载完</p> <p> </p> <p> </p> <p><br>9、JS常用对象<br>JS是面向对象的编程语言<br>9.1Date日期类<br>获取浏览器的时间(本地电脑的时间)<br>常用方法:<br> getDate() 从 Date 对象返回一个月中的某一天 (1 ~ 31)。 1 3 <br> getDay() 从 Date 对象返回一周中的某一天 (0 ~ 6)。 1 3 <br> getMonth() 从 Date 对象返回月份 (0 ~ 11)。 1 3 <br> getFullYear() 从 Date 对象以四位数字返回年份。 1 4 <br> getYear() 请使用 getFullYear() 方法代替。 1 3 <br> getHours() 返回 Date 对象的小时 (0 ~ 23)。 1 3 <br> getMinutes() 返回 Date 对象的分钟 (0 ~ 59)。 1 3 <br> getSeconds() 返回 Date 对象的秒数 (0 ~ 59)。 1 3 <br> getMilliseconds() 返回 Date 对象的毫秒(0 ~ 999)。 </p> <p> </p> <p>JS中的定时器:<br> 1、setTimeout:设置延迟执行的方法和延迟时间<br> 参数说明:<br> 1、要重复执行的方法<br> 2、延迟的时间,毫秒<br> 返回值:<br> 1、当前定时器的标记(为了停止)<br> 2、clearTimeout:停止重复执行的方法<br> 参数说明:<br> 1、定时器开始的标记<br>重复间隔执行方法、计时器、定时刷新等<br>9.2Number数字<br>原始类型数字对应的引用类型<br>常用方法:<br> valueOf 返回一个 Number 对象的基本数字值。 <br> toFixed 把数字转换为字符串,结果的小数点后有指定位数的数字。 <br> toString 把数字转换为字符串,使用指定的基数。 <br>9.3Math算术运算类<br>常用的算术运算<br>常用方法:<br> abs(x) 返回数的绝对值。 <br> floor(x) 对数进行下舍入。 <br> pow(x,y) 返回 x 的 y 次幂。 <br> random() 返回 0 ~ 1 之间的随机数。 1 3 <br> round(x) 把数四舍五入为最接近的整数。 <br>9.4String字符串类<br>常用的字符串的引用类型<br>常用属性:<br> length 字符串的长度 <br>常用方法:<br> charAt() 返回在指定位置的字符。 1 3 <br> charCodeAt() 返回在指定的位置的字符的 Unicode 编码。 <br> concat() 连接字符串。 <br> substr() 从起始索引号提取字符串中指定数目的字符。 1 4 <br> substring() 提取字符串中两个指定的索引号之间的字符。 <br> toLowerCase() 把字符串转换为小写。 1 3 <br> toUpperCase() 把字符串转换为大写。 <br> split() 把字符串分割为字符串数组。 <br> indexOf() 检索字符串。 <br> lastIndexOf() 从后向前搜索字符串。 <br> match() 找到一个或多个正在表达式的匹配。 1 4 <br> replace() 替换与正则表达式匹配的子串。 1 4 <br> search() 检索与正则表达式相匹配的值。 </p> <p> </p> <p>String的substr()和substring的区别?<br>在截取的起始索引都为正数或0的话,没有区别<br>如果截取的开始索引为负数,那么substr从要截取的字符串.length+负数索引处开始<br>而substring则把负数作为0处理<br>简而言之:substr负数的话倒着截取,substring从0截取</p> <p>9.5Array数组类<br>存储多个变量的引用类型,且长度可变<br>9.1数组的使用:<br> 9.1.1、创建数组对象三种方式:<br> 9.1.1.1:new Array();<br> 9.1.1.2:new Array(长度);<br> 9.1.1.3:new Array(元素);<br>9.2常用属性<br> length:获取数组的长度<br>9.3常用方法<br> concat() 连接两个或更多的数组,并返回结果。 1 4 <br> join() 把数组的所有元素放入一个字符串。元素通过指定的分隔符进行分隔。 1 4 <br> pop() 删除并返回数组的最后一个元素 1 5.5 <br> push() 向数组的末尾添加一个或更多元素,并返回新的长度。 1 5.5 <br> reverse() 颠倒数组中元素的顺序。 1 4 <br> shift() 删除并返回数组的第一个元素 1 5.5 <br> slice() 从某个已有的数组返回选定的元素 1 4 <br> sort() 对数组的元素进行排序 <br> splice() 删除元素,并向数组添加新元素。 </p> <p><br>注意:<br>1、java中的数组和JS中数组不一样<br>2、JS中数组的sort方法按照字母的升序进行排列,如果是数字进行排序需要定义排序函数(2个参数)<br>3、slice方法,<br>参数说明:<br> 第一个参数:指定索引,删除和新增的索引<br> 第二个参数:删除的元素个数 可以为0<br> 第三个参数:新增的元素内容,可以有多个</p> <p>9.6Regexp正则类<br>校验、匹配、替换等字符串的操作<br>JS中的正则语法:/正则语法/属性<br>9.6.1正则中的语法<br> 9.6.1.1:正则语法<br> 跟java中一样<br> . + * ? [] {} \d \D \w \D \b \B等<br> 9.6.1.2:正则属性<br> i 执行对大小写不敏感的匹配。 <br> g 执行全局匹配(查找所有匹配而非在找到第一个匹配后停止)。 <br> m 执行多行匹配。 <br>9.6.2正则类的常用方法<br> 1、exec:执行正则验证,返回匹配的内容,字符串索引停留在最后一次匹配的索引处<br> 2、test:执行正则验证,返回true(验证成功)或flase<br>9.6.3String类中支持正则验证的方法<br> 1、match:匹配,支持全局匹配(可以返回匹配到的所有的内容)<br> 2、search:查找,从前往后查找是否符合正则的内容(不支持全局,第一次出现的)<br> 3、replace:替换,参数说明:第一个参数:字符串或正则表达式,第二个参数:字符串、规定的符合、函数<br> 4、split:切割<br><br><br><br><br>10、JS的全局函数<br>可以在任何一个网页中直接使用<br>常用函数:<br> isNaN() 检查某个值是否是数字。 1 3 <br> Number() 把对象的值转换为数字。 1 <br> parseFloat() 解析一个字符串并返回一个浮点数。 1 3 <br> parseInt() 解析一个字符串并返回一个整数。 1 3 <br> String() 把对象的值转换为字符串。 <br> encodeURI() 把字符串编码为 URI。 <br> decodeURI() 解码某个编码的 URI。 </p> <p><br><br>10、JS的DOM<br>Document:文档<br>通过DOM可以获取并操作HTML的元素<br>10.1DOM获取HTML标签对象的方式<br> 10.1.1:通过ID<br> 返回的是一个HTML元素对象<br> document.getElementById("id值");<br> 10.1.2:通过name<br> 返回的是网页网页中所有此name值的HTML元素数组<br> document.getElementsByName("name值"); <br> 10.1.3:通过HTML标签名称<br> 返回的是网页中所有此标签的元素数组<br> document.getElementsByTagName("name值");<br>10.2DOM创建HTML元素<br> 10.2.1、通过元素的innerHTML属性添加<br> 10.2.2、通过document的createElement方法创建并通过appenChild添加到指定元素下<br> 方法说明:<br> 1、createElement:创建元素,参数说明:1、元素名称<br> 2、appenChild:添加子元素,参数说明:1、要添加的子元素的对象</p> <p>10.3DOM设置HTML属性 <br> 1、通过对象的style类设置<br> 2、通过对象的setAttribute设置<br> setAttribute方法说明<br> 参数:<br> 1、属性名称<br> 2、属性的值<br><br><br>11、JS之BOM<br>浏览器对象,操作浏览器<br>Window、History 、Location <br>11.1Window窗口<br> 1、open方法,创建或打开新的窗口<br> open(URL,name,features,replace):<br> 参数说明:<br> 1、要打开的url<br> 2、名称,标记窗口<br> 3、窗口特征属性,常用的值:width\height\left\top等<br> 4、替换,boolean类型,true:在当前窗口打开,false新建一个窗口<br>11.2History浏览器的历史记录<br> 常用属性:length:历史记录的数量<br> 常用方法:<br> back() 加载 history 列表中的前一个 URL。 <br> forward() 加载 history 列表中的下一个 URL。 <br> go() 加载 history 列表中的某个具体页面。 需要参数:要打开的历史记录的网页<br><br>11.3Location网址信息<br> 常用方法:<br> 1、assign() 加载新的文档。 <br> 2、reload() 重新加载当前文档。<br> 3、replace() 用新的文档替换当前文档。 <br>注意:<br>assign和replace的区别?<br>assign只是在当前窗口中打开新的网址,所以可以后退<br>replace将当前显示的网页的内容替换为新的内容<br>11.4Navigator获取浏览器信息<br>常用属性:<br> appName 返回浏览器的名称。 <br> appVersion 返回浏览器的平台和版本信息。 </p> <p><br>JS重点:<br>1、函数<br>2、事件<br>3、对象<br>4、DOM</p> <p> </p> <p> </p> <p><br>JS综合:<br>1、验证码<br>2、注册页面校验<br>3、浮动窗<br>4、二级联动<br>5、贪吃蛇<br>6、点名</p> <p><br>H5的面板<br>canvans绘制流程:<br>1、获取对应的<canvans>对象<br>var cvn=document.getElementById("id名称");<br>2、获取Context对象<br>var cn=cvn.getContext("2d");<br>3、设置样式<br>cn.fileStyle="颜色";<br>4、绘制<br>cn.fillRect(x,y,width,height):绘制矩形<br>参数说明:<br> 4.1x:左上角的x坐标<br> 4.2y:左上角的y坐标<br> 4.3width:宽度<br> 4.4height:高度<br>moveTo:移动<br>lineTo:绘制线<br>arc:绘制圆</p> <p>Web前端:<br>HTML:描述网页<br>特点:<br>固定标签<br>不区分大小写<br>属性的值必须双引号</p> <p>网页:<br><html><br><head></head><br><body></body><br></html></p> <p>重点记忆的标签:<br>form表单<br>div<br>a\img\textarea\hr\ol\ul\table</p> <p>H5:<br>video<br>audio<br>canvas<br>离线数据库(SQLITE)<br>CSS:样式表<br>美化网页的<br>1、引用方式:内嵌、内部、外部<br>2、格式:选择器{属性名称:值}<br>3、选择器:标签、类(.)、id(#)、派生、属性<br>4、常用的属性:背景、字体、文字、盒子(边框、外边距、内边距)、列表、浮动、定位<br>JS:浏览器脚本语言<br>动态交互HTML和CSS<br>1、基本语法<br>2、内置对象:Array\String\Math\Date\RegExp<br>3、函数:function 函数名称([参数]){ [return 返回值]}<br>4、属性事件:onclick\onchange\onsubmit\onmouseover\onmouseout<br>5、JS之DOM:getElementById/getElementsByName/getElementsByTagName/createElement<br>6、JS之BOM:Window\History\Location</p> <p> </p> <p><strong>》五MySQL</strong></p> <p>数据存储的方式:<br>1、非持久性存储<br>就是会随着程序的关闭而消失的存储<br>存储在内存中<br>数组和集合<br>2、持久性存储<br>就是存储在硬盘上<br>IO流和数据库</p> <p><br>一、数据库:存储数据的仓库<br>好处:<br>1、效率高<br>2、容差率低<br>3、稳定性<br>4、备份和恢复</p> <p>二、数据库涉及的概念:<br>数据库:DataBase,db文件,存储在磁盘上,按照一定的规则进行数据的处理,可以让用户共享<br>数据管理系统:DataBase Management System,DBMS就是操作数据库的软件</p> <p>市场主流数据流:SQL Server、Oracle、MySQL、DB2等,移动端数据库:SQLITE</p> <p>三、数据库的安装与卸载<br>MySQL的安装:<br>按照图解,无脑下一步<br>MYSQL的卸载:<br>1、打开服务,停止mysql的服务<br>2、打开控制面板->程序->mysql卸载<br>3、在C盘和安装盘下,搜索mysql,将搜索到的删除<br>4、打开注册表,搜索mysql,将找到的全部删除</p> <p>四、打开数据的方式<br>打开:<br>1、开始-所有程序-mysql<br>直接输入密码<br>2、在系统变量path上添加mysql的安装目录(C:\Program Files\MySQL\MySQL Server 5.5\bin)<br>先打开cmd<br>再输入:mysql [-h主机地址] -u 用户名 -p <br>会提示输入密码:</p> <p>五、MySQL数据库的组成<br>5.1数据库服务器<br>就是数据库安装所在的机器,可以供别人访问<br>5.2数据库<br>一般来说一个应用程序对应一个数据库<br>切记:进入数据库软件之后,要选择数据库或创建数据库<br>5.3表---对应的是类<br>一个数据库会对应多个表,表是存储数据<br>表的组成:<br>1、表名<br>同一个数据库的表名不能重复<br>2、字段:域、属性、表头、列名<br>规定该列表示的意思<br>同一表中列名不可重复<br>3、数据<br>表中记录的一条条数据</p> <p>my.ini:MySQL的配置信息<br>六、SQL<br>SQL:Structure Query Language:结构化查询语言<br>专门用在操作关系型数据库的语言<br>任何关系型数据库都支持SQL,但是每门数据库都有细微的差别</p> <p>SQL语句分类:<br>DDL(*)(Data Definition Language):数据定义语言,用来定义数据库对象:库、表、列等;<br> DML(**)(Data Manipulation Language):数据操作语言,用来定义数据库记录(数据);增删改<br> DCL(Data Control Language):数据控制语言,用来定义访问权限和安全级别;<br> DQL(*****)(Data Query Language):数据查询语言,用来查询记录(数据)。查询(select)<br> 注意:SQL语句必须以;结尾</p> <p>七、SQL语句<br>sql语句不区分大小写 <br>7.1DDL数据定义语句<br>包含的关键字:<br>7.1 CREATE:新建<br>可以新建数据库、表<br>7.1.1创建数据库格式:<br> CREATE database [ if NOT EXISTS] 名称 [CHARACTER SET 编码格式] [COLLATE 比较方式];</p> <p>创建一个编码格式为utf8的数据库<br>create database db_study01 ;//默认编码格式<br>create database db_study02 character set utf8 collate utf8_general_ci;//创建数据库编码格式utf8比较方式对应的</p> <p>7.1.2创建表的格式:<br>CREATE table [ if NOT EXISTS] 名称 (字段名称 数据类型,……) [CHARACTER SET 编码格式] [COLLATE 比较方式];</p> <p>创建一张user表<br>create table user (id int,name varchar(20),age int);</p> <p><br>7.2ALTER:修改<br>可以修改数据库的编码和表的字段<br>7.2.1修改数据库格式:ALTER database 名称 [character set 编码][cllate 比较格式];</p> <p>修改数据库mydb2的编码格式为gbk<br>alter database mydb2 character set gbk; <br>7.2.2修改数据库表的格式:<br>ALTER table 名称 [ADD|CHANGE|DROP|MODIFY] 字段名称 [新名称] [数据类型]</p> <p>为user表新增一个字段password 字符串32<br>alter table user add password varchar(32);<br>alter table user add test varchar(32);<br>为user表中的name字段重命名为username<br>alter table user change name username varchar(20);<br>删除user表中的test字段<br>alter table user drop test;<br>修改user表中username字段的长度为30<br>alter table user modify username varchar(30);</p> <p><br>修改user的表名为user1<br>rename table user to user1;</p> <p>7.3DROP删除<br>可以删除数据库或表<br>7.3.1删除数据库格式:<br> DROP database [ if EXISTS] 名称;<br>7.3.2删除数据表格式:<br> DROP table 名称;</p> <p>删除数据库mydb4<br>drop database if exists mydb4;<br>删除test3表<br>drop table if exists test3;</p> <p><br>DML语句:主要是对表中的数据进行新增、修改、删除操作<br>7.4INSERT新增语句<br>格式:INSERT INTO 表名[(字段名称)] values(值1,值2);</p> <p>为user表新增数据<br>insert into user (id,username,password) values(2,'贾金山','8888');<br>insert into user (id,username,password,flag) values(5,'战旗','838',1);<br>insert into user (id,username,password,flag) values(6,'战旗','838',1);<br>insert into user (id,username,password,flag) values(7,'战旗','838',1);<br>insert into user (id,username,password,flag) values(8,'战旗','838',1);<br>//简写形式<br>insert into user values(4,'曹怡',"123456");<br>insert into user(username,id,password) values('王星',5,"123");<br>7.5UPDATE修改语句<br>格式:UPDATE 表名 SET 字段名称=值[多个字段] [where 条件]</p> <p>修改id为2的用户名字为金星<br>update user set username='金星' where id=2;<br>修改id为3的用户的名字和密码<br>update user set username='网警',password="654321" where id=3;<br>修改user中所有的密码为123456<br>update user set password='123456';</p> <p> </p> <p>7.6DELETE删除语句<br>删除表中的数据<br>格式:DELETE FROM 表名 [where 条件];</p> <p>删除user中名称为王星的人<br>delete from user where username='王星';</p> <p>开发中的删除:<br>1、真删除<br>直接使用delete语句删除指定的数据<br>2、假删除<br>使用update 修该指定字段</p> <p>为user表新增一字段,flag标记是否有效,0有效1删除<br>alter table user add flag int;<br>update user set flag=0;<br>select * from user where flag=0;<br>update user set flag=1 where id=4;</p> <p>DQL语句:数据查询语句,关键字:select<br>7.7SELECT查询语句<br>主要用来查询数据<br>格式:SELECT *|字段名称|函数 from 表名 [where 条件] [order by 字段名称] [group by 字段名称][having 条件][limit 限制]</p> <p>7.7.1*<br>*在查询语句中表示当前表的所有字段(顺序为建表时字段顺序)<br>7.7.2where条件:<br>常用的条件符合:<br> 1、=、<、>、!=、<>、<=、>=<br> 2、and:并且,同时满足<br> 3、or:或者,满足其一<br> 4、in (值,……):对应的字段的值再()里,一般不连续的多个值<br> 5、between A and B:在A和B之间,[A,B]<br> 6、IS NULL:为空<br> 7、NOT:不<br> 8、子查询</p> <p>查询user表中所有信息<br>select * from user;<br>等价于<br>select id,username,password,flag from user;<br>查询有效的名字<br>select username from user where flag=0;<br>查询id大于1小于6的人<br>select * from user where id<6 and id>1;<br>等价<br>select * from user where id between 2 and 5;<br>查询id为4或者id为8<br>select * from user where id=4 or id=8;<br>查询id不为6的人<br>select * from user where id!=6;<br>等价<br>select * from user where id<>6;<br>查询id为2或5或6的人<br>select * from user where id=2 or id=5 or id=6;<br>等价<br>select * from user where id in (2,5,6);</p> <p>八、数据库的备份和恢复<br>8.1数据的备份<br>在cmd中,输入:mysqldump -u 用户名 -p 要备份的数据库 >路径/文件名称.sql<br>8.2数据的恢复<br>需要进入到Mysql<br>创建数据库<br>并使用数据库<br>source 要恢复的sql文件的路径;</p> <p> </p> <p> </p> <p>查看当前的所有数据库:<br>show databases;<br>查看指定数据库的创建语句<br>show create database 数据库名称;<br>查看数据库的编码格式<br>show variables like 'character%';<br>查看mySQL的支持的编码 <br>show character set;<br>查看对应编码的比较集<br> show collation;<br>查看数据库的所有表名<br>show tables;<br>查看数据库中建表语句<br>show create table 表名; </p> <p>MySQL数据类型:<br>INT 数字类型(4个字节)<br>SMALLINT 数字(2个字节)<br>BIGINT 数字(4个字节)<br>DATE 日期<br>TIME 时间<br>DATETIME 日期时间<br>VARCHAR(长度) 字符串<br>TEXT 文本<br>BLOB 二进制<br>FLOAT 浮点型<br>DOUBLE 双精度</p> <p> </p> <p><br>数据库基本操作:<br>1、创建数据库(create)<br>2、选择数据(use)<br>3、创建表(create)<br>4、操作表数据(insert\delete\update\select)</p> <p> </p> <p><strong>》六</strong></p> <p> </p> <p>where 条件:<br>=\<\>\<>\!=\>=<br>or:或者<br>and:并且<br>between A and B:在A和B之间<br>in (值):在……内部<br>is null:为null<br>not:不<br>select的标准格式:select *|字段列表|聚合函数 from 表名 [where 条件] [group by 字段] [having 字段][order by 字段 ASC|DESC][limit 起始索引,数量]]</p> <p>一、模糊查询<br>like:模糊查询的关键字<br>_:1个字符<br>%:任意个字符</p> <p>1.1以XX开头<br>格式:select *|字段 from 表名 where 字段 like 'XX%';</p> <p>查询商品表中名字以华为开头的<br>select * from goods where name like '华为%';<br>查询商品表中名字以华为开头的且后面就一个字符的商品<br>select * from goods where name like '华为_' ;</p> <p>1.2以XX结尾<br>格式:select *|字段 from 表名 where 字段 like '%XX';</p> <p>查询商品表中价格以9结尾的<br>select * from goods where price like '%9';<br>查询商品表中价格为三位数且以9结尾<br>select * from goods where price like '__9';<br>等价于<br>select * from goods where price like '%9' and price >99 and price <1000;</p> <p>1.3包含XX<br>格式:select *|字段 from 表名 where 字段 like '%XX%';</p> <p>查询商品表中名字包含o的商品<br>select * from goods where name like '%o%';</p> <p><br>创建一个商品表:<br>create table goods(id int,name varchar(50),address varchar(50),price int);<br>新增数据<br>insert into goods(id,name,address,price) values(1,'华为手机P9',"河南",3999);<br>insert into goods(id,name,address,price) values(2,'华为手机P10',"河南",2999);<br>insert into goods(id,name,address,price) values(3,'苹果7',"天津",999);<br>insert into goods(id,name,address,price) values(4,'苹果7s',"北京",30999);<br>insert into goods(id,name,address,price) values(5,'小米6',"河南",9999);<br>insert into goods(id,name,address,price) values(6,'三星note7',"河南",99);<br>insert into goods(id,name,address,price) values(7,'三星note8',"首尔",999);<br>insert into goods(id,name,address,price) values(8,'中兴G7',"山东",888);<br>insert into goods(id,name,address,price) values(9,'oppoR9',"河北",7777);</p> <p><br>二、字段控制查询</p> <p>2.1查询结果去重<br>distinct:对查询结果去重</p> <p>//查询goods表中所有数据并去除重复的<br>select DISTINCT * from goods;</p> <p>2.2对null值转换<br>ifnull(字段名称 , 待转换的值):标记某个字段为null的话转换为指定的数据参与运算<br>查询goods表中id和price的和<br>select id+price from goods;<br>null值和任何类型的数据运算结果都是null</p> <p>select id+ifnull(price,10000) from goods;</p> <p>2.3别名<br>可以为运算的结果起别名: as 别名<br>也可以为表起别名,as可以省略</p> <p>查询goods表中id和价格的和,要求价格为null则作为10000处理<br>select id+ifnull(price,10000) as total from goods;<br>等价于<br>select id+ifnull(price,10000) total from goods;</p> <p>查询goods表名价格小于100的商品<br>select * from goods where price <100;<br>等价于<br>select * from goods where goods.price <100;<br>等价于<br>select * from goods g where g.price <100;</p> <p> </p> <p>三、排序<br>order by 字段 排序方式,……<br>排序方式:ASC:升序(默认排序),DESC:降序</p> <p>查询goods表中按照价格升序排列<br>select * from goods order by price;<br>等价于<br>select * from goods order by price ASC;</p> <p>查询goods表中按照价格降序排列<br>select * from goods order by price DESC;</p> <p>查询goods表中按照价格降序排列,如果价格相同按照id进行升序排列<br>select * from goods order by price DESC, id asc;</p> <p>四、聚合函数<br>COUNT:计数,计算指定列不为null的数量<br>MAX:计算指定列的最大值<br>MIN:计算指定列的最小值<br>SUM:计算指定列的总和<br>AVG:计算指定列的平均值</p> <p> </p> <p>查询goods表中的数据的数量<br>//查询goods表中price不为null的数据行<br>select count(price) from goods;<br>//查询goods表中id不为null的数据行<br>select count(id) from goods;<br>//查询goods表中的数据行<br>select count(1) from goods;</p> <p>查询goods表中所有price的总和<br>select sum(price) from goods;<br>查询goods表中价格最高和和最低的商品<br>select MAX(price) maxp,min(price) minp from goods;<br>查询goods表中的评价价格<br>select avg(price) from goods;</p> <p><br>五、分组<br>group by 字段名称 [having 条件]</p> <p><br>create table student (no int ,name varchar(5),sex varchar(2),age int);<br>insert into student values(17000501,'桑晓东','男',18);<br>insert into student values(17000502,'张文秀','男',18);<br>insert into student values(17000503,'曹怡','女',16);<br>insert into student values(17000504,'杨海婷','女',12);<br>insert into student values(17000505,'贾金山','女',16);<br>insert into student values(17000506,'卢林','男',28);<br>insert into student values(17000506,'卢林','男',28);</p> <p>查询学生表中男女的数量<br>select sex,count(no) from student group by sex;<br>查询学生表中男女的平均年龄<br>select sex,avg(age) from student group by sex;<br>查询每个年龄的学生的数量<br>select age,count(no) from student group by age;<br>查询学生表中每个年龄的人数并且,人数等于的1</p> <p>select age,count(no) ct from student group by age having ct=1;</p> <p>where和having的区别<br>where:用在表名后,进行条件的筛选,主要用在分组前<br>having:用在group by之后,主要对分组的数据进行筛选</p> <p><br>六、limit分页<br>格式:limit 行索引,数量:从指定的行索引开始查询,查询指定的数量</p> <p>查询学生表中前三条数据<br>select * from student limit 0,3;<br>查询学生表中第三条到底五条的学生<br>select * from student order by no limit 2,3;</p> <p>分页:每页显示2条数据,请查询第三页的数据<br>select * from student order by no limit 4,2;<br>//分页算法<br>int count=2;int page=3;<br>select * from student order by no limit (page-1)*count,count;</p> <p>查询的顺序:from-->where--->group by --->having--->order by --->limit</p> <p>七、数据完整性<br>约束条件:<br>主键、唯一约束、自增、不为null、默认值、外键等</p> <p>7.1主键:唯一标记,不可为null,不能重复<br>任何表必须有主键</p> <p>添加主键的方式:<br> 1、create table (字段 primary key)<br> 2、create table (字段,primary key(字段名称,字段名称))<br> 3、alter table 表名 add primary key(字段名称);</p> <p>//delete from student where no =(select no from student limit 5,1);</p> <p>delete from student where no=17000506;<br>//添加主键为no<br>alter table student add primary key(no);</p> <p>create table grade(id int,name varchar(20),primary key(id));</p> <p>7.2unique:唯一约束 ,不能重复,可以为null(多个)<br>create table test1(id int unique );</p> <p>7.3auto_increment:自动增长,每次递增1,一般主键使用<br>create table test2(id int primary key auto_increment,msg varchar(20) unique);</p> <p>7.4not null:不为null</p> <p>create table test3(id int not null);</p> <p>7.5default:默认值<br>create table test4(id int primary key auto_increment,psw varchar(6) not null default '123456');<br>insert into test4(psw) values(default);<br>insert into test4(psw) values(null);</p> <p>7.6FOREIGN KEY :外键<br>外键:一个表中的某个字段的值必须为另张表中的主键的值,这时我们可以使用外键约束<br>作用:当新增数据时,如果当前的外键的值在另张表的主键的值不存在,就报错<br>CONSTRAINT 外键名称(外键表中的名称) foreign key(当前表中的外键) references 另张表名称(主键名称)<br>外键的添加方式:<br> 1、create table 表名(字段,外键,CONSTRAINT 外键名称(外键表中的名称) foreign key(当前表中的外键) references 另张表名称(主键名称));<br> 2、ALTER TABLE 表名ADD CONSTRAINT 外键名称FOREIGN KEY(当前表中的外键) REFERENCES 另张表名称(主键名称)); </p> <p>create table student (sid int primary key auto_increment,name varchar(20),<br>fk_cid int,<br>CONSTRAINT fk_student_cid foreign key(fk_cid) references class (cid));<br>insert into student(name,fk_cid) values('小贾',1);</p> <p><br>八、多表关系:<br>8.1一对一<br> 2表数据一一对应<br>8.2一对多<br> 2表数据,存在一对多<br>8.3多对多<br> 2表数据,存在多对多的关系</p> <p>九、三大范式<br>阐述如何创建表并定义之间联系<br>9.1第一大范式:<br>确定列的原子性<br>就是每列的内容各不相同,要划分为最小单元<br>9.2第二大范式<br>确保有主键<br>主要用于区分每条数据,并定位<br>9.3第三大范式<br>表与表之间通过主键关联<br>主键唯一</p> <p>功能单一原则:表描述的或存储的数据单一<br>关联通过主键</p> <p>十、多表查询<br>主要用来查询多张表<br>1、合并结果集<br>UNION :合并2个查询的结果,要求2个查询的列的个数和列的数据类型必须相同,会消除重复的数据<br>UNION ALL:合并2个查询的结果,要求2个查询的列的个数和列的数据类型必须相同,不会消除重复的数据</p> <p>2、内部连接查询<br>inner join on:内部连接<br>格式:select * from 表1 inner join 表2 on 表1字段=表2字段<br>查询2个表的数据,内部连接的形式<br>select * from mytest1 inner join mytest2 on mytest1.id=mytest2.id2;</p> <p>3、外部连接查询<br>左外联:left outer join on<br>格式:select * from 表1 left join 表2 on 表1字段=表2字段<br>左联就是表1为主表,表一数据都有,表2有就显示,没有就是显示为null<br>右外联:right outer join on<br>格式:select * from 表1 left join 表2 on 表1字段=表2字段<br>右联就是表2为主表,表二数据都有,表1有就显示,没有就显示为null</p> <p><br>左联查询2表<br>select * from mytest1 t1 left join mytest2 t2 on t1.id=t2.id2;<br>右联查询2表<br>select * from mytest1 t1 right join mytest2 t2 on t1.id=t2.id2;<br>等价于<br>select * from mytest2 t2 left join mytest1 t1 on t1.id=t2.id2;</p> <p>4、连接查询<br>查询2个表中所有数据的组合结果<br>select * from mytest1,mytest2;<br>产生的结果集:笛卡尔积<br>结果的数量:表1的数量*表2的数量</p> <p><br>十一、内置函数<br>abs:取绝对值<br>bin:十进制转换二进制<br>ceiling:向上取整<br>floor:向下取整<br>rand:随机数:0.0-1.0(不包含)<br>now:现在日期+时间<br>current_date:现在的日期<br>current_time:现在时间<br>instr(字符串,要查找的内容):查询对应的索引<br>ucase:转换为大写<br>lcase:转换为小写<br>replace(字符串,原来的值,新的值):替换<br>substring(字符串,开始索引,长度):截取</p> <p>十二、杂谈<br>1、索引:<br>提高查询的效率<br>通过索引快速进行查询,速度会提高<br>2、视图:<br>为比较复杂的结果集创建一个虚拟的表<br>格式:create view 名称 as select * from 表名;<br>3、触发器:<br>一张表操作时,会对另外的表页进行操作<br>格式:<br>delimiter $修改当前的结束符为$(默认的结束;)<br>create trigger 触发器名称 before|after insert|delete|update on 表名主 <br>for each row <br>begin<br>要执行的sql语句<br>例如:<br>insert into 表名被(字段名称) values(new.表名主字段);<br>end $</p> <p><br>有2张表,user和mylog<br>现在要求:新增用户时,默认会记录一条日志</p> <p>delimiter $<br>create trigger t_test after insert on user for each row<br>begin<br>insert into myLog(msg,time) values(new.name,current_date());<br>end $</p> <p>4、快速备份新表<br>create table 新表名称 select * from 旧表</p> <p>其他数据库:<br>select * into 新表名 from 旧表;但是MySQL不支持</p> <p> </p> <p>MySQL:<br>数据库重点内容:<br>一、七大SQL语句<br>1、CREATE<br>2、ALTER<br>3、DROP<br>4、INSERT<br>5、UPDATE<br>6、DELETE<br>7、SELECT<br>where\group by \having\order by \limit<br>二、约束条件<br>主键、唯一、非null、default、自增、外键<br>三、多表查询:<br>内联、外联、合并<br>四、聚合函数<br>AVG\MAX\MIN\SUM\COUNT</p> <p>根据个人情况进行记忆:<br>1、内置函数<br>now\rand\floor\substring\ifnull<br>2、索引<br>索引提高操作数据库的效率<br>3、触发器<br>为某张表加自动操作</p> <p> </p> <p><strong>》七</strong></p> <p> </p> <p>一、JDBC:Java Data Base Connectivity java语言操作数据库的API<br>是由类和接口组成的,然后交给数据库厂商来实现的,所以想操作数据库,<br>需要下载对应数据库的驱动jar</p> <p>JDBC涉及的类和接口:<br>1、DriverManager:驱动管理器<br>2、Connection:连接接口<br>3、Statement:操作SQL接口<br>4、ResultSet:结果集<br>5、PreparedStatement:操作SQL类,防止SQL注入,推荐使用</p> <p>二、使用JDBC的步骤:<br>1、导入jar<br>2、动态加载驱动(注册驱动)<br>Class.forName("com.maysql.jdbc");<br>3、获取连接对象<br>Connection conn=DriverManager.getConnection("JDBC:mysql://主机IP:3306/数据库名称",用户名,密码);<br>4、获取操作SQL对象<br>Statement stmt=conn.createStatement();<br>5、执行SQL<br>stmt.execute(SQL);//执行任何SQL语句。返回boolean类型,是否为select语句<br>stmt.executeUpdate(SQL);//执行非select语句,返回受影响的行数<br>stmt.executeQuery(SQL);//执行select语句,返回查询的结果集ResultSet<br>6、获取结果集<br>ResultSet rs=stmt.executeQuery(sql);<br>7、关闭<br>rs.close();<br>stmt.close();<br>conn.close();</p> <p>三、JDBC类或接口的说明:<br>3.1DriverManager:驱动管理类<br> 管理数据库驱动<br> 常用方法:<br> static Connection getConnection(String url) <br> 建立到给定数据库 URL 的连接。 <br> static Connection getConnection(String url, Properties info) <br> 建立到给定数据库 URL 的连接。 <br> static Connection getConnection(String url, String user, String password) <br> 建立到给定数据库 URL 的连接。 <br><br><br>3.2Connection:数据库连接接口<br> 附加连接到指定的数据库<br> 常用方法:<br> createStatement:获取Statement对象</p> <p>3.3Satement:操作SQL接口<br> 将指定的sql语句发送到数据库,并获取结果<br> 常用方法:<br> 1、boolean execute(sql)<br> 执行任何SQL语句,返回值true:select语句,这时可以通过getResultSet(),false:非select语句<br> 2、int executeUpdate(sql)<br> 执行非select语句,返回操作的行数,如果为DDL语句返回0<br> 3、ResultSet executeQuery(sql)<br> 执行select语句,返回结果集<br> 4、ResultSet getResultSet()<br> 获取查询的结果,配合execute使用</p> <p>3.4ResultSet:结果集<br> 记录查询的结果数据<br> 常用方法:<br> 1、boolean next:获取下一行数据 ,返回值:true:下一行有数据,false:没数据<br> 2、first:返回到第一行<br> 3、last:返回最后一行<br> 4、getInt:获取整型<br> 5、getLong:获取长整型<br> 6、getFloat:获取浮点型<br> 7、getDouble:获取双精度浮点型<br> 8、getString:获取字符串<br> 9、getBytes:获取二进制<br> 10、getDate:获取日期<br> 11、getTime:获取时间<br><br>注意:getXXX方法为获取指定列索引或列名称的值<br>切记列索引从1开始<br>3.5PreparedStatement:防止SQL注入的操作SQL对象<br> 防止SQL注入,效率高<br> 常用方法:<br> setXXX(index,value):设置对应sql语句的第index个参数对应的值为value<br> executeQuery:执行select语句<br> 接收的SQL语句:<br> sql语句 where 字段=? <br></p> <p><br>四、封装数据库操作<br>1、在src下创建xxx.properties<br> 将需要用到的变量存储<br> 键值对形式<br>2、创建工具类<br> 实现对数据库的操作:增删改查<br>3、使用</p> <p>五、SQL注入<br>就是sql语句根据输入进来的数据进行拼接,通过sql关键字造成不正确的结果<br>例如:' or 1=1 or '<br>如何防止这种行为出现呢,就是使用PreparedStatement代替Statement<br>PreparedStatement的好处:<br>1、防止SQL注入<br>2、优化查询<br>3、减少查询次数,Statement会频繁的查询数据库,可能会造成缓冲区的溢出<br><br><br></p> <p>额外:<br>1、JAVASE加载第三方jar:<br> 1、创建文件夹lib<br> 2、拷贝jar到lib文件夹<br> 3、build path将对应的jar加载到应用程序<br>2、HashTable和HashMap的区别?<br> 1、父类不一样<br> HashMap基于Map<K,V><br> HashTable基于陈旧的Dictionary<K,V><br> 2、contains方法不一样<br> HashMap:containsKey,containsValue<br> HashTable:contains---等价于containsValue<br> 3、线程安全<br> HashMap:不安全,不能用在多线程并发中,效率高<br> HashTable:安全,效率低</p> <p><br>3、Properties:持久性属性集类<br> 主要用来存储和读取配置文件,以.properties结尾<br><br> 自学Properties类的使用</p> <p>4、单元测试<br>@Test:标记这是一个测试方法<br>测试方法要求:<br> 1、public修饰<br> 2、无返回值<br> 3、无参数</p> <p>5、工具类设计原则<br>方便别人,麻烦自己<br>内部方法一般都是静态方法<br>考虑尽量全面</p> <p>6、可变参数<br>格式:数据类型... 参数名称、<br>参数可以有0个或多个<br>出现在方法的声明中,只能在参数末尾<br>在方法内部,当作数组使用</p> <p> </p> <p>@Override:标记这个方法为重写</p> <p> </p> <p><strong>》八</strong></p> <p> </p> <p>温故:<br> Web项目使用JDBC<br> Web项目导入jar包的方式:直接将jar复制到WebContent\WEB-INF\lib<br><br> 通过jdbc创建以下表:<br> b_account:账户表<br> id 账号 16位,字符串<br> name 姓名 50位<br> money 余额 <br> createtime 开户时间<br> updatetime 最后一次更新时间<br><br> b_log:流水日志表<br> id 序号<br> a_id 账号<br> money 钱 存钱,取钱-<br> msg 备注信息<br> time 交易时间<br> type 类型 1:开户 2:存钱 3:取钱 4:测试<br> 注意:数据库设计的时候,最好写出一份设计文档,标记表的意义</p> <p>一、Transaction:事务<br>1.1事务是什么?<br>事务就是保证多条数据操作要么都成功,要么都失败,确保数据的完整性<br>其实就是将一组相同逻辑的操作放在一起进行操作,全部都成功或都失败<br>主要用在:多条数据的操作的一致性</p> <p>1.2事务如何使用?<br>(***重要,记住)数据库指令:<br> 1、start transaction:开启事务<br> 2、rollback:回滚,取消本次操作<br> 3、commit:提交,确定本次操作<br>JAVA代码中使用:JDBC<br> 1、通过connection.setAutoCommit(false)设置开启事务,true不开启,false开启事务<br> 2、在try语句块的结尾:connection.commit:提交<br> 3、在catch中connection.rollback:回滚事务<br>练习:<br>1、请自己创建任意表,通过JDBC实现事务的操作 </p> <p> </p> <p> <br>1.3事务的特性(ACID)<br> 原子性(Atomicity) 原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。(例:全部发生或全部不发生) <br> 一致性(Consistency)事务必须使数据库从一个一致性状态变换到另外一个一致性状态。(例:从一起生到一起死)<br> 隔离性(Isolation) 事务的隔离性是多个用户并发访问数据库时,数据库为每一个用户开启的事务,<br> 不能被其他事务的操作数据所干扰,多个并发事务之间要相互隔离。(例:犯错误被关进不同的小黑屋)<br> 持久性(Durability) 持久性是指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,<br> 接下来即使数据库发生故障也不应该对其有任何影响。(例:淘宝买东西确认付款,一旦确认付款就无法退钱)<br> (助记: 一位科学家偷了国家的“原子弹”(例:全部发生或全部不发生),领导开会“一致”(例:从一起生到一起死)同意将他逮捕,警察抓到他把他进行“隔离”(例:犯错误被关进不同的小黑屋),法院判处他“持久性”(例:淘宝买东西确认付款,一旦确认付款就无法退钱)蹲监)<br><br>1.4事务的隔离性<br>隔离性就是设置多个线程并发访问数据时的一种权限<br>如果没有隔离性:可能会引起:脏读、不可重复读、虚读</p> <p>SQL事务的隔离级别:<br> 1、Serializable:可避免脏读、不可重复读、虚读情况的发生。(串行化)<br> 2、Repeatable read:可避免脏读、不可重复读情况的发生。MySQL默认<br> 3、Read committed:可避免脏读情况发生。SQL Server |Oracle<br> 4、Read uncommitted:最低级别,以上情况均无法保证。(读未提交)<br> 设置事务的隔离性:<br> set transaction isolation level 设置事务隔离级别<br> 查询当前数据库的事务的隔离性:<br> select @@tx_isolation 查询当前事务隔离级别</p> <p>串行化:按照一个个的事务的先后顺序执行</p> <p> </p> <p>类和对象<br>类方法和实例方法<br>全局变量和局部变量</p> <p>变量的生命周期<br>1、类变量--静态属性:类第一次加载就声明,类销毁的时候跟着销毁<br>2、成员变量--实例属性:对象创建的时候,对象被销毁的时候<br>3、局部变量--定义在代码块内部的就是局部变量,作用域:当前代码块<br>java中括号:<br>{}:代码块,类的内容、方法、静态代码块、构造等<br>[]:数组<br>():方法<br><>:泛型</p> <p>方法的定义和调用<br>接口和类的区别</p> <p> </p> <p><strong>》九</strong></p> <p> </p> <p>一、连接池<br>1.1连接池是什么?<br>连接池就是管理数据库连接对象<br>保证连接对象的数量,进而提升操作数据库的效率</p> <p>主要是并发访问时,会产生n个连接对象,<br>这些都会对数据库服务器产生很大的压力,<br>所以需要合理的使用数据库连接池,以减轻这种压力</p> <p>1.2连接池的工作原理<br>集合存储连接对象,根据需要进行连接对象的创建、获取、销毁</p> <p>1.3DBCP连接池<br> 常用类:<br> BasicDataSourceFactory.createDataSource(Properties):通过配置文件获取连接池对象<br>使用时,需要导入jar和对应的配置文件</p> <p>1.4C3P0连接池<br> 常用类:<br> ComboPooledDataSource:这是DataSource的子类,直接创建该类对象获取数据库连接池,加载默认配置文件<br><br>使用时,需要导入jar和对应的配置文件</p> <p>二、JDBC工具类Dbutils<br>2.1QueryRunner:执行数据库的增删改查<br> 常用方法:<br> 1、update:执行非select语句<br> 2、batch:批处理,同时处理多条相同的语句<br> 3、query:执行SELECT语句<br><br> query方法都需要ResultSetHandler<T>接口对象<br> 该接口就一个方法:<br> handle:转换,参数:查询结果集,返回值类型:泛型<br><br> 一般常用默认的实现类:<br> 1、ArrayHandler:将查询结果的第一行数据,的每个字段存储到数组中并返回<br> 2、ArrayListHandler:把结果集中的每一行数据都转成一个数组,再存放到List中。<br> 3、BeanHandler:将结果集中的第一行数据封装到一个对应的JavaBean实例中<br> 4、BeanListHandler:将结果集中的每一行数据都封装到一个对应的JavaBean实例中,存放到List里<br> 5、ColumnListHandler:将结果集中某一列的数据存放到List中。<br> 6、KeyedHandler(name):将结果集中的每一行数据都封装到一个Map<列名,列值>里,再把这些map再存到一个map里,其key为指定的key<br><br><br>三、特殊的数据类型的对应:<br> PreparedStatement ps;<br> 1.DATA,TIME,TIMESTAMP date,time,datetime<br> 存:ps.setDate(i,d); ps.setTime(i,t); ps.setTimestamp(i, ts);<br> 取:rs.getDate(i); rs.getTime(i); rs.getTimestamp(i);<br> 2.CLOB  text<br> 存:ps.setCharacterStream(index, reader, length);<br> ps.setString(i, s);<br> 取:reader = rs. getCharacterStream(i);<br> reader = rs.getClob(i).getCharacterStream();<br> string = rs.getString(i);<br> 3.BLOB  blob<br> 存:ps.setBinaryStream(i, inputStream, length);<br> 取:rs.getBinaryStream(i);<br> rs.getBlob(i).getBinaryStream(); <br>Project项目,一般都会框架<br>三层架构:<br>1、显示层---H5或JSP<br>2、业务逻辑层---Servlet<br>3、数据层----实体类和数据库</p> <p>外到内:<br>1、显示层:前端、Swing、main<br>2、逻辑层:service:处理业务逻辑<br>3、数据层:<br> 1、entity/model:实体映射类<br> 2、dao:操作数据库</p> <p><br>Bean类:<br>1、私有属性<br>2、公有get和set方法<br>3、无参构造函数</p> <p><br>三、JDBC&数据库</p> <p>获取刚刚自增的id值:<br>select last_insert_id()</p> <p>四、Properties:持久性属性集类<br>主要用来存储或加载配置信息</p> <p>常用方法:<br> 1、load:加载指定的配置文件<br> 2、store:存储配置信息<br> 3、setProperties:设置要存储的属性<br> 4、getProperties:获取配置的属性的值</p> <p><br>1、前端<br>2、MySQL<br>3、Servlet<br>4、Ajax+JQuery</p> <p> </p> <p><strong>》十</strong></p> <p> </p> <p>一、Web<br>程序的分类:<br>1、C/S:Client/Server:客户端服务器<br>请求流程:客户端程序--->服务器--->数据库服务器<br>2、B/S:Browser/Server:浏览器服务器<br>请求流程:浏览器---服务器----数据库服务器</p> <p>常用服务器:<br>1、Tomcat:免费,开源APACHE公司<br>2、WebLogic:BEA公司支持JAVAEE标准规范<br>3、WebSphere:IBM公司支持JAVAEE标准规范</p> <p> </p> <p>二、Tomcat<br>目录:都是英文目录<br>1.1TomCat:服务器<br>APACHE:一家强大公司<br>基本上提供了web开发的一整套工具<br>TomCat服务器就是Apache下的一个服务器<br> 特点:<br> 1、开源<br> 2、免费<br> 3、兼容性</p> <p>1.2TomCat目录:<br> bin:可执行<br> webApps:发布项目<br> work:运行的工作目录<br> docs:文档<br><br>1.3运行TomCat:<br> 1、在bin目录下找到startup.bat启动服务器<br> 2、在浏览器输入:localhost:8080,能打开就是启动成功</p> <p>1.4在Eclipse中配置Tomcat<br> window-->preferences-->server-->runtime Environments->add->选择TomCat安装目录->完成</p> <p>1.5发布项目到TomCat中<br> 1、选择项目,右键export<br> 2、选择war,选择导出的路径和名称<br> 3、将war文件放到TomCat的WebApps下<br> 4、启动Tomcat<br> 5、访问:localhost:8080/war文件名/</p> <p>二、Servlet<br>2.1Servlet是什么?<br>Servlet就是sun提供的运行在服务器上的API<br>每一个Servlet都是独立的应用<br>可以实现:获取Web浏览器或客户端发送来的信息并且响应信息</p> <p>2.2Servlet的使用<br>创建方式:<br> 1、实现Servlet接口<br> 需要实现方法:<br> 1、init:初始化<br> 2、service:服务<br> 3、destroy:销毁<br> 4、servletConfig:获取默认配置<br> 5、servletInfo:获取Servlet信息<br><br> 2、继承GenericServlet类<br> 需要实现的方法:<br> 1、service:服务<br> 3、继承HttpServlet类---直接new Servlet<br> 需要实现的方法:<br> 1、doGet:处理get请求<br> 2、doPost:处理post请求</p> <p>Servlet如果想让外界使用,必须注册(配置注册还是注解注册)</p> <p><br>2.3Servlet生命周期<br>生命周期:<br> 1、init:初始化<br> 初始化一些默认信息<br> 2、service:服务<br> 获取请求和响应<br> 3、destroy:销毁<br> 销毁一些信息<br>Servlet的生命主要是为了服务器优化</p> <p><br>Thread生命周期:<br> 1、新建<br> 2、就绪<br> 3、运行<br> 4、阻塞<br> 5、死亡</p> <p> </p> <p><br>2.3Servlet的注册:<br>Servlet可以设置外界访问的名称<br> 1、xml中注册(Servlet3.0之前)<br> 在项目的web.xml中使用固定标签:<br> //标记这是一个Servlet<br> <servlet><br> <servlet-name>外界访问的名字</servlet-name><br> <servlet-class>Servlet实现类名称</servlet-class><br> </servlet><br> <servlet-mapping><br> <servlet-name>外界访问的名字</servlet-name><br> <url-pattern>/匹配</url-pattern><br> </servlet-mapping><br> 2、注解进行注册(Servlet3.0(包含)之后)<br> @WebServlet("/外界访问名字")</p> <p><br> <!--配置Servlet,一般是在Servlet3.0之前需求配置 --><br> <servlet><br> 配置外界访问的名称 <br> <servlet-name>MyS2</servlet-name><br> 配置Servlet的类名 <br> <servlet-class>MyServlet</servlet-class><br> </servlet><br> <servlet-mapping><br> 配置外界访问的名称 <br> <servlet-name>MyS2</servlet-name><br> <url-pattern>/*.do</url-pattern><br> </servlet-mapping></p> <p> </p> <p>2.4Servlet的线程安全<br>Servlet引擎采用多线程进行对用户的处理<br>并发时,存在线程安全。<br>尽量使用局部变量,非得是全局时,注意加锁</p> <p>SingleThreadModel:单线程模型<br>对于Servlet采用单线程进行。但是会产生多个Servlet对象<br>在Servlet2.4之后都已经过时</p> <p>2.5ServletConfig配置信息<br>获取Servlet的配置信息<br> 常用方法:<br> 1、getInitParameter:获取配置信息<br> 2、getServletContext:获取Web全局对象</p> <p>ServletContext:Web应用对象<br>可以设置过滤器、事件、Servlet、路径等<br> getRealPath:获取真实路径,发布路径</p> <p> </p> <p><br>Eclipse和MyEclipse</p> <p> </p> <p><strong>》十一</strong></p> <p> </p> <p>一、Request:请求<br>获取客户端或浏览器的请求内容<br>1.1HttpServletRequest<br>Http协议的请求对象<br>服务器会为每一次的请求创建对应的request和response对象<br>请求对象包含的信息:<br> 1、请求行<br> 2、请求头<br> 3、消息正文<br>想要获取客户端信息,那么就使用request</p> <p>1.2请求行<br>可以获取请求的方法、查询的内容、协议、资源等<br>常用方法:<br> getMethod方法返回HTTP请求消息中的请求方式。<br> getRequestURI方法返回请求行中的资源名部分。<br> getQueryString 方法返回请求行中的参数部分。<br> getServletPath方法返回Servlet的名称或Servlet所映射的路径。 <br><br>1.3请求的网络信息<br>可以获取远程或服务器或本机的网络信息<br> 常用方法:<br> getRemoteAddr方法返回发出请求的客户机的IP地址<br> getRequestURL方法返回客户端发出请求时的完整URL<br><br>1.4请求头信息<br>获取header数据<br> 常用方法:<br> getHeader:获取指定key的值<br> getHeaderNames:获取header的所有的键名称<br> getContentType:获取内容的类型MIME类型<br> getContentLength:获取内容的长度<br> getCharacterEncoding:获取编码格式</p> <p>referer:请求头属性<br>记录上一次的网址</p> <p>1.5请求方法:<br>1、get:请求,获取<br>特点:<br> 1、效率高<br> 2、大小限制,一般为1kb<br> 3、不安全,参数信息随着url进行传输<br> 4、中文乱码,参数随着url传输<br>而url编码格式为ISO8859-1(不支持中文)</p> <p>get乱码产生原因:<br>首先输入的内容会按html页面的编码格式进行<br>在进行传输的时候url传输,而url编码格式iso8859-1<br>所以内容由页面的编码格式转换为iso8859-1<br>get乱码的解决:<br>在doGet方法中<br>首先将内容按照iso8859-1转换为字节数组<br>然后再通过HTML页面的编码格式将字节数组转换为字符串<br>String msg=request.getParameter("name");<br>if(msg!=null){<br> msg=new String(msg.getBytes("ISO8859-1"),"UTF-8");<br>}</p> <p>对安全性要求不高就推荐使用Get<br>如果对安全性要求较高,推荐使用post</p> <p>2、post:请求,发送<br>一般是传递数据到服务器<br>特点:<br> 1、效率低<br> 2、大小无限制<br> 3、安全性相对较高,参数以流的形式<br> 4、中文乱码好解决</p> <p>默认请求为get请求</p> <p>1.6获取表单内容<br>表单的内容想提交到服务器,需要为标签设置name属性,其中name的值就是键<br><input>\<textarea>\<select>等都是可以提交的</p> <p>隐藏域:<input type="hidden"/>用户看不见,但是可以提交数据<br>图片:<input type="image"/>可以提交点击的坐标,而且还能默认提交<br>下拉框<select>也是可以传递</p> <p>表单提交时,防止用户操作太快,一般会进行提交校验,只让提交一次</p> <p>1.7获取参数信息<br>获取表单请求的参数信息<br>常用方法:<br> 1、getParameter:获取指定key的值<br> 2、getParameterValues:获取指定key的多个值(多选)<br> 3、getParameterNames:获取所有的参数名称<br> 4、getParameterMap:获取所有的参数值<br></p> <p>RandomAccessFile:随机读取文件类<br>唯一一个具有读取和写入的类</p> <p> </p> <p> </p> <p>二、Response:响应<br>对客户端或浏览器进行数据的响应</p> <p>2.1响应状态码<br>就是服务响应的状态码<br>2开头:成功 200全部成功,206部分成功<br>3开头:重定向 需要请求另外的网址<br>4开头:错误,客户端或浏览器错误<br>5开头:错误,服务端错误</p> <p>2.2设置消息头<br>设置响应的消息头<br>常用方法:<br> 1、setHander:设置消息头<br> 2、addHander:添加消息头<br> 3、setContentType:设置正文类型<br> 4、setCharacterEncoding:设置响应的编码格式<br><br>2.3响应内容<br>向客户端或浏览器回复信息<br>常用方法:<br> 1、getWriter:打印输出字符流 print或println<br> 2、getOutputStream:输出字节流,非文本内容<br><br><br><br>2.4跳转<br> 常用跳转分为2种:<br> 1、重定向<br> 客户端跳转<br> response.sendRedirect("跳转的网址");<br> 特点:<br> 1、可以跳转到任何一个网页<br> 2、地址栏改变<br> 3、不可携带request和response<br> 4、客户端进行2次请求<br><br> 2、转发<br> 服务端跳转<br> request.getRequestDispatcher("当前Web的网页").forward(request, response);<br> request.getRequestDispatcher("当前Web的网页").include(request, response);<br><br> 特点:<br> 1、只能跳转到当前项目的网页<br> 2、地址栏不变<br> 3、可以携带request和response<br> 4、客户端请求1次<br> forward&include的区别?<br> forward:可以对Response进行修改状态码和消息头<br> include:不可以</p> <p> </p> <p><strong>》十二</strong></p> <p> </p> <p>数据交互格式:<br>1、HTML<br>2、JSON<br>3、XML<br>都是跨平台、跨网络、跨编程语言</p> <p>一、XML<br>1.1Extensible Markup Language:可扩展的标记语言<br>是一种通用型数据交互的格式</p> <p>与HTML的区别?<br>HTML:<br>不同点:<br>1、固定标签<br>2、语法不严谨:可以有结束,也可以没有<br>3、不区分大小写</p> <p>相同点:<br>4、属性的值必须使用双引号<br>5、标签可以嵌套<br>XML:<br>不同点:<br>1、自定义标签<br>2、语法严谨:标签有开始就必须有结束<br>3、区分大小写</p> <p>相同点:<br>4、属性的值必须双引号<br>5、标签可以嵌套</p> <p>1.2XML语法</p> <p>XML具有严谨的语法<br>语法规则:<br>1、自定义标签<br>2、区分大小写<br>3、标签有开始必须有结束<br>4、只有一个根节点<br>5、标签可以嵌套<br>6、标签命名,以字母、数字、下划线组成,以字母开头<br>7、属性的值必须使用双引号</p> <p>1.3XML组成<br>xml由2部分组成<br> 1、前导区<br> 固定格式:<?xml version="1.0" encoding="编码格式" ?><br> 描述此文档为xml文档,标记版本号,编码格式<br> 2、数据区<br> 只能以根标签和结尾<br> 根标签:唯一<br> <老邢><br> <子标签></子标签><br> <子标签></子标签><br> <子标签></子标签><br> <子标签></子标签><br> <子标签></子标签><br> </老邢><br>1.4XML解析<br>目前常用解析:<br>1、dom:标准,java支持<br>2、sax:java支持<br>3、dom4j:民间方式,第三方jar<br>4、pull:谷歌<br>5、xpath:对xml元素进行查询</p> <p>1.4.1DOM解析XML<br>java支持,将整个文档读取完只会再开始解析<br>解析步骤:<br>1、创建解析工厂<br>2、创建解析器<br>3、设置解析文档并获取文档对象<br>4、获取根节点<br>5、依次获取子节点并遍历</p> <p><br>xml中的节点和元素<br>Node:xml中的任何内容<br>主要包括:<br>标签(文档标签、元素标签)、文本内容<br>Element:元素<br>继承的Node<br>就是可以拥有子标签和属性、值的节点</p> <p>元素就是对象<br>节点就是属性</p> <p> </p> <p> </p> <p>1.4.2SAX解析<br>实时解析,边读取边解析<br>使用步骤:<br>1、创建DeafultHander的子类:定义解析模板<br>2、创建解析工厂<br>3、创建解析器<br>4、设置解析文档并开始解析<br>5、获取解析结果</p> <p>创建自定义的DeafultHander<br>需要注意的方法:<br>1、startDocument:开始文档,无参<br>2、endDocument:结束文档,无参<br>3、startElement:开始标签<br>参数说明:<br> 1、命名空间<br> 2、本地名称<br> 3、标签名称<br> 4、属性集<br>4、endElement:结束标签<br>参数说明:<br> 1、命名空间<br> 2、本地名称<br> 3、标签名称<br>5、character:文本内容<br>参数说明:<br> 1、字符数组<br> 2、起始索引<br> 3、长度<br>1.3Dom for Java<br>Dom4J:解析xml的方式<br>使用步骤:<br> 1、创建解析器<br> SAXReader reader=new SAXReader();<br> 2、设置解析文件并获取文档对象<br> Document document=reader.read("students.xml");<br> 3、获取根元素<br> Element root=document.getRootElement();<br> 4、依次获取所有的子元素<br> elements<br> 5、获取元素的属性或内容<br> element.attributeValue("属性名称"):获取属性的内容<br> element.getStringValue():获取元素的内容<br> 6、获取结果<br> Entity<br> List<T><br>1.4XPATH<br>主要用来进行查询xml文档的节点信息<br>也可以用来解析</p> <p>二、JSON<br>2.1JSON目前互联网使用最为广泛的一种数据交互的格式<br>跨平台、跨网络、跨编程语言</p> <p>json语法符合:<br>{}:对象<br>[]:数组<br>:连接属性名称和值的<br>""属性名称或字符串类型的值<br>,多个属性或元素<br>JSON就是由上述的语法符合组成的字符串<br>JSON可以用来描述数组或对象</p> <p>{"no":1,"name":"张三"}<br>{"stu":{"no":1,"name":"张三"}}<br>[{"no":1,"name":"张三"}]<br>[1,2,3]<br>{"list":[{"no":1,"name":"张三"},{"no":1,"name":"张三"}]}</p> <p>2.2解析方式<br>1、JSON官方<br>JSONArray:解析数组 []<br>常用方法:<br> length:元素个数<br> getXXX(index):获取指定索引的元素对象<br><br>JSONObject:解析对象 {}<br>常用方法:<br> keys:获取所有的属性名称<br> getXXX:获取指定属性名称的值<br> optXXX:获取指定属性名的值<br> putXXX:添加指定的属性<br>遇到{用JSONObject,遇到[用JSONArray</p> <p>2、Gson谷歌<br>要求JSON字符串的数据关系必须为类的映射<br>其实就是一个{}就是一个类<br>Gson:类<br>formJson:解析对应的json字符串<br>解析对象:fromjson(json,类.class)<br>解析数组:fromjson(json,new TypeToken<List<类>>)(){}.getType())</p> <p>3、FASTJSON快速解析<br>要求类与json字符串相匹配<br>JSON:工具类<br>静态方法:<br>1、parserObject(json,类.class):解析对象<br>2、parserArray(json,类.class):解析数组</p> <p>注意:<br>Gson、fastjson<br>都是对类的要求:字符串中有几个{}就有几个类,({}中有几个属性类就几个属性)</p> <p> </p> <p><br>XML会解析<br>JSON会解析</p> <p> </p> <p><strong>》十三</strong></p> <p> </p> <p>流按照功能划分:<br>1、节点流:直接操作数据的流<br>文件流、内存流<br>2、过滤流:操作流的流</p> <p>一、导入文件内容到数据库<br>1、通过流获取要导入的内容<br>2、获取数据,并按照格式进行切割<br>3、添加到数据库</p> <p>create table citycode(id int primary key auto_increment,code int unique,name varchar(20),s_name varchar(20),f_name varchar(20),time datetime);</p> <p> </p> <p>二、JSP<br>2.1JSP:Java Server Pages<br>就是一个页面:可以写HTML标签还可以java代码</p> <p>简化的Servlet<br>弥补Servlet的不足</p> <p>JSP最终就会转换为Servlet<br>JSP页面中写的HTML标签或JSP语法最终都是在对应的饿service方法通过输出流写出</p> <p>JSP语法:<br><%! %>:定义方法、创建全局变量等,这里面的代码最终在jsp对应的类中,方法外部起作用<br><% %>:调用内置对象,java语句等代码,这里的代码最终在jsp对应的类的service方法中<br><%= %>:显示对应变量的值</p> <p>2.2JSP的组成:<br> 1、JSP模板元素:就是jsp页面的HTML<br> 2、JSP表达式:主要就是在界面显示数据,切记不可有;<br> 格式:<%= 变量|表达式|方法%><br> 3、JSP脚本片段:只能出现java代码,严格准守java语法规则,可以调用内置对象、输出内容、创建局部变量等<br> 格式:<% 片段; %><br> 4、JSP声明:声明全局变量或方法,这里的代码块会出现在service方法的外部,类的内部<br> 格式:<%! 声明属性或方法 %><br> 5、JSP注释:JSP的注释并不就会输出到页面<br> 格式:<%--JSP注释--%></p> <p> </p> <p>三指</p> <p>九对<br>四域<br>2.3三大指令<br>指令:告诉JSP引擎页面的信息<br>格式:<%@ 指令名称 属性名称="值" %><br>2.3.1page<br>告诉JSP引擎当前页面的信息<br>格式:<%@ page 属性=值 %><br>常用属性:<br>language:语言<br>import:导包<br>contentType:正文类型,MIME类型和编码格式<br>session:会话 值为boolean类型,true:有,false:没有<br>errorPage:错误页 值:为错误页面的url<br>isErrorPage:是否需要异常对象<br>2.3.2include<br>加载其他html\文件、jsp等<br>格式:<%@ include file="路径" %><br>这种加载称为静态加载</p> <p>2.3.4taglib<br>引用标签库,常常结合着JSTL使用<br>格式:<%@ taglib uri="标签库地址" prefix="名称" %><br>作用:在JSP页面中导入JSTL标签库。替换jsp中的java代码片段。<br><%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> </p> <p>2.4九大隐式对象<br>九大隐式对象就是根据配置会默认创建的对象<br>以下为常用内置对象:<br> 2.4.1request:请求对象---HttpServletRequest<br> 2.4.2response:响应对象--HttpServletResponse<br> 2.4.3session:会话---HttpSession<br> 2.4.4out:输出字符流对象---PrintWriter<br> 2.4.5pagecontext:页面域对象---PageContext<br> 2.4.6page:this---当前jsp产生的Servlet对象<br> 2.4.7application:全局域对象---ServletContext<br> 2.4.8execption:异常----Throwable<br> 2.4.9config:配置----ServletConfig</p> <p>2.5域<br>域就是根据作用域不同而划分的对象,可以携带属性数据<br>常用的域:<br> 1、application:全局,整个Web应用,建议少用<br> 存储的生命周期最为悠久,只有网站停止运行才销毁<br> 2、session:会话,每一个用户的访问都是一个会话<br> 使用最为广泛,一般用来做,存储登陆信息、购物车<br> 3、pagecontext:页面对象,整个页面有效,用的不多<br> 4、request:每次请求<br> 主要记录请求的信息,使用最为广泛<br>一般使用域<br>setAttribute(key,value):设置属性,对应的key存在就修改,不存在就是添加 value:可以是自定义类对象<br>getAttribute(key):获取指定key的值 </p> <p> </p> <p><strong>》十四</strong></p> <p> </p> <p>一、JSP元素<br>也称为JSP动作<br>格式:<jsp:动作名称 属性名称="值"/><br>常用:<br> 1、include<br> 作用:动态包含其他页面,可以传递参数<br> 格式:<jsp:include page="包含的文件路径" flush="是否刷新"></jsp:include><br><br> 动态包含和静态包含的区别?<br> 动态包含:jsp元素<br> 1、格式:<jsp:include page><br> 2、加载时机,运行到此处的时候加载,每个jsp都会产生java文件<br> 3、传递参数<br> 静态包含:jsp指令<br> 1、格式:<%@ include file%><br> 2、刚开始就加载,只会产生当前的java文件,其他是将最后的静态页面加载到当前页面<br> 3、不传递参数<br><br> 注意:如果一个jsp页面被加载到其他页面使用,建议直接写标签或jsp语法<br><br> 2、forward<br> 作用:实现页面的跳转,其实就是请求转发<br> 格式:<jsp:forward page="要跳转的页面路径"></jsp:forward><br> 可以携带参数<br> 注意:部分情况该标签双标签,必须有参数,单标签不需要<br> 3、param<br> 作用:在使用include或forward时传递出参数<br> 格式:<jsp:param name="key" value="value"/></p> <p> </p> <p>二、EL<br>EL:Expression Language:EL表达式,简化JSP表达式<br>格式:${域中的属性名称|param.参数名称|cookie.名称}<br>显示结果<br>开发常用EL做以下事情:<br>1、获取请求参数的值:${param.参数名称}<br>2、获取域中属性的内容:${XXXScope.属性名称}<br>3、获取Cookie中的内容:${cookie.名称}</p> <p>${dog.name}<br>${dog["name"]}</p> <p>三、JSTL<br>JSTL:Java Server Pages Standard Tag Library:JSP标准标签库<br>在Eclipse中需要导入jar包<br>myEclipse不需要</p> <p>使用步骤:<br>1、导入jar包<br>2、在JSP文档使用<br><%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %><br>3、在文档中使用JSTL标签<br>直接<c:out></p> <p>常用标签:<br><c:out value="输出的内容"><br><c:set ><br><c:remove><br><c:if><br><c:choose><br><c:forEach></p> <p><br>四、Cookie<br>会话状态,存储HTTP请求或响应过程的信息<br>将信息保存在客户端的磁盘</p> <p>获取Cookie:request.getCookies<br>新增Cookie:response.addCookie</p> <p>五、Session</p> <p> </p> <p><br>六、回顾<br>Servlet:java运行在服务器的api<br>主要功能:获取浏览器或客户端的请求,回应数据</p> <p>Servlet的创建方式:<br> 1、HttpServlet<br> 2、GeneralServlet<br> 3、Servlet<br>Servlet的生命周期:<br> 1、init:初始化<br> 2、service:服务<br> 3、destroy:销毁<br>Servlet的注册方式:<br> 1、使用注解@WebServlet<br> 2、使用xml配置<br>Servlet使用步骤:<br>1、创建Servlet类<br>2、重写对应的方法doGet、doPost、service<br>3、注册 注解的形式<br>4、运行在服务器<br>5、访问</p> <p>HttpServletRequest:请求</p> <p>HTTP协议的消息组成:<br>1、请求行:获取方式、协议类型、路径等<br>2、请求头:获取正文类型、编码格式、刷新等<br>3、请求内容:参数或属性</p> <p>请求属性:可以存储各种数据类型<br>getAttribute:获取指定key的属性值<br>setAttribute:设置属性<br>removeAttribute:移除属性</p> <p>请求参数:只能存储字符串<br>getParameter:获取指定参数的值<br>getParameterValues:获取指定参数的所有值。checkbox</p> <p>跳转:<br>常用的跳转方式:<br>1、客户端跳转:重定向<br>response.sednRect("页面路径")<br>不可传递request<br>2、服务端跳转:请求转发<br>request.getRequestDispatcher("页面路径").forward(request,response);<br>request.getRequestDispatcher("页面路径").include(request,response);</p> <p><br>中文乱码:<br>get如果乱码:iso8859-1---->utf-8</p> <p> </p> <p>HttpServletResponse:响应</p> <p>回复信息:<br> 1、response.getWriter:字符流<br> 2、response.getOutputStream:字节流<br><br>设置消息头:<br> 1、setContentType("text/html;charset=utf-8")<br> 2、setContentLength:设置内容的大小<br>设置状态响应码:<br> 1、setStatue()</p> <p>常用的网络数据交互格式:<br>1、HTML<br>2、XML<br>3、JSON</p> <p>JSON解析:<br>{}:对象<br>[]:数组</p> <p>根据对应的json字符串创建类,从里往外创<br>常用解析技术:<br>1、JSON源生<br>JSONObject:<br>getXXX(key)</p> <p>JSONArray:<br>getXXX(index)<br>length():长度</p> <p>2、Gson<br>gson.fromJson(json,Class):解析对象<br>gson.fromJson(json,new TypeToken<List<T>>(){}.getType()):解析数组<br>3、FastJson<br>JSON.parserObject(json,Class)<br>JSON.parserArray(json,Class)</p> <p><br>XML:可扩展的标记语言<br>常用解析:<br> 1、DOM<br> 区分:Node和Element<br> 2、SAX<br> 自定义DefaultHandler<br> 3、DOM4J<br> SAXReader<br> 4、XPATH<br> selectNodes/selectSingleNode</p> <p> </p> <p>JSP:Java Server Page<br>就是HTML和Servlet的组合</p> <p>重点:<br><%! %>:声明 <br><% %> :操作<br><%= %> :显示</p> <p>一、JSP语法:<br> 1、<%! 声明方法、属性 %>:定义属性、方法<br> 2、<% 代码块,运行在_jspService %>:操作内置对象<br> 3、<%=变量|表达式 %>:显示数据</p> <p>二、JSP组成:<br> 1、JSP模板元素:HTML标签<br> 2、JSP代码片段:<% %><br> 3、JSP表达式:<%= %><br> 4、JSP声明:<%! %><br> 5、JSP注释:<%-- --%><br>三、JSP的指令:就是JSP引擎起作用的时就加载<br> 1、page:页面信息<br> 2、include:加载其他页面<br> 3、taglib:使用JSTL表达式<br> 格式:<%@ 指令名称 属性名称="值" %><br>四、JSP内置对象:<br> 1、request:请求对象<br> 2、response:响应对象<br> 3、session:会话<br> 4、application:全局<br> 5、pageContext:当前页面信息<br> 6、exception:异常<br> 7、out:输出<br> 8、page:当前对应的Servlet对象<br> 9、config:servlet配置信息<br>五、JSP域对象<br>各个对象的作用域不同<br>从大到小:<br>1、application:整个Web应用<br>2、session:会话,一个客户端的<br>3、request:请求<br>4、pageContext:当前页面<br><br>六、EL表达式<br>简化的JSP表达式<br>格式:${名称} <br>作用:<br>1、获取请求参数<br>2、获取域的内容<br>3、获取cookie的内容</p> <p>七、JSTL<br>JSP标准标签库<br>结合指令<%@ taglib prefix="前缀" uri="资源"%></p> <p><br>分类:<br>1、核心库<br>2、格式化库<br>3、数据库<br>4、函数库<br>5、XML库</p> <p>常用:<br>核心库:<br>常用标签:<br><c:out>:输出<br><c:set>:设置<br><c:remove>:移除<br><c:if>:条件<br><c:choose>:多条件<br><c:forEach>:循环</p> <p><br>Web中的状态:<br>1、Cookie:本地状态<br>是将信息存储到本地<br>Cookie ck=new Cookie(key,v);<br>ck.setMaxAge(秒):有效期:0删除<br>ck.setPath("/"):当前Web</p> <p>response.addCookie()//添加Cookie<br>request.getCookies:获取Cookie</p> <p>可以记录用户名或免登陆等<br>2、Session:会话服务器状态<br>是将信息存储到服务器内存<br>JSP:session内置对象<br>Servlet:<br>HttpSession session=request.getSession();<br>session.setAttribute():存储数据<br>session.getAttribute:获取数据<br>session.setMaxInactiveInterval:设置Session最大空闲时间</p> <p> </p> <p>Lambda表达式<br>简化格式:接口就一个方法的实现类的简化<br>格式:(需要重新的抽象方法的参数)->代码块</p> <p>本周重点:<br>会用Servlet进行获取数据和响应数据<br>会解析XML\JSON<br>会使用JSP<br>会使用Cookie\Session</p> <p> </p> <p><strong>》十五</strong></p> <p> </p> <p>回顾:<br>Tomcat:服务器<br>Servlet:java语言运行在服务器的api<br>作用:<br>1、获取浏览器或客户端的请求信息<br>2、对浏览器或客户端进行信息的响应<br>HttpServletRequest:请求<br>getXXXX:获取<br>HttpServletResponse:响应<br>setXX:设置<br>getOutputStream:获取输出字节流<br>getWriter:输出字符流</p> <p>JSP:Java对Servlet和HTML的整合页面</p> <p>符号:<br><%! %>声明<br><% %>使用<br><%= %>显示</p> <p> </p> <p><br>三大指令:<br>page\include\taglib<br><%@ 指令名称%><br>四大域:<br>就是根据作用域的不同而区分,主要存储数据<br>从大到小:application--->session---->request---->pageContext<br>九大对象:<br>request<br>response<br>session<br>page<br>pageContext<br>application<br>exception<br>config<br>out<br>三元素<br>include\forward\param<br><jsp:元素名称></p> <p>EL:表达式----代替<%= %><br>作用:<br>1、获取请求参数<br>2、获取域中属性<br>3、获取cookie<br>格式:${ }</p> <p>JSTL:标准标签库----代替<% %><br>使用步骤:<br>1、导入jar包<br>2、在jsp使用taglib标记<br>3、使用标签</p> <p>核心库:c<br><c:out><br><c:set><br><c:remove><br><c:if><br><c:choose><br><c:forEach></p> <p><br>JSP和Servlet区别?<br>开发中:<br>JSP主要用来接收服务器数据并显示<br>Servlet主要用来进行逻辑处理</p> <p><br>三跨数据格式:<br>HTML<br>XML<br>JSON</p> <p>Cookie<br>Session</p> <p> </p> <p>内容:<br>一、反射<br>反射:就是程序运行时,动态获取类的信息的行为</p> <p>反射作用:<br>1、获取类的属性、方法、注解等<br>2、执行私有的属性或方法</p> <p>Class:字节码类</p> <p>Class对象的创建方式:<br>1、类名.class<br>2、对象名.getClass<br>3、Class.forName(类名全称)</p> <p>常用方法:<br>getFields:获取所有public字段<br>getDeclaredFields:获取本类的所有字段不包含继承<br>getDeclaredField:获取指定字段名称的字段对象<br>getMethods:获取所有的public方法<br>getDeclaredMethods:获取本类所有的方法,不包含继承<br>getDeclaredMethod:获取指定方法名称,形式参数的方法对象<br>getDeclaredAnnotations() :获取当前类的注解<br>newInstance:创建对应类的对象</p> <p><br>Method类:<br>常用方法:<br> getAnnotations:获取方法上的注解<br> invoke:执行方法<br> setAccessible:设置是否忽略访问校验<br>Filed类:<br>常用方法:<br> set:设置属性的值<br> get:获取属性的值<br> setAccessible:设置是否忽略访问校验<br> getAnnotations:获取字段上的注解</p> <p><br>Object</p> <p>二、注解<br>注解就是为机器添加的注释,主要为了简化开发</p> <p>元注解:就是修饰注解的注解<br>开发中定义注解的时候会使用元注解<br>四大元注解:<br>@Target 表示该注解用于什么地方,可能的值在枚举类 ElemenetType 中<br>设置注解的使用范围<br>@Retention 表示在什么级别保存该注解信息。可选的参数值在枚举类型 RetentionPolicy 中<br>@Documented 将此注解包含在 javadoc 中 ,它代表着此注解会被javadoc工具提取成文档。在doc文档中的内容会因为此注解的信息内容不同而不同。相当与@see,@param 等<br>@Inherited 允许子类继承父类中的注解</p> <p>创建注解步骤:<br>1、创建注解对象,@interface<br> 1、标记注解的使用范围和有效期<br> 2、定义属性,记录注释内容<br>2、使用注解<br> 1、要在注解的使用范围之内使用<br>3、解析注解<br> 1、通过反射获取注解的内容使用</p> <p>开发中主要是使用别人家的注解</p> <p><br>3、泛型<br>就是引用类型的占位符,避免了转型<br>jdk5.0之后出现的</p> <p>26个大写字母都可以</p> <p>记住:泛型无论在哪使用,都必须声明<br>格式:<字母><br>使用:字母</p> <p>使用方式:<br>1、泛型类或接口<br>类名<字母><br>2、泛型方法<br><字母> 返回值 方法名称(形式参数)<br>{</p> <p><br>}</p> <p>主要用来开发工具类、框架</p> <p>基本要求:<br>反射:会获取类中的信息<br>注解:使用注解时,可以大概猜出源码流程<br>泛型:要求会使用</p> <p><br>开发实例:<br>1、模拟Gson解析<br>2、模拟QueryRunner的查询</p> <p> </p> <p><strong>》十六</strong></p> <p> </p> <p>一、文件上传<br>用户通过网页将选择的图片上传到服务器<br>1、Servlet<br>负责接收请求来的文件信息并保存到服务器<br>2、HTML/JSP<br>负责用户选择文件并上传到对应的Servlet</p> <p>服务器将文件存储在<br>META-INF<br>WEB-INF<br>这些下面的时候,浏览器无法访问<br>如果存在WebContent下可以访问</p> <p>使用Apache的jar包实现文件的上传</p> <p>文件上传步骤:<br>1、创建jsp或html页面<br>注意使用表单,一定要设置表单的enctype="multipart/form-data属性<br>表示是文件上传的表单<br>2、创建Servlet<br>3、重写doPost方法<br>4、运行</p> <p>涉及到的类:<br>1、DiskFileItemFactory:文件工厂,主要用来创建上传对象<br>常用方法:<br>setRepository:设置上传的临时文件夹</p> <p>2、ServletFileUpload:上传类<br>静态方法:isMultipartContent验证是否有file标签<br>常用实例方法:<br> setHeaderEncoding:设置编码格式<br> setFileSizeMax:设置文件总大小<br> setSizeMax:设置总大小<br> parseRequest:获取当前请求中的所有参数信息</p> <p>3、FileItem:文件对象<br>常用方法: <br> 1、isFormField:验证是否为非file标签<br> 2、getName:获取文件名称<br> 3、getInputStream:获取文件内容</p> <p>二、文件下载<br>不需要任何jar包</p> <p>主要记忆的是以下消息头:<br>1、user-agent:获取浏览器类型<br>2、content-disposition:设置文件名称,值:ttachment;filename=文件名<br>3、setContentType:设置正文内容的MIME类型<br>4、setContentLengthLong:设置正文的字节个数</p> <p>使用步骤:<br>1、获取要下载的文件路径<br>2、验证文件是否存在<br>3、设置消息头<br>4、创建流,读取内容并返回<br>5、运行</p> <p>三、事件<br>事件:就是一组行为<br>实现了事件接口的类就叫监听器<br>事件的使用步骤:<br>1、创建类实现对应的xxxListener<br>2、重写方法<br>3、配置事件<br>4、运行</p> <p>注册事件的方式:<br>1、xml配置<br>在web.xml中使用<br><listener><br><listener-class>监听器的类名</listener-class><br></listener><br>2、注解配置<br>在监听器的类上使用<br>@WebListener就可以</p> <p>创建方式:<br>1、自定义类,实现接口,配置事件<br>2、直接new Listener</p> <p><br>常用事件:<br>1、ServletContext:<br>ServletContextListener:监听创建或销毁<br>ServletContextAttributeListener:监听属性的新增、修改、删除</p> <p>2、HttpSession:<br>HttpSessionListener:监听创建或销毁<br>HttpSessionAttributeListener:监听属性的新增、修改、删除<br>HttpSessionBindingListener:监听属性为对象的新增、删除</p> <p>3、ServletRequest:<br>ServletRequestListener:监听创建、销毁<br>ServletRequestAttributeListener:监听属性的新增、修改、删除</p> <p> </p> <p>12306的Session失效的效果<br>10秒无交互,失效</p> <p>思路:<br>要不要保存所有的Session<br>保存在什么地方<br>怎么验证失效<br>定时验证</p> <p> </p> <p>重点:文件上传&下载</p> <p> </p> <p><strong>》十七</strong></p> <p> </p> <p>File类:<br>FileNameFilter<br>FileFilter</p> <p><br>Listener:监听,域的变化</p> <p>Servlet过滤器Filter接口:会对每一次的请求进行过滤<br>使用步骤:<br>1、创建Filter类<br>2、重写对应的方法<br>3、配置</p> <p><br>Filter接口中的方法:<br>1、init:初始化<br>参数说明:<br>FilterConfig:过滤器的配置信息<br> 常用方法:<br> getInitParameter:获取配置的参数的值</p> <p>2、doFilter:过滤<br>重要方法,进行条件的筛选,是否允许放行<br>参数说明:<br> 1、request:请求对象<br> 2、response:响应对象<br> 3、chain:过滤器通行对象<br><br>3、destroy:销毁</p> <p><br>FilterChain:就是调用下一个链</p> <p>常用方法:<br>doFilter:继续请求<br>参数说明:<br> 1、request:请求对象<br> 2、response:响应对象</p> <p><br>Filter的注册方式:<br>1、xml配置<br>在web.xml下使用<br><!--配置过滤器 --><br> <!--filter:让服务器创建过滤器对象 --><br> <filter><br> <filter-name>myf1</filter-name><br> <filter-class>org.qf.study1.MyFilter2</filter-class><br><br> </filter><br> <!--filter-mapping:设置当前过滤对象的过滤原则 --><br> <filter-mapping><br> <filter-name>myf1</filter-name><br> <url-pattern>/MyServlet1</url-pattern><br> </filter-mapping><br><br>2、注解<br>@WebFilter:配置过滤器<br>注解的常用属性:<br> 1、urlPatterns:设置要过滤的资源 /* 所有 /Servlet名称 /xxx.jsp <br> 2、initParams:设置过滤器的配置信息</p> <p>注解注册和xml注册的区别?<br>1、注解方便,xml麻烦<br>2、注解无法设置过滤器的顺序(是根据过滤器的名称的字符串顺序进行的)<br>xml配置可以设置,是根据<filter-mapping>的先后顺序进行加载的<br><br></p> <p>在开发中,get传递中文,一般都乱码<br>url编码为ISO8859-1,而这种编码不支持中文</p> <p>过滤器的常用:<br>1、使用过滤器实现get的自动转码<br>步骤:<br>1、创建过滤器<br>2、在doFilter的方法中验证请求方式<br>3、get请求需要将请求参数的内容的编码格式都转换<br> 重写请求对象的参数内容:HttpServletRequestWrapper<br>4、重写获取参数值的方法<br> 1、getParameter<br> 2、getParameterMap<br> 3、getParameterValues</p> <p>2、自动登录</p> <p> </p> <p> </p> <p>具有登录功能的网页<br>设计数据库<br>搭框架</p> <p> </p> <p>Md5:加密,不可逆<br>目前使用最广泛,因为简单</p> <p> </p> <p>Ajax<br>JQuery<br>项目</p> <p> </p> <p><strong>》十八</strong></p> <p> </p> <p>同步:单线程:代码会从上到下进行,会引起阻塞<br>异步:多线程:开启多个线程,各个互不影响</p> <p><br>2个子线程分别运行。如何在主线程中获取2个子线程的结束?</p> <p><br>一、Ajax:Asynchronous JavaScript And XML<br>局部刷新网页的技术</p> <p>1、核心对象:XMLHttpRequest<br>获取方式:<br>//根据浏览器的不同创建Ajax对象<br>function getXMLRequest(){<br> var xttp;<br> if(window.XMLHttpRequest){//当前浏览器支持直接创建ajax对象<br> xttp=new XMLHttpRequest();<br> }else{//支持IE5\6<br> xttp=new ActiveXObject("Microsoft.XMLHTTP");<br> }<br> return xttp;<br>}</p> <p>2、常用属性:<br> readyState:类型short;只读 <br> 取值说明:<br> 就绪状态码 说 明<br> 0 XMLHttpRequest对象没有完成初始化即:刚刚创建。<br> 1 XMLHttpRequest对象开始发送请求调用了open方法,但还没有调用send方法。请求还没有发出<br> 2 XMLHttpRequest对象的请求发送完成send方法已经调用,数据已经提交到服务器,但没有任何响应<br> 3 XMLHttpRequest对象开始读取响应,还没有结束收到了所有的响应消息头,但正文还没有完全收到<br> 4 XMLHttpRequest对象读取响应结束一切都收到了<br><br> responseText:类型String;只读,服务器返回内容:一般为普通字符串或json字符串<br> responseXML:类型Document;只读,服务器返回内容:xml文档格式<br> status:类型short;只读,服务器的状态响应码<br> 常用取值说明:<br> 状态码 说 明<br> 200 服务器响应正常<br> 400 无法找到请求的资源<br> 403 没有访问权限<br> 404 访问的资源不存在<br> 500 服务器内部错误</p> <p><br>一般都需要验证readyState=4 并且 status=200<br>3、常用方法:<br> open(method,URL,async) 建立与服务器的连接method参数指定请求的HTTP方法,典型的值是GET或POST,URL参数指请求的地址,async参数指定是否使用异步请求,其值为true或false<br> send(content) 发送请求content参数指定请求的参数 <br> setRequestHeader(header,value) 设置请求的头信息 </p> <p>4、事件属性:<br> onreadystatechange:指定回调函数,获取服务器响应内容的函数<br> 值为函数,用来处理服务器响应内容<br><br>5、使用步骤:<br> 1、获取XMLHttpRequest对象------new XMLHttpRequest()<br> 2、设置回调函数-------onreadystatechange<br> 3、打开连接-----------open<br> 4、设置请求头---------setRequestHeader<br> 5、发送---------------send</p> <p> </p> <p>登陆</p> <p>练习:</p> <p>1、开发注册页面<br>要求:<br> 1、自己写Servlet(2个,一个负责验证用户名是否存在,另一个负责添加用户)<br> http://localhost:8080/Web_Day18_AutoLogin/checkname<br> http://localhost:8080/Web_Day18_AutoLogin/register<br> 2、写一个HTML页面,完成注册功能。<br> 就是普通的html页面,没有使用表单<br> 3、Ajax实现用户名是否存在,实现注册<br> 通过Ajax传输数据并接受 <br><br><br><br>2、分页<br>步骤:<br>1、完成Servlet,接受当前页码和每页显示的数据<br>2、通过Ajax请求Servlet</p> <p><br>JS解析JSON数据:<br>通常使用JSON.parse进行解析<br>有点类似JSON源生解析</p> <p> </p> <p>3、搜索<br>根据商品名称实现模糊搜索<br>只需在Servlet添加参数,商品名称<br>html中通过JS控制</p> <p> </p> <p><strong>》十九</strong></p> <p> </p> <p>一、jQuery<br>简化JS的使用<br>jQuery:就是一个轻量级的JS库<br>简化JS的使用<br>目的:写的更少,做的更多</p> <p>需要引入jQuery库<br>免费、开源</p> <p>1.2jQuery的格式:$("选择器").行为(参数);<br>解释:<br> 1、$:jQuery的标记<br> 2、选择器:类似CSS选择器<br> 3、行为:操作对知道的元素进行的操作<br><br><br>页面加载完成之后,调用 <br>$(document).ready(function(){</p> <p>});<br>等价于:<br>window.οnlοad=function(){</p> <p><br>}<br><br>1.3jQuery的选择器:<br>常用选择器:<br> 1、标签选择器:直接写HTML标签名称<br> 2、class:为HTML标签使用class属性的值,.类名<br> 3、id:为HTML标签使用id属性的值,#id名</p> <p>注意:选择器可以混合使用,只需记得每种的格式</p> <p>1.4jQuery的行为/操作<br> 行为可以是事件、文档、样式、属性、效果</p> <p>1.4.1事件:对应的就是HTML标签的事件属性<br>事件的的参数都是函数<br> 常用事件:<br> ready:加载完触发<br> click:点击触发<br> change:内容改变触发<br> blur:失去焦点触发<br> focus:获取焦点触发<br> dblclick:双击触发</p> <p>1.4.2文档<br>操作Html的内容,参数一般为要设置的文本内容,不带参数就是得到<br> html:内部的HTML内容----innerHTML<br> val:input标签的value属性<br> append:追加,在当前的选择器的元素内部追加<br> after:添加,在当前选择器元素的后面添加<br> before:添加,在当前选择器元素的前面添加<br> remove:移除<br></p> <p>1.4.3样式<br>就是为HTML元素设置CSS属性<br> 常用行为:<br> css:设置对应标签的属性<br> 参数:<br> 1、css属性敏成功<br> 2、css属性的值<br> 取值说明:<br> 1、没有:获取属性的中<br> 2、具体的值:设置属性的值<br> 3、函数:必须返回当前属性的值</p> <p><br>1.4.4属性<br>改变HTML的标签属性<br> 常用:<br> attr():设置或获取对应的属性<br> toggleClass:新增或删除class属性,不存在就新增,存在就删除<br> removeAttr:移除属性</p> <p><br>1.4.5效果<br>特效<br>1、显示和隐藏<br> hide:隐藏<br> 参数说明:<br> 1、没有参数:就是立即执行<br> 2、1个参数:就是在指定的毫秒之内隐藏完毕<br> 3、2个参数:就是在指定的毫秒之内隐藏完毕,并回调指定的函数<br><br> show:显示<br> 参数说明:<br> 1、没有参数:就是立即执行<br> 2、1个参数:就是在指定的毫秒之内显示完毕<br> 3、2个参数:就是在指定的毫秒之内显示完毕,并回调指定的函数<br> toggle:显示或隐藏<br> 参数说明:<br> 1、没有参数:就是立即执行<br> 2、1个参数:就是在指定的毫秒之内执行完毕<br> 3、2个参数:就是在指定的毫秒之内执行完毕,并回调指定的函数</p> <p><br>2、透明度<br>就是可见的清晰度<br>范围:[0.0,1.0]<br>其中:0.0看不见<br>1.0完全可见<br>常用:<br> fadeTo:改变透明度<br> 参数说明:<br> 1、速度<br> 2、透明度<br> 3、回调函数<br><br>3、自定义动画<br>可以自己指定属性的变化<br> 常用:<br> animate:设置动画<br> 参数说明:<br> 1、属性内容:json数据,可以同时设置多个属性变化<br> 2、动画持续时间<br><br><br></p> <p><br>1.5jQuery的Ajax<br>就是jQuery对象Ajax技术进行了封装,简化<br>常用:<br>1、load:<br>使用方式:<br>$(选择器).load(url,data,callback)<br>一般都是直接使用<br>会默认将返回结果设置到对应的选择器</p> <p>2、ajax:<br>使用方式:<br> $.ajax(json格式数据):参数为{属性名称:值}<br> 常用的名称:<br> url:要请求的路径<br> data:参数<br> method:方式<br> success:成功的回调方法<br> error:错误的回调方法<br>3、get:get请求<br>使用方式:<br> $.get(url,data,callback)<br>4、post:post请求<br>使用方式:<br> $.post(url,data,callback)</p> <p> </p> <p> </p> <p> </p> <p>练习:使用jQuery对输入框的内容进行校验</p> <p> </p> <p>课下:<br>设计模式:建造者模式<br>链式编程</p> <p> </p> <p> </p> <p><br>二、总结</p> <p>1、前端<br>HTML:超文本标记语言<br>在浏览器中显示数据<br>格式:<标签名称></标签名称></p> <p> 语法格式:<br> 1、固定标签<br> 2、标签嵌套<br> 3、属性的值必须双引号<br> 4、成对出现<br> 5、不区分大小写<br><br>常用标签:<br>div\form\p\a\img\input\ul\ol\select\textarea\hr\br\table\tr\td\th\span\h1\label\frameset\frame<br>常用属性:<br>width\height\src\href\border\align\style\id\class\name\action\method\enctype\checked\disabled<br>常用事件:<br>onload\onclick\ondblclick\onfocus\onblur\onchange\onmouseout\onmouseover\onsubmit\onselect</p> <p>CSS:层叠样式表<br>美化HTML</p> <p>格式:选择器{属性名称:值}</p> <p>引用方式:<br>1、外部:link<br>3、内部:在head使用<style><br>4、内嵌:在标签中使用style属性</p> <p>选择器:<br>1、标签:标签名称{}<br>2、class::.类名<br>3、id:#id名称<br>4、属性:[属性名称=值]</p> <p>常用属性:<br> 1、背景:backgroundXXX<br> 2、文本:textXXX<br> 3、字体:fontXXX<br> 4、盒子模型<br> 1、borderXXX:边框<br> 2、marginXXX:外边距<br> 3、paddingXXX:内边距<br> 5、列表:list-style-type<br> 6、位置:<br> 1、float:浮动<br> 2、position:定位<br><br>JS:JavaScript:浏览器脚本语言<br>动态交互HTML</p> <p>引用方式:<br>1、外部js文件:<script src="路径"/><br>2、head内部:<script><br>3、body内部:<script></p> <p>JS语法:<br>1、数据类型:<br> 原始类型:字符串、数字、boolean<br> 引用类型:<br>2、变量:可变的量<br>格式:var 变量名称[=值];</p> <p>js的变量可以不声明直接使用</p> <p>3、运算符:算术、比较、赋值、逻辑、位、三目、字符串连接</p> <p>4、分支语句<br> if else<br> switch<br><br>break<br>return<br>5、循环语句<br> for<br> for in <br> while<br> do\while<br></p> <p>6、函数<br>格式:function 函数名称(参数名称){<br><br> [return 返回值]<br>}</p> <p>7、全局函数<br> 1、isNaN<br> 2、Number<br> 3、String<br> 4、parseInt<br> 5、parseFloat<br><br>8、内置对象<br> 1、Number<br> 2、String<br> 3、Math:<br> floor<br> random<br> round<br> 4、Array<br> 创建数组<br> 可以改变长度<br> 常用属性:<br> length<br> 常用方法:<br> sort:排序<br><br> 5、Regex<br> 正则表达式<br> 以/正则规则/<br> Regex<br> Pattern<br><br> 常用字符串的:<br> matchs:匹配<br> split:切割<br> replace:替换<br><br> 6、window<br> 7、Date<br><br>9、document<br> 常用方法:<br> 1、getElementById<br> 2、getElementsByTagName<br> 3、getElementsByName<br> 4、createElement<br> 5、setAttribute<br> 6、appendChild<br><br><br> value<br> src<br> innerHTML<br> href<br><br><br></p> <p><br>2、数据库<br>MySQL:数据库<br>存储数据的仓库<br>SQL:结构化查询语言<br>分类:<br>1、DDL:数据库定义语言:create\drop\alter<br>2、DML:数据库操作语言:insert\update\delete<br>3、DCL:数据库控制语言:用户、安全等<br>4、DQL:数据库查询语言:select</p> <p>七大语句:<br>create table/database<br>alter table/database<br>drop table/database</p> <p>insert into 表名(字段) values(值)<br>update 表名 set <br>delete from 表名 <br>select 字段 from 表名 [where] [order by] [group by] [having] [limit] <br><br>约束条件:<br>1、主键 <br>2、唯一<br>3、非null<br>4、默认<br>5、外键</p> <p>条件:<br>and\or<br>= != >=<br>like<br>in<br>between and<br>IS NULL<br>IS NOT NULL</p> <p><br>聚合函数:<br>MAX<br>MIN<br>SUM<br>AVG<br>COUNT</p> <p>函数:<br>now<br>random<br>md5</p> <p>多表操作:<br>1、内联:inner join<br>2、左外连:left out join<br>3、右外连:right out join<br>4、笛卡尔积:select * from 表1,表2</p> <p>触发器:自动新增、修改、删除等</p> <p><br>事务:保证操作的一致性<br>start transaction:开启事务<br>commit:提交事务<br>rollback:回滚事务</p> <p>事务特性:<br>A原子性<br>C一致性<br>I隔离性<br> 防止脏读、幻度、虚度等<br>D持久性</p> <p>JDBC:java操作数据库的接口</p> <p>使用步骤:<br>1、导入数据库驱动jar<br>2、动态加载<br>3、连接<br>4、获取操作SQL对象<br>5、执行SQL<br>6、销毁</p> <p>DriverManager:驱动管理<br>Connection:连接<br>Statement:操作SQL<br>PreparedStatement:防SQL注入操作SQL<br>ResultSet:结果集</p> <p><br>连接池:存储数据库连接的池子<br>管理数据库的连接</p> <p>常用的数据库连接池:<br>1、C3P0<br>2、DBCP</p> <p><br>QueryRunner:工具类<br>常用方法:<br> 1、update<br> 2、query<br><br> BeanHander:将结果从ResultSet中转换为实体对象<br> BeanListHander:将结果从ResultSet中转换为list<br><br><br></p> <p>3、后端<br>Tomcat:服务器<br>免费、不要钱</p> <p>目录:<br>bin:可执行<br>lib:第三方jar<br>config:配置文件<br>webapps:发布的Web应用<br>work:工作空间<br>temp:临时文件<br>log:日志</p> <p>可以运行我们的Servlet&JSP</p> <p> </p> <p>Servlet:java语言编写的运行在服务器的api<br>获取请求数据<br>响应数据<br>Servlet创建方式:<br>1、实现Servlet接口<br> 重写方法:<br> init<br> destroy<br> service<br>2、继承GenericServlet<br> 重写:<br> service<br>3、继承HttpServlet<br> 重写:<br> doGet<br> doPost<br><br><br>配置Servlet:<br> 1、xml配置<br> 在web.xml下使用:<br> <servlet><br> <servlet-name>名称</servlet-name><br> <servlet-class>类名</servlet-class><br> </servlet><br> <servlet-mapping><br> <servlet-name>名称</servlet-name><br> <url-pattern>匹配规则</url-pattern><br> </servlet-mapping><br><br> 2、注解<br> @WebServlet()</p> <p>使用步骤:<br>1、创建Servlet<br>2、重写方法doGet、doPost<br>3、配置<br>4、发布</p> <p>Request:请求</p> <p>常用方法:<br> getParameter:获取指定key的值<br> getParameterValues:获取指定key的所有值<br> getParameterNames:获取所有的Key<br> getParameterMap:获取所有的Key和对应的值<br> getAttribute:获取指定Key的属性<br> setAttribute:新增属性或修改属性<br> removeAttribute:移除属性<br> getMethod:获取请求方式<br> getRemoteAddr:获取远程IP<br><br><br>属性和参数的区别?<br>属性可以存储对象<br>参数不可以</p> <p>Response:响应<br> 常用:<br> getOutputStream:获取输出字节流:响应数据<br> getWriter:获取输出字符流:响应数据<br> setCharacterEncoding:设置内容的编码格式<br> setContentType:设置内容的类型<br> setHeader:设置消息头<br></p> <p>跳转:<br>1、客户端跳转<br> 重定向<br>2、服务端的跳转<br> 请求转发<br><br>请求行:自动携带<br>消息头:浏览器、服务器识别<br></p> <p>请求的组成:<br>请求行<br>请求消息头<br>请求内容</p> <p> </p> <p>JSP:Java Server Page<br>java根据Servlet和HTML结合创建<br>可以在浏览器直接访问,底层运行转化为诶Servlet</p> <p>符号:<br><%! %>:声明<br><% %>:操作<br><%= %>:显示</p> <p><%--注释--%></p> <p><br>三大指令:<br>格式:<%@ 指令名称 属性=值 %><br>1、page:导入包、标记文档类型等<br>2、include:静态加载其他页面<br>3、taglib:标记JSTL标签库</p> <p> </p> <p>九大对象:<br>内置,默认创建<br>1、request<br>2、response<br>3、application<br>4、session<br>5、page<br>6、pageContent<br>7、out<br>8、exception<br>9、config</p> <p> </p> <p><br>四大域:<br>application----ServletContext<br>作用域:整个Web范围<br>session----HttpSession<br>作用域:客户访问产生,默认30分钟无响应销毁<br>request---HttpServletRequest<br>作用域:发起请求默认产生,也可以转发<br>pageContext---ServletContent<br>作用域:当前页面</p> <p><br>都有以下方法:<br> getAttribute<br> setAttribute<br> removeAttribute</p> <p>三元素:<br>1、include:动态加载其他页面<br>2、forward:跳转其他页面<br>3、param:携带参数 </p> <p> </p> <p><br>EL表达式:简化jsp <%= %><br>格式:${域中属性名称|param.参数名称|cookie}</p> <p> </p> <p><br>JSTL:标准标签库<br>简化jsp-- <% %><br>c:out<br>c:set<br>c:forEach<br>c:choose<br>c:if<br>c:remove</p> <p><br>Cookie:将信息保存在客户的电脑上,硬盘</p> <p>request.getCookies:获取所有Cookie<br>response.addCookie:添加Cookie</p> <p>记住账号</p> <p>Session:将信息保存在服务器,内存</p> <p>request.getSession</p> <p>保存登录账号等</p> <p>数据格式:<br>特点:三跨:跨平、跨网络、跨编程语言</p> <p>1、HTML:浏览器<br>2、JSON:<br>[]数组<br>{}对象<br>常用解析:<br> 1、JSON源生<br> JSONObject:解析对象<br> JSONArray:解析数组<br> 2、Gson<br> gson.fromJson:解析json数据<br> gson.toJson:将对象转换为JSON字符串<br> 3、fastjson<br> JSON.parseObject:解析对象<br> JSON.parseArray:解析数组<br>3、XML</p> <p>作用:<br>1、配置文件<br>2、传送数据</p> <p>常用解析:<br> 1、Dom源生解析<br> 区分元素和节点<br> 2、SAX<br> 自定义DeafultHeader<br> 3、DOM4j<br> SAXReader<br> 4、XPATH<br> 查询<br></p> <p>4、技术</p> <p>1、注解反射泛型<br>注解:为代码添加的注释<br>一般为解决特殊情况准备的<br>比如:json特殊的属性名称</p> <p> </p> <p>创建注解:<br>1、创建@interface<br>2、创建属性<br>3、使用注解<br>4、解析注解</p> <p>反射:<br>动态获取类的信息</p> <p>作用:<br>1、获取类的信息:属性、方法、注解、构造器等<br>2、执行私有属性或方法</p> <p><br>Class类</p> <p>泛型:<br>用来占位的字母</p> <p>引用类型占位,避免转型</p> <p>结合反射使用</p> <p>切记:泛型也得先声明才可以使用<br><字母>这就是声明</p> <p><br>文件上传&下载<br>文件上传使用第三方:<br>1、页面需要有file标签<br>2、设置表单的enctype="muilpart/form-data"<br>3、在对应的Servlet获取FileItem<br>4、创建保存路径<br>5、流的读取和写出</p> <p><br>Listener:事件<br>就是获取application\session\request等变化的接口</p> <p>注册方式:<br>1、xml<br><listener><br><listener-class></listener-class><br></listener><br>2、注解<br>@WebListener</p> <p>监听器:就是实现了Listener接口的类<br>创建或销毁、属性内容的变化</p> <p><br>Filter:过滤器<br>可以对每一次的请求和响应作出过滤</p> <p>注册方式:<br>1、xml<br>在web.xml下使用:<br> <filter><br> <filter-name>名称</filter-name><br> <filter-class>类名</filter-class><br> </filter><br> <filter-mapping><br> <filter-name>名称</filter-name><br> <url-pattern>匹配规则</url-pattern><br> </filter-mapping><br><br>2、注解<br>@WebFilter(ulrPatterns={})</p> <p>注解的执行顺序按照字符串顺序<br>xml是按照<filter-mapping>先后顺序执行</p> <p><br>生命周期:<br>1、init<br>2、doFilter<br>继续必须使用chain.doFilter</p> <p>3、destroy</p> <p><br>作用<br>1、自动转码<br>2、自动登录</p> <p> </p> <p>Ajax:异步局部刷新<br>可以对网页的局部内容进行请求服务器病显示返回结果</p> <p>结果数据格式:<br>1、字符串<br>2、JSON<br>3、xml</p> <p> </p> <p>XMLHttpRequest:Ajax的核心对象<br>new XMLHttpRequest();</p> <p><br>常用属性:<br>1、readyState:读取状态<br> 0初始化<br> 1打开链接<br> 2发生请求<br> 3未接收完全<br> 4全部OK<br>2、status:服务器返回的状态响应码<br> 200:OK<br> 404:未发现:要么服务器宕机、要么服务器将页面删除了、要么url路径写错了<br> 403:没有权限<br> 500:服务器错误</p> <p>事件属性:<br>onreadystatechange:读取状态变化事件<br>对应的值:回调函数</p> <p>常用方法:<br>1、open:打开链接<br>2、setRequestHeader:设置消息头<br>3、send:发送</p> <p> </p> <p>使用步骤:<br>1、创建XMLHttpRequest对象<br>2、设置回调函数<br>3、打开链接<br>4、设置请求头<br>5、发送信息</p> <p><br>jQuery:简化JS<br>就是对JS进行了封装</p> <p>详情看上面</p> <p> </p> </div> <p>转载于:https://www.cnblogs.com/lidar/p/7745979.html</p> </div> </div> </div> </div> </div> <!--PC和WAP自适应版--> <div id="SOHUCS" sid="1831051367792340992"></div> <script type="text/javascript" src="/views/front/js/chanyan.js"></script> <!-- 文章页-底部 动态广告位 --> <div class="youdao-fixed-ad" id="detail_ad_bottom"></div> </div> <div class="col-md-3"> <div class="row" id="ad"> <!-- 文章页-右侧1 动态广告位 --> <div id="right-1" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad"> <div class="youdao-fixed-ad" id="detail_ad_1"> </div> </div> <!-- 文章页-右侧2 动态广告位 --> <div id="right-2" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad"> <div class="youdao-fixed-ad" id="detail_ad_2"></div> </div> <!-- 文章页-右侧3 动态广告位 --> <div id="right-3" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad"> <div class="youdao-fixed-ad" id="detail_ad_3"></div> </div> </div> </div> </div> </div> </div> <div class="container"> <h4 class="pt20 mb15 mt0 border-top">你可能感兴趣的:(数据库,java,json)</h4> <div id="paradigm-article-related"> <div class="recommend-post mb30"> <ul class="widget-links"> <li><a href="/article/1835327218037911552.htm" title="Web安全:Web体系架构存在的安全问题和解决方室" target="_blank">Web安全:Web体系架构存在的安全问题和解决方室</a> <span class="text-muted">程序员-张师傅</span> <a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/%E5%AE%89%E5%85%A8/1.htm">安全</a><a class="tag" taget="_blank" href="/search/web%E5%AE%89%E5%85%A8/1.htm">web安全</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a> <div>Web体系架构在提供丰富功能和高效服务的同时,也面临着诸多安全问题。这些问题可能涉及数据泄露、服务中断、系统被控制等多个方面,对企业和个人造成不可估量的损失。以下是对Web体系架构中存在的安全问题及解决方案的详细分析:Web体系架构存在的安全问题注入攻击SQL注入:攻击者通过在输入字段中插入恶意SQL代码,操控后台数据库,窃取、篡改或删除数据。OS命令注入:攻击者通过输入字段插入恶意代码,执行系统</div> </li> <li><a href="/article/1835319276056178688.htm" title="MySQl篇(SQL - 基本介绍)(持续更新迭代)" target="_blank">MySQl篇(SQL - 基本介绍)(持续更新迭代)</a> <span class="text-muted">wclass-zhengge</span> <a class="tag" taget="_blank" href="/search/mysql/1.htm">mysql</a><a class="tag" taget="_blank" href="/search/sql/1.htm">sql</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a> <div>目录一、简介二、SQL方言(分页查询为例)1.简介2.SQL方言大比拼2.1.Oracle2.1.1.使用ROWNUM实现分页查询2.1.2.使用ROW_NUMBER()实现分页查询2.2.MySQL2.3.PostgreSQL三、语法规范四、注释五、MySQL脚本中的标点符号一、简介1、SQL是结构化查询语言(StructureQueryLanguage),专门用来操作/访问关系型数据库的通用语</div> </li> <li><a href="/article/1835318217573232640.htm" title="SPI机制" target="_blank">SPI机制</a> <span class="text-muted">我们仍未知道那天所看见的猫的名</span> <div>1、SPI机制:ServiceProviderInterface:服务提供发现机制,类型IOCJavaSPI实现:ServiceLoader定义接口A;实现接口A的实现类,B和C;在/META-INF/services/下创建文件,文件名为A类的全名称,内容为B和C的类全名调用:ServiceLoaderload=ServiceLoader.load(A.class);Interatori=loa</div> </li> <li><a href="/article/1835314235240968192.htm" title="梧桐数据库(WuTongDB):数据库技术中都有哪些常见的优化器" target="_blank">梧桐数据库(WuTongDB):数据库技术中都有哪些常见的优化器</a> <span class="text-muted">鲁鲁517</span> <a class="tag" taget="_blank" href="/search/%E6%A2%A7%E6%A1%90%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">梧桐数据库</a><a class="tag" taget="_blank" href="/search/%E6%A2%A7%E6%A1%90%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">梧桐数据库</a> <div>以下是一些常见的数据库优化器:1.CBO(Cost-BasedOptimizer)应用场景:广泛应用于关系型数据库中,如Oracle、PostgreSQL、MySQL等。工作原理:通过计算不同执行计划的代价(如CPU、I/O等资源消耗),选择最低代价的执行计划。代表数据库:Oracle、PostgreSQL、MySQL。特点:CBO使用统计信息(如表大小、索引分布)来评估查询的代价。2.RBO(R</div> </li> <li><a href="/article/1835314160863375360.htm" title="SQLIntegrityConstraintViolationException解决方案" target="_blank">SQLIntegrityConstraintViolationException解决方案</a> <span class="text-muted">lu520zxcv</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a> <div>java.sql.SQLIntegrityConstraintViolationException:Duplicateentry'2'forkey't_pay.PRIMARY'当项目中出现上述异常表示,唯一的键已存在,再次向数据库插入相同唯一键的数据,此时,我们只需要将唯一键字段换一个既可。</div> </li> <li><a href="/article/1835310380474265600.htm" title="Java面试笔记记录6" target="_blank">Java面试笔记记录6</a> <span class="text-muted">今天背八股了吗</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E9%9D%A2%E8%AF%95/1.htm">面试</a><a class="tag" taget="_blank" href="/search/%E7%AC%94%E8%AE%B0/1.htm">笔记</a> <div>1.Spring是什么?特性?有哪些模块?Spring是一个轻量级、非入侵式的控制反转Ioc和面向切面AOP的框架。特性:1.Ioc和DISpring的核心就是一个大的工厂容器,可以维护所有对象的创建和依赖关系,Spring工厂用于生成Bean,并且管理Bean的生命周期,实现高内聚低耦合的设计理念。2.AOP编程Spring提供面向切面编程,可以方便实现对程序进行权限拦截、运行监控等切面功能。3</div> </li> <li><a href="/article/1835303427685576704.htm" title="UI 自动化的页面对象管理神器 PO-Manager" target="_blank">UI 自动化的页面对象管理神器 PO-Manager</a> <span class="text-muted">TesterHome</span> <div>原文由alex发表于TesterHome社区网站,点击原文链接可于作者直接交流。做UI自动化的同学都知道,UI自动化一个难点就是页面元素的变化,让自动化维护成为一个痛点。在此,为了减轻这个痛点,我在基于Page-Object模式的基础上开发了页面对象维护的工具。该工具为vscode的一个插件,可以通过vscode插件市场搜索PO-Manager来下载安装本文中的页面对象库文件基于json.一个元素</div> </li> <li><a href="/article/1835302191804542976.htm" title="Java【泛型】" target="_blank">Java【泛型】</a> <span class="text-muted">SkyrimCitadelValinor</span> <a class="tag" taget="_blank" href="/search/Java%E5%9F%BA%E7%A1%80/1.htm">Java基础</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a> <div>Java泛型的概述不同类的数据如果封装方法相同,不必为每一种类单独定义一个类,只需定义一个泛型类,减少类的声明,提高编程效率。通过准确定义泛型类,可避免对象类型转换时产生的错误。泛型又提供了一种类型安全检测机制,只有数据类型相匹配的变量才能正常的赋值,否则编译器就不通过。Java中的泛型与C++类模板的作用相同,但是编译方式不同,Java泛型类只会生成一部分目标代码,牺牲运行速度,而C++的类模板</div> </li> <li><a href="/article/1835298981362626560.htm" title="webstorm报错TypeError: this.cliEngine is not a constructor" target="_blank">webstorm报错TypeError: this.cliEngine is not a constructor</a> <span class="text-muted">Blue_Color</span> <div>点击Details在控制台会显示报错的位置TypeError:this.cliEngineisnotaconstructoratESLintPlugin.invokeESLint(/Applications/RubyMine.app/Contents/plugins/JavaScriptLanguage/languageService/eslint/bin/eslint-plugin.js:97:</div> </li> <li><a href="/article/1835296397365178368.htm" title="创建一个完整的购物商城系统是一个复杂的项目,涉及前端(用户界面)、后端(服务器逻辑)、数据库等多个部分。由于篇幅限制,我无法在这里提供一个完整的系统代码,但我可以分别给出一些关键部分的示例代码,涵盖几" target="_blank">创建一个完整的购物商城系统是一个复杂的项目,涉及前端(用户界面)、后端(服务器逻辑)、数据库等多个部分。由于篇幅限制,我无法在这里提供一个完整的系统代码,但我可以分别给出一些关键部分的示例代码,涵盖几</a> <span class="text-muted">uthRaman</span> <a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/ui/1.htm">ui</a><a class="tag" taget="_blank" href="/search/%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">服务器</a> <div>前端(HTML/CSS/JavaScript)grsyzp.cnHTML页面结构(index.html)html购物商城欢迎来到购物商城JavaScript(Ajax请求商品数据,app.js)javascriptdocument.addEventListener('DOMContentLoaded',function(){fetch('/api/products').then(response=</div> </li> <li><a href="/article/1835294003390672896.htm" title="谈谈你对AQS的理解" target="_blank">谈谈你对AQS的理解</a> <span class="text-muted">Mutig_s</span> <a class="tag" taget="_blank" href="/search/juc/1.htm">juc</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a><a class="tag" taget="_blank" href="/search/%E9%9D%A2%E8%AF%95/1.htm">面试</a><a class="tag" taget="_blank" href="/search/%E5%90%8E%E7%AB%AF/1.htm">后端</a> <div>AQS概述AQS,全称为AbstractQueuedSynchronizer,是Java并发包(java.util.concurrent)中一个核心的框架,主要用于构建阻塞式锁和相关的同步器,也是构建锁或者其他同步组件的基础框架。AQS提供了一种基于FIFO(First-In-First-Out)的CLH(三个人名缩写)双向队列的机制,来实现各种同步器,如ReentrantLock、Semapho</div> </li> <li><a href="/article/1835293121953492992.htm" title="了解 UNPKG:前端开发者的包管理利器" target="_blank">了解 UNPKG:前端开发者的包管理利器</a> <span class="text-muted">小于负无穷</span> <a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a><a class="tag" taget="_blank" href="/search/typescript/1.htm">typescript</a><a class="tag" taget="_blank" href="/search/css/1.htm">css</a><a class="tag" taget="_blank" href="/search/html5/1.htm">html5</a><a class="tag" taget="_blank" href="/search/node.js/1.htm">node.js</a> <div>在现代前端开发中,JavaScript包管理和模块化是至关重要的,而npm则是最流行的JavaScript包管理器之一。不过,随着前端项目复杂性的增加,有时候我们希望快速引入外部依赖,而无需本地安装和构建。此时,CDN(内容分发网络)成为了一种方便快捷的解决方案,而UNPKG就是这种方式中的佼佼者。什么是UNPKG?UNPKG是一个基于npm的内容分发网络(CDN),它允许开发者直接通过URL从n</div> </li> <li><a href="/article/1835288964056051712.htm" title="分享一个基于python的电子书数据采集与可视化分析 hadoop电子书数据分析与推荐系统 spark大数据毕设项目(源码、调试、LW、开题、PPT)" target="_blank">分享一个基于python的电子书数据采集与可视化分析 hadoop电子书数据分析与推荐系统 spark大数据毕设项目(源码、调试、LW、开题、PPT)</a> <span class="text-muted">计算机源码社</span> <a class="tag" taget="_blank" href="/search/Python%E9%A1%B9%E7%9B%AE/1.htm">Python项目</a><a class="tag" taget="_blank" href="/search/%E5%A4%A7%E6%95%B0%E6%8D%AE/1.htm">大数据</a><a class="tag" taget="_blank" href="/search/%E5%A4%A7%E6%95%B0%E6%8D%AE/1.htm">大数据</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/hadoop/1.htm">hadoop</a><a class="tag" taget="_blank" href="/search/%E8%AE%A1%E7%AE%97%E6%9C%BA%E6%AF%95%E4%B8%9A%E8%AE%BE%E8%AE%A1%E9%80%89%E9%A2%98/1.htm">计算机毕业设计选题</a><a class="tag" taget="_blank" href="/search/%E8%AE%A1%E7%AE%97%E6%9C%BA%E6%AF%95%E4%B8%9A%E8%AE%BE%E8%AE%A1%E6%BA%90%E7%A0%81/1.htm">计算机毕业设计源码</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90/1.htm">数据分析</a><a class="tag" taget="_blank" href="/search/spark%E6%AF%95%E8%AE%BE/1.htm">spark毕设</a> <div>作者:计算机源码社个人简介:本人八年开发经验,擅长Java、Python、PHP、.NET、Node.js、Android、微信小程序、爬虫、大数据、机器学习等,大家有这一块的问题可以一起交流!学习资料、程序开发、技术解答、文档报告如需要源码,可以扫取文章下方二维码联系咨询Java项目微信小程序项目Android项目Python项目PHP项目ASP.NET项目Node.js项目选题推荐项目实战|p</div> </li> <li><a href="/article/1835285180512825344.htm" title="Lombok:Java开发者的代码简化神器【后端 17】" target="_blank">Lombok:Java开发者的代码简化神器【后端 17】</a> <span class="text-muted">终末圆</span> <a class="tag" taget="_blank" href="/search/Java%E5%90%8E%E7%AB%AF/1.htm">Java后端</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a><a class="tag" taget="_blank" href="/search/mysql/1.htm">mysql</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a><a class="tag" taget="_blank" href="/search/%E5%90%8E%E7%AB%AF/1.htm">后端</a><a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/boot/1.htm">boot</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a> <div>Lombok:Java开发者的代码简化神器在Java开发中,我们经常需要编写大量的样板代码,如getter、setter、equals、hashCode、toString等方法。这些代码虽然基础且必要,但往往占据了大量开发时间,且容易在属性变更时引发错误。幸运的是,Lombok这个Java库通过注解的方式,为我们提供了一种高效的解决方案。本文将详细介绍Lombok的使用及其优势。什么是Lombok</div> </li> <li><a href="/article/1835273340084908032.htm" title="36. MyBatis如何支持多数据库操作?如何配置不同的数据源?" target="_blank">36. MyBatis如何支持多数据库操作?如何配置不同的数据源?</a> <span class="text-muted">这孩子叫逆</span> <a class="tag" taget="_blank" href="/search/Mybatis%E7%AC%94%E8%AE%B0/1.htm">Mybatis笔记</a><a class="tag" taget="_blank" href="/search/mybatis/1.htm">mybatis</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a> <div>在许多企业级应用中,可能需要访问多个数据库。MyBatis可以通过配置多个数据源和动态切换数据源来支持多数据库操作。下面介绍如何在MyBatis中配置和使用多个数据源。1.多数据源的基本配置1.1配置多个数据源要支持多个数据源,首先需要在Spring或SpringBoot中配置不同的数据源。假设我们要连接两个数据库db1和db2,可以通过以下步骤进行配置。SpringBoot示例:applicat</div> </li> <li><a href="/article/1835272961909682176.htm" title="Rides实现分布式锁,保障数据一致性,Redisson分布式事务处理" target="_blank">Rides实现分布式锁,保障数据一致性,Redisson分布式事务处理</a> <span class="text-muted">朱杰jjj</span> <a class="tag" taget="_blank" href="/search/%E7%BC%93%E5%AD%98/1.htm">缓存</a><a class="tag" taget="_blank" href="/search/%E5%88%86%E5%B8%83%E5%BC%8F/1.htm">分布式</a> <div>分布式环境下分布式锁有三种方式:基于数据库分布式锁基于Redis分布式锁基于zk分布式锁本帖只介绍Redis分布式锁为什么需要用到分布式锁?在单机环境下一个服务中多个线程对同一个事物或数据资源进行操作时,可以通过添加加锁方式(synchronized和lock)来解决数据一致性的问题。但是如果出现多个服务的情况下,这时候我们在通过synchronized和lock的方式来加锁会出现问题,因为多个服</div> </li> <li><a href="/article/1835270818494509056.htm" title="Python实现mysql命令行" target="_blank">Python实现mysql命令行</a> <span class="text-muted">xu-jssy</span> <a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/mysql/1.htm">mysql</a><a class="tag" taget="_blank" href="/search/adb/1.htm">adb</a> <div>一、源码importosimportpymysqldefsql_shell():password=input("EnterPassword:")#访问密码ifpassword.strip()!="yyds":print("Bye")return#清空控制台输出os.system("cls"ifos.name=="nt"else"clear")try:#连接到MySQL数据库conn=pymysql</div> </li> <li><a href="/article/1835269557271490560.htm" title="python的request请求401_Python模拟HTTPS请求返回HTTP 401 unauthorized错误" target="_blank">python的request请求401_Python模拟HTTPS请求返回HTTP 401 unauthorized错误</a> <span class="text-muted">weixin_39599372</span> <div>Python模拟HTTPS请求返回HTTP401unauthorized错误开始是使用的httplib模块,代码如下:header={"Content-type":"application/json","Accept":"*/*"}params={‘source‘:‘en‘,‘target‘:‘es‘,‘text‘:match.group(1)}data=urllib.urlencode(para</div> </li> <li><a href="/article/1835268549149552640.htm" title="java的四个层级结构" target="_blank">java的四个层级结构</a> <span class="text-muted">活跃家族</span> <a class="tag" taget="_blank" href="/search/JAVA/1.htm">JAVA</a> <div>java的四个层级结构首先,最底层的就是dto层,dto层就是所谓的model,dto中定义的是实体类,也就是.class文件,该文件中包含实体类的属性和对应属性的get、set方法;其次,是dao层(dao层的文件习惯以*Mapper命名),dao层会调用dto层,dao层中会定义实际使用到的方法,比如增删改查。一般在dao层下还会有个叫做sqlmap的包,该包下有xml文件,文件内容正是根据之</div> </li> <li><a href="/article/1835263002341896192.htm" title="连接池的性能如何优化?" target="_blank">连接池的性能如何优化?</a> <span class="text-muted">蜡笔小新星</span> <a class="tag" taget="_blank" href="/search/MySQL/1.htm">MySQL</a><a class="tag" taget="_blank" href="/search/%E7%BB%8F%E9%AA%8C%E5%88%86%E4%BA%AB/1.htm">经验分享</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/1.htm">学习</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/mysql/1.htm">mysql</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a> <div>连接池的性能优化是提高数据库访问效率和应用程序响应速度的关键。以下是一些优化连接池性能的策略:1.选择合适的连接池大小连接池的大小应根据应用程序的并发需求和数据库服务器的处理能力来确定。如果连接池太小,可能会导致线程等待连接;如果连接池太大,可能会消耗过多的系统资源。通常,连接池的大小应该设置为应用程序的并发用户数加上一些额外的连接以处理突发请求。2.设置合理的最小和最大连接数最小连接数(mins</div> </li> <li><a href="/article/1835262244313722880.htm" title="SpringBoot整合ES搜索引擎 实现网站热搜词及热度计算" target="_blank">SpringBoot整合ES搜索引擎 实现网站热搜词及热度计算</a> <span class="text-muted">码踏云端</span> <a class="tag" taget="_blank" href="/search/springboot/1.htm">springboot</a><a class="tag" taget="_blank" href="/search/Elasticsearch/1.htm">Elasticsearch</a><a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/boot/1.htm">boot</a><a class="tag" taget="_blank" href="/search/elasticsearch/1.htm">elasticsearch</a><a class="tag" taget="_blank" href="/search/%E5%90%8E%E7%AB%AF/1.htm">后端</a><a class="tag" taget="_blank" href="/search/%E7%83%AD%E6%90%9C%E8%AF%8D/1.htm">热搜词</a><a class="tag" taget="_blank" href="/search/%E7%83%AD%E5%BA%A6%E8%AE%A1%E7%AE%97/1.htm">热度计算</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a> <div>博主简介:历代文学网(PC端可以访问:https://literature.sinhy.com/#/literature?__c=1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,精通Java编程,高并发设计,Springboot和微服务,熟悉Linux,ESXI虚拟化以及云原生Docker和K8s,热衷于探索科技的边界,并将理论知识转化为实际应用。保持对新技术的好奇心,乐于</div> </li> <li><a href="/article/1835261739856392192.htm" title="上传文件到钉盘流程详解" target="_blank">上传文件到钉盘流程详解</a> <span class="text-muted">jspyth</span> <a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E5%9C%BA%E6%99%AF%E6%A1%88%E4%BE%8B%E5%88%86%E6%9E%90/1.htm">开发场景案例分析</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%90%8E%E7%AB%AF/1.htm">后端</a> <div>文章目录前言准备工作实现过程Maven依赖封装一个工具类获取文件上传信息unionId获取钉盘目录spaceId创建上传到钉盘前言  本文详解如何通过钉钉的API实现上传文件到钉盘目录,代码通过JAVA实现。准备工作1、在钉钉开发者后台创建一个钉钉企业内部应用;2、创建并保存好应用的appKey和appSecret,后面用于获取调用API的请求token;3、应用中配置好所需权限:企业存储文件上传</div> </li> <li><a href="/article/1835261105010733056.htm" title="题解 | #完全数计算#不知道为什么没超时的暴力解法" target="_blank">题解 | #完全数计算#不知道为什么没超时的暴力解法</a> <span class="text-muted">huaxinjiayou</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a> <div>兄弟们,坚持就是胜利啊,找工作从去年秋招就开始找,到五月底才收到第一个offer星环的,然后六月初t咋六月了还有面试啊,有兄弟了解这个部门吗面完了家人们,纯纯kpi啊,上来就是一道题是打印多个字符串的华为接头人话术指南:欲投华为,必看此贴!引流华为招聘提前批【奖】这个夏天,和牛牛一起打卡刷题~Java面试实战项目25届本科找暑期实习的历程飞猪旅行运营岗面经百度视觉算法一面面经感谢牛友们,腾子pcg</div> </li> <li><a href="/article/1835260978816708608.htm" title="数据库系统 第53节 数据库并发控制" target="_blank">数据库系统 第53节 数据库并发控制</a> <span class="text-muted">hummhumm</span> <a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a><a class="tag" taget="_blank" href="/search/oracle/1.htm">oracle</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/database/1.htm">database</a><a class="tag" taget="_blank" href="/search/sql/1.htm">sql</a><a class="tag" taget="_blank" href="/search/%E5%90%8E%E7%AB%AF/1.htm">后端</a> <div>数据库并发控制是确保在多个用户或进程同时访问数据库时,数据的完整性和一致性得到维护的一种机制。并发控制技术主要分为两大类:乐观并发控制和悲观并发控制。下面将详细叙述这两种技术,以及多版本并发控制(MVCC),这是一种在数据库系统中广泛使用的并发控制方法。乐观并发控制(OptimisticConcurrencyControl,OCC)乐观并发控制的核心思想是假设事务之间的冲突发生的概率较低,因此它允</div> </li> <li><a href="/article/1835260726516740096.htm" title="华为云分布式缓存服务DCS与开源服务差异对比" target="_blank">华为云分布式缓存服务DCS与开源服务差异对比</a> <span class="text-muted">hcinfo_18</span> <a class="tag" taget="_blank" href="/search/redis%E4%BD%BF%E7%94%A8/1.htm">redis使用</a><a class="tag" taget="_blank" href="/search/%E5%8D%8E%E4%B8%BA%E4%BA%91/1.htm">华为云</a><a class="tag" taget="_blank" href="/search/Redis5.0/1.htm">Redis5.0</a><a class="tag" taget="_blank" href="/search/%E5%88%86%E5%B8%83%E5%BC%8F%E7%BC%93%E5%AD%98%E6%9C%8D%E5%8A%A1/1.htm">分布式缓存服务</a><a class="tag" taget="_blank" href="/search/Redis%E5%AE%A2%E6%88%B7%E7%AB%AF/1.htm">Redis客户端</a> <div>分布式缓存服务DCS提供单机、主备、集群等丰富的实例类型,满足用户高读写性能及快速数据访问的业务诉求。支持丰富的实例管理操作,帮助用户省去运维烦恼。用户可以聚焦于业务逻辑本身,而无需过多考虑部署、监控、扩容、安全、故障恢复等方面的问题。DCS基于开源Redis、Memcached向用户提供一定程度定制化的缓存服务,因此,除了拥有开源服务缓存数据库的优秀特性,DCS提供更多实用功能。一、与开源Red</div> </li> <li><a href="/article/1835250143566327808.htm" title="Java集合类框架源码分析 之 RoleList源码解析 【6】" target="_blank">Java集合类框架源码分析 之 RoleList源码解析 【6】</a> <span class="text-muted">yunzhonghefei</span> <a class="tag" taget="_blank" href="/search/Java%E9%9B%86%E5%90%88%E7%B1%BB%E6%BA%90%E7%A0%81%E5%88%86%E6%9E%90/1.htm">Java集合类源码分析</a><a class="tag" taget="_blank" href="/search/RoleList%E6%BA%90%E7%A0%81%E8%A7%A3%E6%9E%90/1.htm">RoleList源码解析</a> <div>该类继承于ArrayList,针对Role进行了一些扩展。其他方法和ArrayList中基本相同,源码不做针对性分析:看一下类简介:/***代表了一个roles的列表,作为方法setRoles()的参数,去创建一个关联关系,并且尝试在同一个关系中设置多个角色。*ARoleListrepresentsalistofroles(Roleobjects).Itisusedas*parameterwhen</div> </li> <li><a href="/article/1835249513372151808.htm" title="shp转geojson、kml转geojson" target="_blank">shp转geojson、kml转geojson</a> <span class="text-muted">是乔木</span> <a class="tag" taget="_blank" href="/search/%E5%9C%B0%E5%9B%BE/1.htm">地图</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a> <div>导入效果:用到的npm库pnpmaddshpjs//或者npmishpjs5.0.2pnpmaddjszip//或者npmijszip版本3.10.1pnpmadd@tmcw/togeojson//或者npmi@tmcw/togeojson版本5.8.1创建方法用来区分导入的文件1.这里只是做了一个文件的区分其中的kmlToGeoJson和readShp、dealZip具体方法会写明//处理文件e</div> </li> <li><a href="/article/1835247497774198784.htm" title="【Java】面试题31:栈的压入,弹出序列" target="_blank">【Java】面试题31:栈的压入,弹出序列</a> <span class="text-muted">小小核桃</span> <a class="tag" taget="_blank" href="/search/%E5%89%91%E6%8C%87offer/1.htm">剑指offer</a><a class="tag" taget="_blank" href="/search/java%E7%89%88/1.htm">java版</a> <div>~~题目:~~输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如,序列{1,2,3,4,5}是某栈的压栈序列,序列{4,5,3,2,1}是该压栈序列对应的一个弹出序列,但{4,3,5,1,2}就不可能是该栈序列的弹出序列。思路:首先借助一个辅助栈,把输入的第一个序列中的数字依次压入该辅助栈,并按照第二个序列的顺序依次从该栈中弹出数</div> </li> <li><a href="/article/1835247344719851520.htm" title="2019-05-29 vue-router的两种模式的区别" target="_blank">2019-05-29 vue-router的两种模式的区别</a> <span class="text-muted">Kason晨</span> <div>1、大家都知道vue是一种单页应用,单页应用就是仅在页面初始化的时候加载相应的html/css/js一单页面加载完成,不会因为用户的操作而进行页面的重新加载或者跳转,用javascript动态的变化html的内容优点:良好的交互体验,用户不需要刷新页面,页面显示流畅,良好的前后端工作分离模式,减轻服务器压力,缺点:不利于SEO,初次加载耗时比较多2、hash模式vue-router默认的是hash</div> </li> <li><a href="/article/1835245731506647040.htm" title="两种方法判断Python的位数是32位还是64位" target="_blank">两种方法判断Python的位数是32位还是64位</a> <span class="text-muted">sanqima</span> <a class="tag" taget="_blank" href="/search/Python%E7%BC%96%E7%A8%8B/1.htm">Python编程</a><a class="tag" taget="_blank" href="/search/%E7%94%B5%E8%84%91/1.htm">电脑</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a> <div>  Python从1991年发布以来,凭借其简洁、清晰、易读的语法、丰富的标准库和第三方工具,在Web开发、自动化测试、人工智能、图形识别、机器学习等领域发展迅猛。  Python是一种胶水语言,通过Cython库与C/C++语言进行链接,通过Jython库与Java语言进行链接。  Python是跨平台的,可运行在多种操作系统上,包括但不限于Windows、Linux和macOS。这意味着用Py</div> </li> <li><a href="/article/111.htm" title="JAVA基础" target="_blank">JAVA基础</a> <span class="text-muted">灵静志远</span> <a class="tag" taget="_blank" href="/search/%E4%BD%8D%E8%BF%90%E7%AE%97/1.htm">位运算</a><a class="tag" taget="_blank" href="/search/%E5%8A%A0%E8%BD%BD/1.htm">加载</a><a class="tag" taget="_blank" href="/search/Date/1.htm">Date</a><a class="tag" taget="_blank" href="/search/%E5%AD%97%E7%AC%A6%E4%B8%B2%E6%B1%A0/1.htm">字符串池</a><a class="tag" taget="_blank" href="/search/%E8%A6%86%E7%9B%96/1.htm">覆盖</a> <div>一、类的初始化顺序 1 (静态变量,静态代码块)-->(变量,初始化块)--> 构造器 同一括号里的,根据它们在程序中的顺序来决定。上面所述是同一类中。如果是继承的情况,那就在父类到子类交替初始化。 二、String 1 String a = "abc"; JAVA虚拟机首先在字符串池中查找是否已经存在了值为"abc"的对象,根</div> </li> <li><a href="/article/238.htm" title="keepalived实现redis主从高可用" target="_blank">keepalived实现redis主从高可用</a> <span class="text-muted">bylijinnan</span> <a class="tag" taget="_blank" href="/search/redis/1.htm">redis</a> <div>方案说明 两台机器(称为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,开始</div> </li> <li><a href="/article/365.htm" title="java文件操作大全" target="_blank">java文件操作大全</a> <span class="text-muted">0624chenhong</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a> <div>最近在博客园看到一篇比较全面的文件操作文章,转过来留着。 http://www.cnblogs.com/zhuocheng/archive/2011/12/12/2285290.html 转自http://blog.sina.com.cn/s/blog_4a9f789a0100ik3p.html 一.获得控制台用户输入的信息    &nbs</div> </li> <li><a href="/article/492.htm" title="android学习任务" target="_blank">android学习任务</a> <span class="text-muted">不懂事的小屁孩</span> <a class="tag" taget="_blank" href="/search/%E5%B7%A5%E4%BD%9C/1.htm">工作</a> <div>任务 完成情况 搞清楚带箭头的pupupwindows和不带的使用 已完成 熟练使用pupupwindows和alertdialog,并搞清楚两者的区别 已完成 熟练使用android的线程handler,并敲示例代码 进行中 了解游戏2048的流程,并完成其代码工作 进行中-差几个actionbar 研究一下android的动画效果,写一个实例 已完成 复习fragem</div> </li> <li><a href="/article/619.htm" title="zoom.js" target="_blank">zoom.js</a> <span class="text-muted">换个号韩国红果果</span> <a class="tag" taget="_blank" href="/search/oom/1.htm">oom</a> <div>它的基于bootstrap 的 https://raw.github.com/twbs/bootstrap/master/js/transition.js  transition.js模块引用顺序 <link rel="stylesheet" href="style/zoom.css"> <script src=&q</div> </li> <li><a href="/article/746.htm" title="详解Oracle云操作系统Solaris 11.2" target="_blank">详解Oracle云操作系统Solaris 11.2</a> <span class="text-muted">蓝儿唯美</span> <a class="tag" taget="_blank" href="/search/Solaris/1.htm">Solaris</a> <div>当Oracle发布Solaris 11时,它将自己的操作系统称为第一个面向云的操作系统。Oracle在发布Solaris 11.2时继续它以云为中心的基调。但是,这些说法没有告诉我们为什么Solaris是配得上云的。幸好,我们不需要等太久。Solaris11.2有4个重要的技术可以在一个有效的云实现中发挥重要作用:OpenStack、内核域、统一存档(UA)和弹性虚拟交换(EVS)。  </div> </li> <li><a href="/article/873.htm" title="spring学习——springmvc(一)" target="_blank">spring学习——springmvc(一)</a> <span class="text-muted">a-john</span> <a class="tag" taget="_blank" href="/search/springMVC/1.htm">springMVC</a> <div>Spring MVC基于模型-视图-控制器(Model-View-Controller,MVC)实现,能够帮助我们构建像Spring框架那样灵活和松耦合的Web应用程序。   1,跟踪Spring MVC的请求 请求的第一站是Spring的DispatcherServlet。与大多数基于Java的Web框架一样,Spring MVC所有的请求都会通过一个前端控制器Servlet。前</div> </li> <li><a href="/article/1000.htm" title="hdu4342 History repeat itself-------多校联合五" target="_blank">hdu4342 History repeat itself-------多校联合五</a> <span class="text-muted">aijuans</span> <a class="tag" taget="_blank" href="/search/%E6%95%B0%E8%AE%BA/1.htm">数论</a> <div>水题就不多说什么了。 #include<iostream>#include<cstdlib>#include<stdio.h>#define ll __int64using namespace std;int main(){ int t; ll n; scanf("%d",&t); while(t--) </div> </li> <li><a href="/article/1127.htm" title="EJB和javabean的区别" target="_blank">EJB和javabean的区别</a> <span class="text-muted">asia007</span> <a class="tag" taget="_blank" href="/search/bean/1.htm">bean</a><a class="tag" taget="_blank" href="/search/ejb/1.htm">ejb</a> <div>EJB不是一般的JavaBean,EJB是企业级JavaBean,EJB一共分为3种,实体Bean,消息Bean,会话Bean,书写EJB是需要遵循一定的规范的,具体规范你可以参考相关的资料.另外,要运行EJB,你需要相应的EJB容器,比如Weblogic,Jboss等,而JavaBean不需要,只需要安装Tomcat就可以了   1.EJB用于服务端应用开发, 而JavaBeans</div> </li> <li><a href="/article/1254.htm" title="Struts的action和Result总结" target="_blank">Struts的action和Result总结</a> <span class="text-muted">百合不是茶</span> <a class="tag" taget="_blank" href="/search/struts/1.htm">struts</a><a class="tag" taget="_blank" href="/search/Action%E9%85%8D%E7%BD%AE/1.htm">Action配置</a><a class="tag" taget="_blank" href="/search/Result%E9%85%8D%E7%BD%AE/1.htm">Result配置</a> <div>    一:Action的配置详解:      下面是一个Struts中一个空的Struts.xml的配置文件     <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC &quo</div> </li> <li><a href="/article/1381.htm" title="如何带好自已的团队" target="_blank">如何带好自已的团队</a> <span class="text-muted">bijian1013</span> <a class="tag" taget="_blank" href="/search/%E9%A1%B9%E7%9B%AE%E7%AE%A1%E7%90%86/1.htm">项目管理</a><a class="tag" taget="_blank" href="/search/%E5%9B%A2%E9%98%9F%E7%AE%A1%E7%90%86/1.htm">团队管理</a><a class="tag" taget="_blank" href="/search/%E5%9B%A2%E9%98%9F/1.htm">团队</a> <div>在网上看到博客" 怎么才能让团队成员好好干活"的评论,觉得写的比较好。 原文如下: 我做团队管理有几年了吧,我和你分享一下我认为带好团队的几点: 1.诚信         对团队内成员,无论是技术研究、交流、问题探讨,要尽可能的保持一种诚信的态度,用心去做好,你的团队会感觉得到。 2.努力提</div> </li> <li><a href="/article/1508.htm" title="Java代码混淆工具" target="_blank">Java代码混淆工具</a> <span class="text-muted">sunjing</span> <a class="tag" taget="_blank" href="/search/ProGuard/1.htm">ProGuard</a> <div>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</div> </li> <li><a href="/article/1635.htm" title="【Redis三】基于Redis sentinel的自动failover主从复制" target="_blank">【Redis三】基于Redis sentinel的自动failover主从复制</a> <span class="text-muted">bit1129</span> <a class="tag" taget="_blank" href="/search/redis/1.htm">redis</a> <div>在第二篇中使用2.8.17搭建了主从复制,但是它存在Master单点问题,为了解决这个问题,Redis从2.6开始引入sentinel,用于监控和管理Redis的主从复制环境,进行自动failover,即Master挂了后,sentinel自动从从服务器选出一个Master使主从复制集群仍然可以工作,如果Master醒来再次加入集群,只能以从服务器的形式工作。   什么是Sentine</div> </li> <li><a href="/article/1762.htm" title="使用代理实现Hibernate Dao层自动事务" target="_blank">使用代理实现Hibernate Dao层自动事务</a> <span class="text-muted">白糖_</span> <a class="tag" taget="_blank" href="/search/DAO/1.htm">DAO</a><a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/AOP/1.htm">AOP</a><a class="tag" taget="_blank" href="/search/%E6%A1%86%E6%9E%B6/1.htm">框架</a><a class="tag" taget="_blank" href="/search/Hibernate/1.htm">Hibernate</a> <div>都说spring利用AOP实现自动事务处理机制非常好,但在只有hibernate这个框架情况下,我们开启session、管理事务就往往很麻烦。 public void save(Object obj){ Session session = this.getSession(); Transaction tran = session.beginTransaction(); try </div> </li> <li><a href="/article/1889.htm" title="maven3实战读书笔记" target="_blank">maven3实战读书笔记</a> <span class="text-muted">braveCS</span> <a class="tag" taget="_blank" href="/search/maven3/1.htm">maven3</a> <div>Maven简介 是什么? Is a software project management and comprehension tool.项目管理工具 是基于POM概念(工程对象模型) [设计重复、编码重复、文档重复、构建重复,maven最大化消除了构建的重复] [与XP:简单、交流与反馈;测试驱动开发、十分钟构建、持续集成、富有信息的工作区]     功能: </div> </li> <li><a href="/article/2016.htm" title="编程之美-子数组的最大乘积" target="_blank">编程之美-子数组的最大乘积</a> <span class="text-muted">bylijinnan</span> <a class="tag" taget="_blank" href="/search/%E7%BC%96%E7%A8%8B%E4%B9%8B%E7%BE%8E/1.htm">编程之美</a> <div> public class MaxProduct { /** * 编程之美 子数组的最大乘积 * 题目: 给定一个长度为N的整数数组,只允许使用乘法,不能用除法,计算任意N-1个数的组合中乘积中最大的一组,并写出算法的时间复杂度。 * 以下程序对应书上两种方法,求得“乘积中最大的一组”的乘积——都是有溢出的可能的。 * 但按题目的意思,是要求得这个子数组,而不</div> </li> <li><a href="/article/2143.htm" title="读书笔记-2" target="_blank">读书笔记-2</a> <span class="text-muted">chengxuyuancsdn</span> <a class="tag" taget="_blank" href="/search/%E8%AF%BB%E4%B9%A6%E7%AC%94%E8%AE%B0/1.htm">读书笔记</a> <div>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</div> </li> <li><a href="/article/2270.htm" title="[求学与房地产]慎重选择IT培训学校" target="_blank">[求学与房地产]慎重选择IT培训学校</a> <span class="text-muted">comsci</span> <a class="tag" taget="_blank" href="/search/it/1.htm">it</a> <div>      关于培训学校的教学和教师的问题,我们就不讨论了,我主要关心的是这个问题       培训学校的教学楼和宿舍的环境和稳定性问题       我们大家都知道,房子是一个比较昂贵的东西,特别是那种能够当教室的房子... &nb</div> </li> <li><a href="/article/2397.htm" title="RMAN配置中通道(CHANNEL)相关参数 PARALLELISM 、FILESPERSET的关系" target="_blank">RMAN配置中通道(CHANNEL)相关参数 PARALLELISM 、FILESPERSET的关系</a> <span class="text-muted">daizj</span> <a class="tag" taget="_blank" href="/search/oracle/1.htm">oracle</a><a class="tag" taget="_blank" href="/search/rman/1.htm">rman</a><a class="tag" taget="_blank" href="/search/filesperset/1.htm">filesperset</a><a class="tag" taget="_blank" href="/search/PARALLELISM/1.htm">PARALLELISM</a> <div>RMAN配置中通道(CHANNEL)相关参数 PARALLELISM 、FILESPERSET的关系 转 PARALLELISM --- 我们还可以通过parallelism参数来指定同时"自动"创建多少个通道: RMAN > configure device type disk parallelism 3 ; 表示启动三个通道,可以加快备份恢复的速度。 </div> </li> <li><a href="/article/2524.htm" title="简单排序:冒泡排序" target="_blank">简单排序:冒泡排序</a> <span class="text-muted">dieslrae</span> <a class="tag" taget="_blank" href="/search/%E5%86%92%E6%B3%A1%E6%8E%92%E5%BA%8F/1.htm">冒泡排序</a> <div> 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]){ </div> </li> <li><a href="/article/2651.htm" title="初二上学期难记单词三" target="_blank">初二上学期难记单词三</a> <span class="text-muted">dcj3sjt126com</span> <a class="tag" taget="_blank" href="/search/sciet/1.htm">sciet</a> <div>concert 音乐会 tonight 今晚 famous 有名的;著名的 song 歌曲 thousand 千 accident 事故;灾难 careless 粗心的,大意的 break 折断;断裂;破碎 heart 心(脏) happen  偶尔发生,碰巧 tourist 旅游者;观光者 science (自然)科学 marry 结婚 subject 题目;</div> </li> <li><a href="/article/2778.htm" title="I.安装Memcahce 1. 安装依赖包libevent Memcache需要安装libevent,所以安装前可能需要执行 Shell代码 收藏代码" target="_blank">I.安装Memcahce 1. 安装依赖包libevent Memcache需要安装libevent,所以安装前可能需要执行 Shell代码 收藏代码</a> <span class="text-muted">dcj3sjt126com</span> <a class="tag" taget="_blank" href="/search/redis/1.htm">redis</a> <div>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</div> </li> <li><a href="/article/2905.htm" title="并发容器" target="_blank">并发容器</a> <span class="text-muted">shuizhaosi888</span> <a class="tag" taget="_blank" href="/search/%E5%B9%B6%E5%8F%91%E5%AE%B9%E5%99%A8/1.htm">并发容器</a> <div>   通过并发容器来改善同步容器的性能,同步容器将所有对容器状态的访问都串行化,来实现线程安全,这种方式严重降低并发性,当多个线程访问时,吞吐量严重降低。    并发容器ConcurrentHashMap       替代同步基于散列的Map,通过Lock控制。   &nb</div> </li> <li><a href="/article/3032.htm" title="Spring Security(12)——Remember-Me功能" target="_blank">Spring Security(12)——Remember-Me功能</a> <span class="text-muted">234390216</span> <a class="tag" taget="_blank" href="/search/Spring+Security/1.htm">Spring Security</a><a class="tag" taget="_blank" href="/search/Remember+Me/1.htm">Remember Me</a><a class="tag" taget="_blank" href="/search/%E8%AE%B0%E4%BD%8F%E6%88%91/1.htm">记住我</a> <div>Remember-Me功能   目录   1.1     概述 1.2     基于简单加密token的方法 1.3     基于持久化token的方法 1.4     Remember-Me相关接口和实现</div> </li> <li><a href="/article/3159.htm" title="位运算" target="_blank">位运算</a> <span class="text-muted">焦志广</span> <a class="tag" taget="_blank" href="/search/%E4%BD%8D%E8%BF%90%E7%AE%97/1.htm">位运算</a> <div> 一、位运算符C语言提供了六种位运算符: & 按位与 | 按位或 ^ 按位异或 ~ 取反 << 左移 >> 右移 1. 按位与运算 按位与运算符"&"是双目运算符。其功能是参与运算的两数各对应的二进位相与。只有对应的两个二进位均为1时,结果位才为1 ,否则为0。参与运算的数以补码方式出现。 例如:9&am</div> </li> <li><a href="/article/3286.htm" title="nodejs 数据库连接 mongodb mysql" target="_blank">nodejs 数据库连接 mongodb mysql</a> <span class="text-muted">liguangsong</span> <a class="tag" taget="_blank" href="/search/mongodb/1.htm">mongodb</a><a class="tag" taget="_blank" href="/search/mysql/1.htm">mysql</a><a class="tag" taget="_blank" href="/search/node/1.htm">node</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93%E8%BF%9E%E6%8E%A5/1.htm">数据库连接</a> <div>1.mysql 连接    package.json中dependencies加入     "mysql":"~2.7.0"    执行 npm install      在config 下创建文件 database.js     </div> </li> <li><a href="/article/3413.htm" title="java动态编译" target="_blank">java动态编译</a> <span class="text-muted">olive6615</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/HotSpot/1.htm">HotSpot</a><a class="tag" taget="_blank" href="/search/jvm/1.htm">jvm</a><a class="tag" taget="_blank" href="/search/%E5%8A%A8%E6%80%81%E7%BC%96%E8%AF%91/1.htm">动态编译</a> <div>    在HotSpot虚拟机中,有两个技术是至关重要的,即动态编译(Dynamic compilation)和Profiling。     HotSpot是如何动态编译Javad的bytecode呢?Java bytecode是以解释方式被load到虚拟机的。HotSpot里有一个运行监视器,即Profile Monitor,专门监视</div> </li> <li><a href="/article/3540.htm" title="Storm0.9.5的集群部署配置优化" target="_blank">Storm0.9.5的集群部署配置优化</a> <span class="text-muted">roadrunners</span> <a class="tag" taget="_blank" href="/search/%E4%BC%98%E5%8C%96/1.htm">优化</a><a class="tag" taget="_blank" href="/search/storm.yaml/1.htm">storm.yaml</a> <div>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</div> </li> <li><a href="/article/3667.htm" title="101个MySQL 的调节和优化的提示" target="_blank">101个MySQL 的调节和优化的提示</a> <span class="text-muted">tomcat_oracle</span> <a class="tag" taget="_blank" href="/search/mysql/1.htm">mysql</a> <div> 1. 拥有足够的物理内存来把整个InnoDB文件加载到内存中——在内存中访问文件时的速度要比在硬盘中访问时快的多。   2. 不惜一切代价避免使用Swap交换分区 – 交换时是从硬盘读取的,它的速度很慢。   3. 使用电池供电的RAM(注:RAM即随机存储器)。   4. 使用高级的RAID(注:Redundant Arrays of Inexpensive Disks,即磁盘阵列</div> </li> <li><a href="/article/3794.htm" title="zoj 3829 Known Notation(贪心)" target="_blank">zoj 3829 Known Notation(贪心)</a> <span class="text-muted">阿尔萨斯</span> <a class="tag" taget="_blank" href="/search/ZOJ/1.htm">ZOJ</a> <div> 题目链接:zoj 3829 Known Notation 题目大意:给定一个不完整的后缀表达式,要求有2种不同操作,用尽量少的操作使得表达式完整。 解题思路:贪心,数字的个数要要保证比∗的个数多1,不够的话优先补在开头是最优的。然后遍历一遍字符串,碰到数字+1,碰到∗-1,保证数字的个数大于等1,如果不够减的话,可以和最后面的一个数字交换位置(用栈维护十分方便),因为添加和交换代价都是1</div> </li> </ul> </div> </div> </div> <div> <div class="container"> <div class="indexes"> <strong>按字母分类:</strong> <a href="/tags/A/1.htm" target="_blank">A</a><a href="/tags/B/1.htm" target="_blank">B</a><a href="/tags/C/1.htm" target="_blank">C</a><a href="/tags/D/1.htm" target="_blank">D</a><a href="/tags/E/1.htm" target="_blank">E</a><a href="/tags/F/1.htm" target="_blank">F</a><a href="/tags/G/1.htm" target="_blank">G</a><a href="/tags/H/1.htm" target="_blank">H</a><a href="/tags/I/1.htm" target="_blank">I</a><a href="/tags/J/1.htm" target="_blank">J</a><a href="/tags/K/1.htm" target="_blank">K</a><a href="/tags/L/1.htm" target="_blank">L</a><a href="/tags/M/1.htm" target="_blank">M</a><a href="/tags/N/1.htm" target="_blank">N</a><a href="/tags/O/1.htm" target="_blank">O</a><a href="/tags/P/1.htm" target="_blank">P</a><a href="/tags/Q/1.htm" target="_blank">Q</a><a href="/tags/R/1.htm" target="_blank">R</a><a href="/tags/S/1.htm" target="_blank">S</a><a href="/tags/T/1.htm" target="_blank">T</a><a href="/tags/U/1.htm" target="_blank">U</a><a href="/tags/V/1.htm" target="_blank">V</a><a href="/tags/W/1.htm" target="_blank">W</a><a href="/tags/X/1.htm" target="_blank">X</a><a href="/tags/Y/1.htm" target="_blank">Y</a><a href="/tags/Z/1.htm" target="_blank">Z</a><a href="/tags/0/1.htm" target="_blank">其他</a> </div> </div> </div> <footer id="footer" class="mb30 mt30"> <div class="container"> <div class="footBglm"> <a target="_blank" href="/">首页</a> - <a target="_blank" href="/custom/about.htm">关于我们</a> - <a target="_blank" href="/search/Java/1.htm">站内搜索</a> - <a target="_blank" href="/sitemap.txt">Sitemap</a> - <a target="_blank" href="/custom/delete.htm">侵权投诉</a> </div> <div class="copyright">版权所有 IT知识库 CopyRight © 2000-2050 E-COM-NET.COM , All Rights Reserved. <!-- <a href="https://beian.miit.gov.cn/" rel="nofollow" target="_blank">京ICP备09083238号</a><br>--> </div> </div> </footer> <!-- 代码高亮 --> <script type="text/javascript" src="/static/syntaxhighlighter/scripts/shCore.js"></script> <script type="text/javascript" src="/static/syntaxhighlighter/scripts/shLegacy.js"></script> <script type="text/javascript" src="/static/syntaxhighlighter/scripts/shAutoloader.js"></script> <link type="text/css" rel="stylesheet" href="/static/syntaxhighlighter/styles/shCoreDefault.css"/> <script type="text/javascript" src="/static/syntaxhighlighter/src/my_start_1.js"></script> </body> </html>