Servlet&Filter专题

Servlet:jsp专注显示;业务逻辑JavaBean【将业务逻辑独立出来——在servlet火filter当中实现】

【1】把业务逻辑从jsp当中独立出来,在servlet或者filter当中去实现响应功能

【2】servlet不生产数据,也不负责页面展示,只是前后端交互的中介   【前端pageURI(XXX.do) + 后端数据处理】——尤其是表单

【3】服务端编程的API

========创建方式:

【1】实现接口:Servlet

【2】继承类:GenericServlet   \   HttpServlet类

=========生命周期[容器完成]

image

【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()

===============监听器===============

image

【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】把分页信息、查询信息、查询结果一并交还给前端


体会:jsphtml   &&  servlet  在实际工程中发挥的作用!

原文地址:https://www.cnblogs.com/macro-renzhansheng/p/13346192.html