定义一个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。
定义一个servlet用于处理所有外部接口类 架构思路的更多相关文章
- 简单练习题2编写Java应用程序。首先定义一个描述银行账户的Account类,包括成员变 量“账号”和“存款余额”,成员方法有“存款”、“取款”和“余额查询”。其次, 编写一个主类,在主类中测试Account类的功能
编写Java应用程序.首先定义一个描述银行账户的Account类,包括成员变 量“账号”和“存款余额”,成员方法有“存款”.“取款”和“余额查询”.其次, 编写一个主类,在主类中测试Account类的 ...
- 用CIL写程序:定义一个叫“慕容小匹夫”的类
前文回顾: <用CIL写程序:你好,沃尔德> <用CIL写程序:写个函数做加法> 前言: 今天是乙未羊年的第一天,小匹夫先在这里给各位看官拜个年了.不知道各位看官是否和匹夫一样 ...
- 3.编写Java应用程序。首先定义一个描述银行账户的Account类,包括成员变 量“账号”和“存款余额”,成员方法有“存款”、“取款”和“余额查询”。其次, 编写一个主类,在主类中测试Account类的功能。
Account package com.hanqi.test; public class Account { private String zhanghao;private double yve; A ...
- 编写Java应用程序。首先定义一个描述银行账户的Account类,包括成员变 量“账号”和“存款余额”,成员方法有“存款”、“取款”和“余额查询”。其次, 编写一个主类,在主类中测试Account类的功能
package com.hanqi.test; //银行账号 public class account { private String zhanghao;//账号 //私有余额 private do ...
- 首先定义一个描述银行账户的Account类,包括成员变 量“账号”和“存款余额”,成员方法有“存款”、“取款”和“余额查询”。其次, 编写一个主类,在主类中测试Account类的功能。(已完善)
package java1; public class Account { String zhanghao; double yue=0; double add; double get; Account ...
- (二)第一个Servlet
一.预备知识 一.Servlet简介 Servlet是sun公司提供的一门用于开发动态web资源的技术. Sun公司在其API中提供了一个servlet接口,用户若想用发一个动态web资源(即开发一个 ...
- 编写Java程序,定义一个类似于ArrayList集合类
返回本章节 返回作业目录 需求说明: 设计一个类似于ArrayList的集合类ListArray. ListArray类模拟实现动态数组,在该类定义一个方法用于实现元素的添加功能,以及用于获取List ...
- 定义一个复数(z=x+iy)类Complex,包含: 两个属性:实部x和虚部y 默认构造函数 Complex(),设置x=0,y=0 构造函数:Complex(int i,int j) 显示复数的方法:showComp()将其显示为如: 5+8i或5-8i 的形式。 求两个复数的和的方法:(参数是两个复数类对象,返回值是复数类对象)public Complex addComp(Compl
因标题框有限,题目未显示完整,以下再放一份: 定义一个复数(z=x+iy)类Complex,包含: 两个属性:实部x和虚部y 默认构造函数 Complex(),设置x=0,y=0 构造函数:Compl ...
- CREATE OPERATOR CLASS - 定义一个新的操作符类
SYNOPSIS CREATE OPERATOR CLASS name [ DEFAULT ] FOR TYPE data_type USING index_method AS { OPERATOR ...
随机推荐
- <记录> PHP Redis操作类
namespace common\controller; class Redis { public $redisObj = null; //redis实例化时静态变量 static protected ...
- <基础> PHP 进阶之 类型转换
引用官方的解释 PHP 在变量定义中不需要(或不支持)明确的类型定义:变量类型是根据使用该变量的上下文所决定的.也就是说,如果把一个 string 值赋给变量$var,$var 就成了一个 strin ...
- MVC基于角色权限控制--菜单展示
在用户成功登陆后台页面后,我们需要将当前用户拥有的权限通过菜单的形式展现出来,将未具备的权限隐藏 新建一个HomeController,用于展示后台首页和获取用户权限数据 namespace CZBK ...
- 关闭win10 自动更新 及蓝屏解决办法
"控制面板-管理工具-服务"(或在"此电脑"鼠标右键,点击"管理"),找到Windows Update项目后,将"启动类型&quo ...
- openGL-------------别人的博客
https://blog.csdn.net/dcrmg/article/category/6505957 OpenGL(一)绘制圆.五角星.正弦曲线 ========================= ...
- leetcode解题报告 32. Longest Valid Parentheses 动态规划DP解
dp[i]表示以s[i]结尾的完全匹配的最大字符串的长度. dp[] = ; ; 开始递推 s[i] = ')' 的情况 先想到了两种情况: 1.s[i-1] = '(' 相邻匹配 这种情况下,dp ...
- 学习别人的rpc框架
https://my.oschina.net/huangyong/blog/361751 https://gitee.com/huangyong/rpc 在此文基础上的另一个实现,解决了原文中一些问题 ...
- html 基础之canvas 和 localStorage
1,建立一个canvas 画布: <!DOCTYPE html> <html lang="en"> <head> <meta charse ...
- Servlet基本_クッキー、URLリライティング
1.クッキーの基礎クッキーは.クライアント側に保存されるテキストデータです. セキュリティ上の制約.・自分で発行したクッキーにしかアクセスできない.クッキーには発行元のホストの情報が記録されている.・ ...
- python实现最大重叠子串的查找
#!/usr/bin/python #查找最大重叠子串 def FindMaxDup(in_str): str_len = len(in_str) result = '' #逐级扩大搜索长度# lev ...