struts的基本原理(用servlet)说明

来源:互联网 发布:mmap 内核源码分析 编辑:程序博客网 时间:2024/06/07 01:32
MVC框架的原理:(servlet示例),注意struts这种mvc框架只能用在web项目中.
添加用户:以前是传一个command,现在换一种方式,不传command了.在servlet的url-pattern中用*.do;则如果是添加就是addUser.do,那么在servlet中截取到这个是/servlet/addUser还是/servlet/delUser而作相应的操作.但这也有一个缺点,就是会有大量的if..else语句,把东西写死了,不符合OCP原则.还有就是/servlet/delUser等这样的串容易写错,也容易写死.还有就是这些要转向的页面也写死了,不灵活!这些东西如何拿出来.
如何去掉if...else?
抽取一个接口,叫Action,有个方法execute();然后每个if都对应一个类,它实现了Action接口,如AddUserAction,servlet中看到的是Action接口.并且要把这些东西用xml文件配起来,


配置格式如下:
<action-config>
  <action path="/servlet/addUser" type="cn.wenping.servlet.AddUserAction">
    <forward name="success">/add_success.jsp</forward>
    <forward name="error">/add_error.jsp</forward>
  </action>
  
  <action path="/servlet/delUser" type="cn.wenping.servlet.DelUserAction">
    <forward name="success">/del_success.jsp</forward>
    <forward name="error">/del_error.jsp</forward>
  </action>

</action-config>

可以把这些东西放到一个map里面嘛,map.put(path,一个mapping)
mapping包含的信息的形式是这样:
ActionMapping{
  private String path;
  private String type;
  Map forwardMap;
}
forwardMap{
  key="success";
  value="del_success.jsp";
  key="error"
  value="del_error.jsp"
}
如添加就是
actionMapping{
  path="/servlet/addUser";
  type="cn.wenping.servlet.AddUserAction";
  forwardMap{
    key="success",value="...";
    key="error", value="..."
  }
}

将每一条配置放入一个map里面,path就是这个map的key
Map map = new HashMap();
map.put("/servlet/delUser", actionMapping);
map.put("/servlet/addUser", actionMapping);
map.put("/servlet/modifyUser", actionMapping);
map.put("/servlet/queryUser", actionMapping);

String path="/servlet/addUser"
在servlet中就可以通过截取的URL请求,到Map里面去请求对应的Action
ActionMapping actionMapping=(ActionMapping)map.get(path)
 取得本请求对应的Action类的完整路径String type = actionMappint.getType();
采用反射动态实例化Action
Action action = (Action)class.forName(type).newInstance();
动态待用Action中的execute方法 
String forward = action.execute(request, response);
根据路径完成转向
request.getRequestDispatcher(forward).forward(request, response);


以上就是struts的基本原理

原创粉丝点击