v2.6.3 后支持

### 1、添加 Java 对象

 其中 ctx 请求或调用时自动添加的。另外 luffy 提供了几个关键的工具对象。

```java
@SolonMain
public class App {
    public static void main(String[] args) {
        Solon.start(App.class, args, app->{
            //app.sharedAdd("XFun", JtFun.g); //这是内置的
            //app.sharedAdd("XUtil", JtUtil.g); //这是内置的
            
            //添加基础共享变量（或类型名字别变） //（函数里就可以使用这些对象或类型）
            app.sharedAdd("LocalDate", LocalDate.class);
            app.sharedAdd("LocalTime", LocalTime.class);
            app.sharedAdd("LocalDateTime", LocalDateTime.class);
            
            //添加数据库操作对象
            app.sharedAdd("db", DbUtils.getDbContext()); 
        
            //让 Luffy 的处理，接管所有 http 请求
            app.all("**", new LuffyHandler());
            
            //
            // 下面这个是可选，或者自己构建一个基于数据库的资源加载器（或别的）
            //
            
            //添加外部文件夹资源加载器（映射 jar 文件边上的 luffy 目录）
            app.context().wrapAndPut(JtFunctionLoader.class, new JtFunctionLoaderFile("./luffy/"));
        });
    }
}
```

应用示例


```javascript
return XUtil.guid();
```

### 2、跨函数文件互调

* 直接调用函数文件

```javascript
var rst1 = callX('/_demo/call_fun.js');
var rst2 = callX('/_demo/call_fun.js', {p:1}); //带参数，函数内通过 ctx.attr("p") 获取

return rst1 + rst2;
```

```javascript
//::/_demo/call_fun.js
let p = ctx.attr("p");
if(p){
    return p;
}else{
    return 1;
}
```

* 导入函数类



```javascript
//:: /demo/test_clz.js //声明函数类
this.num = 1;

this.test = function(){
    return "require";
}
```

```javascript
//:: /demo/test.js（要求为同语言函数）
var textClz = requireX("/demo/test_clz.js");
return textClz.test();
```



* 返回模板和视图（mvc）

```javascript
return modelAndView("/demo/view.ftl", {user: 'solon'});
```



