SpringBoot集成Enjoy,配置默认ContextPath路径

  • 写在前面

    很喜欢Jfinal以及Enjoy的高效、简洁,极大地方便了自己开发项目,希望能在享受Jfinal带来的好处同时,做一点点自己的贡献。

    背景是由于公司采用Spring框架,自己查资料加鼓捣,并在波总指导下,完成了SpringBoot集成Enjoy模版,以及配置默认项目访问路径。

  • SpringBoot配置,手册有详细说明,这里的MyViewResolver 是继承JFinalViewResolver 的类,为了下面能够获取ContextPath

  • @Configuration
    public class EnjoyConfig {
    	@Bean(name = "myViewResolver")
    	public MyViewResolver getJFinalViewResolver(){
    		MyViewResolver jf = new MyViewResolver();
    		jf.setDevMode(true);
    		jf.setSourceFactory(new ClassPathSourceFactory());
    		//这里根据自己的目录修改,一般页面放到/templates下面
    		jf.setPrefix("/public/");
    		jf.setSuffix(".html");
    		jf.setContentType("text/html;charset=UTF-8");
    		jf.setOrder(0);
    		return jf;
    	}
    }
  • ctx配置

    有时候我们的项目会添加项目路径,这样页面访问资源和Controller时必须带上。Jfinal框架中可以使用 new ContextPathHandler来很方便地添加,和SpringBoot集成的时候可以如下配置

  • public class MyViewResolver extends JFinalViewResolver implements 
    ApplicationListener<ContextRefreshedEvent> {
    
    	/**
    	 * 添加默认路径
    	 * @param contextRefreshedEvent
    	 */
    	@Override
    	public void onApplicationEvent(ContextRefreshedEvent contextRefreshedEvent) {
    		getEngine().addSharedObject("ctx", getServletContext().getContextPath());
    	}
    }

    ps1:这里实现ApplicationListener接口,是为了在容器初始化完成后再添加ctx对象,不然getServletContext()对象可能取到的是空值。

    ps2:SpringBoot使用了spring-boot-devtools热部署的情况下,重启服务时Enjoy模版可能会报错,不能重复添加ctx对象,

              这里参考http://www.jfinal.com/share/457,进行配置后正常

             blob.png

             在META-INF文件夹下新建spring-devtools.properties文件,内容为restart.include.thirdparty=/enjoy-3.3.jar

    ps3:一般将静态文件放到static文件夹下,SpringBoot默认将static目录下的文件映射到/根路径,这样比如在页面的css、js引入地址时,前面加了/static/css的话是无法访问的,

    需要去掉/static,通过以下配置后,不用进行修改:

  • /**
     * WebMvc适配器
     * @author lizh
     * @date 2017/7/26.
     */
    @Configuration
    public class MyWebAppConfigurer extends WebMvcConfigurerAdapter {
        @Override
        public void addResourceHandlers(ResourceHandlerRegistry registry) {
            //将所有/static/** 访问都映射到classpath:/static/ 目录下
            registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/");
        }
    }

评论区

海哥

2017-12-10 11:02

哈哈,这么麻烦,不如用 Jboot

bussanq

2017-12-10 11:03

@海哥 公司框架,以后自己做项目肯定试试大神的jboot

JFinal

2017-12-10 16:36

context path 设置的好办法,已收藏点赞,后续会有越来越多人需要,感谢分享

阿帕奇

2018-03-19 14:47

SpringBoot集成Enjoy模版,请问一下我根据你的配置总是找不到页面;能否提供一下学习文章呢?

bussanq

2018-03-21 09:35

@阿帕奇 估计你是SpringBoot配置有问题,注意是不是ps3的问题

阿帕奇

2018-05-02 10:02

@bussanq 谢谢指导,顺便提醒一下如果页面要取session的话需要设置: jfr.setSessionInView(true);//是否支持以 #(session.value) 的方式访问 session

JFinal

2018-05-02 10:32

@阿帕奇 你最近有很大的进步,加油

谁是大流氓

2018-05-17 16:28

你好 请问你这个springboot 结合enjoy的项目 安全框架用的是shiro吗 如果是shiro的页面标签你怎么弄的

xjt520

2018-06-13 13:23

@Bean(name = "jfinalViewResolver")
public JFinalViewResolver getJFinalViewResolver() {
JFinalViewResolver jfr = new JFinalViewResolver();
// setDevMode 配置放在最前面
jfr.setDevMode(true);
jfr.setSourceFactory(new ClassPathSourceFactory());
jfr.setPrefix("/templates/");
jfr.setSuffix(".html");
jfr.setContentType("text/html;charset=UTF-8");
jfr.setOrder(0);
jfr.setSessionInView(true);
jfr.setRequestContextAttribute("ctx");
return jfr;
}
前端使用 #(ctx.contextPath)即可

艾小管

2018-07-12 11:19

JFinalViewResolver.engine.setBaseTemplatePath("/view/");
我用的是springboot,我想访问ip:port就直接访问到/view/login.html,我要怎么配置?

JFinal

2018-07-12 12:08

@艾小管 参考一下文档,注意其中的实例代码:
http://www.jfinal.com/doc/6-10

实例代码中有注释掉的,那个是以前的建议配置,现在有更好的配置方法