启动异常

问题描述

在linux启动内置jetty的jfinal项目时(jar包方式运行),因设置模板baseTemplatePath为空异常了,异常代码位置

image.png

导致服务起来后访问出现503,在windows系统测试时不报错,在windows下debug显示参数baseTemplatePath为盘符(E:/),在linux下为/

服务启动类

image.png

服务启动类代码

public static void main(String[] args) throws URISyntaxException {
		PropKit.use("setting.properties");//加载用户配置文件,获取值直接使用:PropKit.get(key值)
		log.info("server.port="+PropKit.getInt("server.port"));
//		JFinal.start("WebRoot", 80, "/", 5);// 需要web.xml
		EnumSet<DispatcherType> all = EnumSet.of(DispatcherType.ASYNC, DispatcherType.ERROR, 
    			DispatcherType.FORWARD,DispatcherType.INCLUDE, DispatcherType.REQUEST);
        final Server server = new Server(PropKit.getInt("server.port", 8182));
        try{
            WebAppContext context = new WebAppContext("/","/");
            FilterHolder filter = new FilterHolder(new JFinalFilter());
            filter.setInitParameter("configClass", JFConfig.class.getName());
            context.addFilter(filter, "/*", all);
            server.setHandler(context);
            server.start();
            log.info("RealPath="+context.getServletContext().getRealPath("/"));
            log.info("server start on port "+PropKit.getInt("server.port", 8182));
            server.join();
        }catch (Exception e){
            log.warn("启动服务异常", e);
        }
	}


评论区

2017-05-17 18:17

上面写错了
“在windows下debug显示参数baseTemplatePath为盘符(E:/),在linux下为/”
改为:
在windows下debug显示参数baseTemplatePath为盘符(E:),在linux下为空

JFinal

2017-05-17 20:53

@召 下面两个方法选其一:
1:在 configConstant(Constants me) 中调用一次:
PathKit.setWebRootPath(...);
注意上面的参数要确保指向项目的根目录

2:在 configEngine(Engine engine) 中手动配置一下:
engine.setBaseTemplatePath(...);
注意上面的参数要确保指向项目的根目录

建议优先选择第一个方案,因为这个 PathKit.getWebRootPath() 获取的这个参数需要在很多地方被使用。如果 PathKit.setWebRootPath(...) 的参数值拿不准的话,可以直接写在配置文件中,再利用 PropKit 加载进来

记得搞定后回来分享

2017-05-18 12:47

@JFinal 解决方式
WebAppContext context = new WebAppContext("/","/");
........
context.setResourceBase("/WEB-INF");
........
随便设置一个路径就可以了,不存在也没关系


最好还是改下jFinal源码,不在启动时做异常检查,因为有些时候不需要模板引擎的,不设置路径就导致启动不了

设置jfinal的PathKit.setWebRootPath不行,主要是jFinal.initPathUtil会重新设置PathKit.setWebRootPath,所以后面执行的engine.setBaseTemplatePath就会有问题

热门反馈

扫码入社