2019-12-01 15:04
@chcode getParaToXXX 方法一直都是调用的 getPara 方法,而不是调用的 request.getParameter,所以,何出此言:
https://gitee.com/jfinal/jfinal/blob/master/src/main/java/com/jfinal/core/Controller.java
你这个方案确实好,简单而且性能比 handler 要好, 因为 handler 会接管所有请求,必然会拉低一点性能
有一个小建议, initParas 可以重构一下提升性能:
private void initParas() {
if (paras == null) {
boolean flag = getRequest().getMethod().equalsIgnoreCase(POST) &&
getRequest().getContentType().equalsIgnoreCase(CONTENT_TYPE_JSON);
if (flag) {
String rawData = getRawData();
paras = JSONUtil.parseObj(rawData);
}
}
}
2019-12-01 12:27
这个功能是专门针对开发模式而来的,用于在开发的过程中及时了解当前调用的情况,以便快速做出开发决策。
也就是说只在开发的时候输出,在部署的时候不输出。
输出到控制台这个动作对性能影响较大,不建议在生产环境下使用
你的需求可以使用下面两个办法:
1:做一个 MyHandler 继承 ActionHandler ,覆盖掉父类的 handle 方法,将 ActionReporter.report(target, controller, action); 这行代码切换到你自己的实现上去,你自己的实现就是指你希望针对个别 controller 不打印的功能。
做好以后在 configHandler(Handlers me) 中配置一下 me.setActionHandler(new MyHandler()),这样就可以将系统默认的 ActionHandler 给替换成你的 MyHandler 了
2: 另一个办法通过全局拦截器来输出你希望的数据,拦截器中有 inv.getControllerKey() 可以得知当前的 controller 是谁,也可以通过 inv.getController().getClass() 得知。
得知以后,通过 if 判断就可以跳过一些你不希望输出的东东了
2019-11-30 14:31
@chcode jfinal 几乎每一个组件都可以扩展,而且代码量极少, jfinal 是一个可以轻松完全掌控的 MVC + ORM + AOP 框架
代码在手,随心所欲
2019-11-30 14:17
@chcode 使用一个 MyHandler 来实现本贴中拦截器切换 request 对象的功能,大致如下:
public void handle(String target, HttpServletRequest request, HttpServletResponse response, boolean[] isHandlec) {
if (request.getMethod().equalsIgnoreCase("post") && request.getContentType().contains("application/json")) {
WriteHttpServletRequestWrapper request = new WriteHttpServletRequestWrapper(request);
Map jsonParams = JSON.parseObject(HttpKit.readData(request), new TypeReference>() {});
request.init(jsonParams);
}
next.handle(request, response, isHandled);
}
简单来说就是将拦截器中要做的事情提前到 handler 中去做
2019-11-30 12:58
@chcode 应该可以的,你用用最新版本 jfinal
或者上面的处理 json 方式还需要改进一下,看一下 com.jfinal.core.Injector.java 源码,里面用到了:
request.getParameterMap()
2019-11-30 12:16
@zsdg 在 handleError 中调用 controller 中的各种 render 方法即可
2019-11-29 16:28
@简单代码 主要是因为 tomcat 太重了,启动缓慢
启动缓慢就很不适合用于开发,不用于开发就无法实现开发、打包、部署一体化
而 jfinal undertow 项目做到了开发、打包、部署一体化,三个事情一气呵成,不必换来换去
节省时间、提升体验
2019-11-29 16:24
@zzutligang 参考 IteratorEnumeration 自己写一个类放在项目中即可,这个类里头的逻辑应该很简单