<2021SC@SDUSC>山东大学软件工程应用与实践JPress代码分析(四)

2021SC@SDUSC

本篇文章将继续分析模块module_page,此次分析module-page-web架构和module-page-web——文章管理的controller部分。

目录

1、module-page-web架构

1.1 html类文件

1.2 java类文件

2、pom依赖

3.Controller分析

3.1 _PageCommentController.java

3.1.1 父类AdminControllerBase.java

3.1.2 RequestMapping注解

3.1.3 AdminMenu注解

3.1.4 函数用途

3.2 _PageController.java

3.2.1 父类AdminControllerBase.java

3.2.2 EmptyValidate注解

3.2.3 函数用途

4.扩展内容:JFinal Interceptor拦截器

4.1 Interceptor

4.2 Before

4.3 Clear

5. 总结


1、module-page-web架构

1.1 html类文件

admin中的page包的html,对应的是页面功能中的几个功能:

  • setting对应设置功能。
  • page_write对应新建功能
  • page_list对应页面管理功能。

commons中的page包对应的是默认评论和默认页面的显示。

1.2 java类文件

  • controller包负责给页面提供接口,页面的表格、按钮等调用controller里面的包获取数据库相关资源。
  • directive包负责给controller提供directive“指导性”方法,比如获得url、获得page等函数。
  • sitemap使用JFinal的Enjoy模板引擎和core核心文件,进行页面模块的初始化和相关的数据库操作。

2、pom依赖

该模块多依赖于之前分析过的包,给页面提供具体的操作函数。

3.Controller分析

之前的文章中,因为代码和内容的联系不是很密切,我把注释和代码分开进行了分析。但是在controller中,注释和内容联系密切,本次结合在一起分析。

3.1 _PageCommentController.java

3.1.1 父类AdminControllerBase.java

  • _PageCommentController继承自jpress.web.base包中的AdminControllerBase,有管理员操作的相关函数。
  • AdminControllerBase中的方法使用了interceptor拦截器的相关内容,可以对用户、管理员、权限操作进行拦截,所以该类为管理员操作的基本。以下是AdminControllerBase中拦截器的配置。
  • 拦截器相关内容请看4.扩展内容:Interceptor拦截器

3.1.2 RequestMapping注解

  • 该注解来自Jboot,可以配置接口以及调用的界面。需要和SpringBoot的同名注解进行区分。
  • value属性负责配置接口,页面通过使用“/admin/page/comment”来调用此接口。
  • viewPath属性负责配置显示的界面,在这里页面路径为”/WEB-INF/views/admin/”,就是前文提到的所有html文件。

3.1.3 AdminMenu注解

  • 该注解来自JPress,配置页面功能板块的评论功能。
  • test配置功能显示文本。
  • groupId配置功能群组,此处为评论功能属于页面板块的意思。
  • order为五个种类。
  • 本个注解加在函数的前面,所以函数是列出五个种类的评论列表。

3.1.4 函数用途

列出评论列表。

删除评论。

批量删除评论。

修改评论状态。

评论回复 页面。

进行评论回复。

3.2 _PageController.java

父类AdminControllerBase.java、RequestMapping注解、AdminMenu注解在上文已经提到过,用法、运用的地方都相同,这里会重点介绍其他注解和函数。

3.2.1 父类AdminControllerBase.java

  • _PageCommentController继承自jpress.web.base包中的AdminControllerBase,有管理员操作的相关函数。在上一节已经介绍过,这里不再重点介绍。

3.2.2 EmptyValidate注解

  • EmptyValidate注解来自Jboot的Validator数据验证模块,对调用数据的方法进行验证。
  • 形象化一下,我们自己写表单验证的时候,需要自己写函数获取input的内容,判断是否为空,再返回相关信息,此处的注解能很方便地做到这一点。
  • 如上代码,表格中如果传递过来的参数名为id,可以直接判断并且返回message“页面id不能为空”。
  • @EmptyValidate放在方法的前面使用,当如果我们的  的方法没有参数的时候就可以使用。

如果有参数,Jboot准备了更多的注解给你使用!Jboot 从 V3.7.5 开始,增强 Jboot 的验证方式,在 Jboot 之前的 @EmptyValidate、@RegexValidate 等基础上,进一步基于 JSR 303 – Bean Validation 简化了验证方式,相比 Spring 更加优雅简单。

详情可以查看Jboot文档:数据验证 Validator | Jboot 官方 站

3.2.3 函数用途

列出页面管理的文章的列表

新建文章,开始编写新的内容

页面设置,包括评论功能、通知管理员等等。

文章撰写保存

删除文章

通过id删除文章

文章移动到垃圾箱

文章移动到草稿

文章移动到发布

4.扩展内容:JFinal Interceptor拦截器

Interceptor拦截器是JFinalAOP的最核心概念之一。JFinal采用极速化的AOP设计,专注AOP最核心的目标,将概念减少到极致,仅有三个概念:Interceptor、Before、Clear,并且无需引入IOC也无需使用啰嗦的XML。

4.1 Interceptor

  • Interceptor 可以对方法进行拦截,并提供机会在方法的前后添加切面代码,实现 AOP 的核心目标。Interceptor 接口仅仅定义了一个方法 public void intercept(Invocation inv)。
  • 以下代码中的 DemoInterceptor 将拦截目标方法,并且在目标方法调用前后向控制台输出文本。inv.invoke() 这一行代码是对目标方法的调用,在这一行代码的前后插入切面代码可以很方便地实现AOP。

4.2 Before

  • Before注解用来对拦截器进行配置,该注解可配置Class、Method级别的拦截器。
  • 如下代码所示,Before可以将拦截器配置为Class级别与Method级别,前者将拦截本类中所有方法,后者仅拦截本方法。此外Before可以同时配置多个拦截器,只需用在大括 内用逗 将多个拦截器进行分隔即可。

4.3 Clear

  • 拦截器从上到下依次分为Global、Routes、Class、Method四个层次,Clear用于清除自身所处层次以上层的拦截器。
  • Clear声明在Method层时将针对Global、Routes、Class进行清除。Clear声明在Class层时将针对Global、Routes 进行清除。Clear注解携带参数时清除目标层中指定的拦截器。

5. 总结

本篇文章内容非常多,且都是文件的核心内容。本次分析了两个controller java文件的父类、使用的注解、了解了JFinal的AOP重点内容,深入了解拦截器的作用、用法,解析每个方法的使用。下篇文章将继续深入了解controller,看JPress如何灵活运用JFinal、Jboot。

文章知识点与官方知识档案匹配,可进一步学习相关知识Java技能树首页概览91534 人正在系统学习中

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2021年9月24日
下一篇 2021年9月24日

相关推荐