Struts中Action是怎么实现映射的想做一个关于通过action来决定调用哪个方法的类,想实现的很简单,比如action=new,就执行new()方法,action=save,就执行save()方法可是这个对我来说太难了,想不明白.怎么来映射关系,有了解的吗,谢谢

解决方案 »

  1.   

    struts2本身就是这种机制,如果楼主可以使用struts2的话就直接用strut2 就可以了。原理的话就是:系统启动时会读取struts.xml文件,将里面配置的method的name和class及result name、value读取到一个map数据结构中,收到客户端的请求,会产生一个action代理类,由代理类进行前期的拦截器处理,随后交给actionDispacher,该类去根据前面读取struts2.xml的map去反射到相应的方法中。
    如果楼主不使用struts2的话,可以封装一个继承HttpServlet的基类,在该基类中解析请求的URL,根据url中的action=new反射到子类的new 方法中就可以了。不过HttpServlet是单实例多线程的处理思想,楼主注意处理好同步的问题。
      

  2.   

    初学不久,不一定对,仅供参考.
      <action="new" class="YourClassName" method="new">
          <result>/jsp/newSuccess.jsp</result>
      </action>
      <action="save" class="YourClassName" method="save">
          <result>/jsp/saveSuccess.jsp</result>
      </action>newSuccess.jsp,saveSuccess.jsp是处理成功后转向的jsp.
      

  3.   

    action的值决定走哪个方法不是用反射,用if else根据你传的方法名去调用相应的方法就OK了。而表单填的值经过struts2之后 对象里就有值了是用的放射,根据对象的属性名调用相应set方法。
      

  4.   

    struts用的是反射机制
    如果自己实现就不要这么麻烦了,直接写个filter即可.....
      

  5.   

    struts.xml里文件配置
    <action name="information_*" method="{1}" class="action.InformationAction">
             <result name="input">/WEB-INF/pages/addInformation.jsp</result>
                <result name="main" type="chain">main</result>
                <result name="edit">/WEB-INF/pages/editInformation.jsp</result>
                <result name="detail">/WEB-INF/pages/informationDetail.jsp</result>
                <result name="list">/WEB-INF/pages/informationList.jsp</result>
                <result type="chain">information_list</result>
            </action>
    pages文件夹里的
    实现JSP页面,表单form里调用相关action,如<s:form value="information_edit">
    action里的information_*预支相匹配,调用name=edit的result,进入editInformation.jsp页面,差不多是这样吧。。咳咳,我也是现学现卖