一、Servlet概念
servlet运行在服务器端的程序(后台)
- 作用:处理请求与响应的分配
- 请求的处理类(根据请求的参数分配给service)
- 响应的分配类(根据请求的参数和响应的数据,完成页面的跳转和数据的传递)
- 生命周期:
1.当web应用被部署到tomcat中,并且启动tomcat时,所有放在src目录中的java源码,被编译成class文件,放入到WEB-INF/classes中(与JSP不同)
2.servlet被URL访问时,调用构造函数,调用init方法(执行一次)
3.每次被访问都会进入service方法,在根据URL请求的方式不同,调用不同do方法(doGet/doPost)
4.只有web服务器关闭或移除,才调用destory方法(执行一次) - URL请求Servlet的原理:
http://ip:8080/web项目名称/文件目录
1.浏览器发起了URL请求时,URL中协议+IP+端口号进入指定的tomcat服务器
2.通过URL中的项目名,进入到该项目的web.xml
3.通过URL中的文件目录,匹配中的
4.通过该的去匹配对应的,调用对应的servlet类
5.通过URL请求的method方式,调用对应的doXXX方法(doGet/doPost)
二、MVC设计模式
- 概念:
M Model 模型层 (model/dao/service)
封装数据
V View 视图层 (JSP/HTML/CSS/JS/JQ)
用户交互(请求发起与响应终端)
C Contoller 控制层 (servlet) - 控制流程(根据请求调用service,再根据service的结果做页面跳转与数据传递)
优势:
1.松耦合,高内聚,高重用性,扩展性强
2.工程化管理(搭建架构范围) - 实现步骤:
准备工作:
1.执行数据库SQL脚本
2.创建项目,导入jar包(驱动/日志/JSTL)
3.配置文件(JDBC属性集文件,lo4j属性集文件) - 后台代码src:
4.工具包 com.sys.utils
5.实体类 com.sys.model User
6.Dao层接口 com.sys.dao UserDao
7.Dao层实现类 com.sys.dao.impl UserDaoImpl
8.Service接口 com.sys.service UserService
9.Service实现类 com.sys.service.impl UserServiceImpl
10.Servlet控制层 com.sys.servlet UserServlet - 前端代码:WebContent
JSP
css
images
font
javascript
jquery
WEB-INF
web.xml web应用配置
jsp 安全目录
三、过滤器Filter
- 过滤器:处理web请求与响应的功能组件
- 作用:
1.统一处理公共功能(编码/格式/日志/权限/加密/解密/敏感字过滤)
2.对请求的资源,进行拦截,对响应进行操作
3.过滤器可以进行多层请求的过滤 - 实现步骤:
1.实现Filter接口
2.重写方法,doFilter进行过滤控制
3.配置web.xml或注解@WebFilter - 生命周期:
1.web应用被加载时,马上实例化过滤,并调用init方法(一次)
2.当过滤器对应的URL被请求时,马上调用doFilter方法(每次请求都被调用)
3.当服务器关闭,或web应用被移除时,马上调用dostroy方法(一次)
四、监听器
- 监听器:监听三个对象(ServletRequest/HttpSession/ServletContext)的生命周期和属性值改变的事件
- 常用监听器:
XXXListener 监听该对象的生命周期
XXXAttributeListener 监听该对象的属性值改变
HttpSessionActivationListener 监听某实体类在session中
钝化(序列化)从内存到文件
与活化(反序列化)从文件到内存
HttpSessionBindingListener 监听某实体类在session中添加或移除 - 使用步骤:
1.实现对应的监听器接口Listner
2.实现其对应的事件方法
3.配置web.xml<Listener>或注解@WebListener - 使用场景:
1.山下文进行初始化系统参数(公司名称/路径目录/字典表数据/跨会话的数据)
2.会话的生命周期(在线用户)
3.会话中数据的活化与钝化(重新连接/服务器重启维护) - 案例:
1.在线用户监听(上线和下线:注销/会话到期/关闭浏览器js)
(1)session属性的添加和删除
(2)感知型监听器(实体类)- 在线用户步骤:
1.创建vo实体类Logined(属性:User/ip/datetime)
2.私有化属性private
public getter/setter方法
无参构造函数
实现序列化接口Serializable
3.Application上下文对象初始化时增加一个map属性(String,Logined)
4.用户登录成功,往session中放入Logined
5.触发Logined实体类的感知型bound方法,向上下文对象中的Map添加Logined
6.当用户注销时,清除session
7.触发Logined实体类的感知型unBound方法,向上下文中的Map删除Logined
- 在线用户步骤:
- 2.会话信息活化与钝化
(1)实现类Logined实现HttpSessionActivationListener接口