当前位置: 首页 > news >正文

网站管理功能图技校软件开发专业

网站管理功能图,技校软件开发专业,网站建设报道稿,网站如何启用gzip压缩过滤器和拦截器在职责和使用场景上存在一些差异。 过滤器 拦截器 作用 对请求进行预处理和后处理。例如过滤请求参数、设置字符编码。 拦截用户请求并进行相应处理。例如权限验证、用户登陆检查等。 工作级别 Servlet容器级别#xff0c;是Tomcat服务器创建的对象。可以… 过滤器和拦截器在职责和使用场景上存在一些差异。 过滤器 拦截器 作用 对请求进行预处理和后处理。例如过滤请求参数、设置字符编码。 拦截用户请求并进行相应处理。例如权限验证、用户登陆检查等。 工作级别 Servlet容器级别是Tomcat服务器创建的对象。可以拦截任何资源。 是Spring MVC容器的对象。只会对控制器中的方法进行拦截。 执行时机 在请求到达DispatcherServlet之前就开始执行可以在请求被任何Spring MVC组件处理之前对请求进行修改或处理。 请求处理前、请求处理后视图渲染前、整个请求完成后 使用场景 通常用于跨多个Controller的通用逻辑处理或者全局性的处理。例如日志记录、请求参数校验等。 用于对特定的Controller或者请求进行拦截执行一些全局性的逻辑处理。例如权限验证。 表 过滤器与拦截器的对比 1 过滤器 图 javax.servlet.Filter 的UML init 在Servlet容器启动时执行destory在Servlet容器关闭时执行。 WebFilter(urlPatterns /user/*) public class UserInfoFilter implements Filter {Overridepublic void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {System.out.println(filter doFilter 1); // 处理器之前执行chain.doFilter(request,response); // 没有这条语句则请求不会到处理器System.out.println(filter doFilter 2); // 处理器之后执行} } OncePerRequestFilter 是Spring提供的一个常用的过滤器其作用是确保一次HTTP请求期间只执行一次特定的过滤器逻辑避免过滤器逻辑重复执行提高系统的性能和效率。 图 OncePerRequestFilter 的doFilter方法 spring-web 定义了一些继承于OncePerRequestFilter的过滤器。 1.1 HttpPutFormContentFilter 主要作用是自动封装前端传递过来的PUT请求参数。在Spring MVC中默认只有POST请求的表单数据content-type为application/x-www-form-urlencoded会被解析而PUT、PATCH和DELETE请求的表单数据则不会被解析。配置了HttpPutFormContentFilter后这三种类型的请求表单数据可以被正确解析。 (Spring 5.1开始其被FormContentFilter 所取代不仅支持PUT请求还支持POST、PATCH和DELETE等表单数据解析) 图 HttpPutFormContentFilter的doFilterInternal方法 1.2 ForwardedHeaderFilter 检查请求中是否存在转发头如果存在则解析这个字段并提取信息。然后使用这些信息来修改请求的主机、端口和方案以便后续的请求处理能够基于更准确的源信息。 然后使用转发头需要注意安全问题因为程序无法确定这些头字段是由预期的代理服务器添加还是被恶意的客户端伪造。因此通常建议配置信任的代理服务器来添加或删除这些不信任的外部头字段。此外也可以将其配置为只删除而不使用这些标头。 1.3 ShallowEtagHeaderFilter 是一个支持ETag的过滤器。ETag是指被请求变量的实体值是一个可以与Web资源关联的记号Web资源可以是一个Web页也可以是JSON或XML文档。服务器负责判断记号是什么并在HTTP响应头中将其传送到客户端。 过滤器的主要作用是根据响应中缓存的内容创建Shallow ETag并计算MD5当客户端下一次发送请求时会执行相同操作并将计算的值与if-None-Match请求头进行比较如果相等则返回304表示资源没有发送变化。 该过滤器只能节省带宽并不能提高服务器性能因为它必须为每个请求计算完整的响应。 2 拦截器 图 Spring的HandlerInterceptor UML preHandle: 在处理器方法被调用之前执行如果返回false则拦截链下的其他拦截器将不会被执行处理器也不会被执行。 postHandle: 在处理器方法执行完后、视图渲染前执行。 afterCompletion: 在请求完全执行完后执行。通常用于清理工作。 2.1 拦截器原理 拦截器是基于AOP思想实现但在实现细节上并不是直接通过Spring AOP的代理机制来完成。而是通过Spring MVC的内部机制来实现。在DispatcherServlet的请求处理中被集成及调用。 HandlerInterceptorRegistry 注册和管理拦截器。 HandlerMapping 根据请求找到对应的处理器在其实现类中会考虑将已注册的拦截器和处理器一起封装成一个HandlerExecutionChain对象。 HandlerAdapter 负责调用处理器Controller方法。在调用处理器之前和之后会与拦截器进行交互确保拦截器的preHandle、postHandle等方法在正确时机被调用。 DispatcherServlet 负责处理所有的请求。在请求处理流程中会根据HandlerMapping 找到HandlerExecutionChain,然后依次调用链中拦截器的preHandle方法。处理器执行完毕后会调用postHandle方法最后调用afterCompletion方法。 表 跟拦截器有关的类与接口 图 DispatcherServlet 的doDisspatch方法部分代码 2.1.1 HandlerMapping 用于定义请求与处理器之间的映射。 图 HandlerMapping UML 在Spring MVC 的WebApplicationContext 容器被启动时会执行DispatcherServlet 的初始化方法其会查找容器中所有被注册为bean的HandlerMapping。 图 DispatcherServlet 的 initStrategies方法 每次执行DispatcherServlet 的doDispatch方法处理请求时会轮询每一个handlerMapping实例并调用其getHanler方法来查找该请求的请求链。 图DispatcherServlet 的getHandler方法 HanlerMapping 的getHandler 方法会查找该请求对应的处理器如果没找到则返回null否则将处理器实例与请求对应的拦截器一起封装为一个请求链。 图 HandlerMapping 默认实现AbstractHandlerMapping 的getHandler方法 图 HandlerMapping 默认实现AbstractHandlerMapping 的getHandlerExecutionChain方法 2.1.2 HandlerMapping 与 RequestMapping Spring 会扫描带有RequestMapping注解的方法与类并把它们注册为HandlerMapping类型的bean。这个工作主要是由RequestMappingHandlerMapping来完成。 图 RequestMappingHandlerMapping UML 其同时实现了HandlerMapping及InitializingBean当IoC容器中bean的所有属性被初始化之后会调用其afterPropertiesSet()方法接口。 图 RequestMappingHandlerMapping的父类的afterPropertiesSet方法 RequestMappingHandlerMapping 实例是在何时被注册成bean的呢 在DispatcherServlet初始化时会初始化HandlerMapping. 图  DispatcherServlet的initHandlerMappings方法 而默认的DispatcherServlet 类在Spring-webmvc的DispatcherServlet.properties文件中配置。 图 DispatcherServlet.properties 文件
http://www.zqtcl.cn/news/166829/

相关文章:

  • 龙湖镇华南城网站建设.net 网站开发书籍
  • 域名费用和网站服务器费用是同样的吗推广营销方案
  • 安徽网站设计方案中文外贸网站有哪些
  • 衡阳手机网站设计响应式网站做多大的尺寸
  • 海尔电子商务网站建设预算灵台县门户网
  • 四川网站建设设计公司排名开发公司与建筑公司合作协议
  • 江西智能网站建设嘉定注册公司
  • 海口网站建设联系方式十大免费软文推广平台
  • 石碣镇做网站帮别人做网站开价
  • 站长 网站ip客户都不愿意做网站
  • 网站开发和软件开发哪个难网站备案账号
  • 2昌平区网站建设安徽盛绿建设网站
  • 商务网站建设目的天津建设网站需要的费用
  • flash 网站头部wordpress支持大文件上传
  • 网站开发方式的选择凡客设计
  • 常德建设网站如何查询某个网站的设计公司
  • wordpress 仿站教程学校ui设计培训
  • 南昌模板建站定制网站合肥瑶海区网站建设价格
  • 奥尔马手表官方网站导出wordpress文章
  • 网站栏目内容和功能手机网站建设 如何获得更好的排名
  • 网站运营推广难做常德网警
  • 北滘网站建设公司在百度上做网站怎么做
  • 合肥网站建设 毅耘园林设计网站大全
  • 免费备案网站空间爱营销app
  • 郑州网站建设公网站建设需要步骤
  • 源创派网站建设做软件赚钱的网站有哪些
  • 中英文网站建设公司推广引流
  • 网站改域名百度热词指数
  • 网站开发工程师工作内容网站源码是用什么做的
  • 做网站优化费用免费的视频网站如何赚钱