• 定义一个servlet用于处理所有外部接口类 架构思路


    架构思路”:

    所有外部URL访问请求(对外提供的接口)全部交给intServiceServlet处理, 然后servlet调用BPO通过URL中的命名去寻找相应的javaBean.接口BO,然后接口BO处理对应的请求。

    BPO如何找相应的BO,通过URL的命名规则,URL的最后一段作为接口名称 eg:/gjj/api/v1.0/xxxxxx/selPerLoanDetailById

    接口代码流程:

    IntServiceServlet
    doPost() ----->>通过request请求获得参数和URL 然后根据URL找到相对应的BEAN
    intServiceBPO.startHandle() 根据BEANID找到对应的BO类,然后所有BO类都继承了父类的HANDLE方法,调用该方法
    intServiceBaseBO.handle(intRequestParamVO)

    所有/gjj/api/v1.0/xxxxxx/beanID 所有这类请求都被过滤到IntServiceServlet.doPost(),然后在该IntServiceServlet处理REQUEST获取参数和URL,
    然后调用intServiceBPO方法,然后BPP方法通过URL中最后的字符串(javaBeanName)去找到相应的BO对象(用户实现的接口)
    BPO在调用BO对象(BO对象即实现的相应接口类)。

    -------------------------------------------------------------------------
    web.xml中配置的servlet
    <!-- 综合服务平台接口 -->
    <servlet>
    <servlet-name>IntServiceServlet</servlet-name>
    <servlet-class>
    g3.gjj.ifs.servlet.IntServiceServlet
    </servlet-class>
    </servlet>
    <servlet-mapping>
    <servlet-name>IntServiceServlet</servlet-name>
    <url-pattern>/api/v1.0/*</url-pattern>
    </servlet-mapping>

    ------------------------------------------------------------------------------------
    intServiceServlet
    private IntServiceIBPO intServiceBPO;

    public void init() throws ServletException {
    super.init();
    ServletContext servletContext = this.getServletContext();
    WebApplicationContext ctx = WebApplicationContextUtils
    .getWebApplicationContext(servletContext);
    intServiceBPO = (IntServiceIBPO) ctx.getBean("isp.IntServiceIBPO");
    }

    /**
    * 处理post请求
    */
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
    result = intServiceBPO.startHandle(intRequestParamVO);
    }
    -----------------------------------------------------------------------------------------------
    intServiceBPO

    if (flag == true) {
    IntServiceBaseBO intServiceBaseBO = getIntServiceBaseBOByName(name);
    if (intServiceBaseBO != null) {
    // 事务处理
    return intServiceBaseBO.handle(intRequestParamVO);

    /**
    * 根据请求类型获取IntServiceBaseBO
    *
    * @param name bean名称
    * @return
    */
    private IntServiceBaseBO getIntServiceBaseBOByName(String name) {
    return (IntServiceBaseBO) ApplicationContextHelper.getBean(name);
    }




    package g3.gjj.ifs.helper;
    import org.springframework.beans.BeansException;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.ApplicationContextAware;

    /**
    * spring 工具栏
    *
    * @author renj
    *
    */
    public class ApplicationContextHelper implements ApplicationContextAware {
    private static ApplicationContext appCtx;

    /**
    * 此方法可以把ApplicationContext对象inject到当前类中作为一个静态成员变量。
    *
    * @param applicationContext
    * ApplicationContext 对象.
    * @throws BeansException
    * @author wangdf
    */
    @Override
    public void setApplicationContext(ApplicationContext applicationContext)
    throws BeansException {
    appCtx = applicationContext;
    }

    /**
    * 获取ApplicationContext
    *
    * @return
    * @author wangdf
    */
    public static ApplicationContext getApplicationContext() {
    return appCtx;
    }

    /**
    * 这是一个便利的方法,帮助我们快速得到一个BEAN
    *
    * @param beanName
    * bean的名字
    * @return 返回一个bean对象
    * @author wangdf
    */
    public static Object getBean(String beanName) {
    return appCtx.getBean(beanName);
    }
    }


    -----------------------------------------------------------------------------------------------
    IntServiceBaseBO

    //BO接口抽象父类
    //其他子类继承父类后需要实现实现相应方法
    //这样BPO通过JAVABEANNAME找到对应接口BO时,通过BO.handle()方法
    public abstract class IntServiceBaseBO {

    private static Map<String, IntLoginToken> tokenMap = new HashMap<String, IntLoginToken>();

    /**
    * 将请求参数转换为对应的请求参数VO
    *
    * @param para
    * @return
    */
    public abstract IntRequestParamVO transferRequestParam(String para);

    /** 处理请求参数,并执行相关查询 */
    public String handle(IntRequestParamVO intRequestParamVO) {
    /** 1.校验请求参数 */
    String result = checkRequestParam(intRequestParamVO);
    if (StringUtils.isBlank(result)) {
    /** 校验通过,执行具体操作 */
    return operate(intRequestParamVO);
    }
    /** 校验未通过,返回结果 */
    return result;
    }

    /**
    * 校验必填参数
    *
    * @param intRequestParamVO 通用请求参数
    * @return 返回空,表示校验通过;否则返回Json串
    */
    public abstract String checkRequestParam(IntRequestParamVO intRequestParamVO);

    /**
    * 执行具体操作
    *
    * @param intRequestParamVO 通用请求参数
    * @return Json串
    */
    public abstract String operate(IntRequestParamVO intRequestParamVO);

    ----------------------------------------------------------------------------

    //该接口继承父接口 这样BPO找到BO之后调用父对象的handle()方法,然后handle()方法调用子对象实现的相应方法
    I9005打印一次性接口
    /**
    * I9005 一次性贷款结清打印 BO
    *
    *
    *
    */
    @SuppressWarnings("deprecation")
    public class I9005BO extends IntServiceBaseBO {


    @Override
    public IntRequestParamVO transferRequestParam(String para) {
    return JsonUtil.getObjectFromJsonString(para, I9005RequestParamVO.class);
    }

    @Override
    public String checkRequestParam(IntRequestParamVO intRequestParamVO) {
    // 设置默认返回结果
    I9005ResponseResultVO vo = new I9005ResponseResultVO();
    在项目启动时,servlet中注册了intServiceBPO.
    。。。
    ------------------------------------------------------------------------------------------------------
    即servlet中调用BPO,BPO中调用BO。

  • 相关阅读:
    Angularjs 设置全局变量的3种方法
    prevent to do sth 与 prevent sb (from) doing 用法
    软件测试技术对程序员的重要性
    Javascript中setTimeout()以及clearTimeout( )的使用
    Javascript异步编程的常用方法
    软件设计原则总结
    为sublime Text3 安装插件JS Format
    javascript中 if(变量)和if(变量==true)的区别
    Ping 命令
    ipconfig
  • 原文地址:https://www.cnblogs.com/UUUz/p/9373635.html
Copyright © 2020-2023  润新知