任何一个类都可以作为主模块,只要你将其配置在 web.xml 中,这样的设计主要是为了方便 一些非 JSP/Servlet 标注的 web 服务器整合 Nutz.mvc 框架。
在主模块中,你可以声明如下的注解:
指定子模块
@Modules({ UserModule.class, PetModule.class})
public class MainModule {
...
添加自动扫描
//模块类自动扫描,添加这行注解nutz将自动扫描主模块所在包下所有的子模块以及入口函数(带有@At注解)
@Modules(scanPackage = true) //1.r.58开始默认就是true
public class MainModule {
...
将自动搜索主模块类,Abc.class,Xyz.class 所在的包(包括子包)下所有的 类,如果有类包括了一个以上的入口函数将被认为是模块类。
声明了 Ioc 容器的获取方式,详情请参看 同 Ioc 容器一起工作 。
在整个应用启动或者关闭时,你想做一些额外的处理工作,你可以实现一个 org.nutz.mvc.Setup 接口,并将其配置在主模块上
@SetupBy(MyAppSetup.class)
public class MainModule {
...
例如
public class MainSetup implements Setup {
public void init(NutConfig nc) {
Ioc ioc = nc.getIoc();
Dao dao = ioc.get(Dao.class);
Daos.createTablesInPackage(dao, "net.wendal.nutzDemo", false);
// 初始化默认根用户
if (dao.count(User.class) == 0) {
User user = new User();
user.setName("admin");
user.setPassword("123456");
user.setCreateTime(new Date());
user.setUpdateTime(new Date());
dao.insert(user);
}
}
public void destroy(NutConfig nc) {
// webapp销毁之前执行的逻辑
// 这个时候依然可以从nc取出ioc, 然后取出需要的ioc 对象进行操作
}
}
任何类都可以作为子模块,只要通过 @Modules 注解 声明到主模块上即可
在子模块,你可以声明
子模块中任何函数,只要是 public 的,且不是 static 的,都可以作为入口函数 标记入口函数的方法是在其上标注注解 @At
在入口函数上,可以声明如下注解:
@At - 入口函数对应的 URL
只有标记了这个注解的函数才被认为是入口函数,例如
@At("/my/abc")
public void someFunc(){
...
也可以为该函数声明多个 URL
@At({"/my/abc", "/my/xyz"})
public void someFunc(){
...
@Ok - 成功视图
声明了入口函数的成功视图,即如果入口函数正常执行,将会通过这个视图将函数返回值渲染到 HTTP 响应中。 当然,如果你的函数直接返回的就是一个视图对象,那么就不会使用成功视图(而是你返回的视图对象)来渲染 HTTP 响应 详细的介绍,请参看 视图 一节
声明了入口函数的失败视图,即如果入口函数抛出异常,将会通过这个视图将异常渲染到 HTTP 响应中 详细的介绍,请参看 视图 一节
将 HTTP 请求参数转变成你当前入口函数的参数的过程叫做 适配,这个注解就是声明这个适配器。 如果你没有声明这个注解,默认的会采用 PairAdaptor 来适配 HTTP 请求参数。 详细的介绍,请参看适配器 一节
详细介绍请参看 过滤器 一节
定义 HTTP 请求的输入输出编码,这个注解通常是会定义在 主模块 上面,从而 保证整个应用有统一的输入输出设定
如果你不定义,默认的,Nutz.Mvc 会采用 UTF-8 作为输入输出的编码
@Encoding(input="UTF-8",output="UTF-8")
视图的任务就是将入口函数的返回值(一个Java对象)渲染到 HTTP 响应流中。
现在 Nutz.Mvc 自带的主要视图有
当然你还可以根据需要开发你自己的视图实现类,定制自己的视图也非常简单,请参看 本文 #定制自己的视图 一节。