2018-08-08 12:28
@macaque 比较特殊的操作, 还是建议使用okhttp等功能多的工具.
如果你项目中有用 jfinal.weixin 的话 , 可以用 HttpUtils , 里面集成okhttp简化接口, 还挺好用
2018-08-08 12:16
@童年
OriginalFileName >> 原始文件名(在客户端时的文件名)
getFileName() >> 在服务器上的文件名.
因为上传文件夹的位置已经存在 这个文件名了, 这个时候文件名会自动+1, 所以就不一样了. 比如有的业务需要在下载的时候保持原名, 这样的业务一般在数据库会存储文件的路径和原始文件名, 下载的时候就可以还原了.
2018-07-29 15:46
@童年 使用自定义的 render(new MyRender()); 来渲染你的业务(最后一行代码) http://www.jfinal.com/doc/3-10
2018-07-28 14:22
写个Interceptor http://www.jfinal.com/doc/4-2
在里面写个 列队 比如:
private static Queue cs= new ConcurrentLinkedQueue();
intercept方法里面做添加动作
public void intercept(Invocation inv) {
if(cs.size() < 20)
cs.offer(inv);
else
inv.getController().renderText("座位满了, 下次再来吧~");
}
再启动其他线程去处理就可以了
static {
for (int i = 0; i < 20; i++) {
new Thread(){
public void run() {
try {
Invocation inv = cs.poll();
if(inv==null)
Thread.sleep(200);
else
inv.invoke();
} catch (Exception e) {//异常}
}
}.start();
}
}
但这样做体验肯定不好卡的很, 应该把列队放业务层, 然后Controller快速反应, 告诉前端稍候再来拿结果
2018-07-27 15:23
Controller {
//线程池
private static ExecutorService exec = new ThreadPoolExecutor(1
, 300
, 0L
, TimeUnit.MILLISECONDS
, new LinkedBlockingQueue(1024)
, new ThreadFactory(){ @Override public Thread newThread(Runnable r) { return new Thread(r); }}
, new ThreadPoolExecutor.AbortPolicy());
//开始使用
public void index(){
exec .submit(new Runnable() {
@Override
public void run() {
//调用你的 业务代码
}
})
renderJson(true);
}
}