Spring Boot学习随笔- 拦截器实现和配置(HandlerInterceptor、addInterceptors)、jar包部署和war包部署
2023-12-21 20:32:22
    		第十三章、拦截器

-  拦截器 :Interceptor 拦截 中断 类似于javaweb中的Filter,不过没有Filter那么强大 
-  作用 Spring MVC的拦截器是一种用于在请求处理过程中进行预处理和后处理的机制。拦截器可以在请求到达控制器之前和之后执行一些操作,例如日志记录、权限验证、数据处理等。 
-  拦截器特点 - 请求到达会经过拦截器,响应回来同样会经过拦截器
- 拦截器只能Controller的请求,不能拦截jsp、静态资源相关请求
- 拦截器可以中断请求轨迹
 
拦截器实现
- 开发步骤
-  配置拦截器 实现 **HandlerInterceptor**,这个类通常包含**preHandle、postHandle和afterCompletion**三个方法,分别用于请求处理之前、之后以及完成后执行自定义逻辑。@Component public class MyInterceptor implements HandlerInterceptor { private final Logger log = LoggerFactory.getLogger(MyInterceptor.class); @Override //参数1:当前请求对象 参数2:当前请求响应对象 参数3:当前请求的控制器对应的方法对象 public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { log.debug("======1========"); return HandlerInterceptor.super.preHandle(request, response, handler); } @Override // 参数1、2、3同上 参数4:当前控制器方法的返回值 public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { log.debug("======2========"); log.debug("view:{}",modelAndView.getViewName()); HandlerInterceptor.super.postHandle(request, response, handler, modelAndView); } @Override // 参数1、2、3同上 参数4:请求过程中出现异常时的异常对象 // 这个方法总是会执行 无论请求正确或出现异常 public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { log.debug("======3========"); HandlerInterceptor.super.afterCompletion(request, response, handler, ex); } }
-  创建配置类,目的是将拦截器注册到程序中,在这个配置类中,你需要重写** addInterceptors方法,并在其中将拦截器添加到InterceptorRegistry**中。@Configuration public class MvcConfig implements WebMvcConfigurer { @Autowired private MyInterceptor myInterceptor; @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(myInterceptor)// 指定拦截器 .addPathPatterns("/**")// 拦截所有 .excludePathPatterns("file/**");//排除拦截 } }
-  注意 多个拦截器注册到配置类中,他们的执行顺序是按照栈一样的顺序,第一个拦截器先执行,那么该拦截器也是最后退出的。秉承先进后出的原理 @Configuration public class MvcConfig implements WebMvcConfigurer { @Autowired private MyInterceptor myInterceptor; @Autowired private MyInterceptor2 myInterceptor2; @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(myInterceptor)// 指定拦截器 .addPathPatterns("/**")// 拦截所有 .excludePathPatterns("file/**");//排除拦截 registry.addInterceptor(myInterceptor2)// 指定拦截器 .addPathPatterns("/**")// 拦截所有 .excludePathPatterns("file/**");//排除拦截 } }-  执行结果  
 
-  
-  可以通过order参数修改执行顺序 @Configuration public class MvcConfig implements WebMvcConfigurer { @Autowired private MyInterceptor myInterceptor; @Autowired private MyInterceptor2 myInterceptor2; @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(myInterceptor)// 指定拦截器 .addPathPatterns("/**")// 拦截所有 .excludePathPatterns("file/**") //排除拦截 .order(2); registry.addInterceptor(myInterceptor2)// 指定拦截器 .addPathPatterns("/**")// 拦截所有 .excludePathPatterns("file/**")//排除拦截 .order(1); } }
第十四章、项目部署
Spring Boot 项目可以通过多种方式部署:
- 传统服务器部署:将 Spring Boot 项目打包成可执行的War/ JAR 文件,然后将该 War/JAR 文件上传到服务器并运行。这种方式需要确保服务器上已经安装了 Java 运行环境。
- Docker 容器部署:将 Spring Boot 项目打包成 Docker 镜像,然后在 Docker 容器中运行该镜像。这种方式可以实现环境的快速部署和一致性。
- 云平台部署:将 Spring Boot 项目部署到云平台,比如 Heroku、Google Cloud Platform (GCP)、Amazon Web Services (AWS) 等。这些云平台提供了简单的部署流程和弹性的扩展能力。
- 自动化部署工具:使用自动化部署工具,比如 Jenkins、GitLab CI/CD 等,实现持续集成和持续部署。这种方式可以自动化构建、测试和部署 Spring Boot 项目。
目前讲的就是传统部署方式,分为两种:
- war部署(linux系统) 
  - 安装jdk
- 安装tomcat
- 安装数据库
- 部署项目war放到tomcat weapps
 
- jar部署(linux系统) 
  - 安装jdk
- 安装数据库
- 运行项目java-jar项目.jar
 
war包部署
-  目前创建springboot项目默认都是war包部署,需要修改设置pom.xml <packaging>war</packaging>
-  删除内嵌tomcat依赖 <dependency> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-jasper</artifactId> <!--设置仅当前idea环境可以,不参与打包--> <scope>provided</scope> </dependency> <!--tomcat 不参与打包--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> <scope>provided</scope> </dependency>
-  配置入口类,不再使用内嵌服务器 <configuration> <fork>true</fork> <!--增加jvm参数--> <jvmArguments>-Dfile.encoding=UTF-8</jvmArguments> <!--指定入口类--> <mainClass>com.baizhi.Springboot06Application</mainClass> <skip>true</skip> </configuration>// SpringBootServletInitializer:不在使用内嵌容器启动,使用外部tomact启动 @SpringBootApplication public class Springboot06Application extends SpringBootServletInitializer { @Override protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) { return builder.sources(Springboot06Application.class); }
-  在maven里进行打包操作  
-  打包后以后  
-  在tomcat运行war包项目 -  将WAR文件复制到webapps目录 
-  启动Tomcat服务器 # 进入Tomcat的bin目录 cd $CATALINA_HOME/bin # 启动Tomcat服务器 ./startup.sh
-  访问应用程序:http://localhost:8080/springboot06 
 
-  
jar包部署【推荐】
-  执行在maven执行 **package**进行打包
-  通过控制台打开jar包目录  
-  启动jar包 **java -jar jar文件名 nohub &**解释:nohub:后台启动 &:不要日志
-  成功启动  
- 注意:打包jsp模板时,pom.xml里面必须使用1.4.2插件(plugin)
    			文章来源:https://blog.csdn.net/m0_72770746/article/details/135139014
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
    	本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!