项目已提测,这两天我们都集中精力梳理外包团队给我司研发的这个三方支付系统的代码逻辑。今天下午爱琴海会议室,开发组里一同学分享他对支付结果回调的梳理成果。

支付结果回调的整体时序是:支付渠道方处理完用户支付信息后,主动调用我方在支付发起时提供的回调地址,把支付结果推给我方,我方处理完成后,回写字符串“ok”以告知支付渠道方,渠道方接收到这个消息,即完成支付结果的通知。

在逻辑的最后他抛出了一个疑问。代码见下面截图,即我方经过验签、数据校验、更新订单支付结果、记账、通知下游商户等一系列逻辑处理之后,要回写字符串“ok”。responseString的值即是“ok”。程序直接给edb这个对象set了一个参数,然后程序就return完事了。我们知道,肯定要通过当前HttpServletResponse的getWriter的print()或write()方法把这个文本消息输出到页面上。而在调用这个NotifyServiceIml的Action里也没有这样的语句。那么,疑问来了,看后面的注释“设置此值后,平台会自动返回给通道”,自动返回给渠道方是怎么实现的呢?在哪里实现的呢? 那接下来就是要找到这些代码在哪里了。

首先,哥们儿打开action config文件。看看当后台Action返回处理成功后,对应的jsp里有没有打印。不过,发现没有配置jsp。

那么接下来,自然想到的是Interceptor。定位到这个服务类对应的Interceptor类。通过逐行分析onResponse()方法,也没有发现getWriter()这样的代码行。

奇怪了!有同学提议会后直接问外包的程序员吧,一问便知。我一向喜欢先自己抠代码,实在不行再去问。于是,我接过同事的笔记本电脑,硬着头皮分析这个Service和它的父类的代码,兴许有没有梳理到的代码呢。结果呢,包括我在内,四五双眼睛都没有发现。 我苦笑:“认怂了!”

其实我还是不服输的。去了趟洗手间回到工位,突然想到了servlet。赶紧找servlet-mapping。果然,在web.xml里定义了servlet-mapping;果然,在这个ActionServlet类里,查找getWriter关键字找到了答案。

⁶⁶ ⁶⁶⁶⁶⁶⁶ ⁶⁶66⁶⁶⁶⁶ ₆₆₆₆可以啊.这波 ₆₆₆₆⁶⁶⁶⁶⁶⁶卧槽 ⁶⁶666⁶⁶⁶⁶⁶⁶66⁶⁶⁶⁶ 卧槽⁶⁶⁶⁶⁶⁶ ⁶6666⁶⁶666₆₆₆₆₆ 666 ⁶⁶⁶⁶⁶⁶ 666666₆₆₆₆₆₆ ₆⁶⁶⁶ ⁶⁶⁶⁶⁶⁶ ⁶⁶66⁶⁶⁶⁶ ₆₆₆₆可以啊

答案在哪里?action config/Interceptor/class/servlet的更多相关文章

  1. org.apache.struts.chain.commands.InvalidPathException: No action config found for the specified url.

    No action config found for the specified url url路径下找不到action,原因是stuts-config.xml文件配置错误. demo的项目文件如下: ...

  2. struts2 在 Action 或 Interceptor 中获取 web.xml 中配置的 <context-param> 参数 (这是我的第一篇博文,哈哈。)

    最近为了改一个问题,想加一个控制开关,就在web.xml 中配置了一个 <context-param> 参数,并在 Action 或 Interceptor 中获取参数值. 1.在 web ...

  3. 【struts 报错】 No action config found for the specified url

    1 type Exception report message org.apache.struts.chain.commands.InvalidPathException: No action con ...

  4. intellij idea on update action\on frame deactivation ||Servlet 页面不同步问题

    当修改servlet源码时,对应的servlet页面即使刷新也不会改变,,,很烦躁 因为xx.java需要编译成xx.class后,再部署到服务器上才可以运行,所以问题就是服务器里的类文件并没有更新. ...

  5. form的action属性值对应servlet的web.xml的url-pattern

    <form action="abc">在web.xml里面<servlet><servlet-name>123</servlet-name ...

  6. init()方法必须使用super.init(config)的原因--Servlet

    原 因: 一个servlet在它的init()方法中传递它的ServletConfig实例,在其他的方法中却不可以.当一个servlet在 init()方法外需要调用config对象时就会产生问题.使 ...

  7. struts2中在Action中如何获取servlet的api?

    1.通过ActionContext类(拿到的不是真正的servlet api,而是一个map) ActionContext context = ActionContext.getContext(); ...

  8. struts2中Action訪问servlet的两种方式

    一.IoC方式                在struts2框架中,能够通过IoC方式将servlet对象注入到Action中.通常须要Action实现下面接口: a. ServletRequest ...

  9. Struts2框架(4)---Action类访问servlet

    Action类访问servlet Action类有三种方式servlet: (1)间接的方式访问Servlet API  ---使用ActionContext对象 (2)  实现接口,访问Action ...

随机推荐

  1. 阿里云mysql远程登录报ERROR 2027(HY000)

    mysql远程登录的命令是: mysql -h数据库地址 -u用户名 -p 但是用这个命令在登录阿里云的mysql时,会报ERROR 2027 (HY000): Malformed packet

  2. 深入理解无穷级数和的定义(the sum of the series)

    Given an infinite sequence (a1, a2, a3, ...), a series is informally the form of adding all those te ...

  3. 部署Java项目到阿里云服务器主机

    https://m.aliyun.com/jiaocheng/548684.html https://blog.csdn.net/qq_30865575/article/details/7827329 ...

  4. wap手机端实现上传图片流程

    实现图片上传使用了WeUI uploader插件 WeUI:是一套同微信原生视觉体验一致的基础样式库,为微信Web开发量身设计 流程:图片上传用到了FileReader,FormData,用这两个基本 ...

  5. nslookup dig iptables,sudoer,jenkins

    [NSLOOKUPm]http://roclinux.cn/?p=2441 nslookup media.ucampus.unipus.cn [DIG]http://roclinux.cn/?p=24 ...

  6. 第一版STM32PCB的问题

    1.5与6引脚连在一起了 2.有3个插排隔得太近,导致传感器安装不了 3.开关不匹配,画PCB时可以考虑一下实验室有哪些东西 4.可以用开关代替跳冒 5.AM3.3电路电容 6.钽电容的正负极区分 有 ...

  7. qtcreator添加绿色版VC编译器

    在不装VS的情况下为qtcreator添加VC编译器和调试器 首先假设在D盘有VC6,VC2002,VC2003,VC2005,VC2008,VC2010,VC2013等绿色版的VC编译器,编译器的的 ...

  8. TZOJ 3198: 区间和

    描述 给定n个数据,有两个操作,加减其中的一个数据,当然还可查询在某段数据的和. 输入 输入数据有多组,每组数据的第一行输入n,1=<n<=500000,代表数据的个数.第二行输入具体数据 ...

  9. 29-2-电容触摸屏控制芯片GT911

    1.接口说明 GT9 非单层多点系列(以下简称 GT9 系列) 与主机接口共有 6 PIN,分别为: VDD. GND. SCL.SDA. INT. RESET. 主控的 INT 口线需具有上升沿或下 ...

  10. linux网络设置和虚拟机克隆转移之后网卡找不到

    linux网络设置和虚拟机克隆转移之后Error:No suitable device found:no device found for connection 'System eth0'问题解决   ...