惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Apple Machine Learning Research
Apple Machine Learning Research
aimingoo的专栏
aimingoo的专栏
H
Help Net Security
腾讯CDC
T
Tailwind CSS Blog
Hugging Face - Blog
Hugging Face - Blog
人人都是产品经理
人人都是产品经理
酷 壳 – CoolShell
酷 壳 – CoolShell
MongoDB | Blog
MongoDB | Blog
宝玉的分享
宝玉的分享
有赞技术团队
有赞技术团队
美团技术团队
雷峰网
雷峰网
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
博客园 - 司徒正美
博客园_首页
Recent Announcements
Recent Announcements
云风的 BLOG
云风的 BLOG
B
Blog RSS Feed
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
D
Docker
博客园 - Franky
Jina AI
Jina AI

博客园 - 李业俊

白话讲山寨SOA,少一些迷惑、多一些理解 Bigtable:一个分布式的结构化数据存储系统 CMMI中英文术语对照表 SVN1.6.1+Apache2.2.11 配置说明 几种计算机语言的评价 win7 破解Microsoft Visual Studio 2008 试用版 过去10年改变世界的25项技术 互联网行业人事频繁变动:高速发展之忧 职业规划 Portal技术学习 [转]我的十年总结——送给刚毕业的年轻朋友们 概念数据模型,逻辑数据模型,物理数据模型 Office Word 2007切换窗口后鼠标无法使用问题的解决办法 - 李业俊 研究下DFD [J2EE]追忆系列-org.springframework.orm.hibernate3.support.OpenSessionInViewFilter 集成化企业级建模工具—PowerDesigner12.0 MVC设计模式或MVP设计模式-区别是什么? 我看互联网—前景行业分析 [经验交流]三十岁开始学英语的迷茫无奈
[J2EE]追忆系列-Struts的配置文件struts-config.xml中action...
李业俊 · 2009-09-20 · via 博客园 - 李业俊

      没有struts之前,使用servlet,最常用的是doGet,doPost,service方法,如果有些经验的程序员会合理的使用这三个方法:如在用户发出get的请求时,将用户请求在doGet方法中处理,用户发出post请求时,将用户的请求用doPost请求处理,必要时加上service方法去处理那些在一个servlet中必须执行的请求,用户的请求大体也就这三类,但是如果细分,一个“编辑”,“删除”,“查看”等操作都是doGet的范围,当然也可以都写到serice方法中或doPost中处理,这样为了区分这些请求,我们通常都要在程序中加入一个判断的参数,如:operate,然后在程序中判断 if operate.equals("update")....,if operate.equals("del")....,if operate.equals("view")....等,实际上这只是个简单的逻辑,如果业务更加复杂,你可能写更多的类时operate的参数,这样就造成程序中有若干if..else if...else if ..,即便你有非常好的编码规范,整齐的缩进,这个程序也相当难维护;而用到struts时,你又可能把这些参数都写到execute方法中;那么最好的方法还是将这些逻辑分开处理,如果执行“编辑”操作的时候调用“编辑”对应的方法,执行“删除”的时候调用“删除”对应的方法...将是比较理想的结果,为了实现这个应用要求,struts引入DispatchAction,这样你在struts-config.xml文件的action元素中增加parameter属性即可实现这个功能:

例如appfuse的配置:
<action
         path="/saveUser"
         type="org.appfuse.webapp.action.UserAction"
         name="userForm"
         scope="request"
         input="edit"
         parameter="method"
         unknown="false"
         validate="false"
       >
         <forward
           name="list"
           path="/WEB-INF/pages/userList.jsp"
           redirect="false"
         />
         <forward
           name="edit"
           path="/WEB-INF/pages/userForm.jsp"
           redirect="false"
         />
       </action>

parameter="method"这个参数就是说,在用户提交请求时取得method参数,根据method参数调用相应的方法,如/editUser.html?method=Delete就是调用对应action中的Delete方法,这样你就可以写一个Action类处理很多的逻辑,而不是象从前那样在一个方法里面加上若干参数,或者直接建若干个action来处理。

例如appfuse的UserAction

package org.appfuse.webapp.action;

import ...


public final class UserAction extends BaseAction {
    
       public ActionForward add(ActionMapping mapping, ActionForm form,
                                HttpServletRequest request,
                                HttpServletResponse response)
       throws Exception {
           ...
       }

       public ActionForward cancel(ActionMapping mapping, ActionForm form,
                                   HttpServletRequest request,
                                   HttpServletResponse response)
       throws Exception {
           ...
       }

       public ActionForward delete(ActionMapping mapping, ActionForm form,
                                   HttpServletRequest request,
                                   HttpServletResponse response)
       throws Exception {
           ...
       }

       public ActionForward edit(ActionMapping mapping, ActionForm form,
                                 HttpServletRequest request,
                                 HttpServletResponse response)
       throws Exception {
           ...
       }

       public ActionForward save(ActionMapping mapping, ActionForm form,
                                 HttpServletRequest request,
                                 HttpServletResponse response)
       throws Exception {
           ...
       }

       public ActionForward search(ActionMapping mapping, ActionForm form,
                                   HttpServletRequest request,
                                   HttpServletResponse response)
       throws Exception {
           ...
       }
    
       public ActionForward unspecified(ActionMapping mapping, ActionForm form,
                                        HttpServletRequest request,
                                        HttpServletResponse response)
       throws Exception {
        
           ...
       }

       private void sendNewUserEmail(HttpServletRequest request, UserForm userForm)
       throws Exception {
           ...
       }

}

当你没有传入method参数,或者没有符合参数的方法时,程序将执行unspecified方法;当然method只是一个逻辑名字而已,你也可以使用其他名字,如:method1,method2,go2,asdad等