分享
 
 
 

WEB 开发技术系列之四-我的Web框架(hack Struts)

王朝java/jsp·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

一 .问题

1.为什么不用struts框架

struts 是一个开放的框架,其底层的诸多技术是Web开发的典范。《J2EE 设计模式》一书所列出的很多经典模式都在Struts有所体现。我觉得,Struts中最有用的就是它的控制框架,即Action,其他的都是配角而已。

采用Struts开发很不方便的在于,配置繁琐,虽然有很多辅助工具,但还是很麻烦。Struts提供的Html ,Bean,Tile 等Tag也很复杂,需要花很多时间去学习,当一个页面需要很多JavaScript 互动的时候,这些Tag用起来就更复杂了,所以页面层上还是原始的Html标记最实用。

至于Struts的Model层,也是多余的,因为可能完全采用Hibernate而不是JDBC连接。所以Struts提供的数据库连接几乎不用。

2.Struts的控制框架

上面提到了Struts的控制框架是最有用的,究竟Struts在控制层上做了哪些工作?

1)页面层参数的自动传值

当定义了一个Struts Form 后,就能够接收到包含该Form的页面的参数值。比如Form中有个name成员变量,在JSP页面有个<input type="text" name="name" >,当提交后,就可以直接在Form中通过getName()获得表单中name 的值,相当于request.getParameter("name");

2)扩展的自动传值

上面提到的自动传值还适用于上传表单。由于包含上传表单的Form必须定义为<form enctype="multipart/form-data" > 所以request.getParameter() 是得不到参数的。Struts框架屏蔽了这些,仍然可以在Form中用getName()获得表单中的值。

3)参数值效验

当表单提交后,可以采用JavaScript来效验或者在后台进行一次效验。Struts把效验机制放在Form中,属于后台效验,只有通过了效验才能执行应用逻辑,保护了应用逻辑。

采用JavaScript效验很直观,最大的问题在于很不安全。完全可以绕过JavaScript(采用Get或者在地址栏里直接输入参数)来提交数据,因为客户端(即IE)是完全可以自己编写或模拟的。 目前很多80%的网站都是JavaScript,如果后台不做附加的验证,这个漏洞是很危险的!

4)安全提交

在《J2EE 模式中》提到为了保证表单提交一次,采用Token(令牌)机制来防止表单的反复提交。Struts中也有这个机制。

在IE中,当提交了数据之后,可以“后退”在提交一次,或者数据正在提交的时候,连续刷新页面提交数据,如果有Token机制可以有效的防止反复机制,保护应用逻辑。

二.我的Web 框架

正是分析了Struts的底层机制,才促使我开发一个比Struts更直接的框架,简单的来说,就是要实现类似于Struts的控制层,把显示层保留,即最原始的Html标记,模型层则自己定义,可以采用JDBC或者Hibernate之类的技术。

核心代码如下:

该框架直接继承于Servlet,主要完成以下任务:

1. reset() ;重置

2. 初始话Request,完成参数值的自动复制,即上面提到的特性1和2,代码如下:

如果是MultiPart表单提交,处理更为繁琐。这些代码参考了Struts的底层代码。

3. 效验表单中的Token是否是有效。

4. 执行用户部分的参数效验,只有通过了用户的效验,才执行应用逻辑。

在效验过程中,集成了图片效验码机制(可以选择),进一步保护了表单的提交。

三.效果

1.显示层(JSP页面,采用原始的HTML标记)

可以看到,与普通的JSP页面没有什么差别,全部是都是HTML标记,为了跟控制曾交互,唯一的是要插入一个控制标签<education:form>。

当这个页面显示的效果如下:

对应的HTML代码为:

可以看到html代码中包含了该表单的唯一令牌。

2.控制层

控制层包含两个部分

1)执行参数效验,并将参数的效验信息反馈到页面上。

2)当效验通过后,执行应用逻辑

上述提到的令牌效验等机制都集成在在GenericAction中,用户只需要继承GenericAction即可。

3.文件上传和数组参数

包含multipart的表单,其中有文件上传,还有数组

映射关系

效验机制

应用逻辑

四. 总结

这个框架类似与Struts中的控制框架,把显示层和模型层释放出来,自己选择这两部分的技术实现。在我的Web开发中,模型层采用Hibernate机制,而显示层采用JSP 2.0,控制层继承这个框架。

如果对这个框架有兴趣,可以发Email联系,我希望我能做得更好!

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有