怎样降低Struts中不需进行业务处理的性能损耗!

来源:互联网 发布:微信去升级精简优化版 编辑:程序博客网 时间:2024/06/06 21:41
<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>
<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 160x600, 创建于 08-4-23MSDN */google_ad_slot = "4367022601";google_ad_width = 160;google_ad_height = 600;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>

  /////////////问题描述://///////////

  在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);

  }

  catch(Exceptionex){

  }

  dispatcher.forward(request,response);

  }

  /**

  *权限监控处理

  */

  privatebooleanauthenticate(HttpServletRequestrequest){

  //dosomething

  returntrue;

  }

  //////////////////////////////web.xml/////////////////////////////////////

 

  NoAuthentivateActionServlet

  com.ketty.web.AuthentivateActionServlet

  1

 

 

  NoAuthentivateActionServlet

  *.jspdo

 

 

  NoAuthentivateActionServlet

  *.htmdo

 

 

  NoAuthentivateActionServlet

  *.htmldo

 

 

  NoAuthentivateActionServlet

  *.jsdo

 

 

  NoAuthentivateActionServlet

  *.cssdo

 

  //////////////////////////////////////////////////////////////////////////////

  以上的代码可以作用于其它的任何资源上:如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>
<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 160x600, 创建于 08-4-23MSDN */google_ad_slot = "4367022601";google_ad_width = 160;google_ad_height = 600;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
原创粉丝点击