【JPress】jpress-core架构

2021SC@SDUSC


目录

一、jpress-core基本信息

1.pom.xml

2.jpress-core目录

二、JPressCoreInitializer

1.onConstantConfig

2.onRouteConfig

3.onHandlerConfig

4.onEngineConfig

5.onInterceptorConfig

6.onStart


一、jpress-core基本信息

1.pom.xml

jpress-core是JPress的核心代码。作为一个maven子项目,要研究Jpess-core的代码结构,先要了解其pom.xml文件,大概知道Jpess-core的基本信息,集成了什么框架,使用了什么依赖。

jpress-core的pom.xml文件如下:

<dependencies>
        <dependency>
            <groupId>io.jboot</groupId>
            <artifactId>jboot</artifactId>
        </dependency>
​
        <dependency>
            <groupId>com.jfinal</groupId>
            <artifactId>jfinal-weixin</artifactId>
        </dependency>
​
        <dependency>
            <groupId>io.jpress</groupId>
            <artifactId>jpress-model</artifactId>
        </dependency>
​
        <dependency>
            <groupId>io.jpress</groupId>
            <artifactId>jpress-service</artifactId>
        </dependency>
​
        <dependency>
            <groupId>io.jpress</groupId>
            <artifactId>jpress-commons</artifactId>
        </dependency>
​
        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
        </dependency>
​
<!--        <dependency>-->
<!--            <groupId>ch.qos.logback</groupId>-->
<!--            <artifactId>logback-core</artifactId>-->
<!--        </dependency>-->
​
<!--        <dependency>-->
<!--            <groupId>ch.qos.logback</groupId>-->
<!--            <artifactId>logback-classic</artifactId>-->
<!--        </dependency>-->
​
​
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <scope>test</scope>
        </dependency>
<!--        <dependency>-->
<!--            <groupId>net.sf.ehcache</groupId>-->
<!--            <artifactId>ehcache</artifactId>-->
<!--        </dependency>-->
​
    </dependencies>

可以看到,jpress主要依赖的框架为jboot、jfinal,用于web开发。其次是commons-io、jpress-commons两个工具类,以及jpress其他子模块jpress-service(JPress非业务 service 接口定义)、jpress-model(JPress非业务实体类)。

2.jpress-core目录

在io.jpress包下有两个文件夹——core、web,以及一个JPressCoreInitializer类Java文件。

JPressCoreInitializer为Jpress-core模块的初始化类。

core包和web包包含了其他核心的组件,是我们分析的主要代码。

二、JPressCoreInitializer

JBoot在启动时会扫描类路径中是否存在继承JbootAppListenerBase的类,如果有,则会初始化这个类,并执行其中的钩子方法,因此可以通过继承JbootAppListenerBase类实现启动任务。一个应用在可以存在多个继承至 JbootAppListenerBase 的类,这样更加方便团队配合和模块化开发,每个团队(或模块)都可以有自己的配置类,不会造成代码冲突。

jpress-core中的JPressCoreInitializer继承了JbootAppListenerBase类,而JbootAppListenerBase类实现了JbootAppListener接口。

JPressCoreInitializer最终重写了JbootAppListenerBase的以下方法:

//对应 JFinalConfig 的 configConstant
public void onConstantConfig(Constants constants) ; 
​
 //对应 JFinalConfig 的 configRoute
public void onRouteConfig(Routes routes);
​
 //对应 JFinalConfig 的 configHandler
public void onHandlerConfig(JfinalHandlers handlers) ;
​
//对应 JFinalConfig 的 configEngine
public void onEngineConfig(Engine engine);
​
 //对应 JFinalConfig 的 configInterceptor
public void onInterceptorConfig(Interceptors interceptors) ;
​
//对应 JFinalConfig 的 onStart()
public void onStart() ;

可以发现,JPressCoreInitializer对应的就是JFinalConfig的配置类信息,从这里也可以看出,Jboot 是一个基于 JFinal的微服务框架。现在开始具体分析JPressCoreInitializer的各个具体实现方法。

1.onConstantConfig

此方法用来配置JFinal常量值,具体设置看以下注解

@Override
public void onConstantConfig(Constants constants) {
    //对 render 的扩展与定制
    constants.setRenderFactory(new JPressRenderFactory());
    
    //配置验证码缓存 cache,配置成集中共享缓存可以支持分布式与集群
    constants.setCaptchaCache(new JbootCaptchaCache());
}

其中JPressRenderFactory对象为jpress-core包下的一个对象,其继承了JbootRenderFactory,重写了对错误页面渲染和对模板页面渲染的功能。

2.onRouteConfig

此方法用来配置访问路由,具体设置看以下注解

@Override
public void onRouteConfig(Routes routes) {
    //配置是否在路由映射完成之后清除内部数据,以回收内存,默认值为true.设置为false通常用于在系统启动之后,仍然要使用 Routes 的场景,例如希望拿到Routes 生成用于控制访问权限的数据
    routes.setClearAfterMapping(false);
}

3.onHandlerConfig

此方法用来配置JFinal的Handler,如下代码配置了名为xxxHandler的处理器,Handler可以接管所有web请求,并对应用拥有完全的控制权,可以很方便地实现更高层的功能性扩展。

@Override
public void onHandlerConfig(JfinalHandlers handlers) {
    //jpress安装处理器
    handlers.add(new InstallHandler());
    
    //网站地图处理器
    handlers.add(new SitemapHandler());
    
    //伪静态处理器
    handlers.add(new JPressHandler());
    
    // JPress 网站的 URL 管理器,主要是用于:
    //1、处理伪静态的问题
    //2、处理扁平化 URL 的问题,也就是全站 URL 转为为 /xx-xx-1.html ,不再有 "/" 这个符号 ,更加有利于 SEO
    handlers.add(new FlatUrlHandler());
    
    //插件处理器
    handlers.add(new AddonHandlerProcesser());
    
    //插件控制
    handlers.setActionHandler(new AddonControllerProcesser());
}

4.onEngineConfig

此方法用来配置Template Engine

@Override
public void onEngineConfig(Engine engine) {
    //向jfinal模板引擎中添加了jpress-core包下的静态方法
    engine.addSharedStaticMethod(JPressCoreFunctions.class);
}

5.onInterceptorConfig

configInterceptor 方法用来配置全局拦截器

@Override
public void onInterceptorConfig(Interceptors interceptors) {
    //配置作用于jfinal控制层的全局拦截器
    
    //utm拦截器
    interceptors.add(new UTMInterceptor());
    //Api拦截器
    interceptors.add(new JPressInterceptor());
}

6.onStart

在 JFinalConfig 继承类中可以添加 onStart() ,JFinal 会在系统启动完成之后回调这个方法,让jpress的各种继承自JbootEventListener的管理器初始化,而每一个管理器的具体任务我们之后的博客再分析。

@Override
public void onStart() {
​
    SitemapManager.me().init();
    MenuManager.me().init();
    WechatAddonManager.me().init();
    AddonManager.me().init();
​
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要解决"tomcat部署jpress 404"的问题,可以按照以下步骤进行操作: 1. 首先,确认你已经成功安装并启动了Tomcat服务器。你可以使用命令`systemctl restart tomcat`来重启Tomcat。 2. 确保你已经将jpress的war文件复制到了Tomcat的webapps目录下。你可以使用命令`cp -ra jpress-3.2.4.war /app/tomcat/webapps/jpress.war`来复制war文件。 3. 验证一下jpress的官方网站(http://jpress.io)并下载最新版本的jpress。 4. 确认你使用的URL是正确的。访问jpress后台的URL应该是类似于"http://IP:8080/jpress-web-newest/admin/login"的形式。你需要将"IP"替换成你的服务器的实际IP地址。 5. 如果你仍然遇到404错误,可以检查一下Tomcat的日志,通常位于Tomcat的logs目录下。查看日志可以帮助你找出具体的错误信息,从而更好地解决问题。 总结:要解决"tomcat部署jpress 404"的问题,你需要确认Tomcat已经成功启动,jpress的war文件已经复制到了正确的目录下,并确保访问的URL是正确的。如果问题仍然存在,你可以查看Tomcat的日志以获取更多信息。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [教你centos7.9安装tomcat8,配置服务启动脚本,部署jpress应用](https://blog.csdn.net/qq_49096000/article/details/127286959)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [tomcat 8.5.54 安装jpress失败](https://blog.csdn.net/idc_lm/article/details/105812922)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值