servlet 学习总结

文章来源:绿盟市场 时间:2018-05-17 09:52

body里的属性:

控制背景颜色  bgcolor    可以写英文单词,也可以写#RGB三原色   每个原色占两个位置  是一个16进制的数

控制背景图片  background     写资源的路径

 

 

常用标签:

p    段落       默认一段话后会换两行

br   换行       可以写成  </br>   <br>   <br/> 推荐最后一种

h1~h6  标题元素      从1~6逐渐变小。

pre   格式原样输出书签

hr    分割线     size 控制高度    width 控制宽度(可以使用具体像素,也可以使用百分比)   color  颜色

font   字体标签    size  控制字体大小    color控制字体颜色

b     粗体

i     斜体

del   删除体(中划线)

sub   下标  常用于变量的下标  

sup   上标  常用于次方的显示

 

字符实体:

格式&字符实体名;

不可拆分的空格:    

小于号:  <

大于号:  >

&号:&

 

图标标签:

<img src="资源路径(可以写本地资源,也可以引用外部资源)"  width="宽度"   height="高度"   border="边框"  alt="图片缺省时显示的文字"  title="鼠标放上的交互文本" />

 

多媒体播放的标签embed:

autostart  自动开始   loop   循环播放     hidden  是否隐藏    width   宽度   height   高度

 

列表:

有序列表:

<ol type="显示的方式,默认数字,  i I a A 1"  start="编号从几开始">

   <li></li>

   <li></li>

   <li></li>

</ol>

 

 

无序列表:

<ul>

  <li></li>

   <li></li>

   <li></li>

</ul>

 

 

 

超链接:

<a href="地址"  target="打开地方">显示在页面上的字</a>

从哪里打开

_self从本窗口打开 ,默认的方式。

_blank 新建窗口打开

 

 

锚点:

第一步:

定义锚点,在需要定位的地方  添加<a  name="锚点名" />

第二步:

引用锚点,<a href="找到锚点所在页面#锚点名">提示信息</a>

 

 

 

表格:

table  表示表格

tr     表示行

td     表示列    th表示表头

 

 

table的属性   border  边框   width  宽度    height  高度    align   代表表格的位置(left,center,right)

tr的align  水平位置  该行所有列下的文字的位置       valign  垂直位置(top,center,bottom)

td的align  水平位置  该列的文字的位置   valign  垂直位置(top,center,bottom)


td中的跨行   rowspan ="数字"   跨列  colspan="数字"

 

 

 

页面框架frameset:

注意使用frameset的时候 不能有body.

将页面按行切   rows="页面1,页面2..."   可以按百分比或固定像素切,最后一个可以用*表示剩余

将页面按列切   cols="页面1,页面2..."

 

引用切割后的页面:

<frame src="被引用的页面(本地或外部资源均可)" />

 

 

表单(用来给服务器传递参数):

如果表单域元素没有name属性,表单提交的时候不会带上该表单域元素的值.

<form action="表单提交的地址" method="请求的方式(默认get)">表单域元素</form>

 

表单域元素:

普通文本   <input type="text" name=""  />

密码框    <input type="password" name=""  />

单选按钮  <input type="radio" name=""  value="选中后提交的值" />   注意要成为一组单选按钮必须name相同

多选框   <input type="checkbox" name="" value="选中后提交的值"  />   约定一般使用同name

下拉列表  <select name="">

<option value="">显示在页面上的值1</option>

<option value="">显示在页面上的值2</option>

<option value="">显示在页面上的值3</option>

  </select>

  如果没有value  提交的是option中间的文本

 

提交      <input type="submit" name=""  />

重置      <input type="reset" name=""  />

普通按钮  <input type="button" name=""  />

 

表单域:

text,password,radio,checkbox,select,textarea,submit,reset,button,hidden,file

 

普通文本域和密码框的默认值  是  value=值。

单选按钮和多选框的默认选中    checked  或checked="checked"

下拉列表默认选中   selected  或selected="selected"

文本域的默认值  标签中间的文本

 

 

textarea的高宽控制,  rows  和cols.

hidden的特点,页面不显示,但是提交数据的时候会提交。

file 的method必须使用post.

 

 

get提交方式的特点:

1.参数传输是在url的?后面,多个参数以&隔开

2.不安全

3.传输的数据量大小是有限的

post提交方式的特点:

1.参数传输是在http协议的请求实体内。

2.相对安全。

3.理论上post方式的数据传输是无限的。

 

 

Css:

css的注释:    /**/

1. css叫什么?层叠样式表。

2. 优势:1)数据和显示分离 2)一次书写可以多个地方引用3)页面的代码量会减少,提高效率 4)搜索引擎优化 5)Css可以优化布局

3. 选择器。

选择器:

元素选择器

标签名{属性名1:值1;属性名2:值2;...属性名n:值n;}

id选择器

#id名{属性名1:值1;属性名2:值2;...属性名n:值n;}

类选择器

.className{属性名1:值1;属性名2:值2;...属性名n:值n;}

包含选择器

祖宗 后代{属性名1:值1;属性名2:值2;...属性名n:值n;}

 

使用css的三种方式:

1.在本页面使用选择器,写一个<style>选择器。。。。</style>

2.引入外部文件   <link rel="stylesheet" href="文件地址" />

3.直接作用在标签上的style

 

 

多个css效果作用在同一个标签时:

如果标签中有style属性,一定是用这个。

如果选择器是相同的,采用就近原则。

不同选择器作用在同一标签是,作用范围越小越优先。   id选择器-->类选择器-->包含选择器-->元素选择器

 

 

属性能查api即可。

 

 

javascript:

书写js的时候需要加入<script></script>标签。

注释   //单行注释    /**/多行注释

警告框  alert(内容)    页面的控制台打印  console.log(内容)

单击事件  onclick()

定义函数:

function(形参列表){函数体}

 

 

 

 

函数的简单调用:

任何标签都可以添加事件。

超链接中,如果不希望页面发生调转,只执行事件,使用伪协议javascript:void(0)。

阻止超链接跳转,return false给a标签即可。

事件后的双引号中间的环境是js环境,可以写任何的js代码。

一次事件可以执行多个函数。

超链接的了解内容:

<a href="javascript:函数()" ></a>     a标签的单击事件

<a href="javascript:void(0)" onclick="javascript:函数()"></a>

 

 

 

js的声明和赋值:

js里的任何类型变量声明时都是使用var 变量名=值。

只声明不赋值,值是undefined。

不能使用未经声明的变量。


全局变量:

1.定义在函数外部的变量。

2.定义在函数内部没有var声明的变量。注意:在使用这种全局变量时,需要先执行一次该变量所在的函数,将其加载到内存中。

 

局部变量:

声明在函数内部的以var声明的变量。

 

注意变量会   提前声明,在该赋值的地方赋值

 

js的数据类型:

 

查看数据类型的关键字:  typeof

 

6种的情况:

string boolean number(NaN,infinity,-infinity) null undefined  object

5种的情况:

去掉null,null本质属于object.

 

 

数据类型强制转化(规则和自动转化一模一样):

String()  将传入的数据强制转化成字符串    

Number()   将传入的数据强制转化成数字   

Boolean()  将传入的数据强制转化成布尔

 

String:

传什么得到什么的字符串形式。

Boolean:

只有:undefined,null,"",0,NaN,false这六种情况转化为布尔是false,其他全部是true.

Number:

字符串:

空字符串    -->0

非空字符串:

如果能转化为数字,则转为数字.     "100"   "100.11"   "00100.11"  

不能转化为数字     转为NaN

 

布尔      

true-->1     false-->0

 

null   -->0

undefined-->NaN

 


 

全等符(等同符)===

比较的时候不会发生类型的自动转化,类型不同,直接false.

 

弱等符(等值符)==

比较的时候会发生类型的自动转化,如果是Number、String、Boolean三者进行比较的时候转化成数字进行比较,null和undefined除了和自己相等,就彼此相等。

特殊   NaN==NaN   是false         

 

流程控制:

分支语句:

if else语句和java  一模一样

switch(){case xx:...default}  和 java也一样   注意使用case的时候用break,防止下穿。

 

循环语句:

第一种:

for(初始变量;循环范围;循环增量){循环体}      初始变量需用  var声明


第二种:

for(var 变量名 in 集合){}        在数组中使用的时候 变量名代表下标     (用在数组的时候,如果数组的值有null或undefined的时候,不能使用这种遍历)  

 

while(){}

do{} while()


continue   结束本次循环

break   结束循环

return  结束方法

 

 

数组:

定义数组的三种方式:

第一种:

var array=new Array(元素1,元素2...元素n)

第二种:

var array=new Array(数组长度)

第三种:

var array=[元素1,元素2...元素n]

 

数组的长度可以通过length直接控制。

js中的数组存放任意类型的变量。



重要方法:

push()    在数组的尾部添加一个或多个元素,返回新数组的长度

pop()   移除数组的最后一个元素并且返回该元素

unshift()    在数组的最前面添加一个或多个元素,返回新数组的长度

shift()   移除数组的第一个元素并且返回该元素

join()    将数组中的元素拼接成一个字符串,如果没有传入拼接符,默认逗号。

 

    

 

 

函数深化:

函数的三种定义方式:

第一种:

function 函数名(形参列表){函数体}

第二种:

var 函数名=function(形参列表){函数体}

第三种:

var 函数名=new Function(形参列表,函数体)    注意:形参列表和函数都得写字符串。

 

三种方式的联系:

第一种和第二种本质上是使用的第三种,在使用上 是一模一样的。

三种方式的区别:

第一种方式会最优先加载,二三种顺序加载。

 

 

js没有重载,同名会覆盖,按加载顺序覆盖。

 

 

函数也是对象,函数可以作为参数,传递给另一个函数。

 


获取函数的形参的数组 关键字,arguments。   (可以用来模拟重载)

 

匿名函数自调用:

(function(形参列表){函数体})(实参列表)

作用:

用来初始化一些参数或配置

特点:

加载完成之后立即调用一次,并且只能调用这一次。

 

向页面输出内容:

document.write(内容)  内容是在body内。

 

字符串的数组处理方式:

字符串对象[下标] 可以取得单个字符 同   字符串对象.charAt(下标)

 

引入js文件:

<script src="js文件地址" ></script>  标签内不要写代码。

 

 

js的对象:

Object对象是所有javascript对象的祖先,Object对象中的方法和属性其他所有js对象都有。

 

动态的添加属性:

obj对象.属性名=值

动态的添加函数:

obj对象.属性名=函数

 

删除属性或函数:

delete obj对象.属性名

 

 

Json对象:

格式:

{键1:值1,键2:值2....键n:值n}

 

Json对象也可以动态的添加或删除属性和函数

 

Json对象取值:

1.    Json对象.键

2.    Json对象[键]     --》如果中括号内没有加引号,是变量,加引号就是找的键名。

 

Json对象的遍历

for(var xx in json对象){}      xx代表键,取值:json对象[xx]

 

 

 

js创建对象的方式:

1.工厂模式。

2.利用this创建对象。

注意   

new 函数()

必定会返回一个函数生成的对象,并且属性只 this绑定的。和函数本身的return没有任何关系。

函数()

返回函数return的值,如果没有返回则是undefined.

 

3.利用prototype创建对象(用的少)


 

this到底指向谁:

总之:谁调用我,我指向谁。

1)   没有明显调用是window在调用。

2)   new对象的时候,函数中的this指向new出来的对象

3)   xx.函数()     谁调用我,我指向谁。指向xx

 

apply和call:

语法:  

函数对象.call(thisObj,arg1,arg2...argN)


函数对象.apply(thisObj,[arg1,arg2...argN])

作用:

调用函数,并且将函数中的this用传入的thisObj代替。

 

内置函数:

 

eval(String str)

将传入的字符串以js语法运行(简单的说,就是执行将引号去掉的代码),常用于服务器返回的ajax字符串的处理。


parseInt()

"100px"     从开始取,取到直到不是数字的时候,就不取了。巧用于css的像素操作

"100.123"   忽略小数部分,常用语替代java中int强转。

 

isNaN()

判断是否是NaN

isFinite()

无穷是false, NaN也是无限的。

 

escape()  将传入的字符串中的特殊符号进行编码

unescape() 将编码后的字符串,进行解码。

 

 

常用事件:

单击事件  onclick

双击事件  ondblclick

成为焦点  onfocus

失去焦点  onblur

页面加载完成   onload

页面卸载    onunload

移动鼠标   onmousemove

鼠标移入   onmouseover

鼠标移除   onmouseout

改变内容并且失去焦点 onchange

键盘按下  onkeydown

 

 

内置对象:

String

indexOf()    charAt()     substring(n,m)   substr(n,m)从n开始取 取m个  toUpperCase()  toLowerCase()  split()  concat()拼接  replace()    

Date

new Date()  获取的是当前时间    setYear()  setMonth()  setDate()    

获取年   getYear()  当前年-1900   getFullYear() 获取完整年

获取月   getMonth()   注意取出来的月份是0-11   使用的时候+1

获取日   getDate()

获取周几  getDay()

获取时    getHours()

获取分    getMinutes()

获取秒   getSeconds()

获取当地时间  toLocaleString()

获取格林时间  toGMTString()

 

Math

ceil()  向上取整

floor()  向下取整

abs()    绝对值

round()  四舍五入

max()  两者取较大

min()  两者取较小

pow()   次方

random()   随机数  常和parseInt()搭配使用

 

 

 

||和&&:

在布尔环境下使用,和java一模一样,在非布尔环境下使用:

||    先将前面的元素转化为布尔,如果为true则返回前面,为false返回后面。

&&    先将前面的元素转化为布尔,如果为true则返回后面,为false返回前面。

 

 

 

警告框:

window.alert(内容)

 

询问框:

window.prompt(询问的提示内容)   返回用户输入的内容

 

确认框:

window.confirm(确认框的提示内容)  确定返回true  取消返回false

 

event对象:

产生的时机:

一定是伴随着事件而产生。

包含的信息:

事件的类型

event对象.type

 

事件源

IE认识     event对象.srcElement    

火狐认识    event对象.target   

 

事件的详细信息

获取按键码

event对象.keyCode

获取鼠标按键

event对象.button

 

获取event对象:

window.event(IE认识的)||传入的event对象(火狐认识,高版本ie也认识)

 

 

 

BOM:

window    代表一个窗口或一个框架,一般window对象下的属性或方法省略window

location   代表地址栏  可以直接操作控制页面跳转

navigator    navigator.userAgent  获取浏览器信息

history    前一步后一步

document   后面的重点。

 


window.open(url,windowName,window的参数)

url 代表打开的地址

windowName  新窗口的名字,如果该名字存在,则在该窗口内打开,如果不存在,则新开窗口

参数     工具栏    高宽   滚动条....     "属性1=值1,属性2=值2...属性n=值n"

 

 

 

父子窗口的交互(怎样拿到对方的window对象)

父窗口获取子窗口的window对象:

open方法会返回子窗口的window对象

子窗口获取父窗口的window对象:

window.opener

 

 

window对象.close()  关闭窗口

 

设置轮询(每隔毫秒数执行一次传入的字符串或函数):

window.setInterval(func|string,毫秒数)

清除轮询:

window.clearInterval(轮询产生的id)

设置延时(隔毫秒数只执行一次传入的字符串或函数):

window.setTimeout(func|string,毫秒数)

清除延时:

window.clearTimeout(延时产生的id)

 

获取标签中间的内容:

对象.innerHTML    -->获取的标签内所有内容,包括其他标签

对象.innerText  -->获取标签内的文本内容

 

 

 

 

 

 

 

结点的类型

元素结点,文本结点,属性结点。

<div id="div1" >xxxx</div>   

元素节点代表整个div,文本节点xxxx,属性节点id="div1"

 

直接获取元素节点的方式:

document.getElementById(id值)   通过id获取元素结点

document.getElementsByName(name值)  一般用在表单域(普通文本域,密码框,多选框,单选按钮,下拉列表,提交按钮,重置按钮,隐藏域,文件域(file),普通按钮,文本域) ,如果其他标签需要使用name属性,需要id和name相同。

document.getElementsByTagName(标签名)   通过标签名获取元素节点的数组

document.getElementsByClassName(类名)   IE不支持,了解即可。


 

 

间接获取元素节点的方式:

没有浏览器差异性问题的是:

obj.parentNode   获取父节点

 

有浏览器差异性问题的是(火狐会把空的文本节点当做子节点):

parentNode.childNodes获取所有子节点

parentNode.firstChild  获取第一个子节点

parentNode.lastChild  获取最后一个子节点

obj.nextSibling   下一个兄弟节点

obj.previousSibling  上一个兄弟节点

 

 

节点名(nodeName)    节点的值(nodeValue)    节点的类型(nodeType)

元素节点        标签名              null                   1

 

属性节点        属性名              属性值                 2

 

文本节点        #text               文本的值               3

 

属性节点在对象的attributes数组里面。

 

 

 

setAttribute(属性名,值)和getAttribute(属性名)

 

操作标签本身的属性,setAttribute和   obj.xxx=值是一样的,getAttribute 和obj.xxx是一样的。如果属性是自定义属性,必须使用上面这个。

 

 

操作文档结构:

创建一个元素节点:

document.createElement(标签名)

插入到父节点的尾部:

parentNode.appendChild(元素节点)

在某个元素之前插入新节点

parentNode.insertBefore(新的,旧的)

用新的节点替换旧的节点

parentNode.repalceChild(新的,旧的)

移除子节点

parentNode.removeChild(子节点对象)

 

如果插入或替换的新节点是已存在的节点,存在的会消失。

obj.cloneNode(boolean)    true为深度克隆,克隆结构和innerHTML    false 只克隆结构

 

 

 

js操作css:

操作单个css属性:

obj.style.属性名=值


操作多个css属性:

第一种方式(不推荐使用):

obj.style="{名1:值1;名2:值2...名n:值n}"

第二种方式:

obj.style.cssText="{名1:值1;名2:值2...名n:值n}"

 

操作标签的class:

第一种方式:

obj.className=类名

第二种方式:

obj.setAttribute("class","类名");

 

 

table api:

如果使用原生的dom操作,操作table的时候注意table下默认有一个tbody.

 

tableObj.rows  

获取所有行的数组

rowObj.cells

获取该行的所有列的数组

rowObj.rowIndex

该行所在的索引

 

tableObj.insertRow(索引)    -->最后一行添加tableObj.insertRow(tableObj.rows.length)     第一行添加tableObj.insertRow(0)

 

rowObj.insertCell(索引)

 

tableObj.deleteRow(索引)

 

 

   

 

获取form表单的方式:

通用方式:

document.getElementById()

document.getElementsByName()

document.getElementsByTagName()

 

表单专属:

document.formName

document.forms[下标]

document.forms[名字]

document.forms[id]

 

 

form的重要参数:

action     数据提交的服务器地址

method     get和post

name     

id

elements   获取所有表单域的数组(表单域:普通文本(text),密码框(password),多选框(checkbox),单选按钮(radio),下拉列表(select),提交按钮(submit),重置按钮(reset),隐藏域(hidden),文件域(file),文本域(textarea),普通按钮(button))

length    表单域的个数

form表单中的事件:

onsubmit()    表单提交的时候触发 (只适用于type=submit)

onreset()     表单重置的时候触发 (只适用于type=reset)

   

 

form表单的方法:

formObj.submit()  提交表单

formObj.reset()   重置

 

 

 

表单域

获取表单域的方式:

1.可以使用通用的。

2.可以使用专属的:

1)  formObj.表单域名(name)

2)  formObj.elements[下标]

3)  formObj.elements[表单域名]

4)  formObj.elements[表单域id]

 

 

表单域的通用属性:

name

id

value

disabled   使之失效,不能输入,提交的时候值不会提交

readonly   只读,不能输入,提交的时候值会提交

form     获取表单域对象的所在表单

type

 

表单域的方法:

focus()   使之成为焦点

blur()   使之失去交单

 

 

文本表单域(text,password,textarea):

现在的值:   value

默认的值:  defaultValue

 

 

单选按钮和多选框获取值:

都可以通过  checked判断选中的值是哪些。

单选按钮:   formObj.表单域.value

 

 

下拉列表:

最常用的:     

下拉列表对象.value

 

通过selectedIndex获取选中的option索引拿值,可以通过所有子节点或options.

 

通过selected 判断被选中的option  也可以取值.


 

正则表达式:

反向引用:

要引用一个匹配出来的结果,使用反向引用。

语法:   \数字      数字是从左到右数左小括号 ,从1开始。零宽断言的小阔号不数。

 

零宽断言(预搜索):

断言匹配的结果前面必定会有:   (?<=exp)

断言匹配的结果后面必定会有:   (?=exp)

断言匹配的结果前面必定没有:   (?<!exp)

断言匹配的结果后面必定没有:   (?!exp)

 

 

 

js中的正则使用:

如果声明一个正则表达式对象:   

1./regExp/flags       注意regExp,和flags都不要引号

2.new RegExp("regExp","flags")  都需要引号,注意如果正则表达式中有\   需要转义\\

flags的参数:

i:   忽略大小写

g:   全局匹配

ig:  忽略大小写并且全局匹配

 

 

正则表达式对象的方法:

reg对象.exec(str)          返回匹配到的结果的数组,如果正则表达式对象中有分组,第一个是匹配的字符串结果,后面是根据分组所匹配到的结果。如果不能匹配则返回null。

reg对象.test(str)          如果能匹配到则返回true,不能匹配返回false.

 

注意正则表达式对象的方法,都依赖lastIndex参数。如果是非g模式,lastIndex不随着匹配结果所偏移,一直保持0.  如果是g模式,如果能匹配lastIndex会偏移到匹配结果的后一个索引,如果不能匹配,lastIndex归0.


字符串中使用正则表达式的方法:

search

类似于字符串的indexOf方法,indexOf方法是传入字符串,search传入正则表达式对象。如果能匹配,则返回匹配到的字符串索引,不能匹配则返回-1。g模式和非g都是返回第一个匹配到的结果的索引。

match

返回匹配到的结果的数组。非g模式,只会返回第一个匹配到的结果。g模式,返回所有匹配到的结果的数组。

replace

将正则表达式能匹配到的字符串,进行替换。非g模式,只替换第一个匹配到的字符串。g模式,替换所有匹配到的结果。

 

 

 

网络七层协议:

物理层    数据链路层  网络层   传输层   会话层     表示层      应用层

http在应用层。

TCP:

1.面向连接的。

2.基于字节流

3.安全的

 

UDP:  

1.面向包的。

2.基于字符流

3.不安全

 

 

Http    超文本传输协议

Https   超文本传输协议的安全版本

ftp     文件传输协议

talent  远程登录,特点:明文传输,所传即所得。

ssh     远程登录的安全版本,特点:加密传输。     linux系统就是基于这个协议。

dns     域名服务。

 

 

 

 

Http协议:

http协议是无状态的协议,两次请求之间没有任何关系。

一次连接:

建立连接

发出请求

接收响应

关闭连接

http协议一般采用1.1,一次连接可以发送多次请求。

 

 

 

http协议结构:

请求的结构:

第一行是请求行      内容    请求方式   地址(如果请求方式是get,参数跟在地址的?后面)   协议版本

第二行至多行是请求头        内容   查文档

最后一段请求实体      内容   如果是post请求方式,参数放在这里           

 

 

响应的结构:

响应行                   协议版本         状态码        状态描述

响应头                   响应的头信息

响应实体                 响应的数据

 

状态码       200  正常     404   找不到对应资源      500   服务器代码有错误。       

 

 

 

tomcat的目录结构:

bin

startup和shutdown      .bat是windows的    .sh是linux的shell脚本

conf

server.xml和web.xml

lib

tomcat自身依赖的jar包

temp

存放临时文件

logs

日志信息

webapps

存放要启动的项目

work

存放jsp生成的.java和编译后的.class

servlet

如何书写一个servlet:

1.写一个普通的java类,继承HttpServlet,重写service方法

2.在web.xml中配置标签<servlet><servlet-name>给servlet取一个唯一的名字</servlet-name><servlet-class>包名+类名</servlet-class></servlet>

     <servlet-mapping><servlet-name>映射一个servlet</servlet-name><url-pattern>一般都要加/路径结尾</url-pattern></servlet-mapping>

将servlet放入服务器并启动:

1.将工程中的WebRoot中的文件复制,粘贴在tomcat的webapps下新建的文件夹中。

2.打开tomcat的bin目录下的startup.bat启动服务器。

 

 

访问一个servlet:

路径:

服务器地址:端口号/webapps下新建的文件夹名/url-pattern所配置的值

代表本机:

localhost

127.0.0.1

本机局域网ip

端口号:

默认8080,启动服务器的启动信息中的HTTP-端口号。

 

端口号的配置:

tomcat-->conf-->server.xml  中    Connector  port=端口号

端口号的范围     0-65535      系统保留0-1024    http默认端口  80(如果配置为80访问服务器的时候不需要输入端口号)

 

 

url-pattern的详细配置:

/xxx

/xxx/yyy

/xxx.yyy

/xxx/yyy.zzz

/*

/xxx/*     

*.xxx   注意这种前面不能加任何/

 

 

查看服务器正常启动:

地址:端口号

 

欢迎页面:

地址:端口号/根目录

如果本项目配置了welcome-file-list   从上往下找 ,如果找不到则报404,找得到就显示

如果本项目没有配置,会去tomcat的web.xml中找。

如果没有找到,并且不想显示404,可以修改web.xml中的default的servlet的listings  将true改为false,则显示项目的目录结构。

 

 

servlet的生命周期:

初始化:

默认是第一次调用的时候初始化,并且只初始化一次。(web项目的某个servlet对象是唯一的)

运行流程:

默认服务器调用servlet的公共的service方法,service方法将传入的ServletRequest和ServletResponse强转为HttpServletRequest和HttpServletResponse再调用受保护的service方法。受保护的service方法调用request.getMethod()  获取了请求方式,再根据请求方式调用doGet或doPost,如果子类没有重写对应的doGet或doPost会报405.

 

销毁:

服务器卸载的时候销毁初始了的servlet.


关闭服务器两个地方的区别:

Console  下关闭,不打印服务器关闭信息,速度较快

Server   下关闭,会打印服务器关闭信息,速度较慢

 

 

单例模式:

思想:   一个类,只能生成唯一一个对象。

懒汉模式     恶汉(饿汉)模式   静态内部类

 

 

服务器启动的时候初始化servlet:

在servlet标签中加入  load-on-startup       中间的值可以不填,可以填0和正数。  越小的越优先初始化。

 

 

HttpServletRequest对象(请求对象):

获取请求行信息:

请求方式:getMethod()

端口到?:getRequestURI()   

?之前:getRequestURL()   返回StringBuffer

协议:getScheme()  

?之后:getQueryString()

根目录:  getContextPath()  

 

获取请求头信息:

getHeader(请求头名)      根据请求头的名字获取对应值,忽略大小写。

 

获取网络信息:

获取服务器信息:

getLocalAddr--> String    地址

getLocalPort-->  int  端口

 

获取客户端信息:

getRemoteAddr--> String    地址

getRemotePort-->  int  端口

 

获取参数:

获取单个参数:

getParameter(参数名)       注意只写名没写值    获取出来的结果是空字符串    没有该个参数  结果是null

  获取多个值(一般用在checkbox):

getParameterValues(参数名)

获取所有参数名的集合:

getParameterNames()  返回Enumeration   迭代的方式遍历

 

 

 

HttpServletResponse对象(响应对象):

操作响应头:

setHeader(名,值)      忽略大小写

往页面输出html或js或css或普通文本....

getWriter()        write(内容)

往页面输入流:

getOutPutStream()

 

 

 

 

文件下载:

第一步设置头信息:

response.setHeader("content-disposition","attachment;fileName=用户接收的文件名")

 

第二步:

将资源以流的方式输出。

 

 

注意如果文件名有中文,需要转码。    new String(文件名.getBytes("项目编码"),"iso8859-1")

 

 

request作为作用域使用:

作用范围:

同一次请求(同一个request对象)

 

作用域的通用方法:

往作用域存值

request.setAttribute(键,值)

从作用域取值

request.getAttribute(键)

从作用域移除值

request.removeAttribute(键)

获取作用域中所有键的集合

request.getAttributeNames()

 


请求转发:

1.整个过程一次请求

2.地址栏不会发生变化

3.只能访问服务器内部资源

4.效率略高

5.绝对路径的/ 是项目的根目录后的/

6.一般在请求转发后面添加一个return.

 

 

重定向:

1.整个过程两次请求

2.地址栏会发生变化

3.可以访问外部资源

4.效率略低

5.绝对路径的/是端口号后的/

6.一般在重定向后面添加一个return.

 

请求转发的语法:

request.getRequestDispacher(地址).forward(请求,响应)

 

重定向的语法:

response.sendRedirect(地址)

模拟重定向:

response.setStatus(302)

response.setHeader("location","地址");

 

表单如果方式是get:

会把action 地址?后面的内容覆盖掉  如果要传参数,解决方式 ,使用隐藏域hidden

 

表单是post方式的时候,不会覆盖?后的内容,而将表单参数放在请求实体内。

 

 

从浏览器到服务器的乱码:

request.setCharacterEncoding(服务器编码)    针对请求实体内的参数进行编码,默认只有post有效.

    想同时使get方式有效,需要配置端口的Connector标签中加入   useBodyEncodingForURI="true"

从服务器到浏览器的乱码:

response.setHeader("content-type","text/html;charset=服务器编码")


 

 

页面上的路径:

绝对路径的/在 端口号后。

 

 

ServletConfig对象:

作用:用来读取web.xml中该servlet标签的配置信息。

获取servletConfig对象:

this.getServletConfig()

获取servlet-name的值:

config对象.getServletName()

获取web.xml中配置的  <init-param><param-name></param-name><param-value></param-value></init-param>

config对象.getInitParameter(键)

config对象.getInitParameterNames()  获取所有键的集合

获取servletContext对象

config对象.getServletContext()

 

ServletContext对象(application):

ServletContext对象也是一个作用,作用范围,该web项目下所有servlet都共享。

生命周期:  服务器启动的时候初始化,关闭的时候销毁.(尽量少的在该作用域存值)

可以使用作用域的通用方法.


获取servletContext对象:

this.getServletContext()

重要方法:

将资源以流的方式读入:

context对象.getResouceAsStream(资源路径)

获取资源的tomcat运行绝对路径:

context对象.getRealPath(资源路径)

获取文件夹下的所有资源的路径:

context对象.getResoucePaths(文件夹路径)

获取web.xml中配置的context-param参数:

context对象.getInitParameter(键)

context对象.getInitParameterNames()  获取所有键的集合

 

 

获取项目资源的方式:

获取src下的资源:

类.class.getResouceAsStream(资源路径)    1.相对路径,相对于反射模板所在的位置。  2.绝对路径的/  代表src目录

类.class.getClassLoader().getResouceAsStream(资源路径)       注意  相对路径和绝对路径都是代表src目录


 

获取WebRoot下的资源:

都是通过ServletContext(application)对象。

ServletContext对象.getRealPath(资源路径)   不能不写/   ,/代表根目录后面的/

ServletContext对象.getResouceAsStream(资源路径)      注意  相对路径和绝对路径都是代表WebRoot目录

 

 

 

 

 

 

Cookie对象:

 

Cookie的特性:

1.保存在客户端

2.效率低

3.不适合保存大量数据

4.不安全

 

 

创建Cookie对象:

Cookie cookie=new Cookie(键,值)

设置Cookie有效期:

cookie.setMaxAge(秒数)     注意:1.没有设置cookie时间的,cookie保存在浏览器的内存中,设置了时间才会被保存在客户端的硬盘上。

 2.只能保存在内存或硬盘的其中一个位置上。如果硬盘上的Cookie失效了,即使浏览器没关闭,Cookie信息也不会再跟上。

 3.将Cookie的最大有效期设为0,可以使cookie失效。

 

 

设置Cookie的作用范围:

cookie.setPath(/路径)

  注意:1./代表    端口号后面的/

2.如果没有设置作用范围,默认是项目的根目录后。

如何判定是同一个Cookie?

同键,同作用范围。

 

 

 

Cookie如果响应给浏览器:

response.addCookie(cookie对象)

 

模拟Cookie:

response.setHeader("set-cookie","cookie的内容")

 

 

服务器如何获取请求所带的Cookie:

request.getCookies()  返回cookie的数组,注意使用的时候一定判断null的情况再遍历。

 

 

 

 

Session:

Session的特性:

1.保存在服务器

2.效率高

3.适合保存大量数据

4.安全

5.Session的JsessionID依赖Cookie机制


 

session可以使用作用域的通用方法。

session的方法:

设置session的最大空闲时间:

session.setMaxInactiveInterval(6)

使session强制失效:

session.invalidate()

如果没有设置最大空闲时间:

根据web.xml中    session-config标签配置的分钟数。  默认30分钟

 

 

 

session的生成机制:

服务器代码必须调用request.getSession(),请求里没有JsessionId,服务器必定会创建一个新的session对象,请求头里如果有JsessionId,会拿着该JsessionID找到对应的session对象,如果该session对象失效则会创建一个新的session对象,如果该session对象没有失效,则就使用该session对象。如果找不到对应的session对象,也会创建一个新的session.

什么叫一次会话:

粗略的说,打开浏览器访问服务器,服务器中有调用request.getSession(),直到浏览器关闭。

详细的说,一次会话是依赖session的生成机制。



request:

同一次请求

session:

同一次会话

application:

同一个web服务器下所有servlet共享


 

jsp总结:

jsp就是用来页面显示(替代html,一般不操作作用域的对象。)


basepath:

如果jsp页面有base标签,该页面上的标签地址的相对路径基于base标签的href,绝对路径的/在端口号后面。

 

jsp本质是servlet.

 

jsp的运行流程(jsp为什么修改后不需要重启服务器?):

首先浏览器访问以*.jsp结尾的路径时,会被jsp引擎拦截下来,调用相关的java代码,在tomcat的work目录下生成.java和.class文件,最终执行.class文件的_jspService方法。

 

jsp的语法:

<%  %>        java脚本,里面写的内容最终被加载到_jspService方法内。

<%!  %>       声明,里面写的内容声明全局变量或方法。

<%= %>        表达式,里面的内容也会被加载到_jspService方法内,相当于out.print(内容)

<!-- -->      html的注释,对jsp引擎是可见的,不能注释java的内容。      <%-- --%>    jsp的注释,可以注释普通标签,也可以注释java代码。

 

 

print和write的区别:

print底层也是在调用write方法,只是处理了null的情况,当结果为null时,print打印的是字符串的null,write会报空指针异常。

 

 

静态引入:

语法: <%@include file="地址"  %>

特点:

1.只生成一个.java文件,将被引入的页面的代码加载到引入页面的代码中。

2.耦合性高

3.效率高

4.不灵活(不能取相同名字的变量)

 

 

动态引入:

语法(标签内部  不能只有空格或换行,否则会报错):  

<jsp:include page="地址"  >

<jsp:param    name="键"   value="值" />

</jsp:include>


被引入页面获取参数:

request.getParameter(键)


特点:

1.生成多个.java文件,有多少个页面就生成多少个.java

2.耦合性低

3.效率低

4.灵活(可以取相同名字的变量)  

一般推荐使用 动态引入

 

编译指令:

<%@page  .....%>

1.设置内容的类型   contentType

2.导入包      import

3.错误时显示的页面     errorPage="地址"

 

 

九大内置对象:

1.request  

请求对象,可以获取请求行信息,请求头信息,表单参数。作为作用域使用,请求转发。

2.response

响应对象,可以设置状态码,设置头信息,重定向。

3.session

session的开关   <%@page session="boolean"%>   默认是true,为false时不能使用内置对象的session.

会话对象。可以作为作用域使用,invoke强制失效,setMaxInactiveInterval设置最大空闲时间。注意什么叫一次会话,session生成机制。

4.application

ServletContext对象。    

最大的作用域。  

重要的方法

getRealPath()  获取资源的运行绝对路径

getResouceAsStream()  将资源以流的方式读入

getResoucePaths()   获取文件夹下的所有资源的路径   

5.out

输出对象。     封装了 response.getWriter()加入缓冲区,提高了效率。

6.config

获取web.xml中servlet配置的对象。    

getServletName()

getInitParameter()   获取该servlet下配置的init-param的值

getInitParameterNames()  

7.page

当前运行的jsp生成的类的对象,不推荐使用,因为没用。

8.exception

例外对象。向页面输出错误信息。

9.pageContext

page作用域,作用范围,只有本页面可以使用。

可以通过这个对象获取其他八大内置对象。

 

 

el表达式:

el表达式的写法,${要取的值},用来替代<%= %>,主要用来取作用域中的值,也可以用来取表单参数。

 

取值顺序:

默认从作用域小到大的取值,page-->request-->session-->application

 

指定作用域取值:

pageScope      requestScope     sessionScope    applicationScope

 

取表单参数:

param.键           取单个表单值   等效于  request.getParameter

paramValues.键     取多个表单值   等效于  request.getParameterValues

 

类型的自动转换,不用强转。(el表达式不支持方法)

 

算术运算:

除了  /  是有小数的,其他和java一模一样,支持三目运算符。

 

取值方式:

以.的方式取值

以[]的方式取值    优势是可以传入一个变量

 

判断是否为空    ${empty  判断的值}

当结果是null,空字符串,空的容器的时候结果是true    

 

取Map的值:

${map对象.键}

取List的值:

${list对象[inx]}

 

jstl标签库:

要使用标签库,第一步必须导入标签库。   <%@taglib  prefix="标签库的缩写"  uri="标签库地址"%>

jstl的jar包中的META-INF 有一个c.tld中有uri地址

核心标签库 (c标签)

<c:out />    向页面输出值       属性  value 输出的内容  default  如果输出的结果为null默认显示的值     escapeXml   true不解析html  false时 解析

<c:set />    往作用域中存值或修改作用域中的值

     往作用域中存值的属性:

var     存的键

value   存的值

scope   存的作用域(不写作用域,默认是存page)

     修改作用域中的对象的值:

value      修改的值

property   属性的名字

target     要修改的对象  注意用 el表达式

 

<c:remove />  scope   作用域(不写作用域,默认是移出所有)    var  要移出的键

 

 

分支:

<c:if test="要进行的判断" var="判断的结果"  scope="结果保存的作用域">

判断结果为true的时候执行的代码

</c:if>

 

<c:choose>

<c:when test="要进行的判断">

判断结果为true的时候执行的代码

</c:when>

<c:when test="要进行的判断">

判断结果为true的时候执行的代码

</c:when>

<c:otherwise>

当没有进入when的时候执行的代码

</c:otherwise>

<c:choose>

 

 

循环:

<c:forEach></c:forEach>

属性:

items    要遍历的集合

var      遍历的当前对象

begin    从索引几开始

end      到索引几结束

step     步长

varStatus  包含了遍历的当前对象的一些信息        index表示索引    count 表示第几个   first 是否是第一个   last 是否是最后一个


 

 

ajax复习:

ajax:

ajax发出的请求会通过ajax引擎偷偷的访问服务器,服务器响应数据通过ajax偷偷的传回页面。通过js和css和html进行局部刷新。

什么时候使用ajax:

1.必须需要访问服务器的时候

2.不想跳转页面的时候

 


ajax语法:

1.获取ajax的请求对象

window.XMLHttpRequest    火狐认识和高版本的ie认识

window.ActiveXObject     ie认识,火狐不认识

 

var request;

if(window.XMLHttpRequest){

request=new XMLHttpRequest()

}else if(window.ActiveXObject){

request=new ActiveXObject("Msxml2.XMLHTTP");

}

 

 

2.访问服务器

request.open(请求方式,请求地址,同步异步)

请求方式:

get或post

请求地址一般都加上一个当前毫秒数,解决缓存问题

 

同步异步:

默认异步true       false时同步

 

 

3.监听响应的状态

request.onreadystatechange=function(){

//响应的状态     分为0-4     0-3都是准备的过程    4成功接受数据     

var readyState=request.readyState;

if(readyState==4){

//成功接受数据后的代码

//status  就是服务器响应的状态码   200 404 500

var status=request.status;

if(status==200){

//成功执行的代码


//获取服务器响应的内容

var result=request.responseText;


}else if(status==404){

//找不到地址时执行的代码

}else if(status==500){

//服务器代码有问题时执行的代码

}

}


}



 

4.传输参数

request.send(参数)

注意没有参数的时候,send也必须写,里面要写一个null

 

 

 

 

服务器如何向ajax程序响应数据:

response.getWriter()     用write或print或println     不推荐使用println    

 

 

get方式传参:

参数跟在url的?后面   和模拟表单传参一模一样

 

post方式传参:

1.参数跟在url的?后面   和模拟表单传参一模一样

2.写在send内("参数键1=值1&参数键2=值2...")    并且在send前 需要加上   request.setRequestHeader("content-type","键值对的编码方式  form表单的enctype默认值")

 

 

同步异步的区别:

异步:

ajax流程之后的代码,会先运行

同步:

ajax流程走完之后,才执行ajax流程之后的代码

 

 

 

数据库

关系型数据库(行和列组成,类似于excel)

mysql(中型数据库,免费,甲骨文,中小公司使用的比较多)

oracle(大型数据库,收费,甲骨文,大公司使用的比较多)

DB2(大型数据库,收费,IBM)

sqlserver(中型数据库,免费,微软)

 

树状型数据库

 

 

线型数据库

 

 

网状数据库

 

 

 

 

 

 

数据库的结构:

服务器,库,表

1一个服务器,N个库,N个表

 

表: 类似于生活中纸张的表格

库:  类似于生活中的文件袋

服务器:类似于存放文件袋的一个房间(房名mysql)

 

 

mysql服务的开关:

1.右键我的电脑?管理?服务和应用程序?服务  找到mysql    打开和关闭

2.直接在运行中输入   services.msc  可以打开服务的页面

3.(cmd模式下 net start  查看已启动的服务)   net start 服务名     启动    net stop 服务名  停止。

 

 

mysql -uroot -proot -h localhost -P3306    

-u用户名  -p密码 -h空格服务器地址  -P端口号

本机 127.0.0.1 或localhost  

不写端口号 默认3306

地址省略默认是本机

 

 

 

数据库的字段类型:

 

 

数据库默认是  有符号的。

 

 

整形:

 

完整形式      类型(M)   unsigned   zerofill

 

所占字节数         所占位      无符号                                有符号         

tinyint1   8              0-255(2^8-1)     -128-127((-2^7~2^7-1))

smallint2   16  0-65535          -2^15~2^15-1

mediumint3   24  0~1600多万       正负800万

int4   32             0-42E   正负21E

bigint8   64             0~18446744073709551615-9223372036854775808-9223372036854775807

 

 

 

 

tinyint   无符号情况

[0][0][0][0][0][0][0][0]    -->0

[1][1][1][1][1][1][1][1]    -->1*2^0+1*2^1+..1*2^7=2^8-1=255

 

有符号情况

[1][1][1][1][1][1][1][1]    --> -127

[0][1][1][1][1][1][1][1]    -->  127

[0][0][0][0][0][0][0][0]    -->0

[1][0][0][0][0][0][0][0]    -->-0

 

 

有2个字段   一个是       人的年龄               一个是动物的年龄           身份证不能选bigint   一般都是字符串

 tinyint  unsigned      smallint unsigned

 

 

 

 

浮点型:

所占字节数             取值范围

float(M,D)4              跟MD有关系

 

double(M,D)8              跟MD有关系

 

 

M:精度   &n

更多

微信公众号H5支付demo(Servlet实现)

状 态:
公测
标签 :
编程
下载量:
开发商:
暂无
时 间:
17-08-13
语 言:
中文,英文

暂无下载地址

暂无下载地址

查看更多相关文章