怎样降低Struts中不需进行业务处理的性能损耗!
来源:互联网 发布:微信去升级精简优化版 编辑:程序博客网 时间:2024/06/06 21:41
/////////////问题描述://///////////
在Struts中Action是进行业务处理的中心,它最好不要理会其它的事情,大家知道在Struts框架中,ActionServlet接收用户的请求,它会根据request.getServletPath()值去Struts-config.xml中那找对应的一个Action类,然后进行繁索并且无用的二次封装过程(你不信的话,看看它的源码吧,看得我头发晕),因为这部分的处理是我们不需要,因为我们不需要进行业务处理,但它按照它自已的思想先给你提供了业务处理的前期准备.
我们就来说说如何减少这部分的性能损失(也就是如何除去ActionServlet中不必要的为业务处理进行的前期准备工作).
/////////////方案://///////////
下面写的其实也是我们的项目中正在使用的方案:-)
其实很简单,我想大家都能做得到,就是继承ActionServlet并重写它的process方法(doGet/doPost都调用了该方法),就是回避了原来的无效处理,采取直接的分发方式(因为这部分资源请求,无需进行业务处理).或许你会说,不如提供一个href="xxx/xx.htm"罢了,非也,因为我们的项目中要求对所有的可存取资源要进行存取权限的验证,所以直接的href达不到项目的需求要求.(或许你正在实施的项目也存在这样的问题,你或许已照搬了Struts的架构中的处理过程,若你感觉sturts中那个已固定的处理过程你已厌倦了,请你向下看)
下面对于项目中需要进行业务处理的请求,我们需要按照Struts那一套进行处理的内容,在此不进行讨论,只对那些不需要进行业务处理的请求进行分析.
/////////////具体实施://///////////
我们的项目中要求对所有的可存取资源要进行存取权限的验证,但项目的实施中我们又要尽可以提高系统的性能,开发时要求以Struts来实现,结合以上的要求,我对系统中的请求分为两类,一类是需要进行业务处理的请求(这部分在此不讨论),另一类是不需要进行业务处理的请求(如一些通知,帮助页面等),请你要注意我不能直接通过href实现,我也想啊,但达不到要求啊??!!
我还是以一个请求来进行示例吧,如应用中有一个请求,查看公司内部当天的通知信息,资源页面在/info/todayinfo.htm我对此类的请求定义了一个链接规则,就是不需要进行业务处理的那部分请求在改变它的请求路径:在一个完整的请求后再上do,如上面的那个请求我用/info/todayinfo.htmdo代替,用户只能进行*.htmdo式的请求(这意味都你必须经过我的权限逻辑验证这一关),当你以*.htm的形式进行请求,我会拦截所有这类请求,返回一个null给你,视它为一个不安全的访问.
附上我的部分代码:
AuthenticateActionServlet.java----进行权限验证的类,它捕获所有*.htmdo请求,验证后将请求分发到destination
/////////////////////////NoAuthentivateActionServlet.java/////////////////////
//在这里我们将ActionSerlvet中所有无用的东西屏蔽掉(即:将用于为业务处理准备数据的那部
//分的无效处理去除,性能损失将降到最低.
publicvoidprocess(HttpServletRequestrequest,HttpServletResponseresponse)
throwsIOException,ServletException{
Stringpath=request.getServletPath();
RequestDispatcherdispatcher=null;
if(path.toLowerCase().endsWith(".jspdo")){
path=path.substring(0,path.indexOf("."))+".jsp";
}elseif(path.toLowerCase().endsWith(".htmdo")){
path=path.substring(0,path.indexOf("."))+".htm";
}elseif(path.toLowerCase().endsWith(".htmldo")){
path=path.substring(0,path.indexOf("."))+".html";
}
//进行权限监控
if(!authenticate(request)){
path="/error/ErrorMessage.htm";
}
try{
dispatcher=this.getServletContext().getRequestDispatcher(path);
}
}
dispatcher.forward(request,response);
}
/**
*权限监控处理
*/
privatebooleanauthenticate(HttpServletRequestrequest){
//dosomething
returntrue;
}
//////////////////////////////web.xml/////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
以上的代码可以作用于其它的任何资源上:如jsp/html/js/css你可以自行进行扩展:-)
以上是本人的一点浅见,如有不对之处,希望高手指点(若你认为是垃圾就当没有看见吧,反正我们项目中是这样进行实施的,我只说出我想说的,让
<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 728x15, 创建于 08-4-23MSDN */google_ad_slot = "3624277373";google_ad_width = 728;google_ad_height = 15;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>- 怎样降低Struts中不需进行业务处理的性能损耗!
- 齐全的降低笔记本电池损耗的方法
- 通过输出阻抗的有源组合降低匹配损耗
- PostgreSQL分区表的性能损耗验证
- 线程上下文切换的性能损耗测试
- php try catch 带来的性能损耗
- SQL性能突然降低引起的业务办理缓慢案例一则
- 【微信小程序】下拉加载多次请求的解决方案,避免用户多次发起请求降低业务处理。
- 怎样避开10个最损耗你精力的元凶
- 鸿海科技进行内地业务重组 意在降低所得税
- Docker的性能损耗:以基因组分析流程为例
- 怎样对客户进行UML业务建模
- 怎样降低文档之间的依赖性
- 怎样降低文档之间的依赖性
- 怎样降低被套股的成本
- [转]怎样有效降低测试的轮次?
- 怎样降低你的焦虑程度
- 怎样有效降低测试的轮次?
- 八种风格的时间日期
- Struts1.0学习文档--初学者入门的地方
- 网页制作JavaScript特效两例
- 关于Struts的性能怀疑
- 强制输出变数
- 怎样降低Struts中不需进行业务处理的性能损耗!
- 检测变量类型
- struts+hibernate例子(原创)
- Struts的异常处理机制
- 让网页具备浏览器识别功能
- JavaWorkshop--(3)JSP
- JavaScript图片小特效5例
- Struts使用Tiles辅助开发
- 透明菜单一例