目录

前言

环境搭建

切面编程

拦截器

WAR包部署

RestFul


前言

在本次项目实训中我负责后端的开发,后端主要使用springboot和mybatis,数据库使用mysql。

由于我之前并未对springboot进行系统的学习,仅仅使用过SSM开发,所以在之前一段时间我先是学习了一遍springboot以及mybatis框架。

springboot项目的框架如下:

环境搭建

JDK1.8+ ,MAVEN3.2+,Spring Framework 5.x+,SpringBoot内嵌的Tomcat为9.0+。

引入如下依赖:

    <!--继承springboot的父项目--><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.5.0</version>  可以通过修改这个来指定springboot的版本</parent><dependencies><!--引入springboot的web支持,一个依赖相当于SSM中的所有org.Springframework依赖--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency></dependencies>

编写入口类:

//在项目中src/java下创建入口类 Application@SpringBootApplicationpublic class XXXApplication {public static void main(String[] args) {SpringApplication.run(XXXApplication.class,args);}}

此时一个基础的项目就成型了。可以看出来springboot的开发步骤比SSM简单便捷的多。

切面编程

springboot是对原有项目中spring框架和springmvc的进一步封装,因此在springboot中同样支持spring框架中AOP切面编程,不过在springboot中为了快速开发仅仅提供了注解方式的切面编程。

切面编程就类似于拦截器。

首先引入依赖:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId>
</dependency>

前置切面:

在SpringBoot项目中新建一个config(配置)包,包内新建一个配置类,添加附加方法:

@Aspect
@Configuration
public class MyAspect {@Before("execution(* com.baizhi.service.*.*(..))")public void before(JoinPoint joinPoint){System.out.println("前置通知");joinPoint.getTarget();//目标对象joinPoint.getSignature();//方法签名joinPoint.getArgs();//方法参数}
}

后置切面:

@Aspect
@Configuration
public class MyAspect {@After("execution(* com.baizhi.service.*.*(..))")public void before(JoinPoint joinPoint){System.out.println("后置通知");joinPoint.getTarget();//目标对象joinPoint.getSignature();//方法签名joinPoint.getArgs();//方法参数}
}

环绕切面:

@Aspect
@Configuration
public class MyAspect {@Around("execution(* com.baizhi.service.*.*(..))")public Object before(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {System.out.println("进入环绕通知");proceedingJoinPoint.getTarget();//目标对象proceedingJoinPoint.getSignature();//方法签名proceedingJoinPoint.getArgs();//方法参数Object proceed = proceedingJoinPoint.proceed();//放行执行目标方法System.out.println("目标方法执行之后回到环绕通知");return proceed;//返回目标方法返回值}
}

环绕通知存在返回值,参数为ProceedingJoinPoint(必须加参数),如果不调用proceed方法,就不会执行目标方法,如果调用proceed方法就必须将目标方法的返回值返回,否则调用者无法接受返回数据。

拦截器

拦截器只能拦截controller,而javaweb中的过滤器还可以拦截静态资源。拦截器用到了AOP。

新建一个包叫做interceptors(以后可能有多个拦截器),把拦截器放到包里。

public class MyInterceptor implements HandlerInterceptor {@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object o) throws Exception {System.out.println("======1=====");return true;//返回true 放行  返回false阻止  参数o代表请求的控制器方法对象}@Overridepublic void postHandle(HttpServletRequest request, HttpServletResponse response, Object o, ModelAndView modelAndView) throws Exception {System.out.println("=====2====="); }@Override
//此方法一定会执行,无论请求是否出现异常。public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object o, Exception e) throws Exception {System.out.println("=====3=====");}
}

配置拦截器:
在SpringMVC中我们在springmvc.xml中指定拦截器,但是在SpringBoot中没有springmvc.xml,我们就需要使用SpringMVC的配置类:WebMvcConfigurer接口,新建一个类实现WebMvcConfigurer接口即可。

@Configuration
public class WebMvcConfig  implements WebMvcConfigurer {@Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor("new拦截器类名()").addPathPatterns("拦截路径") /**代表拦截所有controller.excludePathPatterns("排除路径") 排除某些路径:/file/**.order("指定执行顺序")}
}

WAR包部署

设置打包方式为war:

clean之后点击package

之后target目录会有一个war包,但是这个包不能直接用,因为项目中有内嵌服务器,但是war包部署需要一个外部服务器,我们需要先排除内嵌服务器,并下载外部服务器。

默认是jar包部署,我们也推荐使用jar包部署。

RestFul

REST全称是Representational State Transfer,中文意思是表述(编者注:通常译为表征)性状态转移。 它首次出现在2000年Roy Fielding的博士论文中,Roy Fielding是HTTP规范的主要编写者之一。 他在论文中提到:"我这篇文章的写作目的,就是想在符合架构原理的前提下,理解和评估以网络为基础的应用软件的架构设计,得到一个功能强、性能好、适宜通信的架构。REST指的是一组架构约束条件和原则。" 如果一个架构符合REST的约束条件和原则,我们就称它为RESTful架构。

使用RESTful操作资源

【GET】 /users # 查询用户信息列表

【GET】 /users/1001 # 查看某个用户信息

【POST】 /users # 新建用户信息

【PUT】 /users/1001 # 更新用户信息(全部字段)

【PATCH】 /users/1001 # 更新用户信息(部分字段)

【DELETE】 /users/1001 # 删除用户信息

【SDU青山】项目实训记录(1)相关推荐

  1. 项目实训记录(1-2周)

    前言 我是我们项目实训小队的队长,负责了开题答辩.下面是项目实训1-2周的工作记录. 一.确定选题 我们小组四个同学就选题进行了很长时间的讨论,最后确定选择做一个基于人工智能技术的大学生辅助学习系统. ...

  2. 2021年山东大学软件学院项目实训记录(第一周)

    这次项目实训中,我们小组选择的题目是在线考试系统,经过讨论分工,我负责考试管理部分中的前端开发部分. 首先进行环境配置. 前端开发最为便利的开发工具为VScode,我们选择的开发框架是Vue. VSc ...

  3. 项目实训记录(四)——前端date类型和数据库timestamp类型比较

    目录 一.最近做了什么? 二.遇到的问题和解决办法 1.axios获取到数据库里的失效时间类型 2.前端获取到的Date()类型当前时间类型 3.前后端时间类型统一转换成yyyy-MM-dd HH:m ...

  4. 项目实训-关键词提取-论文研读-load centrality的合理性探讨

    项目实训记录系列博客 一马当先,争做国家栋梁. 博客说明 本博客初衷是用于学校项目实训知识梳理.工作内容.收获感悟的记录. 若能在您的学习之路上有所帮助,不胜荣幸.但若需转载,也请注明出处. 博客包含 ...

  5. 项目实训-关键词提取-任务理解工作分配

    项目实训记录系列博客 一马当先,争做国家栋梁. 博客说明 本博客初衷是用于学校项目实训知识梳理.工作内容.收获感悟的记录. 若能在您的学习之路上有所帮助,不胜荣幸.但若需转载,也请注明出处. 博客包含 ...

  6. 项目实训-收尾工作-组织协调

    项目实训记录系列博客 一马当先,争做国家栋梁. 博客说明 本博客初衷是用于学校项目实训知识梳理.工作内容.收获感悟的记录. 若能在您的学习之路上有所帮助,不胜荣幸.但若需转载,也请注明出处. 博客包含 ...

  7. 项目实训工作记录(二)

    项目实训工作记录(二)赵乐乐 201800301115 词向量搜索分析与算法设计 项目实训工作记录(二)赵乐乐 201800301115 1.词向量搜索 2.搜索过程中的问题分析 3.基于效率的算法设 ...

  8. 项目实训 - 智能车系统 - 第七周记录

    项目实训 - 智能车系统 - 第七周记录 日期:4.04 – 4.10 项目进度 本周工作进展: 更换了底层的通信框架(shm) 熟悉速腾雷达驱动,以及ros相关驱动,为二次开发驱动做准备 1.更换底 ...

  9. 持久层是什么意思_软件项目实训及课程设计指导—如何在数据持久层中应用DAO模式...

    软件项目实训及课程设计指导--如何在J2EE应用系统数据持久层中应用DAO模式 1.为什么要在软件应用系统中提供数据持久层 软件应用系统中的数据持久层主要为整个软件应用系统提供数据访问功能服务,从而可 ...

最新文章

  1. Java中读取控制台输入
  2. java如何计算html高度,如何检索HTML元素的实际宽度和高度?
  3. [Snipaste]系统截图工具
  4. 上云数据分析首选产品Quick BI的可视化之路
  5. (WPF) DataGrid之绑定
  6. L1-016. 查验身份证-PAT团体程序设计天梯赛GPLT
  7. .unl 文件 导入 mysql_mysql数据导出导入
  8. C#图片动画效果(旋转360度)异步
  9. 数据--第50课 - 基础查找课后练习
  10. 服务器上装的hadoop系统,在Ubuntu Server 18.04.1中安装Hadoop系统环境
  11. 第十二章:如何制定里程碑
  12. [Android Traffic] android 流量计算方法
  13. 柯洁预言AI绘画会替代大部分画师,网友:初代AI受害者现身说法
  14. 使用nano编辑器进行查找和替换
  15. 每日一招:什么样的股票才能越跌越买
  16. 支付宝php支付接口说明
  17. 《我的职场十年》-读后感-Pete的启示
  18. Abp.vnext 使用VS2022+Docker 部署至阿里云
  19. 网页滚动字幕效果代码及滚动字幕效果制作实例演示
  20. java魔塔_2018-2019学年第一学期Java课设--魔塔

热门文章

  1. “大一新生如何参加智能车比赛”帖子回复
  2. 【CAD建模号】 - 手机三维建模
  3. 我的电磁学讲义15:互感和自感
  4. 电压互感器的分类和基本术语
  5. 死锁的成因和对应的解决方案
  6. 如何用 TypeScript 编写 Vue 项目
  7. html舞动特效,html5 canvas实现舞动的雨伞动画效果
  8. 怎么把图片调整到合适大小?如何快速调整图片尺寸?
  9. 抽象类定义?为什么要使用抽象类?
  10. iCloud文件同步至Mac本地磁盘