在java web项目中,我有些数据要在很多页面显示,我不想每次显示的都在Action中查出来,然后在页面中再显示,有没有好一点的思路,让我避免这样做?你的意思是不想重复取?
可以在系统加载的时候就去取完数据,放在内存中
所有页面引用这些数据就可以了
页面引用这些数据,怎么引用?直接从cache中取,在jsp页面中引用cache中的数据?不明白,说清楚点,可以吗?
在内存中就是数据库的数据变了的时候,不能及时更新,缓存更新有没有好一点的处理方法
static变量?当数据库里的数据变了的情况下怎么办?不可能有数据永远都不会变吧?
你要实时反映数据库变化,那只有每次重复查询了
其实配置好的数据库,数据库自己有缓存的
重复查询的效率并不会降低很多
很多三方的缓存使用,比如你用hibernate,可以试试EhCache
把ResultSet每一条数据封装成一个Bean,然后创建一个List<Bean> list = new ArrayList<Bean> 存放创建的Bean,最后将list对象放在application里面!(ResultSet数据量不能太多哦!)
记住一个原则,session里面尽量只存放会话信息(尽管session和application都可以实现)
设置一个标识(flag),改变数据库中数据的话就改变这个标识(flag),每次显示数据的时候判断一下这个flag,没改变就继续用内存中的数据,改变了就重新读取并将flag重置。
至于flag具体放置在application,session还是单独创建一个表存储或者其他什么方式存储,
看你的具体需求,看看怎样实现比较简单了。
按照上面的步骤,当在main中执行test.exception()
执行静态化的部分,i被赋值为0
然后执行exception方法,抛出异常,然后被catch住了,执行catch中 return ++i 此时i为1,将1返回。然后再执行finally中的 System.out.println("finally " + ++i); i先被自增为2 然后打印出来 finally 2
主要是搞清楚 try-catch-finally的执行顺序(曾经有篇文章说return语句在try-catch-finally3处多有的情况下,说try-catch里不执行的。个人认为是错误,主要是传统观念误导的,以为一个方法内return语句(嵌在try-catch中)执行后下面功能就结束了(在没有finally情况下是对的))
注意:finally 的作用是,不管方法发不发生"异常"都会被执行
我们throw new Exception();后可以在catch{...}中继续执行,执行完catch{...}后在finally{...}中继续执行;
那么可以这么理解,我们在try-catch里return ;可以在finally{...}中继续执行;
最后就一句话:finally语句块是try-catch-finally最后执行的语句块,其他按语句块常规顺序执行
说白了,估计很多人错在 return 和 finally的顺序上。
实际上,finally即不在return前执行,也不在return 后执行,而是在return 中执行。
具体说,return 语句执行时,先将返回值压栈,然后执行finally块,执行完毕后进行返回跳转,再从栈里得到的返回值,其实是finally执行前就压入的那个返回值。基本功啊。慢慢研究一下吧。。感觉还是有意思的哈
最后一个由于i 是static的,所以它存在于stack中的,故而改变了就将永远改变。
特别注明:如果读者有兴趣的话讲i的static去掉的话就会发生改变了,其值就是0;
不知道这么解释是否解释清楚了,如果没有清楚的话,LZ可以找我私聊哈
哦对不起了哈,刚刚忘了说明如果去掉100行的代码后的结果了,刚刚有人在说,这里一并说了,希望对大家有帮助。
如果去掉100的代码的时候,那么return就将会发生在catch()中,值得注意的是
return ++i; 这个语句的含义是,return i=i+1; 当try{}抛出了异常后会有这个语句执行,
i=1; 当fianlly 执行后就又会跳转到catch中的return部分了。,而此时做的就是一个return语句
而不会在加了。
来源:足球直播