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

支付结果回调的整体时序是:支付渠道方处理完用户支付信息后,主动调用我方在支付发起时提供的回调地址,把支付结果推给我方,我方处理完成后,回写字符串“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. {Python之进程} 背景知识 什么是进程 进程调度 并发与并行 同步\异步\阻塞\非阻塞 进程的创建与结束 multiprocess模块 进程池和mutiprocess.Poll

    Python之进程 进程 本节目录 一 背景知识 二 什么是进程 三 进程调度 四 并发与并行 五 同步\异步\阻塞\非阻塞 六 进程的创建与结束 七 multiprocess模块 八 进程池和mut ...

  2. tensorflow 的tf.where详解

    最近在用到数据筛选,观看代码中有tf.where()的用法,不是很常用,也不是很好理解.在这里记录一下 tf.where( condition, x=None, y=None, name=None ) ...

  3. 简单示例用例(Simple Example Use Cases)--hive GettingStarted用例翻译

    1.MovieLens User Ratings First, create a table with tab-delimited text file format: 首先,创建一个通过tab分隔的表 ...

  4. git commit -m 与 git commit -am的区别

    字面解释的话,git commit -m用于提交暂存区的文件:git commit -am用于提交跟踪过的文件 要理解它们的区别,首先要明白git的文件状态变化周期,如下图所示 工作目录下面的所有文件 ...

  5. windows Git Bash 无法运行python解决方法

    以前运行cmd命令都是在cmd里面的,但是那个页面实在是太丑了,后面我就全部用git bash来运行window下的命令了. 但是在git bash 中运行下python – -version 或 p ...

  6. Ubuntu16.04LTS卸载软件的命令

    写在前面:本博客为本人原创,严禁任何形式的转载!本博客只允许放在博客园(.cnblogs.com),如果您在其他网站看到这篇博文,请通过下面这个唯一的合法链接转到原文! 本博客全网唯一合法URL:ht ...

  7. ida pro65

    https://elinux.org/CI20_Dev_Zone#Making_a_bootable_SD_card_from_sources IDAPro65.exe: 下载地址:http://pa ...

  8. 内部排序->基数排序->链式基数排序

    文字描述 基数排序是和前面各类排序方法完全不相同,前面几篇文章介绍的排序算法的实现主要是通过关键字间的比较和移动记录这两种操作,而实现基数排序不需要进行记录关键字间的比较.基数排序是一种借助多关键字排 ...

  9. swift 的相机扫描

    func scaning(){ //获取摄像设备 guard let device = AVCaptureDevice.default(for: .video) else { return } //输 ...

  10. wps去广告

    彻底解决WPS弹出热点广告.WPS购物图标的办法 方法一:(一定有效) https://www.cnblogs.com/ytaozhao/p/5654149.html 一直用WPS,但一直有一个问题迟 ...