Jfinal是如何实现Action方法不需要填写参数的?

Jfinal是如何实现Action方法不需要填写参数的,jfinal把请求数据的获取与响应操作,都直接给了Controller了,开发者只需用this.来操作获取参数。我看了一下源码,但不是很明白,没有找到关键的地方 。难道Controller对象内部封装了一个缓存?

评论区

JFinal

2020-06-09 18:55

Controller.getPara() 在底层调用了 HttpServletRequset.getParameter(...),调试跟踪进入 Controller 内部代码可以很清楚看到原理

tctc4869

2020-06-09 19:50

@JFinal 我知道内部是调用了httpServletRequset的参数获取,但httpServletRequset 是个字段把,Controller对象只有一个,而request是Controller类的字段的,那么有个问题,两个客户端并发同时对一个功能发起请求,Controller里的那个Request会是什么情况?两个相同请求路径的请求线程的请求数据,放入Controller内的request是怎样的情况,一致性怎么保证的?,比如客户端A和客户端B对/test的Action同时发起请求,这个时候Controller的request和客户端的请求数据怎么处理的?

JFinal

2020-06-09 23:09

@tctc4869 每个用户的请求处理都在独立的线程中完成,这些线程是由 tomcat、jetty、undertow 等容器保障的

每次请求,controller 对象会被重新创建,每个用户独享一个独立的 Controller 对象,自然也就不存在线程安全问题,就跟一个人单独访问的效果是一样的

Controller 每次被创建的代码在 ActionHandler 中的 controllerFactory.getController(...) 中

热门反馈

扫码入社