`
kyo100900
  • 浏览: 639750 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

经验不足,差一点重构整个系统

阅读更多
 

呵呵,很久没有来JavaEye写文章了,公司工作也不让随便上网,也好,工作中发现了不少问题和大家分享吧。

1. 郁闷的Form表单问题,请看下面代码:

xml 代码
  1. <form name="form1" action="userCRUDAction!editUser.action?user.id=${user.id}">  

 

这真已经是一个再简单不过的Struts2的表单提交了,不过运行后,你会发现user.id=null。 为什么? 你现在试试把代码换成以下就好了。

xml 代码
  1. <form name="form1" action="userCRUDAction!editUser.action?user.id=${user.id}" method="post">  

或者:

xml 代码
  1. <form name="form1" action="userCRUDAction!editUser.action">
  2.     <input type="hidden" name="user.id" value="${user.id}" />  

原因看出来了吧,重点就是这个 method="post",  Form默认的传输是GET,你得养成好习惯记得在每写一个FORM的时候,就给加上。

 

2. 吓出一身冷汗的Spring scope问题。

天天Struts2,Webwork,Spring,Hibernate挂在嘴边,结果一用的时候才真正明白,真正懂这几个框架的人真的非常非常少。更别去谈成功的项目了。

以下代码在任何SSH框架的项目里是太平常的我都不愿意写了:

java 代码
  1. public class UserController extends ActionSupport {   
  2.   
  3.     private static final long serialVersionUID = 1L;   
  4.   
  5.     private static Logger logger = Logger.getLogger(BaseController.class);   
  6.   
  7.     private IUserService userService;  
  8.   
  9.     private User user;
  10.     private Date createDate;
  11.  
  12.     ..................

然后把 userService 注入:

 

 

xml 代码
  1. <bean id="userCRUD" class="com.libe.controller.UserController">  
  2.     <property name="userService" ref="userService" />  
  3. </bean>  

 代码单元测试也通过了,社会和谐了,呵呵。可是一放到服务器上,开始出莫名奇妙的问题了,测试人员不停的提交那些根本不可能出现的问题,好吧。开断点,看着断点也吓出一身冷汗:许多本应该为null的对象,竟然都有值了!@##¥%。

代码查了又查看了又看,终于又回到这个XML配置片断了,修改成如下:

xml 代码
  1. <bean id="userCRUD" class="com.libe.controller.UserController"  
  2.     scope="prototype">  
  3.     <property name="userService" ref="userService" />  
  4. </bean>  

就是加了一个 scope="prototype"。 然后回头看看项目,几十个Action竟然都没有加,汗,测试员提出的问题应该和这个有关,大家都知道Spring的默认设置为:singleton,Spring的容器只维护该类的一个实例感觉应该和启动后,Tocmat加载的Servlet挺相似。如果这个时候Action设置成了singleton,大家可以试着想像一下在那个Action里的 user, createDate,等等其它私有属性在那几个测试员的交差点击下,会出现多么混乱的情况。

3.Hibernate的滥用:

我一直承认自己的Hibernate用的不好,所以更多的时候是在测试,以达到最佳实践。从最开始对Hibernate的疯狂吹捧,再到将Hibernate项目转成JDBC项目之痛,到现在反复看文档做测试尽可能客观的来对待Hibernate,已经有一年多了。

我这个项目其实根本不适合使用Hibernate

1.从一开始就不是按照对象建模再建表,对象建立都是跟表走。

2.表结构冗余非常严重,一般通过关联取的信息已经在主控表里了。

3.用着最新的Hibernate却当Hibernate2.1使用,那些什么lazy, cache, proxy, out-join全部都不管,这也是让我最郁闷的一点,lazy=false,你就等着Hibernate给你刷屏吧。

想改变这一切,可是我来的有点晚,项目已经做了一大半了,要全部设计的话似乎已经不可能了。

分享到:
评论
10 楼 limanxy 2008-10-06  
呵呵 好久没研究WEB SSH里的东西了,亲切又陌生
9 楼 Durian 2008-09-25  
看来,用架构之前应该先搞透
8 楼 mazzystar 2008-09-25  
第2点的确很容易出错。
7 楼 lizhuang 2008-09-19  
楼主要重写系统架构,不是小步重构的问题啊
6 楼 huobao89 2008-09-18  
感觉你的文章都不错
5 楼 spring5365 2008-01-29  
顶顶顶顶顶
4 楼 kuuuu 2008-01-23  
局部User对象不就好了吗
3 楼 dingdangxiaoma 2008-01-08  
呵,呵,也有同感啊.
2 楼 kyo100900 2008-01-01  
不是,是Webwork2,应该就是包名不一样。
1 楼 xuejianshan 2007-12-31  
呵呵,你们公司用Struts2.0吗?

相关推荐

    ebsite for net4.0网站建设系统 v3.0 正式版.zip

    您可以配置同站下的站群,也可以配置出不同域下的站群,由于eBSite在用户系统设计上已经考虑到这一点,所以eBSite的用户系统是独立的,数据库也是独立的,无论您有多少个站点,都可以使用同一个用户系统,意味着所有...

    再深一点:如何给女朋友解释什么是微服务?(csdn)————程序.pdf

    3. **新人培养周期长**:新人需要理解整个系统的复杂性。 4. **技术选型受限**:统一的技术栈限制了技术更新和创新。 5. **可扩展性差**:水平扩展困难,垂直扩展成本高。 【微服务架构的核心概念与特点】 微服务...

    基于FPGA中8051核等精度频率计的设计.pdf

    通过使用IP核技术,FPGA可以仿真单片机,并使用硬件描述语言(例如VHDL或Verilog)来编写各个模块,从而实现整个系统的设计和仿真。 本设计的等精度数字频率计以FPGA为核心,采用IP核仿真单片机,实现了高测量精度...

    备件供应保障系统可靠度模型近似分析方法 (2005年)

    这一点紧贴实际应用场景,考虑到实际备件供应过程中可能出现的多种情况,如基层级库存不足、中继级供应短缺等情况,提出了相应的解决策略。这样的探讨有利于更加精确地评估备件供应保障系统的可靠度,从而为实际操作...

    基于FPGA的MSK调制与解调器的设计与实现.pdf

    通过FPGA的动态重构,可以实现多种调制解调方案,并完成各种复杂的系统功能,这与软件无线电的概念相契合。在本研究中,选择使用Altera公司的FPGA EP3SE110芯片成功实现了MSK数字调制与解调的复杂算法。该芯片属于...

    基于FPGA的高速大容量FLASH存储

    整个系统的设计思想是通过FPGA作为核心来控制整个存储系统,包括数据的并行处理和存储。在存储部分,引入新的方法来处理高速输入数据,确保高速实时数据能够被可靠地存储在高速度、低密度的FLASH芯片中。 综上所述...

    分布式视频编码中一种基于混合模型的边信息生成算法.pdf

    编码器仅负责生成WZ帧和少量的附加信息,而解码器则利用WZ帧和辅助信息(边信息)来重构原始视频帧。边信息在解码端生成,是对原始帧的估计。边信息的质量直接影响着整个编码器的性能,因为边信息与WZ帧之间的相关性...

    二十三种设计模式【PDF版】

    整个设计模式贯穿一个原理:面对接口编程,而不是面对实现.目标原则是:降低耦合,增强灵活性. 建筑和软件中模式之异同 CSDN 的透明特别推崇《建筑的永恒之道》,认为从中探寻到软件的永恒之道,并就"设计模式"写了专门...

    基于自适应超稀疏采样的微波辐射干涉法

    这种采样方法能够克服传统方法的不足,通过自适应地获取采样数据,从而提高整个系统的性能。 知识点五:重建微波辐射图像 为了重建微波辐射图像,研究者建立了一个基于总变分正则化约束的成像模型,并使用交替迭代...

    福建省龙岩市六县市区一中2020_2021学年高二数学上学期期中联考试题202012280114

    9. **茎叶图和统计分析**:第九题通过茎叶图给出了两名篮球运动员的得分情况,涉及到极差、平均值和方差的计算。同时,比较了两位球员得分的波动情况。 10. **空间直线和平面的关系**:第十题考察了空间直线和平面...

    ssh(structs,spring,hibernate)框架中的上传下载

    可以确定的一点是:BlobByteArrayType不可能逾越Blob天生的操作方式,原来是BlobByteArrayType数据类型本身具体数据访问的功能,它通过LobHandler将两次数据访问的动作隐藏起来,使Blob字段的操作在表现上和其他一般...

Global site tag (gtag.js) - Google Analytics