一、Servlet
Servlet是一套规范
- 后端 遵守 规范 编写 小程序
- web服务器 遵守 规范 调用 小程序
- 模拟流程
- 实例化Servlet、ServletRequest、ServletResponse
- 调用Servlet的service方法,ServletRequest、ServletResponse为入参
- 模拟流程
常见接口
- init 第一次请求 或 容器启动 调用
- destroy 容器关闭 调用
- service 每次请求调用
- getServletConfig
- 一个Servlet对应一个ServletConfig
- 多个Servlet对应一个ServletContext
请求转发
- 服务器内部行为、地址栏不变
- 调用新Servlet的service方法
重定向
- 客户端重新发请求、地址栏变化
会话管理
- 会话 -- 一个客户端的多次请求
- session 服务端
- request.getSession
- 无cookie新建HttpSession,JSESSIONID以cookie形式写入HttpServletResponse中
- 有则查
- request.getSession
- cookie 客户端 浏览器发请求时携带
- 简单的登录校验
- 查session是否存key为user,有则表示登录成功,可执行业务逻辑
- 无则重定向至登录页面,查数据库验证账号和密码,正确则往session中存入user
域对象
- 请求域 HttpServletRequest
- 数据只存在 该次请求中
- 会话域 HttpSession
- 数据存全局,但只有携带正确JSESSIONID的请求能访问
- 应用域 ServletContext
- 数据存全局
二、Filter
一个规范,常见接口
- init 初始化方法,容器调用传入配置信息
- doFilter 过滤方法,实现Servlet执行前、后的逻辑
- 入参ServletRequest、ServletResponse、FilterChain
- FilterChain.doFilter(request, response) 放行请求,继续执行下一个Filter?
- FilterChain 粗浅理解、责任链设计模式
- Filter数组,存放Filter穿起来的链
- 下标指针,表示当前执行到哪个Filter
- doFilter方法
- 判断指针位置,执行完毕,调用Servlet的service方法
- 否则,取出Filter,调用Filter的doFilter方法,入参为request、response、this
- 在执行下一个Filter的doFilter方法时,this.doFilter可能会被调用,较为复杂的递归
- 基于这种递归实现,可以使得多个Filter分层次将Servlet抱起来,优先级最高的Filter,在业务逻辑前最先执行,在业务逻辑后最后执行
- FilterChain 粗浅理解、责任链设计模式
- destroy 销毁方法,容器回收过滤器对象前调用
三、Listener
观察者模式
分类
- 监听对象划分
- request、session、application
- 监听事件划分 对应不同的接口方法
- 对象创建和销毁
- 数据更新
- 其他
- HttpSessionBindingListener 监听 Listener 在 session域中的增加、移除
- HttpSessionActivationListener 钝化监听器,监听某个对象在session中序列化、反序列化
四、AJAX
Asynchronous JavaScript and XML
简单理解,js代码异步发送http请求,请求收到后回调函数执行,渲染xml页面