回顾:
ajax:
异步请求
原生的ajax(了解)
1.创建一个核心对象 XMLHttpRequest
2.编写回调函数
xmlhttp.onreadystatechange=function(){
if(xmlhttp.readyState==4 && xmlhttp.status==200){
alert(xmlhttp.responseText);
}
}
3.open操作
xmlhttp.open("请求方式","请求路径");
4.send操作
xmlhttp.send([参数]);
post请求的参数放在send里面
注意:若请求方式为post且有参数 必须设置一个头
jquery中ajax
掌握:
$.get(url,params,function(data){},type);
type:以后常用的是json
$.post(url,params,function(data){},type);
了解:
jquery对象.load(...)
理解:
$.ajax(选项)
选项:
url
type
data
success:fn
error:fn
dataType:"json"
/////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////
listener(了解) 监听器
filter(★) 过滤器
//////////////////////////
listener:
监听器
作用:
监听web中中的域对象 ServletContext ServletRequest HttpSession
监听内容:
监听三个对象的创建和销毁
监听三个对象属性的变化
监听session中javabean的状态 注意:listener全部是接口 监听三个对象的创建和销毁
ServletContextListener
ServletRequestListener
HttpSessionListener
监听三个对象属性的变化
ServletContextAttributeListener
ServletRequestAttributeListener
HttpSessionAttributeListener
监听session中javabean的状态
HttpSessionActivationListener(钝化和活化)
HttpSessionBindingListener(绑定和解绑) 使用步骤:
1.编写一个类 实现接口
2.重写方法
3.编写配置文件(大部分都是) 演示各个监听器
监听三个对象的创建和销毁
ServletContextListener
创建:服务器启动的时候,会为每一个项目都创建一个servletContext
销毁:服务器关闭的时候,或者项目被移除的时候
以后用来加载配置文件
ServletRequestListener
创建:请求来的时候
销毁:响应生成的时候
HttpSessionListener
创建:
java中第一次调用request.getSession的时候
jsp访问的时候创建
销毁:
三种情况:
session超时
手动销毁session
服务器非正常关闭
监听三个对象属性的变化(添加 替换 删除)
ServletContextAttributeListener
ServletRequestAttributeListener
HttpSessionAttributeListener
监听session中javabean的状态
注意:这两个接口需要javabean实现.是让javabean感知到自己的状态 HttpSessionBindingListener(绑定和解绑)
检测java是否添加到session或者从session中移除
HttpSessionActivationListener(钝化和活化)
钝化:javabean从session中序列化到磁盘上
活化:javabean从磁盘上加载到了session中
可以通过配置文件修改javabean什么时候钝化
修改一个项目
只需要在项目下/meta-info创建一个context.xml
内容如下:
<Context>
<!--
maxIdleSwap :1分钟 如果session不使用就会序列化到硬盘.
directory :itheima 序列化到硬盘的文件存放的位置.
-->
<Manager className="org.apache.catalina.session.PersistentManager" maxIdleSwap="1">
<Store className="org.apache.catalina.session.FileStore" directory="itheima"/>
</Manager>
</Context> //////////////////////////////////////////////////
案例1-自动登录
需求:
登录的时候,勾选自动登录,登录成功之后,关闭浏览器,下一次访问网站的时候完成登录操作(自动登录).
技术分析:
filter
cookie
//////////////////////////////////
filter:过滤器
过滤请求和响应
作用:
自动登录.
统一编码.
过滤关键字
....
Filter是一个接口
编写filter步骤:
1.编写一个类
a.实现filter接口
b.重写方法
2.编写配置文件
a.注册filter
b.绑定路径
3.测试 Filter接口的方法:
init(FilterConfig config):初始化操作
doFilter(ServletRequest request, ServletResponse response, FilterChain chain):处理业务逻辑
destroy() :销毁操作
filter的生命周期(了解)
filter单实例多线程
filter在服务器启动的时候 服务器创建filter 调用init方法 实现初始化操作
请求来的时候,创建一个线程 根据路径调用dofilter 执行业务逻辑
当filter被移除的时候或者服务器正常关闭的时候 调用destory方法 执行销毁操作.
FilterChain:过滤链
通过chain的dofilter方法,可以将请求放行到下一个过滤器,直到最后一个过滤器放行才可以访问到servlet|jsp
doFilter()放行方法
★url-pattern配置
3种
完全匹配 必须以"/" 开始 例如: /a/b
目录匹配 必须以"/" 开始 以"*"结束 例如:/a/b/*
后缀名匹配 以"*."开始 以字符结束 例如 : *.jsp *.do *.action
例如:
afilter 路径 /*
bFilter 路径 /demo4
★一个资源有可能被多个过滤器匹配成功,多个过滤器的执行顺序是按照web.xml中filter-mapping的顺序执行的 ///////////////////////////////
步骤分析:
1.数据库和表
create database day16;
use day16;
create table user(
id int primary key auto_increment,
username varchar(20),
password varchar(20)
);
insert into user values(null,'tom','123');
2.web项目
jar包 工具类 配置文件
3.新建一个登录页面 表单
4.表单提交 loginservlet
接受用户名和密码
调用service完成登录操作,返回值User
判断user是否为空
若不为空,将user放入session中
判断是否勾选了自动登录
若勾选了:
需要将用户名和密码写回浏览器
5.下次访问网站的时候
过滤器拦截任意请求
判断有无指定的cookie
有cookie,获取用户名和密码
调用service完成登录操作,返回user
当user不为空的时候将user放入session中. 当我们换用jack登录的时候发现登录不了
自动登录只需要登录一次:当session中没有用户的时候
访问有些资源是不需要自动登录的(和登录还有注册相关的资源) 修改filter的逻辑:
首先判断session中是否有user
若没有 并且访问的路径不是和登录注册相关的时候
才去获取指定的cookie
///////////////////////////////////////////////////////
///////////////////////////////////////////////////////
filter总结
filterConfig:(了解)
过滤器的配置对象
作用:
获取全局管理者
获取当前filter的名称
获取当前filter的初始化参数 filter-mapping的子标签(理解)
servlet-name:匹配那个servlet 值写的是serlvet标签中servlet-name的值
建议:不要在一个filter中重复的匹配servlet
例如: serlvet的url-pattern为 /a/b/hello serlvetname:HelloServlet
如果filter中的url-pattern /*
最好不要在写 servlet-name:HelloServlet dispatcher:
匹配哪种请求
默认的是REQUEST,一旦显式的写出来哪种请求,默认就不起作用了
理解
REQUEST:从浏览器发送过来的请求(默认) 理解
FORWARD:转发过来的请求 理解 了解
ERROR:因服务器错误而发送过来的请求
INCLUDE:包含过来的请求
//////////////////////////
//////////////////////////
案例2-统一字符编码
需求:
以前我们开发的时候若有参数,第一步都是设置编码,才不会出现乱码,通过过滤器设置,到servlet或者jsp上的时候已经没有乱码问题
技术分析:
filter 配置路径/* 过滤器的第一个位置
在filter中重写getParameter(加强)
步骤分析:
我们只需要在filter中 对request进行加强(例如:只对request.getParameter()进行加强) 方法加强:
1.继承(获取构造器)
2.装饰者模式(静态代理)
3.动态代理 装饰者书写步骤:
1.要求装饰者和被装饰者实现同一个接口或者继承同一个类
2.装饰者中要有被装饰者的引用
3.对需要加强方法进行加强
4.对不需要加强的方法调用原来的方法即可 加强request.getParameter(String key)
首先请求的方式不同,处理的方式也不同
获取请求的方法
若是get请求
new String(value.getBytes("iso8859-1"),"utf-8");
若是post请求
只需要设置一句话
request.setCharacterEncoding("utf-8"); 最后将包装过的request对象(MyRequest)传递给servlet即可
///////////////////////////////////////////////////
///////////////////////////////////////////////////
关于获取参数的方法
String getParameter(String name);// arr[0]
String[] getParameterValues(String name);// map.get(name)
Map<String,String[]> getParameterMap(); //////////////////////////////////////////////
//////////////////////////////////////////////
listener 监听器
监听javaweb中的三个域对象 监听三个对象的创建和销毁
ServletContextListener
ServletRequestListener
HttpSessionListener
监听三个对象属性的变化
ServletContextAttributeListener
ServletRequestAttributeListener
HttpSessionAttributeListener
监听javabean在session中的状态
注意: javabean实现的接口 不需要在web.xml中配置
HttpSessionActivationListener(javabean的活化和钝化)
HttpSessionBindingListener(添加到session中还是从session中移除) 编写步骤:
1.编写一个类 实现接口
2.编写配置文件
<listener>
<listener-class>....
</listener>
/////////////////////////////////////
filter 接口,过滤请求和响应
编写步骤:
1.编写一个类
实现filter 重写三个方法
2.编写配置文件
注册filter 绑定路径
filter的生命周期(了解)
url-pattern配置(和servlet一样)
一个路径匹配到多个filter的时候,执行顺序有有web.xml中filter-mapping的顺序来决定的
FilterChain
必须放行才有可能到下一个Filter或者资源上
//////////////////////

day16-(listener&filter)的更多相关文章

  1. web.xml中的主要元素说明(listener, filter, servlet)

    web.xml中加载的顺序为:context-param ---> listener ---> filter ---> servlet. listener:主要针对的是对象的操作,如 ...

  2. web.xml之context-param,listener,filter,servlet加载顺序及其周边

    先以加载spring为例子看看加载顺序的作用: Spring加载可以利用ServletContextListener 实现,也可以采用load-on-startup Servlet 实现,但比如fil ...

  3. servlet,listener,filter,interceptor的关系

    1.servlet:servlet是一种运行服务器端的java应用程序,具有独立于平台和协议的特性,并且可以动态的生成web页面,它工作在客户端请求与服务器响应的中间层.最早支持 Servlet 技术 ...

  4. javaweb(4)之Listener&Filter

    监听器 (Listener) 介绍 监听器用于监听 web 应用中某些对象.信息的创建.销毁.增加,修改,删除等动作的发生,然后作出相应的响应处理.当范围对象的状态发生变化的时候,服务器自动调用监听器 ...

  5. day16 Python filter函数

    前戏 movie_people = ["alex","charon","pluto","liu","sb&qu ...

  6. springboot之filter/listener/servlet

    简介 SpringBoot可以简化开发流程,但是在其中如何使用传统的J2EE servlet/listener/filter呢 @Bean配置 在Configuration类中加入filter和ser ...

  7. servlet/filter/listener/interceptor区别与联系

    转自:http://www.cnblogs.com/doit8791/p/4209442.html servlet.filter.listener是配置到web.xml中(web.xml 的加载顺序是 ...

  8. Servlet、Filter、Listener、Interceptor

    首先,JSP/Servlet规范中定义了Servlet.Filter.Listener这三种角色,并没有定义Interceptor这个角 色,Interceptor是某些MVC框架中的角色,比如Str ...

  9. web.xml 中的listener、 filter、servlet 加载顺序及其详解

    在项目中总会遇到一些关于加载的优先级问题,近期也同样遇到过类似的,所以自己查找资料总结了下,下面有些是转载其他人的,毕竟人家写的不错,自己也就不重复造轮子了,只是略加点了自己的修饰. 首先可以肯定的是 ...

  10. servlet、filter、listener、interceptor之间的区别和联系

    一.概念 1.servlet:servlet是一种运行服务器端的java应用程序,具有独立于平台和协议的特性,并且可以动态的生成web页面,它工作在客户端请求与服务器响应的中间层. 2.filter: ...

随机推荐

  1. JavaScript简单简介

    JavaScript,男,web页面的一种脚本编程语言,1955年诞生,妻子为HTML,魔法能力是将静态页面(经过与用户交互与相应)转变为动态页面. 刚进入浏览器市场(魔界)的时候,也就是js1.0岁 ...

  2. Android组件化、模块化、插件化

    组件:指的是单一的功能组件,如地图组件(MapSDK).扫码组件(QRCode).支付组件(AnjukePay).路由组件(Router)等等: 模块:指的是独立的业务模块,如新房模块(NewHous ...

  3. 「NOI2003」逃学的小孩

    传送门:>HERE< 题意:给出一棵树(带权),要从一个节点C先走到距离它近的一个节点B,再走到A,要求最坏情况下的总路程(即最长). 解题思路: 乍一看,A,B,C都没给出,这怎么求? ...

  4. LOJ#2019. 「AHOI / HNOI2017」影魔

    题意: 在一个序列中 如果有一个子区间 它有一个端点是区间最大值 另一个端点不是这个区间的次大值 就会有p2的贡献 它两个端点分别是最大值次大值 就会有p1的贡献 我们发现这两个条件有一个重合的部分 ...

  5. 洛谷AT2046 Namori(思维,基环树,树形DP)

    洛谷题目传送门 神仙思维题还是要写点东西才好. 树 每次操作把相邻且同色的点反色,直接这样思考会发现状态有很强的后效性,没办法考虑转移. 因为树是二分图,所以我们转化模型:在树的奇数层的所有点上都有一 ...

  6. JLOI2015 DAY2 简要题解

    「JLOI2015」骗我呢 题意 问有多少个 \(n \times m\) 的矩阵 \(\{x_{i, j}\}\) 满足 对于 \(\forall i \in [1, n], j \in [1, m ...

  7. [CF1132E]Knapsack【暴力搜索】

    你有一个容量为\(w\)的背包,和\(8\)件物品,重量分别为\(1~8\)的整数,分别有\(cnt_1 ... cnt_8\),求最大容量. 解法 笨蛋chh一开始打了一个背包模板乱搞压缩容量\(j ...

  8. Ubuntu相关配置

    1.Ubuntu配置root密码 2.开机ssh连接--nat   编辑网络设置端口转发

  9. [WC2005]双面棋盘(并查集+分治)

    题目描述 题解 唉,还是码力不行,写了一个多小时发现想错了又重构了一个多小时. 这道题意图很显然,动态维护联通块,有一个经典做法就是用LCT维护按照删除时间维护的最大生成树. 网上还有一种神奇的做法, ...

  10. [HEOI2014]平衡(整数划分数)

    下课了,露露.花花和萱萱在课桌上用正三棱柱教具和尺子摆起了一个“跷跷板”. 这个“跷跷板”的结构是这样的:底部是一个侧面平行于地平面的正三棱柱教具,上面 摆着一个尺子,尺子上摆着若干个相同的橡皮.尺子 ...