概述
目录
html
css
JavaScript
jQuery
tomcat
servlet(是一个接口)
jsp(java serverpages)
el表达式(expression language)
文件上传
文件下载
filter过滤器
json
ajax(异步)
html
1.a标签 target属性_self表示当前页面跳转(默认) ,_blank表示打开新页面跳转
2.ul无序列表,里面用li,ol有序列表,里面用li。type属性的none可以把列表前面的符号去掉
3.java里绝对路径是盘路径,web里绝对路径是http://地址:端口号/工程名/资源路径
4.img标签的alt里的文字表示图片显示不了的时候显示的文字,border属性设置边框
5.table标签,tr标签是行,th标签是表头标签代表居中加粗,td标签是一个单元格。
cellspacing属性单元格间距(0最小代表重叠),align属性设置表格相对页面位置,文字相对单元格位置等等。colspan属性跨列,rowspan属性跨行
6.iframe标签在页面开辟一个小区域显示另一个页面,在iframe标签设置一个name属性,页面写一个a标签target写iframe的name名字,可以实现点击超链接,改变内嵌窗口iframe的显示页面
7.表单form里的input标签的type属性值radio为单选框,多个单选框需要设置同一个name,不然实现不了只能单选的效果。check属性值checked表示默认选中。checkbox复选框
8.select标签下拉列表,option标签代表每一个选项。select属性的selected表示默认选中
9.textarea标签多行文本输入框,rows属性设置可见行数,cols设置每行字符数。
10.type属性为reset设置表单的重置按钮。submit提交按钮。file文件上传域。hidden隐藏域
11.表单form内用table来让内容显示的整齐一点
12.form标签的action属性设置提交到的服务器地址,method属性是提交方式(默认为get)
细节:表单内的内容必须加上name属性,不然发不到服务器。
单选复选以及下拉框的option选项都必须加上value。
13.get和post提交方式的区别
get提交会在地址处显示?参数=值&,不安全,并且必须都是ascall码值。有长度限制
非ascall值必须用post, post提交在地址栏不显示具体参数,相对安全。理论上没有长度限制。
14.div标签默认独占一行,span标签长度是数据的长度,p段落标签默认上下各空一行(已空则不再空)
css
1.border:边框宽度(单位px等等),边框的样式(solid实线),边框的颜色(颜色有好几种实现方式)
2.方式一在标签里用style属性,再写css语句
方式二在head里用style标签设置type为text/css,在标签内用选择器来写css样式
方式三用.css文件然后link标签引入
3.选择器:
标签名选择器 标签名{}
id选择器 #名字{}
class类选择器 .名字{}
组合选择器 选择器1,选择器2,选择器3{}
JavaScript
1.js是弱类型,java是强类型。var i;i可以赋int ,string等等类型,而java在定义变量时就定好了类型
2.用script标签引入,type属性text/javascript,src属性xx.js
3.undefined是变量未定义,null空值,NAN非值
4.数值类型都是number
5.==比较字面量,===比较字面量以及类型比较
例如12==“12” true
12===“12” false
6.在js中所有的变量都可以作为boolean类型的变量使用,
0,null,undefined,“”都认为是false
7.&&:当表达式都为true,返回最后的一个true的值
当有一个为false,返回第一个为false的值
8.||:当表达式全为假,返回最后一个表达式的值
当一个为真,返回第一个为真的值
9.定义数组,var 数组名=[x,x,x],数组会根据最大下标自动扩容。
10.定义函数方式一 function f(a,b){} 不需要写参数类型
方式二 var 函数名 = function (参数列表){}
11.js里函数不允许重载,会覆盖定义
12.js中函数有一个隐形参数,类似于java的可变长参数,实际上是一个数组叫arguments
无参方法里写参数就是将参数存入这个隐形数组里
13.Object形式的对象的定义:
var 变量名 =new Object()
变量名.属性 = 值
变量名.函数名 = function(){}
对象的访问
变量名.属性 /函数名()
14.{}形式的对象的定义
var 变量名 = {
属性名:值,
属性名:值,
函数名:function(){}
}
15.事件:
onload加载完成事件 页面加载完成后,常用于页面代码初始化
onclick单击事件 常用于按钮的点击事件
onblur 失去焦点事件 用于输入框失去焦点验证操作
onchange 内容发生改变 用于下拉列表和输入框内容改变后操作
onsubmit 表单提交事件 表单提交前验证数据是否合法
事件的静态绑定,在标签写onxxx属性=“方法()”,然后方法在script里写明
动态绑定,通过document.getElmentById("xxx")得到对象,然后对象.onxxx = function(){}
document表示文档,通过选择器得到对象
getElmentByName
getElmentByTagName
16.DOM document object model 文档对象模型
17.正则对象.test(文本对象)方法用于测试是否符合正则表达式,返回true或者false
18.
正则表达式(用//包裹)(RegExp对象):
/e/ 字符串是否包含e
/[abc]/ 字符串是否包含a或b或c
/[a-z]/ 字符串是否包含小写字母
/[0-9]/ 字符串是否包含任意数字
元字符:
/w/表示查找单词字符,包括a-z,A-Z,0-9,以及下划线
/W/查找非单词字符
/d/查找数字
量词:
/a+/表示字符串是否包含至少一个a
/a*/表示字符串是否包含0个或多个a
/a?/表示字符串是否包含0个或一个a(很多个a也true,因为包含只需要满足最小条件就行)
/a{3}/表示字符串是否包含连续三个a
/a{3,5}/表示字符串是否最少包含连续三个a,最多包含五个连续a(大于五个也行,因为包含是满足最小条件即可)
/a{3,}/表示字符串是否最少包含连续三个a
/a$/表示字符串必须以a结尾(a不能在其他位置)
/a^/表示字符串必须以a开头(a不能在其他位置)
/^a{3,5}$/表示字符串从头到尾都必须匹配至少3个最多五个连续a
/^w{5,12}$/这样子就表示从头到尾必须是5到12个字母数字下划线
结论:加了^$表示整个字符串,不加只需要部分满足。
19.DOM的innerHTML属性表示起始和结束标签之间的内容(可以是文本也可以是html语句等等)
20.getElmentsByName 返回多个指定名称对象的集合 (操作和数组相同也是由下标来操作)
getElmentsByTagName 返回多个指定标签名对象的集合
21.页面加载完成后操作的节点,若写在head的script里需要加上window.onload = function(){}
因为浏览器解析代码是一行行解析的,所以不先加载页面会导致节点获取不到。
jQuery
jQuery就是js和query查询,是javascript的一个类库。
需要用script引入jQuery的js类库
在jQuery里面$是jQuery的核心函数,$:()就是调用这个函数
1.$(function(){
}) 相当于onload页面加载完成之后,全写是$(document).ready(function(){})
2.$("#id名")按标签查询对象,jQuery中点击事件是下面的click
通常给jQuery对象加上$符号,效果没区别,只是便于区分
$(function (){ var $aaa = $("#aaa") $aaa.click(function (){ alert("aaaaaaa") }) })
3.$()里
传入的参数为函数,表示页面加载完成之后,相当于window.onload
传入的参数为html字符串,会创建这些html标签对象
传入的参数为选择器字符串时,根据字符串查找元素节点对象
传入的参数为dom对象,将dom对象包装成jQuery对象返回
4.通过document.getElmentById得到的就是dom对象
getElmentsByName得到的就是dom对象
getElmentsByTagName得到的就是dom对象
dom对象是[object HTML标签名Element]这种形式的
而通过jQuery提供的api创建的对象是jQuery对象
jQuery提供的api查询到的对象是jQuery对象
jQuery包装的dom对象也是jQuery对象
jQuery对象是[object,object]形式的
5.jQuery对象本质是dom对象的数组+jQuery提供的一系列函数
jQuery对象不能使用dom对象的属性和方法
6.jQuery对象和dom对象相互转换(通常给jQuery对象加上$符号,效果没区别,只是便于区分)
dom转jQuery var $jquery = $(dom对象)
jquery转dom var dom = $jquery对象[下标](用下标取出对应的dom对象)
7.$("#id,div,p.class1")这种形式将匹配的所有选择器对应的元素返回
p.class1表示必须是p标签并且class类型为class1
8.css()方法可以设置和获取样式
例如$("#id").css("background-color","#bbffaa")
9.层级选择器:
找到form下的所有input后代元素 $("form input")
找到form父元素下的所有input子元素 $("form>input")
匹配跟在label后面的input元素(下一个) $("label + input")
找到form后和form同辈的input元素 $("form~input")
10.过滤选择器 之基本选择器:
:first 取匹配到的第一个元素 $("li:first")
:last 取匹配到的最后一个元素 $("li:last ")
:not(在括号写一个选择器) 查找所有未选中的input元素 $("input:not(:checked) ")
:even 匹配tr标签里所有索引值为偶数的元素(下标从0开始) $("tr :even")
:odd 和上一个相同,只不过是奇数
:eq 匹配一个给定索引值的元素 例如tr的第二行 $("tr :eq(1)")
:lt 匹配所有小于给定索引值的元素 tr的第一第二行 $("tr :lt(2)")
:gt 大于
:header 匹配所有标题标签例如h1,h2 $(":header")
:animated 匹配正在执行动画效果的元素
例如没有执行动画效果的最后一个div $("div:not(:animated ):last")
11.过滤选择器之内容过滤器
:contains(text) 查找所有包含xxx的div $(":contains('xxx')")
:empty 查找div所有不包含子元素的元素或者空元素 $("div:empty ")
' :parent 查找所有包含子元素或者文本的元素
:has(选择器) 匹配含有选择器匹配到的元素的元素 $("div:has(p)")
12.过滤选择器之属性选择器
[属性] 匹配含有指定属性的元素 $("div[id]")
[属性=value] 匹配给定属性以及对应值的元素 $("div[id="xxxxx"]")
[属性!=value] 有属性但不等于该值的元素
[属性^=value] 匹配给定属性值是某些值开头的元素
[属性$=value] 匹配给定属性值是某些值结尾的元素
[属性*=value] 匹配给定属性值包含某些值的元素
13.过滤选择器之表单选择器
:input 匹配表单所有input
:text 匹配所有单行文本框
:password
:radio
:checkbox
:submit
:file
:hidden
:reset
:button
14.表单对象属性过滤器
:disabled 不可用元素
:enabled 例如可用的单行文本框有几个 $(":text:enabled")
:checked 匹配所有选中的元素
:selected 匹配所有选中的option元素 $("select option:selected")
15.each()方法是jQuery提供的遍历dom元素的方法,提供了一个this对象,就是遍历到的dom对象
each(function(){
alert(this.value)
})
16.元素的筛选
eq() 获取给定索引的元素
first() 获取第一个元素
last() 获取最后一个元素
filter(exp) 留下匹配的元素
is() 判断是否匹配给定的选择器
has(exp) 返回包含有匹配选择器的元素的元素
not(exp) 删除匹配选择器的元素
children(exp) 返回匹配给定选择器的子元素
find(exp) 返回匹配给定选择器的后代元素
……
17.jQuery属性操作
(下面三个都一样不传参是获取,传参是设置)
html() 可以设置和获取开始和结束标签之间的内容,作用和dom属性innerHTML一样
text() 可以设置和获取开始和结束标签之间的文本,作用和dom属性innerText一样
val() 可以设置和获取表单项的value ,作用和dom属性的value一样
18.attr() 可以设置和获取属性值 ,不推荐操作checked,readonly,selected,disabled
attr("name")获取name
attr("name","xxx")设置name值
prop() 可以设置和获取属性值 ,推荐操作attr操作不了的属性
prop和attr作用一样,但是attr("checked") 返回未定义,而prop返回false。
19.DOM增删改
内部插入(子元素):
a.appendTo(b) 把a插入到b子元素末尾
a.prependTo(b) 把a插入到b子元素最前面
例如 $("<h1>aaa</h1>").appendTo($("div"))
外部插入(平级):
a.insertAfter(b) 得到ba
a.insertBefore(b) 得到ab
替换:
a.replaceWith(b) a替换掉b(所有b变成一个a)
a.replaceAll(b) a替换掉b(一对一替换)
删除:
a.remove() 删除a标签
a.empty() 清空a标签
20.css样式操作
addClass() 添加样式
removeClass() 删除样式
toggleClass()添加/删除样式(相当于选中再点击不选中)
offset() 返回匹配到的第一个元素相对于页面的位置(左上角的坐标)
用法offset({
left: ,
top:
})
21.jQuery动画
以下动画方法都可以添加参数:
第一个参数动画执行时间(毫秒)
第二个参数动画的回调函数(动画完成后自动调用的函数)
show() 将隐藏的元素显示
hide() 将可见的元素隐藏
toggle() 可见就隐藏,隐藏就可见
fadeln() 淡入
fadeOut() 淡出
fadeTo() 在指定时长内慢慢的修改透明度到指定值(参数一时间,参数二透明度,参数三回调函数)
fade Toggle() 淡入淡出切换
22.jQuery事件操作
window.οnlοad=function(){} 原生的页面加载(后执行)(只会执行最后一次赋值函数)
$(function(){}) jquery 的页面加载(先执行)(写多个会执行多次,按写的顺序)
原因
jQuery的页面加载完成后是浏览器的内核解析完标签创建好dom对象就会立刻执行
原生的页面加载完成后除了等创建好标签后,还要等标签显示需要的内容加载完成
23.jQuery的一些常用事件处理方法
click() 绑定单击事件或者触发单击事件(加function是绑定事件,不加是触发事件)
mouseover() 鼠标移入事件
mouseout() 鼠标移出事件
bind() 一次性绑定一个或多个事件 例如$("#id").bind("click mouseover",function(){})
多个事件之间空格隔开
one() 使用上和bind一样,但是one绑定的事件只触发一次
unbind() 解除事件的绑定
live() 使用上和bind一样,可以用来绑定选择器匹配的所有元素,哪怕这个元素是后面动态创建出来的也有效
24.事件的冒泡:
父元素和子元素同时绑定一个事件,当子元素触发事件,会传递到父元素也会触发。
如何阻止事件的冒泡:
在子元素函数体类使用return false;
25.JavaScript的事件对象
原生js获取事件对象:
window.onload = function(){
decument.getElementById("id值").onclick = function(event){
}
}
jquey获取事件对象:
$(function(){
$("#id").click(function(event){
})
})
使用bind对多个事件绑定同一个函数,怎么获取当前操作的事件
$(function(){
$("#id").bind("mouseover mouseout",function(event){
if(event.type=="mouseover"){
}
else if(event.type=="mouseout"){
}
})
})
26.图片移动跟随
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script type="text/javascript" src="jquery-3.6.0.js"></script>
<script>
$(function (){
$("#xxx").bind("mouseover mouseout mousemove",function (event){
if (event.type=="mouseover"){
$("#yyy").show()
}else if (event.type == "mouseout") {
$("#yyy").hide()
}
//从左上角向右下角很快移动会导致鼠标在大图片上,事件变成鼠标移出,隐藏大图片出现一闪一闪的效果,所以在left和top上加一个距离
else if (event.type == "mousemove"){
$("#yyy").offset({
left:event.pageX+10,
top:event.pageY+10
})
}
})
})
</script>
</head>
<body>
<img src="02.jpg" id="xxx" >
<img src="02.jpg"id="yyy"
width="500px"
height="300px">
</body>
</html>
tomcat
1.request请求:客户端向服务器发送数据
response响应:服务器向客户端回传数据
有请求就有响应,成对出现
2.web资源:
静态资源:html,css,js,txt,mp4,jpg
动态资源:jsp页面,servlet程序
3.启动tomcat方式
方式一:bin下的startup.bat
方式二:cd 到tomcat的bin下 ,输入命令catalina run
关闭方式一:关闭窗口
关闭方式二:bin目录下的shutdown.bat
4.如何修改tomcat端口号(默认8080)(改完需要重启服务器)
修改在conf目录下的server.xml配置文件的connector标签的port属性
例如http协议默认的端口号是80,http://www.baidu.com:80
域名实际上就是ip,也是有端口号的。80端口号比较特殊会自动去掉
5.如何部署web项目到tomcat服务器
方式一:将web项目拷贝到tomcat服务器的webapps目录下(访问方式localhost:8080/工程名/文件名)
方式二:在conf的Catalina的localhost下建立一个xxx.xml文件(一个文件代表一个工程),
内容写为<Context path="/xxx" docBase="D:xxxxxx"/>
Context表示一个工程上下文,path写访问路径,docbase写工程的绝对路径(意味着不需要放入webapps里去)
6.将html页面拖到浏览器运行和通过访问ip端口号工程文件的区别?
第一种html页面拖到浏览器运行使用的是file协议,直接读取本地硬盘的绝对路径来解析资源
第二种使用http协议,(通过网络)浏览器发送请求给服务器,服务器收到请求读取访问的资源文件回传给客户端要的页面内容,浏览器解析并展示。
7.webapps下的root目录工程的访问比较特殊
http://ip:port 不加工程名的时候默认访问的是Root工程
http://ip:port/工程名 不加资源名的时候默认访问index.html页面
8.idea整合tomcat服务器
在settings的Build的application servers应用服务里添加tomcat server
9.
10.
11.配置资源热部署
servlet(是一个接口)
是Javaweb三大组件之一 servlet程序,Filter过滤器,listener监听器
是运行在服务器上的java小程序,可以接受客户端发送过来的请求,并响应数据给客户端
实现servlet程序
1.写个类实现servlet接口
2.实现service方法
3.在web.xml配置文件写servlet标签
servlet程序生命周期(理论上)
1.执行构造器方法
2.执行init初始化方法
前两步只在第一次访问创建servlet程序执行一次(说明这个实例是单例的),后面访问只执行第三步。
3.执行service方法,有servletrequest和servletresponse两个参数
4.执行destory方法,在web工程停止的时候才会调用。
表单提交有get和post两种方式,通常用于不同的业务。但是任一请求都会调用service方法。不好区分是哪个请求。
参数servletrequest类有一个子类httpservletrequest有一个getmethod方法可以获取到提交方式,然后if判断调用哪个方法。
在实际开发中,通过继承servlet的一个子类httpservlet类实现servlet程序
根据业务需要重写doget和dopost方法。(实际上httpservlet实现的service做的内容也和上面写的一样,getmethod来获取get还是post)
servlet的继承结构:
servletconfig类(servlet程序配置类),是一个接口
1.可以获取servlet程序别名servlet-name
2.获取初始化参数init-param(在web.xml里的标签)
3.获取servletcontext对象
servlet程序和servletconfig是由tomcat服务器创建的,都在第一次访问时创建。每个servlet对应一个servletconfig对象。
servletcontext类,是一个接口
1.表示servlet上下文对象
2.一个web工程只有一个servletcontext对象实例(重启服务器会销毁这个对象,并且存储的数据也会消失)
3.servletcontext对象是一个域对象(像map一样可以存取数据,域表示存取数据的操作范围)
存数据setAttribute(),取数据getAttribute(),删除数据removeAttribute()
servletcontext类的四个作用
1.获取web.xml配置的上下文参数context-param(在web.xml里的标签)
2.获取当前工程路径(格式:/工程路径)getContextPath()
3.获取工程部署后在服务器硬盘的绝对路径 getRealPath("/") 这个/表示http://ip:port/工程名/,也就是映射idea里web文件夹的位置
4.像map一样存取数据
http协议
get请求:
1.请求行
(1)请求方式
(2)请求的资源路径【+?+请求参数】
(3)请求的协议版本号 http/1.1
2.请求头
key:value
例如accept:告诉服务器客户端可以接受的参数类型
accept-language:告诉服务器客户端可以接受的语言类型
user-agent:浏览器的信息
accept-encoding:可接受数据编码格式
host:ip端口号
connection:1.keep-alive告诉服务器回传完数据保持一段时间连接
2.closed 马上关闭
post请求:
1.请求行
(1)请求方式
(2)请求的资源路径【+?+请求参数】
(3)请求的协议版本号 http/1.1
2.请求头
key:value
这里有个空行
3.请求体(发送给服务器的数据)
name=value&name=value……
哪些是get请求,哪些是post请求?
get:
1.form method=get
2.a标签
3.link引入css
4.script引入js
5.img
6.iframe引入窗口
7.在浏览器地址栏输入地址后回车
post:
1.form method=post
response响应的http格式
1.响应行
(1)响应的协议和版本号 http/1.1
(2)响应状态码 200
(3)响应状态描述符 ok
2.响应头
key:value
空行
3.响应体(回传的数据)
常见的响应码
200 请求成功
302 请求重定向
404 服务器收到请求,但是数据不存在(可能资源地址错了)
500 服务器收到请求,服务器内部错误(代码错误)
httpservletrequest类
作用:每次有请求发送到服务器,服务器将请求的http协议信息封装到httpservletrequest对象中,然后作为参数传递到service方法(doget和dopost方法),我们可以通过这个对象获取到信息。
getParameterValues()用于多个单选框返回的值,用数组
setCharacterEncoding("utf-8") 设置字符集防止中文乱码
请求转发
1.地址栏不改变
2.虽然访问了两个资源,但是只有一次请求
3.共享request中的域数据
4.可以转发到WEB-INF目录下(而浏览器不能直接访问这个目录)
5.不能访问工程以外的资源
在servlet1里调用getRequestDispatcher("/servlet2") (/表示到web目录下)
再用得到的对象掉forward(req,resp)
base标签设置页面相对路径工作时参照的地址。
/被浏览器解析表示http://ip:port
/被服务器解析表示http://ip:port/工程名
特殊情况response.sendredirect("/")表示http://ip:port
httpservletresponse类也是和httpservletrequest一样,在请求发送到tomcat服务器,由服务器创建的一个response对象。
响应流
getoutputstream() 字节流,用于回传二进制文件
getwriter()字符流,用于回传字符串
在doget或者dopost方法里两个流只能使用一种。
中文乱码解决方式一
设置服务器字符集
resp.setcharacterencoding("utf-8")
设置浏览器字符集
resp.setheader("Context-type","text/html,charset=utf-8")
中文乱码解决方式二
同时设置服务器和浏览器的字符集
resp.setcontenttype("text/html,charset=utf-8")
请求重定向
方式一:
1.设置响应码302表示重定向
setStatus(302)
2.设置响应头的新地址
setHeader("location","http://localhost:8080/工程名/新资源名")
方式二:
setRedirect("http://localhost:8080/工程名/新资源名")
特点:
1.地址栏改变
2.两次请求
3.不共享request域数据
4.不能访问web-inf目录
5.可以访问工程外的资源
jsp(java serverpages)
作用是代替servlet程序回传html页面的数据
jsp本质上是一个servlet程序。当第一次访问jsp页面时,tomcat服务器会将jsp页面翻译为一个java源文件,并将它编译为字节码文件。
实际上servlet源码和jsp翻译成的java源文件里都是通过输出流的write方法将html语句一行行回传给浏览器。
jsp头部的page指令
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
language 属性 表示jsp翻译后是什么语言文件(暂时只支持java)
contentType属性 表示返回的数据类型
pageEncoding属性 表示当前页面的编码集
import 属性 和java一样用于导包导类
errorPage属性 运行时出错自动跳转到的错误页面
jsp常用脚本
(不用)1.声明脚本格式 <%! 声明代码%>
作用:可以给jsp翻译出来的类定义属性方法甚至静态代码块,内部类等
(常用)2.表达式脚本格式 <%= 表达式%>(不能;结尾)
作用:输出整型,浮点型,字符串,对象
(常用)3.代码脚本 格式<% java语句 %>
作用:在jsp页面编写java语句功能
jsp三种注释
html注释<!-- -->
java注释 //单行注释
/**/多行注释
jsp注释 <%-- --%>
jsp九大内置对象
在tomcat翻译jsp成servlet程序源代码后内部提供的九个对象。
request 请求对象
response 响应对象
pageContext jsp上下文对象
session 会话对象
application servletcontext对象
config servletconfig对象
out jsp输出流对象
page 指向当前jsp对象
exception 异常对象
jsp四大域对象(存取数据)(优先顺序从小到大pageContext,request,session,application)
pageContext(pageContextImpl类) 当前jsp页面有效
request(httpservletrequest类) 一次请求有效
session(httpsession类) 一个会话范围有效(浏览器访问服务器到浏览器关闭为止)
application(servletcontext类) 整个web工程有效
获取方式:
<%=pageContext.getAttribute("key")%>
<%=request.getAttribute("key")%>
<%=session.getAttribute("key")%>
<%=application.getAttribute("key")%>
jsp中的out输出和response.getWriter()输出的区别?
jsp翻译后底层源代码都用out输出,所以一般统一使用out输出,避免打乱页面输出顺序
out.write和out.print用哪个?
write只适合输出字符串
print底层会将任何类型都转为字符串然后用write输出
jsp常用标签
静态包含(常用):
<%@ include file="/jsp页面的路径"%>
通常是网页的最下面部分,不经常改变每一页都相同
静态包含不会翻译被包含的jsp页面,而是把该页面代码拷贝到静态包含的位置执行输出。
动态包含(效果和静态的一样):
<jsp:include page="/jsp页面的路径">
动态包含会将被包含的jsp页面翻译为java代码。用java代码去执行输出
请求转发:
<jsp:forward page="/jsp页面的路径"></jsp:forward>
Listener监听器(接口)
javaweb三大组件之一。
servletcontextlistener监听器可以监听servletcontext对象的创建和销毁,在web工程启动的时候创建,web 工程停止的时候销毁。
实现步骤:
1.写一个类实现servletcontextlistener接口
2.实现两个回调方法,创建时调的方法和销毁调的方法
3.在web.xml里写listener标签配置一下监听器
el表达式(expression language)
1.作用是代替jsp页面的表达式脚本来输出数据(原来是<%= %>),
改为${ 表达式}更简洁
区别:el表达式在输出null值时输出空串,而jsp表达式输出null
2.若四个域都有相同的key名,那么${key}输出的是按照优先级取范围域最小的输出
pageContext<request<session<application
3.如何用el表达式输出bean的普通属性,数组属性,list集合属性,map集合属性
变量.普通属性
变量.数组 (输出的是地址)
变量.数组[下标]
变量.list (输出整个list集合)
变量.list[下标]
变量.map集合 (输出整个map集合)
变量.map.key (输出对应value)
4.empty运算判断空 例如${empty 值}
值为null 结果为true
值为空串 结果为true
值为长度为0的数组 结果为true
list集合元素个数为0 结果为true
map集合元素个数为0 结果为true
5.点运算和中括号运算
例如map.put("a.a.a","value")
map.put("a","value")
${map[a.a.a]} 特殊的key名会导致出错,可以用这样子取值
${map.a}
6.el表达式的11个对象(可以直接使用)
pageContext 可以获取jsp九大内置对象
下面几个都是map类型的
pageScope 可以获取pageContext 域数据
requestScope 可以获取request域数据
sessionScope 可以获取session域数据
applicationScope 可以获取application域数据
param 可以获取请求参数的值 (地址栏传的参数param.key可以获取到value)
paramvalues 获取多个请求参数的值 (例如paramValues.hobby[0])
header 获取请求头信息
headervalues 获取请求头多个值的情况
cookie 获取当前请求的cookie信息
initparam 获取web.xml中配置的<context-param> 上下文参数
jstl标签库
(el表达式是为了替代jsp的表达式,而jstl标签库是为了代替代码脚本)
先引入jar包
然后加上<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
1.<c:set />
set标签可以往域保存数据
原来的方式:域对象.setAttribute(key,value)
set方式:${xxxscope.key}
<c:set scope="page" var ="key" value="value"/>
page表示pageContext
request表示request
session表示session
application 表示application
var表示key
value表示value
2.<c:if>
if标签用来做if判断
<c:if test="${12==12}"> 方法体</c:if>
test里写判断的条件,用el表达式表示
3.<c:choose> <c:when> <c:otherwise>
类似于switch case default
<c:choose>
<c:when test="${}"> </c:when>
<c:when test="${}"> </c:when>
<c:otherwise> </c:otherwise>
</c:choose>
区别在于switch有条件满足后会继续执行完后面的语句,需要自己加break跳出
而这个只会执行满足条件的语句
注意点:
1.标签里不能使用html注释
2.when的父标签必须是choose
4.<c:forEach />
第一种遍历1到10
<c:forEach begin="1" end="10" var="i"> ${ i } </c:forEach>
begin和end表示开始和结束的索引,var表示循环的变量
第二种变量对象类型数组
java的方式for(object o:arr){}
<c:forEach items="${xxxscope.xxx}" var="o"> </c:forEach>
items表示遍历的数组对象arr var表示当前遍历到的数据
第三种遍历map集合
java的其中一种方式获取到entry对象 for(Map.Entry entry:map.entryset()){}
<c:forEach items="${xxxscope.map}" var="entry"> ${entry.key} = ${entry.value} </c:forEach>
第四种遍历list集合
<c:forEach items="${xxxscope.person}" var="p" step="2" varStatus="status"> ${p.name} </c:forEach>
step属性表示步长
varStatus表示当前遍历到的数据的状态="status"
${status.current} 表示当前遍历到的数据
${status.index} 当前索引
${status.count} 遍历的个数
${status.first} 是否是第一条
${status.last} 是否是最后一条
${status.begin} 获取begin
${status.end} 获取end
${status.step } 获取step
文件上传
1.form表单提交方式必须是post,因为get有长度限制
2.form的encType属性必须为multipart/form-data
3.input type=file
4.编写服务端的程序接受文件(以流的形式接收 fileinputstream流去read)
引入commons-fileupload.jar
commons-io.jar
其中servletfileupload类用于解析上传的数据
ismultipartcontent()判断上传的数据是否是多段的(文件是多段的)
parserequest()解析上传的数据返回list集合
isformfield()判断当前表单项是否为普通表单项还是上传的文件 true普通 false文件
getfieldname()获取表单项的name属性
getstring () 获取表单项的值
getname()获取上传的文件名
write()将上传的文件保存到磁盘
文件下载
cookie
服务器发送信息给客户端,由客户端保存键值对信息
客户端有了cookie后,每次请求都会发送给服务器(通过请求头里的cookie携带信息发给服务器)
每个cookie大小不能超过4kb
如何创建cookie(可创建多个)
Cookie cookie = new Cookie(key,value)
resp.addCookie(cookie) //通知客户端保存cookie
服务器如何获取客户端保存的cookie
req.getCookies() 返回cookie数组
只有这一种方式,所以如果要取其中一个需要在遍历里面判断key值来获取
可以将这种遍历查找封装成一个工具类里的方法
cookie值的修改
方式一:
创建一个同名的cookie对象,在构造器赋予新值,调用response.addCookie()覆盖原来的
方式二:
找到要修改的cookie对象,调用setValue()设置新值,调用response.addCookie()保存修改
cookie生命控制(cookie什么时候删除)
setMaxAge()设置cookie过期时间(负数表示浏览器退出就删除,正数表示秒数,0表示删除)
cookie有效路径path属性的设置
可以过滤哪些cookie可以发给服务器
path属性通过请求的地址来进行过滤
session会话(cookie保存在客户端,而session存在服务器端)
是一个接口(httpsession类实现了这个接口)
作用是用来维护客户端和服务器关联的技术
每个客户端都有自己的session会话,经常在session里保存用户登录之后的信息
如何创建session和获取(id,是否为新)
req.getSession()这个方法第一次调用是创建,之后调用是获取
isNew()判断是否为刚创建的session
getId()每个会话都有一个唯一的id值
之后变为获取的本质:
客户端在没cookie的情况下发请求给服务器,服务器创建session对象存入内存,并且创建一个cookie对象,key为JSESSIONID,value为session的id值,通过响应头将这个cookie信息发送给客户端,客户端在之后的每次请求会带着这个cookie,服务器通过获取这个session的id去和内存里的所有session比较,从而实现获取session。
等到超时时间到,将session的cookie删除,又变为第一次创建session。
session域数据的存取
获取数据 req.getSession().getAttribute(key)
存数据 req.getSession().setAttribute(key,value)
session生命周期
setMaxInactiveInterval() 设置session的超时时间(秒),超过销毁(默认超时时长为1800秒)
getMaxInactiveInterval() 获取session的超时时间
因为在tomcat的web.xml里设置的默认超时时长为30分钟,自己也可以在工程的web.xml配置文件修改值来手动设置。
filter过滤器
是接口,作用是拦截请求
如果是jsp页面,我们可以通过检查session域里保存的用户信息来判断是否有权限访问某些资源,
但是html页面以及图片资源等等不能用这种方式来判断,所以需要用到过滤器来过滤。
1.编写一个类实现filter接口(javax.servlet里的接口)
2.重写方法其中doFilter方法用于拦截请求,做权限检查。
先获取session对象,然后取出session域的用户信息进行判断
必须加上filterChain.doFilter(servletRequest,servletResponse) 这行代码是继续访问用户的目标资源。
3.在web.xml配置filter标签(类似servlet配置)
filter生命周期
1.构造器
2.init方法
前两步在web工程启动就创建了
3.doFilter方法
第三步拦截到请求就会执行
4.destory方法
第四步停止web工程的时候执行
filterconfig类
tomcat每次创建filter的同时会创建一个filterconfig类对象,包含filter配置信息
1.获取web.xml里配置的filter的名称 filter- name
2.获取web.xml里配置的filter的初始化参数 init-param
3.获取servletcontext对象
filterChain过滤器链
filterChain.doFilter(servletRequest,servletResponse)
在doFilter方法里这行代码的作用是执行下一个过滤器(按web.xml配置的顺序),如果没有则访问目标资源
多个filter过滤器执行特点
1.所有filter和目标资源都在同一个线程里
2.多个filter执行的时候,共用一个request对象
filter路径匹配方式
精确匹配 /目录/具体资源
目录匹配 /目录/*
后缀名匹配 *.jsp(不能斜杠开头)
json
1.在JavaScript中的使用
{
"key":value,
"key":value,
"key":value
}
value可以是数字,字符串,布尔值,数组[],json对象{},甚至json数组[{},{},{}]等等
json的访问(json是一个对象,key可以认为是一个属性)
对象.key就是访问属性
json的常用方法
JSON.stringify() json对象转为json字符串
JSON.parse() json字符串转为json对象
用于操作json的数据时需要转为json对象,
用于客户端和服务器数据交换需要json字符串
2.json在java中的使用(引入jar包例如gson)
javaBean和json的转化:
创建一个类的对象s
再创建一个Gson gson = new Gson();
String ss = gson.toJson(s) java对象转为json字符串
gson.fromJson(ss,类名.class) json字符串转为java对象
List和json的转化:
(多个java对象在list集合里)
Gson gson = new Gson();
String lists = gson.toJson(list) 把list集合转为json字符串
下面的前提是同类的对象(使用匿名内部类):
gson.fromJson(lists, new TypeToken<ArrayList<具体类>>{}.getType()) json字符串转为java对象
map和json的转化:
Gson gson = new Gson();
String map1 = gson.toJson(map) 把map集合转为json字符串
下面的前提是同类的对象:
gson.fromJson(lists, new TypeToken<HashMap<xxx,具体类>>{}.getType()) json字符串转为java对象
ajax(异步)
局部刷新不会改变地址栏,并且异步的形式不会卡在等待服务器返回数据而是执行其他,用户体验感比较好。
原生的ajax请求(不常用)
function ajaxRequest(){
1.创建xmlhttprequest
var xmlhttprequest = new XMLHttpRequest()
2.调用open方法设置请求参数三个参数分别是提交方式,url地址,异步还是同步(true or false)
xmlhttprequest .open("GET",http://ip:port/工程/资源,true)
3.在send方法之前绑定onreadystatechange事件,进行请求完成后的操作
xmlhttprequest.onreadystatechange = function(){
if(xmlhttprequest.readyState == 4 && xmlhttprequest.status==200){
xmlhttprequest.responseText //接收服务器传回来的字符串数据(再 parse转为json对象)
}
}
4.调用send方法发送请求给服务器
xmlhttprequest.send()
}
jQuery的ajax请求
1.$.ajax方法
使用:
$.ajax({
url:"http://loacalhost:8080/工程/资源",
data:"action=调用的方法名",
type:"GET",
success:function(data){
这里的data就是服务器返回的数据
},
dataType:"json"
(这里的数据格式写成text返回的数据就是字符串,写成json返回的就是json对象)
})
2.$.get方法和$.post方法(底层是封装$.ajax())
相对于ajax少了一个type参数
使用(对应四个参数):
$.get("http","action=调用的方法名",function(data){},"json")
post和get用法相同
3.$.getJson方法(固定get请求以及json格式)
最后
以上就是野性八宝粥为你收集整理的javawebhtmlcssJavaScriptjQuerytomcatservlet(是一个接口)jsp(java serverpages)el表达式(expression language)文件上传文件下载 cookiesession会话(cookie保存在客户端,而session存在服务器端)filter过滤器jsonajax(异步)的全部内容,希望文章能够帮你解决javawebhtmlcssJavaScriptjQuerytomcatservlet(是一个接口)jsp(java serverpages)el表达式(expression language)文件上传文件下载 cookiesession会话(cookie保存在客户端,而session存在服务器端)filter过滤器jsonajax(异步)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复