1、在多工程下对session的理解:
一个浏览器打开一个工程,登录进去后,把值存放在session里,在这个浏览器里打开另一个工程,本来理解为浏览器已存放了session的数据,可以取得到,但是却不行。
因为另一个工程其实是另一个application了,当然session也不是同一个。
好像在websphere里可以钩选让多工程共享session。不知道jboss下是否可行。
2、对软件布局的理解:
最早做的界面,大多数是用弹出窗口(window.showModalDialog或window.open)的方式,这样的话,在程序上比较好控制。但是对于用户来说,显然显示不友好,如果涉及到业务复杂些,这种方式会让用记觉得很不爽,一直弹出,用户就会觉得软件很不好用。
后来把界面改为tab方式,当涉及到要弹出的界面包含较多内容时,尽量用tab方式来展示。这种展示比起弹出窗口方式好很多了,用户也觉得清晰多了。但是tab方式对于一些涉及到用户的操作有先后关系时会变得不太好。比如用户需要录入交通 事故与肇事方信息。因为交通 事故与肇事方信息属于主从表关系,也就是只有交通 事故记录新增完了才能在这条交通 事故的基础上去增加肇事方。如果用tab方式,交通 事故一个tab,肇事方一个tab。如果用用户想先增加肇事方信息再增加交通 事故,这可怎么办呢?一个解决方法是在数据库里用一个肇事方临时表来存放用户增加的肇事方信息,当交通 事故记录确定新增后把肇事方临时表的记录insert到真正的肇事方表中去。
以上临时表的方法可行,但是执行起来太麻烦,在程序要控制的东西太多。这时候其实要换一种思路来解决问题,也就是下面说的流程步骤的展示和处理方式。
流程步骤的处理方式:和上面说的交通 事故和肇事方,及比如一条记录要在些记录在上传附件等这种涉及到主表与从表的关系时,我们可以用流程步骤的方式,也就是主表的记录新增加完后给出提示是否要处理从表,如果要的话就打开从表的处理界面,如果不要就忽略。比如一条记录新增加成功后,弹出问用户是否要加附件。这种方式比把一个附件的所有操作放在一个单独的tab中的方式会更好。因为单独的tab时,用户如果并没有新增记录就去点击这个附件的tab,还要去判断提示用户说“对不起!你还没有新增,无法上传附件 !”。这样,对于用户来说是反感的,操作不够友好。而流程步骤的处理方式就显得很友好。这种方式在淘宝等网站上用得很多,比如淘宝上支付宝那块,步骤性很强。以后,做系统,多从流程步骤上考虑,一步步提示用户去处理。之后配合tab方式。
3、jboss下重复的jar包的问题。
对于多工程的jar包的问题,我们常常这样处理:jboss的lib目录(jboss-4.0.2\server\default\lib)下放置一些多个工程共用的jar包,各个工程息要用的包放置在自己的单独工程的lib目录下,在发布中配置好,指明最后发布jar包只含有jboss的lib目录下的包和自己各工程下的jar包,其它的jar包就不发布。在各工程的配置如下:工程--》属性--》myeclispe--》web--》如图:
特别注意的如果在jboss的lib目录下出现一个jar包有两个(常常是不同版本的jar包),这时候发布后常常会报会class找不到的问题。如果你确定报找不到的class你有包这个jar包,就要看jar包的以上说的配置,并考虑是否重复了。
4、浏览器缓存的问题
有些问题,一台机子正常,但是另一台显示有问题。比如时时刷新一个div,显示的内容时时不同,这是正常的。但是另一台机子却没有时时更新。有时候常常找不到,一般碰到这些奇怪的问题,都要考虑浏览器缓存问题了。解决办法是在action输出到前台的内容时,一定要禁止缓存:
public void responseTextContent(String s)throws Exception{ PrintWriter out = null; try { this.response.setContentType("text/html;charset=GBK"); this.response.setHeader("Pragma","No-cache"); this.response.setHeader("Cache-Control","no-cache"); this.response.setDateHeader("Expires", 0); out = this.response.getWriter(); out.print(s); }catch (IOException e) { e.printStackTrace(); }finally{ out.close(); } }?
?