星空网 > 软件开发 > Java

custom struts framework

1. Difference between stucts1 and struts2

    struts1 : Servlet used as Controller , you can visit the Servlet directly, code like if---else if--else

    struts2 : Filter used as Controller , you can only  visit it passively, though setting the condition like "/*"

 

2. Imitate the core Filter of Struts2 (StrutsPrepareAndExecuterFilter.java)

 version 1.0(like struts1)

package com.cdv.web.filter;import java.io.IOException;import javax.servlet.Filter;import javax.servlet.FilterChain;import javax.servlet.FilterConfig;import javax.servlet.ServletException;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;/** * Servlet Filter implementation class StrutsPreparedAndExecuterFilter */public class StrutsPreparedAndExecuterFilter implements Filter {  /**   * Default constructor.   */  public StrutsPreparedAndExecuterFilter() {    // TODO Auto-generated constructor stub  }  /**   * @see Filter#destroy()   */  public void destroy() {    // TODO Auto-generated method stub  }  /**   * @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain)   */  public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException, ServletException {    HttpServletRequest request = (HttpServletRequest) req;    HttpServletResponse response = (HttpServletResponse) resp;    String uri = request.getRequestURI();    boolean isDo = uri.endsWith(".do");    if(isDo){      //get the operation      String op = uri.substring(uri.lastIndexOf("/"), uri.lastIndexOf("."));      if(op.equals("login")){        request.setAttribute("username", "zhangsan");      }else{        //to do something      }    }else{      //      chain.doFilter(request, response);    }  }  /**   * @see Filter#init(FilterConfig)   */  public void init(FilterConfig fConfig) throws ServletException {    // TODO Auto-generated method stub  }}

 

version 2.0

we need create the interface , for creating different instance aim at different params condition, and use the map  instead of if--else

package com.cdv.web.action;import javax.servlet.http.HttpServletRequest;public interface Action {  String execute(HttpServletRequest request);}

package com.cdv.web.action;import javax.servlet.http.HttpServletRequest;public class LoginAction implements Action {  @Override  public String execute(HttpServletRequest request) {    String username = request.getParameter("username");    if(username.equals("zhangsan")){      return "ok";    }    return null;  }}

package com.cdv.web.filter;import java.io.IOException;import java.util.HashMap;import java.util.Map;import javax.servlet.Filter;import javax.servlet.FilterChain;import javax.servlet.FilterConfig;import javax.servlet.ServletException;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import com.cdv.web.action.Action;import com.cdv.web.action.LoginAction;/** * Servlet Filter implementation class StrutsPreparedAndExecuterFilter */public class StrutsPreparedAndExecuterFilter2 implements Filter {  private Map<String, Action> actionMap = new HashMap<String, Action>();  /**   * Default constructor.   */  public StrutsPreparedAndExecuterFilter2() {    // TODO Auto-generated constructor stub  }  /**   * @see Filter#destroy()   */  public void destroy() {    // TODO Auto-generated method stub  }  /**   * @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain)   */  public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException, ServletException {    HttpServletRequest request = (HttpServletRequest) req;    HttpServletResponse response = (HttpServletResponse) resp;    String uri = request.getRequestURI();    boolean isDo = uri.endsWith(".do");    if(isDo){      String op = uri.substring(uri.lastIndexOf("/"), uri.lastIndexOf("."));      Action instance = actionMap.get(op);      String result = instance.execute(request);      if(result.equals("ok")){        request.setAttribute("user", "zhangsan");      }    }else{      chain.doFilter(request, response);    }  }  /**   * @see Filter#init(FilterConfig)   */  public void init(FilterConfig fConfig) throws ServletException {    actionMap.put("login", new LoginAction());    //actionMap.put("logout", new LogoutAction());    //...  }  }

 

version 3.0 

put the value of instance into

struts.

<??><package name="mypackage">  <action name="loginAction" class="com.cdv.web.action.LoginAction"></action>  <action name="logoutAction" class="com.cdv.web.action.LogoutAction"></action></package>

package com.cdv.web.filter;import java.io.IOException;import java.util.HashMap;import java.util.Map;import javax.servlet.Filter;import javax.servlet.FilterChain;import javax.servlet.FilterConfig;import javax.servlet.ServletException;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import com.cdv.web.action.Action;import com.cdv.web.action.LoginAction;/** * Servlet Filter implementation class StrutsPreparedAndExecuterFilter */public class StrutsPreparedAndExecuterFilter3 implements Filter {  private Map<String, Action> actionMap = new HashMap<String, Action>();  /**   * Default constructor.   */  public StrutsPreparedAndExecuterFilter3() {    // TODO Auto-generated constructor stub  }  /**   * @see Filter#destroy()   */  public void destroy() {    // TODO Auto-generated method stub  }  /**   * @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain)   */  public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException, ServletException {    HttpServletRequest request = (HttpServletRequest) req;    HttpServletResponse response = (HttpServletResponse) resp;    String uri = request.getRequestURI();    boolean isDo = uri.endsWith(".do");    if(isDo){      String op = uri.substring(uri.lastIndexOf("/"), uri.lastIndexOf("."));      Action instance = actionMap.get(op);      String result = instance.execute(request);      if(result.equals("ok")){        request.setAttribute("user", "zhangsan");      }    }else{      chain.doFilter(request, response);    }  }  /**   * @see Filter#init(FilterConfig)   */  public void init(FilterConfig fConfig) throws ServletException {    //进行dom4j解析,将struts.//并利用反射将class的值转化为对象/*    Document document = Dom4jUtil.getDocument();    List<Node> list = document.selectNodes("//action");    for(Node node : list){      //遍历action节点,取出值      String key = node.valueOf("@name");      String value = node.valueOf("@class");      actionMap.put(key, (Action) Class.forName(value).newInstance());    }*/  }  }

 




原标题:custom struts framework

关键词:Struts

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

寻找外贸客户的方法:https://www.goluckyvip.com/tag/44350.html
询盘官网:https://www.goluckyvip.com/tag/44351.html
询盘云:https://www.goluckyvip.com/tag/44352.html
讯狗跨境电商:https://www.goluckyvip.com/tag/44353.html
讯狗跨境电商天天说:https://www.goluckyvip.com/tag/44354.html
讯速达国际供应链:https://www.goluckyvip.com/tag/44355.html
桂林酒店销售多少钱 桂林旅游宾馆价格:https://www.vstour.cn/a/410227.html
十里银滩旅游攻略玩什么住哪里怎么去?:https://www.vstour.cn/a/410228.html
相关文章
我的浏览记录
最新相关资讯
海外公司注册 | 跨境电商服务平台 | 深圳旅行社 | 东南亚物流