Servlet&Filter专题
Servlet:jsp专注显示;业务逻辑JavaBean【将业务逻辑独立出来——在servlet火filter当中实现】
【1】把业务逻辑从jsp当中独立出来,在servlet或者filter当中去实现响应功能
【2】servlet不生产数据,也不负责页面展示,只是前后端交互的中介 【前端page\URI(XXX.do) + 后端数据处理】——尤其是表单
【3】服务端编程的API
========创建方式:
【1】实现接口:Servlet
【2】继承类:GenericServlet \\ HttpServlet类
=========生命周期[容器完成]
【1】init:Servlet实例化【构造new】后,容器调用init方法【初始化一次】——请求抵达后
【2】service:容器根据请求,调用对应的servlet的service方法【每次请求抵达后,都会调用一次service】——请求抵达后
【3】destroy:销毁 servlet时调用的方法
---plus: getServletConfig() \\\ getServletInfo()
==========部署Servlet [行业深入]
【1】将Servlet注册给容器
【2】在web.xml当中进行注册
-servlet标签:
-servlet-name:每一组servlet的名字任意取
-servlet-class:注册交由容器进行实例化的Servlet类全名
-servlet-mapping标签:负责映射到具体的servlet
-负责映射到具体的Servlet;不唯一
-servlet-name:与映射的Servlet同名
-url-pattern:URL 映射的模板: 【1】完全的请求名拦截 【2】限定后缀 【3】限定路径
-NOTE:
-web.xml当中的任何修改都需要重启服务器
-Servlet当中,任何代码的修改都需要重启服务器
-jsp当中,修改无需重启服务器
【3】使用
-获取作用域
-获取http相关信息
-获取初始化信息 : init-param
-获取请求参数: \\getParameterMap
-获取工程路径:ServletContext application
从前端到数据库地通道
【1】Dao:持久层,只负责从数据库读写数据,即:调用sql等相关地api接口!
【2】Service:业务层
-调用dao
-负责进行业务模型地组装,逻辑的运算以及其他业务地调用
【3】Controller:交互层
-调用Service
-负责决定由哪个业务模块处理业务
-负责决定最终将数据交由谁来处理
【4】Servlet:模拟交互层得分发,工作后期由交互层框架负责完成
=====================================输出流的方式进行往外写:json
-依赖:jackson-core \\ jackson databind
-
Notes:
-servlet和servlet之间是无法转发的!
-servlet和jsp之间可以转发!
-
MVC:项目分层
【1】Controller交互层(Servlet)
【2】View视图层(JSP)
【3】Model模型层(组装最终展示到视图层的数据)
补充:
单例:内存唯一;外部不能实例化
Servlet:容器只创建一个对象,表现形式符合单例特征。【默认是无状态】——保障数据访问的安全性
The origin server did not find a current representation for the target resource or is not willing to disclose that one exists.——servlet添加项目|或者路径问题
=============Filter==========
【1】在业务当中,存在一些公共的功能,这些功能是在Servlet执行前,对Servlet执行的前置条件进行统一的筛选和过滤——Filter
【2】Filter的注册和创建:实现Filter接口
-生命周期:
-构建Fiter对象
-初始化:init方法调用
-开始过滤:doFilter
-销毁:destroy
-注册Filter
-web.xml当中注册;使用filter标签对Filter进行注册
-Filter在服务启动的时候进行初始化工作 &&&& Servlet初始化时机:
-Filter的过滤器链
-FilterChain:执行下一个Filter或者Servlet的调用
-过滤器链当中的调用顺序是和过滤器的注册顺序是一样得
-OpenSessionInView:把数据库的连接对象,放在一次请求的session当中保存,直到该session失效,才释放连接。
-对请求进行前置和后置的处理
-过滤器的常规对象和Servlet
多种配置Servlet、Filter方式:通过注解也可以:@webServlet() \\ @webFilter()
===============监听器===============
【1】与域有关的六个监听器:(1)监听域创建和销毁;(2)监听域属性的创建和销毁;(3)修改和删除,获取的是属性的旧值
-Application:实现接口 ServletContextListener
-注册在web.xml当中配置监听
-服务启动时创建
-
-Session
-请求抵达后,使用了session才创建,不使用session不创建
-
-
-Request
-请求抵达后,立即创建
【2】HttpSessionBiindingListener :每一个session独享一个监听器
-Session和对象绑定,直接监听某个对象的变化
-不用注册监听
-场景:实现用户的登录和登出:最缺乏的就是IT软件思维;&要适应,同时要反制
-将登陆用户信息放入到session当中,用于判断某个用户是否已登入
-判断是否切换用户,或者是否用户已注销,或者用户 已退出
-能够监听的情况:点击注销按钮,手动登出;——当session过期,或者用户直接关闭浏览器中断session这种情况,会出现很难监听问题。
-注意:
-传入的对象,在判断的时候,需要重写equals方法
-因为是使用的session域,所以不适合大规模部署!
文件上传
【1】文件上传
-页面:
-提交的类型必须是post类型
-解析累心:multipart/form-data
-取属性
-从request的参数当中去取属性
-属性和文件流都是在FileItems对象当中
【2】note:不能只在js检测
-比如需要后台解压问题,如果上传的为木马呢?
-对数据流进行截取:
-通常对于下载量以及频次较高的:一般来说:web是要检查文件头和文件尾是否合法
-通常是需要一个PC客户端,有PC客户端才可以在客户端添加临时文件
分页:
【1】组装分页的当前页信息
【2】把条件带入到查询中,获取所有的数据
【3】组装分页的其他信息
【4】把分页的信息和查询信息一起交给数据进行查询
【5】把分页信息、查询信息、查询结果一并交还给前端
体会:jsp\html && servlet 在实际工程中发挥的作用!