过滤器与监听器
1. Filter过滤器
1.1 作用
当访问服务器的资源时,过滤器可以将请求拦截下来,完成一些特殊的功能
1.2 快速入门
@WebFilter("/*")
public class Demo1Filter implements Filter {
public void destroy() {
}
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
System.out.println("Filter");
chain.doFilter(req,resp);
}
public void init(FilterConfig config) throws ServletException {
}
}
1.3 细节
1.3.1 执行流程
执行过滤器→执行放行后资源→回来执行过滤器放行代码下边的代码
1.3.2 生命周期方法
init:在服务器启动后,会创建Filter对象,然后调用init方法。只执行一次。用于加载资源
doFilter:在每一次请求被拦截资源时,会执行。执行多次
destroy:在服务器关闭后,Filter对象被销毁。如果服务器是正常关闭,则会执行destroy方法。只执行一次,用于资源释放
1.3.3 配置详解
1.3.3.1 拦截路径配置
具体资源路径:/index.jsp 只有访问index.jsp资源时,过滤器才会被执行
目录拦截:/user/ * 访问user下的所有资源时,过滤器都会被执行
后缀名拦截:.jsp 访问后缀名为jsp资源时,过滤器都会被执行
拦截所有资源:/ 访问所有资源过滤器都会被执行
1.3.3.2 拦截方式配置
1.注解配置
设置dispatcherTypes属性
REQUEST:默认值。浏览器直接请求资源
FORWARD:转发访问资源
INCLUDE:包含访问资源
ERROR:错误跳转资源
ASYNC:异步访问资源
1.4 登陆验证案例
2. Listener监听器
2.1 基本概念
事件监听机制
事件:一件事情
事件源:事件发生的地方
监听器:一个对象
注册监听:将事件、事件源、监听器绑定在一起。当事件源上发生某个事件后,执行监听器代码
JQuery
1. 基本概念
一个JavaScript的框架
JavaScript框架:本质上就是一些js文件,封装了js的原生代码而已
2. 快速入门
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>js框架</title>
<script src="js/jquery-3.3.1.min.js"></script>
</head>
<body>
<div id = "div1">div1...</div>
<div id = "div2">div2...</div>
<script>
//使用JQuery获取元素对象
var div1 = $("#div1");
alert(div1.html());
</script>
</body>
</html>
JS与JQuery
<body>
<div id = "div1">div1...</div>
<div id = "div2">div2...</div>
<script>
//1.通过JS方式获取名称叫div的所有html元素对象
var divs = document.getElementsByTagName("div");
alert(divs.length); //可当作数组使用
//2.通过JQuery方式获取名称叫div的所有html元素对象
var $divs = $("div");
alert($divs.length); //可当作数组使用
//直接改变divs中所有div内容
$divs.html("div");
//JS对象转换为JQuery:$(js对象)
for (var i = 0;i < divs.length;i++){
$(divs[i]).html("DIV")
}
</script>
</body>
3. 基本语法
3.1 事件绑定
<body>
<div id = "div1">div1...</div>
<div id = "div2">div2...</div>
<input type="button" value="click" id="b1">
<script>
//给b1按钮添加事件
//1.获取按钮
$("#b1").click(function () {
alert("click");
})
</script>
</body>
3.2 入口函数
<script>
$(function () {
$("#b1").click(function () {
alert("click")
})
})
</script>
</head>
<body>
<div id = "div1">div1...</div>
<div id = "div2">div2...</div>
<input type="button" value="click" id="b1">
</body>
3.3 样式控制
<script>
$(function () {
$("#div1").css("backgroundColor","red");
});
</script>
</head>
<body>
<div id = "div1">div1...</div>
<div id = "div2">div2...</div>
<input type="button" value="click" id="b1">
</body>
4. 选择器
筛选具有相似特征的元素(标签)
4.1 基本选择器
<script type="text/javascript">
// <input type="button" value="保存" class="mini" name="ok" class="mini" />
// <input type="button" value="改变 id 为 one 的元素的背景色为 红色" id="b1"/>
// <input type="button" value=" 改变元素名为 <div> 的所有元素的背景色为 红色" id="b2"/>
// <input type="button" value=" 改变 class 为 mini 的所有元素的背景色为 红色" id="b3"/>
// <input type="button" value=" 改变所有的<span>元素和 id 为 two 的元素的背景色为红色" id="b4"/>
$(function () {
$("#b1").click(function () {
$("#one").css("backgroundColor","pink"); //id
});
$("#b2").click(function () {
$("div").css("backgroundColor","pink"); //标签
});
$("#b3").click(function () {
$(".mini").css("backgroundColor","pink"); //类
});
$("#b4").click(function () {
$("span,#two").css("backgroundColor","pink"); //并集
});
});
</script>
4.2 层级选择器
<script type="text/javascript">
// <input type="button" value="保存" class="mini" name="ok" class="mini" />
// <input type="button" value=" 改变 <body> 内所有 <div> 的背景色为红色" id="b1"/>
// <input type="button" value=" 改变 <body> 内子 <div> 的背景色为 红色" id="b2"/>
$(function () {
$("#b1").click(function () {
$("body div").css("backgroundColor","pink");
})
$("#b2").click(function () {
$("body > div").css("backgroundColor","pink");
})
})
</script>
4.3 属性选择器
<script type="text/javascript">
// <input type="button" value="保存" class="mini" name="ok" class="mini" />
// <input type="button" value=" 含有属性title 的div元素背景色为红色" id="b1"/>
// <input type="button" value=" 属性title值等于test的div元素背景色为红色" id="b2"/>
// <input type="button" value=" 属性title值不等于test的div元素(没有属性title的也将被选中)背景色为红色" id="b3"/>
// <input type="button" value=" 属性title值 以te开始 的div元素背景色为红色" id="b4"/>
// <input type="button" value=" 属性title值 以est结束 的div元素背景色为红色" id="b5"/>
// <input type="button" value="属性title值 含有es的div元素背景色为红色" id="b6"/>
// <input type="button" value="选取有属性id的div元素,然后在结果中选取属性title值含有“es”的 div 元素背景色为红色" id="b7"/>
$(function () {
$("#b1").click(function () {
$("div[title]").css("backgroundColor","pink");
});
$("#b2").click(function () {
$("div[title='test']").css("backgroundColor","pink");
});
$("#b3").click(function () {
$("div[title!='test']").css("backgroundColor","pink");
});
$("#b4").click(function () {
$("div[title^='te']").css("backgroundColor","pink");
});
$("#b5").click(function () {
$("div[title$='est']").css("backgroundColor","pink");
});
$("#b6").click(function () {
$("div[title*='es']").css("backgroundColor","pink");
});
$("#b7").click(function () {
$("div[id][title*='es']").css("backgroundColor","pink");
});
});
</script>
4.4 过滤选择器
<script type="text/javascript">
// <input type="button" value="保存" class="mini" name="ok" class="mini" />
// <input type="button" value=" 改变第一个 div 元素的背景色为 红色" id="b1"/>
// <input type="button" value=" 改变最后一个 div 元素的背景色为 红色" id="b2"/>
// <input type="button" value=" 改变class不为 one 的所有 div 元素的背景色为 红色" id="b3"/>
// <input type="button" value=" 改变索引值为偶数的 div 元素的背景色为 红色" id="b4"/>
// <input type="button" value=" 改变索引值为奇数的 div 元素的背景色为 红色" id="b5"/>
// <input type="button" value=" 改变索引值为大于 3 的 div 元素的背景色为 红色" id="b6"/>
// <input type="button" value=" 改变索引值为等于 3 的 div 元素的背景色为 红色" id="b7"/>
// <input type="button" value=" 改变索引值为小于 3 的 div 元素的背景色为 红色" id="b8"/>
// <input type="button" value=" 改变所有的标题元素的背景色为 红色" id="b9"/>
$(function () {
$("#b1").click(function () {
$("div:first").css("backgroundColor","pink");
})
$("#b2").click(function () {
$("div:last").css("backgroundColor","pink");
})
$("#b3").click(function () {
$("div:not(.one)").css("backgroundColor","pink");
})
$("#b4").click(function () {
$("div:even").css("backgroundColor","pink");
})
$("#b5").click(function () {
$("div:odd").css("backgroundColor","pink");
})
$("#b6").click(function () {
$("div:gt(3)").css("backgroundColor","pink");
})
$("#b7").click(function () {
$("div:eq(3)").css("backgroundColor","pink");
})
$("#b8").click(function () {
$("div:lt(3)").css("backgroundColor","pink");
})
$("#b9").click(function () {
$(":header").css("backgroundColor","pink");
})
})
</script>
4.5 表单过滤选择器
<script type="text/javascript">
// <input type="button" value="保存" class="mini" name="ok" class="mini" />
// <input type="button" value=" 利用 jQuery 对象的 val() 方法改变表单内可用 <input> 元素的值" id="b1"/>
// <input type="button" value=" 利用 jQuery 对象的 val() 方法改变表单内不可用 <input> 元素的值" id="b2"/>
// <input type="button" value=" 利用 jQuery 对象的 length 属性获取复选框选中的个数" id="b3"/>
// <input type="button" value=" 利用 jQuery 对象的 length 属性获取下拉框选中的个数" id="b4"/>
$(function () {
$("#b1").click(function () {
$("input[type='text']:enabled").val("aaa");
})
})
$(function () {
$("#b2").click(function () {
$("input[type='text']:disabled").val("aaa");
})
})
$(function () {
$("#b3").click(function () {
alert($("input[type='checkbox']:checked").length);
})
})
$(function () {
$("#b4").click(function () {
alert($("#job > option:selected").length);
})
})
</script>
5. DOM操作
5.1 内容操作
<script>
$(function () {
//获取myinput 的value值
var value = $("#myinput").val();
alert(value);
$("#myinput").val("李四");
// 获取mydiv的标签体内容
var html = $("#mydiv").html();
alert(html);
$("#mydiv").html("<p>aaaa</p>");
// 获取mydiv文本内容
var text = $("#mydiv").text();
alert(text);
$("#mydiv").text("bbb");
});
</script>
</head>
<body>
<input id="myinput" type="text" name="username" value="张三" /><br />
<div id="mydiv"><p><a href="#">标题标签</a></p></div>
</body>
5.2 属性操作
5.2.1 通用属性操作
<script type="text/javascript">
$(function () {
//获取北京节点的name属性值
var name = $("#bj").attr("name");
//alert(name);
//设置北京节点的name属性的值为dabeijing
$("#bj").attr("name","dabeijing");
//新增北京节点的discription属性 属性值是didu
$("#bj").attr("discription","didu");
//删除北京节点的name属性并检验name属性是否存在
$("#bj").removeAttr("name");
//获得hobby的的选中状态
var checked = $("#hobby").prop("checked");
alert(checked);
//var checked = $("#hobby").attr("checked"); //获取不到,弹出undefined
});
</script>
</head>
<body>
<ul>
<li id="bj" name="beijing" xxx="yyy">北京</li>
<li id="tj" name="tianjin">天津</li>
</ul>
<input type="checkbox" id="hobby"/>
</body>
attr与prop区别:
1.如果操作的是元素的固有属性,建议使用prop
2.如果操作的是元素的自定义属性,建议使用attr
5.2.2 class属性操作
<script type="text/javascript">
$(function () {
//<input type="button" value="采用属性增加样式(改变id=one的样式)" id="b1"/>
$("#b1").click(function () {
$("#one").prop("class","second");
});
//<input type="button" value=" addClass" id="b2"/>
$("#b2").click(function () {
$("#one").addClass("second");
});
//<input type="button" value="removeClass" id="b3"/>
$("#b3").click(function () {
$("#one").removeClass("second");
});
//<input type="button" value=" 切换样式" id="b4"/>
$("#b4").click(function () {
$("#one").toggleClass("second");
});
//<input type="button" value=" 通过css()获得id为one背景颜色" id="b5"/>
$("#b5").click(function () {
var backgroundColor = $("#one").css("backgroundColor");
alert(backgroundColor);
});
//<input type="button" value=" 通过css()设置id为one背景颜色为绿色" id="b6"/>
$("#b6").click(function () {
$("#one").css("backgroundColor","green");
});
});
</script>
</head>
<body>
<input type="button" value="保存" class="mini" name="ok" class="mini" />
<input type="button" value="采用属性增加样式(改变id=one的样式)" id="b1"/>
<input type="button" value=" addClass" id="b2"/>
<input type="button" value="removeClass" id="b3"/>
<input type="button" value=" 切换样式" id="b4"/>
<input type="button" value=" 通过css()获得id为one背景颜色" id="b5"/>
<input type="button" value=" 通过css()设置id为one背景颜色为绿色" id="b6"/>
<h1>有一种奇迹叫坚持</h1>
<h2>自信源于努力</h2>
<div id="one">
id为one
</div>
<div id="two" class="mini" >
id为two class是 mini
<div class="mini" >class是 mini</div>
</div>
<div class="one" >
class是 one
<div class="mini" >class是 mini</div>
<div class="mini" >class是 mini</div>
</div>
<div class="one" >
class是 one
<div class="mini01" >class是 mini01</div>
<div class="mini" >class是 mini</div>
</div>
<span class="spanone"> span
</span>
</body>
5.3 CRUD操作
<script type="text/javascript">
$(function () {
// <input type="button" value="将反恐放置到city的后面" id="b1"/>
$("#b1").click(function () {
//append
//$("#city").append($("#fk"));
//appendTo
$("#fk").appendTo($("#city"));
});
// <input type="button" value="将反恐放置到city的最前面" id="b2"/>
$("#b2").click(function () {
//prepend
//$("#city").prepend($("#fk"));
//prependTo
$("#fk").prependTo($("#city"));
});
// <input type="button" value="将反恐插入到天津后面" id="b3"/>
$("#b3").click(function () {
//after
//$("#tj").after($("#fk"));
//insertAfter
$("#fk").insertAfter($("#tj"));
});
// <input type="button" value="将反恐插入到天津前面" id="b4"/>
$("#b4").click(function () {
//before
//$("#tj").before($("#fk"));
//insertBefore
$("#fk").insertBefore($("#tj"));
});
});
</script>
<script type="text/javascript">
$(function () {
// <input type="button" value="删除<li id='bj' name='beijing'>北京</li>" id="b1"/>
$("#b1").click(function () {
$("#bj").remove();
});
// <input type="button" value="删除city所有的li节点 清空元素中的所有后代节点(不包含属性节点)" id="b2"/>
$("#b2").click(function () {
$("#city").empty();
});
});
</script>
1.对象1.append(对象2):将对象2添加到对象1元素内部末尾
2.对象1.prepend(对象2):将对象2添加到对象1元素内部开头
3.对象1.appendTo(对象2):将对象1添加到对象2内部末尾
4.对象1.prependTo(对象2):将对象1添加到对象2内部开头
5.对象1.after(对象2):将对象2添加到对象1后面。对象1与对象2兄弟关系
6.对象1.before(对象2):将对象2添加到对象1前面。对象1与对象2兄弟关系
7.对象1.insertAfter(对象2):将对象2添加到对象1后面。对象1与对象2兄弟关系
8.对象1.insertBefore(对象2):将对象2添加到对象1前面。对象1与对象2兄弟关系
9.对象.remove():将对象删除掉
9.对象.empty():将对象的后代全部清空,但是保留当前对象以及其属性节点
6. 动画效果
6.1 默认显示和隐藏方式
6.1.1 默认显示和隐藏方式
- show([speed,[easing],[fn]])
参数:
speed:动画的速度。三个预定义的值(“slow”,“normal”, “fast”)或表示动画时长的毫秒数值(如:1000)
easing:用来指定切换效果,默认是"swing",可用参数"linear"
- swing:动画执行时效果是 先慢,中间快,最后又慢
- linear:动画执行时速度是匀速的
fn:在动画完成时执行的函数,每个元素执行一次。
- hide([speed,[easing],[fn]])
- toggle([speed],[easing],[fn])
6.1.2 滑动显示和隐藏方式
滑动显示和隐藏方式
- slideDown([speed],[easing],[fn])
- slideUp([speed,[easing],[fn]])
- slideToggle([speed],[easing],[fn])
6.1.3. 淡入淡出显示和隐藏方式
- fadeIn([speed],[easing],[fn])
- fadeOut([speed],[easing],[fn])
- fadeToggle([speed,[easing],[fn]])
<script>
//隐藏div
function hideFn(){
/* $("#showDiv").hide("slow","swing",function(){
alert("隐藏了...")
});*/
/*
//默认方式
$("#showDiv").hide(5000,"swing");
*/
/*
//滑动方式
$("#showDiv").slideUp("slow");
*/
//淡入淡出方式
$("#showDiv").fadeOut("slow");
}
//显示div
function showFn(){
/*$("#showDiv").show("slow","swing",function(){
alert("显示了...")
});*/
/*
//默认方式
$("#showDiv").show(5000,"linear");
*/
/*
//滑动方式
$("#showDiv").slideDown("slow");
*/
//淡入淡出方式
$("#showDiv").fadeIn("slow");
}
//切换显示和隐藏div
function toggleFn(){
/*
//默认方式
$("#showDiv").toggle("slow");
*/
/*
//滑动方式
$("#showDiv").slideToggle("slow");
*/
//淡入淡出方式
$("#showDiv").fadeToggle("slow");
}
</script>
</head>
<body>
<input type="button" value="点击按钮隐藏div" onclick="hideFn()">
<input type="button" value="点击按钮显示div" onclick="showFn()">
<input type="button" value="点击按钮切换div显示和隐藏" onclick="toggleFn()">
7.遍历
1.jq对象.each(callback)
<script type="text/javascript">
$(function () {
//获取所有ul下的li
var cities = $("#city li");
//遍历li
cities.each(function (index,element) {
//获取li对象:this
alert(this.innerHTML);
//获取li对象,在回调函数中定义参数
alert(index + ":" + $(element).html());
})
})
</script>
2.$.each(object,[callback])
<script type="text/javascript">
$(function () {
var cities = $("#city li");
$.each(cities,function () {
alert($(this).html());
})
})
</script>
3.for … of
<script type="text/javascript">
$(function () {
var cities = $("#city li");
for(li of cities){
alert($(li).html());
}
})
</script>
8. 事件绑定
8.1 jquery标准绑定方式
jq对象.事件方法(回调函数);
<script type="text/javascript">
$(function () {
//获取name对象,绑定click事件
// $("#name").click(function () {
// alert("click")
// })
//链式编程
$("#name").mouseover(function () {
alert("over")
}).mouseout(function () {
alert("out")
});
});
</script>
8.2 on绑定事件/off解除绑定
jq对象.on(“事件名称”,回调函数);
jq对象.off(“事件名称”);
<script type="text/javascript">
$(function () {
//使用on给按钮绑定单击事件 click
$("#btn").on("click",function () {
alert("click");
})
//使用off接触单机事件
$("#btn2").click(function () {
$("#btn").off();
})
});
</script>
8.3 事件切换
jq对象.toggle(fn1,fn2);
<script type="text/javascript">
$(function () {
$("#btn").toggle(function () {
$("#myDiv").css("backgroundColor","green");
},function () {
$("#myDiv").css("backgroundColor","red");
})
})
</script>