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

网站的结构设计网站建设的经验

网站的结构设计,网站建设的经验,网上银行入口,公司网站做首页大图一、什么是拦截器 拦截器是 SpringMVC 提供的一种可以在请求处理过程中对请求进行预处理或后处理的机制。简单来说,拦截器就像是一位“守门员”,它拦住所有进来的请求,根据设定的规则决定是否放行或者进行某些操作。 拦截器可以&#xff1a…

一、什么是拦截器

拦截器是 SpringMVC 提供的一种可以在请求处理过程中对请求进行预处理或后处理的机制。简单来说,拦截器就像是一位“守门员”,它拦住所有进来的请求,根据设定的规则决定是否放行或者进行某些操作。

拦截器可以:

  • 在请求进入 Controller 之前做一些操作(如权限检查、日志记录、性能监控等)。
  • 在请求返回前做一些操作(如对返回数据进行修改、记录日志等)。

二、拦截器和过滤器的区别

拦截器与过滤器(Filter)有许多相似之处,它们都可以对 HTTP 请求和响应进行拦截和处理。但是,它们的工作原理和应用场景有所不同。

特性

拦截器 (Interceptor)

过滤器 (Filter)

生命周期

只在 SpringMVC 生命周期内起作用

可以跨多个应用,通常与 Servlet 容器相关

适用范围

只适用于 SpringMVC 控制器的请求处理过程

可以处理所有类型的请求和响应

执行时机

在 Controller 方法调用之前和之后

在请求到达 Servlet 之前和响应返回之前

是否能够访问 SpringMVC 的功能

可以访问 SpringMVC 提供的各种功能

不能直接访问 SpringMVC 的功能

配置方式

配置在 Spring 配置文件中

配置在 web.xml 文件中

拦截器更贴近 SpringMVC 的请求处理机制,能与 Spring 提供的功能更加紧密地集成,而过滤器更多的是一种通用的 Web 组件,适用于不同类型的 Web 应用。

过滤器依赖于servlet,而拦截器技术属于SpringMVC

过滤器可对所有请求起作用,拦截器只对访问controller层的请求起作用。

过滤器会比拦截器先执行。拦截器(Interceptor)是在Servlet和Controller控制器之间执行;而过滤器(Filter)是在请求进入Tomcat容器之后 但是在请求进入Servlet之前执行。

 

三、拦截器的工作时机

1、三个阶段

预处理阶段:在请求到达 Controller 之前,拦截器的 preHandle() 方法会被执行。

后处理阶段:在 Controller 方法执行后,视图渲染之前,拦截器的 postHandle() 方法会被调用。

最终处理阶段:无论请求成功与否,拦截器的 afterCompletion() 方法都会在请求结束时执行。

2、三个常用方法

都在接口HandlerInterceptor中声明。

1.preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)

在 Controller 方法执行之前调用。返回值是 boolean 类型,true 表示继续执行,false 表示请求被中止,后续的拦截器和 Controller 不会执行。

2. postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView)

在 Controller 方法执行后,视图渲染前调用。可以对 ModelAndView 进行修改。

3. afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)

在请求处理完成后(视图渲染后)调用,用于清理资源。

 

3、多个拦截器执行

1. 请求进入多个拦截器的 preHandle() 方法

请求会按照拦截器的配置顺序进入每个拦截器的 preHandle() 方法。

如果某个拦截器的 preHandle() 返回 false,那么请求会被中断,后续的拦截器和 Controller 方法都不会被执行。

2. 请求进入 Controller

如果所有拦截器的 preHandle() 都返回 true,请求会最终进入 Controller 的目标方法。

3. 多个拦截器的 postHandle() 方法

当 Controller 方法执行完毕后,拦截器的 postHandle() 方法会按配置顺序从后往前被调用。即,最后配置的拦截器的 postHandle() 会最先执行。

postHandle() 方法中的 ModelAndView 还没有被渲染,可以对它进行修改。

4. 多个拦截器的 afterCompletion() 方法

最后,拦截器的 afterCompletion() 方法会按配置顺序从前往后被调用,即,第一个配置的拦截器的 afterCompletion() 会最先执行。这个方法通常用于清理工作,比如日志记录或释放资源。

4、单个拦截器和多个拦截器执行顺序对比

阶段

单个拦截器执行顺序

多个拦截器执行顺序

preHandle()

按顺序执行,遇到

false

中断请求

按顺序执行,遇到

false

中断请求

Controller

执行 Controller 方法

执行 Controller 方法

postHandle()

按顺序执行(如果有多个拦截器,从前到后)

按配置顺序反向执行(从最后一个拦截器到第一个)

afterCompletion()

按顺序执行(从前到后)

按配置顺序正向执行(从第一个拦截器到最后一个)

四、单个拦截器示例

1、创建拦截器

package com.goose.config;import org.springframework.web.servlet.HandlerInterceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;public class LoginInterceptor implements HandlerInterceptor {@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {// 获取请求urlString url = request.getRequestURI();// 请求是否是登录相关的请求if(url.contains("login")){return true;}else{// 判断是否登录过if(request.getSession().getAttribute("user")!=null){return true;}else{// 重定向到login页面response.sendRedirect("/html/login.html");return false;}}}
}

2、配置拦截器

<!-- 配置拦截器 -->
<mvc:interceptors><mvc:interceptor><mvc:mapping path="/**"/> <!--表示拦截所有请求--><bean class="com.goose.config.LoginInterceptor" ></bean></mvc:interceptor>
</mvc:interceptors>

3、在Controller 中处理登录

package com.goose.controller;import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;import javax.servlet.http.HttpSession;@Controller
@RequestMapping("/login")
public class LoginController {@RequestMapping("/toLogin")public String toLogin(){return "login";}@RequestMapping(value = "/login")public String login(String username, String password, HttpSession session){if(username.equals("张三") && password.equals("123")){System.out.println("用户登录成功");session.setAttribute("user","张三");return "A";}return "B";}
}

html界面略


文章转载自:

http://TVOsLn6u.Lffbz.cn
http://0o80xKQE.Lffbz.cn
http://fYH5BFue.Lffbz.cn
http://MQkfhcwI.Lffbz.cn
http://bODPAXSv.Lffbz.cn
http://pja0suEC.Lffbz.cn
http://2GiFjqvy.Lffbz.cn
http://Z15q3wIr.Lffbz.cn
http://QPYFroi8.Lffbz.cn
http://CAcPOgOG.Lffbz.cn
http://L2wyG0Iu.Lffbz.cn
http://Be8h7Yfu.Lffbz.cn
http://UTsQOKBM.Lffbz.cn
http://Tyhjuulx.Lffbz.cn
http://Cy7khR31.Lffbz.cn
http://EZg3cUTk.Lffbz.cn
http://omPz8mLB.Lffbz.cn
http://5rtTvK1r.Lffbz.cn
http://TFkz7RGc.Lffbz.cn
http://jtRqeKxe.Lffbz.cn
http://M2p9vfMn.Lffbz.cn
http://2gCpZxuI.Lffbz.cn
http://1sjVqfkE.Lffbz.cn
http://EJrNg7zZ.Lffbz.cn
http://iZZdfHdX.Lffbz.cn
http://xYUxyfJ4.Lffbz.cn
http://7BopHyK6.Lffbz.cn
http://d51Db1PD.Lffbz.cn
http://VYxq2Xo9.Lffbz.cn
http://coq2EjSG.Lffbz.cn
http://www.dtcms.com/wzjs/627731.html

相关文章:

  • 西安网站网站建设微信微网站是什么案例
  • wordpress子站共享用户大型网站开发框架有哪些
  • 做加盟的网站建设vi设计公司排行
  • 在线服装设计网站如何选择网站建设平台
  • 工业设计的网站荣耀手机官方网站
  • 做微网站哪家好商业策划书范文6篇
  • 中国产品网免费网站抖音seo优化
  • 前端个人网站怎么做网站空间在线解压
  • 好网站建设公司哪家好网推所
  • 做网站被骗五千多wordpress多久学会
  • 常州网站建设平台wordpress域名换了打不开
  • asp.net 网站 价格职业培训机构管理系统
  • 网站建设課程网站素材资源
  • 青海网站建设加q5299丶14602做词桂林市区有什么好玩的地方景点
  • 怎么查百度收录网站吗一分钟新闻口播稿
  • 关于江西建设监督网网站迁移长沙网站建设外贸
  • 网站开发售后工作装修公司展厅布置方案
  • 做农产品的网站做业务网站
  • 关于网页制作的网站设计制作小车教学视频
  • 帝国 cms 网站关键字摄影设计说明模板
  • 民宿网站建设企查查企业信息查询手机版下载
  • 鹤壁企业网站建设做电商如何推广
  • 手机网站建设 小程序龙岩特色
  • 广告网站大全亚马逊网网站建设规划报告
  • 常见的英文网站企业电子商务网站开发实训目的
  • 深圳团购网站设计多少钱做网站tt0546
  • 网站建设做什么会计分录网站建设属于无形资产
  • 网站建设的功能和定位广告软文范例大全100
  • 如何快速提高网站关键词排名全程营销网站建设公司
  • 新手怎么做网站推广网易企业邮箱如何申请注册