nutz的视图主要是通过controller的ok和fail注解来实现的。比较常用的如jsp形式,这个是默认的,还有就是json。
从NutServlet中的service可以看到,最终是执行ActionInvoking 的invoke方法的,我们可以在org.nutz.mvc.invoker.ActionInvokerImpl中找到这个方法的实现。
这个方法主要做了以下一些事:
1.设置编码
req.setCharacterEncoding(inputCharset);
resp.setCharacterEncoding(outputCharset);
2. 执行相关的filter
// Before adapt, run filter
if (null != filters)
for (ActionFilter filter : filters) {
View view = filter.match(sc, req, method);
........
3. 参数适配,nutz可以把从request里面获取的参数根据需求适配成需要的对象
Object[] args = adaptor.adapt(sc, req, resp, pathArgs);
4. 调用并输出view,这边可以看到我们可以不用OK来定义返回的view,直接返回一个view对象也是可以的
// 调用 module 中的方法
Object re = method.invoke(obj, args);
// 渲染 HTTP 输出流
if (re instanceof View)
((View) re).render(req, resp, null);
else
ok.render(req, resp, re);
5. 失败处理,这个是放在catch里面的
fail.render(req, resp, e);
6. 清理,这个放在finally里面
if (null != reqContext)
reqContext.depose();
这个方法用到了很多对象,如filter,adaptor,ok视图,fail视图。这些对象都是在构造函数ActionInvokerImpl里面设置的,《nutz源码 mvc 之 url与controller 映射》这篇blog里面提到的urls.add(makers, module)会调用这个构造函数。
我们这里先看看ok和fail视图是如何获取的。
this.ok = evalView(ioc, makers, "@Ok", method.getAnnotation(Ok.class), dftOk);
this.fail = evalView(ioc, makers, "@Fail", method.getAnnotation(Fail.class), dftFail);
在evalView里面就根据OK里面的内容来生成视图,一般的OK写成“jsp:jsp/hello.jsp” 这里表示生成jspView 页面为根目录下的jsp/hello.jsp。
String str = (String) Mirror.me(ann.getClass()).invoke(ann, "value");
str = Segments.replace(str, context);
int pos = str.indexOf(':');
String type, value;
if (pos > 0) {
type = Strings.trim(str.substring(0, pos).toLowerCase());
value = Strings.trim(pos >= (str.length() - 1) ? null : str.substring(pos + 1));
} else {
type = str;
value = null;
}
for (ViewMaker maker : makers) {
View view = maker.make(ioc, type, value);
if (null != view)
return view;
ViewMaker 默认的都是采用DefaultViewMaker实现,这个是系统默认实现。里面的代码就是根据type来生成具体的view。nutz本身提供了JspView,UTF8JsonView,HttpStatusView,ServerRedirectView,ForwardView,RawView这几个实现,大体上可以满足需要了,但是缺少了对于tiles和siteMesh这类流行的页面组织框架的支持,这点上我觉得Nutz作为java web开发的一套整体解决方案是必须要考虑的。
以JspView为例,它其实是继承了ForwardView,而ForwardView的实现如下:
public void render(HttpServletRequest req, HttpServletResponse resp, Object obj)
throws Exception {
// Store object to request
if (null != obj)
req.setAttribute(DEFAULT_ATTRIBUTE, obj);
// Check path
String thePath = path;
if (Strings.isBlank(thePath)) {
thePath = Mvcs.getRequestPath(req);
thePath = "/WEB-INF/" + Files.renameSuffix(thePath, getExt());
}
RequestDispatcher rd = req.getRequestDispatcher(thePath);
if (rd == null)
throw Lang.makeThrow("Fail to find Forward '%s'", thePath);
// Do rendering
rd.forward(req, resp);
}
分享到:
相关推荐
用开源框架nutz搭建的MVC框架,适合小型系统的开发,快捷方便!
Mvc 框架 -- Nutz.Mvc Json 解析器 -- Nutz.Json 更多的简化Java语法的函数和类 -- Nutz.Lang 以及 Nutz.Castors 不依赖任何第三方 Jar 包,从而便于程序员建立开发环境,部署,甚至重新编译 Nutz 的源代码。 不幸的...
NULL 博文链接:https://yunhaifeiwu.iteye.com/blog/743368
NULL 博文链接:https://yunhaifeiwu.iteye.com/blog/746735
该框架是一个开源项目,可以免费下载, 集成的DAO,MVC,Spring 等框架的功能 不需要其他jar包 学习容易,好用
让nutz支持freemarker。 具体使用和在struts2中使用是一样的
NULL 博文链接:https://elkan1788.iteye.com/blog/1491190
NULL 博文链接:https://yunhaifeiwu.iteye.com/blog/746886
SpringMVC+Nutz框架介绍.pdf
如果你觉得直接写 XML 配置文件很麻烦,可视化编辑器又没控制感,Nutz.Mvc 专为你设计 如果你觉得 JSON 转换很麻烦(要写超过一行以上的代码),Nutz.Json 专为你设计 如果你觉得 Java 语法不如 Ruby 便捷, Nutz....
同传统的 SSH 相比,它具备如下特点:轻 -- 当前最新版,整个 jar 文件共 910kB -- 针对 JDBC 的薄封装,无缓存全 -- 提供了 Dao (ORM, SQL 管理), Ioc, Aop, Mvc, Json解析 等必要功能活 -- 各个部分可以独立使用,...
全 -- 提供了 Dao (ORM, SQL 管理), Ioc, Aop, Mvc, Json解析 等必要功能 活 -- 各个部分可以独立使用,比如在 Spring 里采用 Nutz.Dao ,又比如在 Nutz.Ioc 里使用 Hibernate 等 整 -- 它所有功能均不依赖第三方 ...
NULL 博文链接:https://536762164-qq-com.iteye.com/blog/1872468
全 -- 提供了 Dao (ORM, SQL 管理), Ioc, Aop, Mvc, Json解析 等必要功能 活 -- 各个部分可以独立使用,比如在 Spring 里采用 Nutz.Dao ,又比如在 Nutz.Ioc 里使用 Hibernate 等 整 -- 它所有功能均不依赖第三方 ...
nutz 使用手册 nutz 使用手册 nutz 使用手册 nutz 使用手册 nutz 使用手册 nutz 使用手册 nutz 使用手册 nutz 使用手册 nutz 使用手册 nutz 使用手册 nutz 使用手册
•全 -- 提供了 Dao (ORM, SQL 管理), Ioc, Aop, Mvc, Json解析 等必要功能 •活 -- 各个部分可以独立使用,比如在 Spring 里采用 Nutz.Dao ,又比如在 Nutz.Ioc 里使用 Hibernate 等 •整 -- 它所有功能均不依赖...
希望可以帮到大家,完成一个简单的NUTZ的学习。
Nutz高效开发框架是国内比较独立强大的技术团队开发的轻量级的框架快捷实用工具,由于可以方便地在各种数据库中调用存储数据,所以可以称之为方便程序员通行的项目大厦的手脚架工具。对于从事数据库相关的程序员来说...
用于nutz邮箱验证jar包
nutz生成javabean工具.zip