定义一个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 ...
随机推荐
- sql server 语法 MSDN
https://docs.microsoft.com/en-us/sql/t-sql/statements/create-view-transact-sql
- KMP算法next数组求解
关于KMP算法,许多教材用的是递推式求解,虽然代码简洁,但是有些不好理解,这里我介绍一种迭代求next数组的方法 KMP算法关键部分就是滑动模式串,我们可以每次滑动一个单位,直到出现可能匹配的情况,此 ...
- Matplotlib中文乱码问题
一.找到并修改matplotlibrc文件 进入Python安装目录下的Lib\site-packages\matplotlib\mpl-data目录,用记事本打开matplotlibrc文件:找到f ...
- VsCode 使用习惯设置(备份)
{ "window.menuBarVisibility": "toggle", "workbench.statusBar.visible": ...
- How to Pronounce Word vs. World
How to Pronounce Word vs. World Share Tweet Share Tagged With: Comparison, Dark L What is the differ ...
- VS Code 使用笔记
改变 UI 语言 How to change UI language in Visual Studio Code? 设置 Tab 空格 How to set tab-space style?
- 重建redo文件
需求背景 由于前期安装oracle时redo文件大小或者路径规划不合理需要进行修改,以便满足性能测试要求.redo文件规划大小建议与生产环境一致. 重做日志相关数据字典 1.v$log 记录数据库中 ...
- C++多态,虚函数,虚函数表,纯虚函数
1.多态性 指相同对象收到不同消息或不同对象收到相同消息时产生不同的实现动作. C++支持两种多态性:编译时多态性,运行时多态性. a.编译时多态性:通过重载函数实现 ,模板(2次编译) ...
- 计算平面面积和斜面面积-ArcGIS案例学习笔记
计算平面面积和斜面面积-ArcGIS案例学习笔记 联系方式:谢老师,135_4855_4328,xiexiaokui#139.com 数据:实验数据\Chp8\Ex5\demTif.tif 平面面积= ...
- android listview中item通过viewpager实现《IT蓝豹》
android listview中item通过viewpager实现 android listview中item通过viewpager实现,每一个item都支持viewpager实现图片切换功能.本项 ...