Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 授权.net DPM--在servlet而不是jsp中执行服务器端处理_Java_Jsp_Servlets_Authorize.net_Dpm - Fatal编程技术网

Java 授权.net DPM--在servlet而不是jsp中执行服务器端处理

Java 授权.net DPM--在servlet而不是jsp中执行服务器端处理,java,jsp,servlets,authorize.net,dpm,Java,Jsp,Servlets,Authorize.net,Dpm,我目前正在使用Authorize.net上的一个测试帐户,并且正在使用他们的Direct Post方法表单直接将事务提交到他们的网关,而无需在服务器端进行额外处理。我的应用程序是一个基本的jsp Web应用程序,位于ApacheTomcat7之上 根据其上提供的说明,我设置了3个文件:1)接收用户输入,2)中继响应,以及3)处理和显示输出 说实话,我真的不需要向用户显示输出。相反,我希望彻底处理Authorize.net发送给我的响应。他们提供的示例代码在relay_response.jsp文件

我目前正在使用Authorize.net上的一个测试帐户,并且正在使用他们的Direct Post方法表单直接将事务提交到他们的网关,而无需在服务器端进行额外处理。我的应用程序是一个基本的jsp Web应用程序,位于ApacheTomcat7之上

根据其上提供的说明,我设置了3个文件:1)接收用户输入,2)中继响应,以及3)处理和显示输出

说实话,我真的不需要向用户显示输出。相反,我希望彻底处理Authorize.net发送给我的响应。他们提供的示例代码在relay_response.jsp文件中明确说明了这一点:

String receiptPageUrl = "http://MERCHANT_HOST/order_receipt.jsp";
...
net.authorize.sim.Result result = net.authorize.sim.Result.createResult(apiLoginId,
 MD5HashKey, request.getParameterMap());
// perform Java server side processing...
// ...
// build receipt url buffer
StringBuffer receiptUrlBuffer = new StringBuffer(receiptPageUrl);
...
...
document.location = "<%=receiptUrlBuffer.toString()%>";
String receiptPageUrl=”http://MERCHANT_HOST/order_receipt.jsp";
...
net.authorize.sim.Result Result=net.authorize.sim.Result.createResult(apiLoginId,
MD5HashKey,request.getParameterMap());
//执行Java服务器端处理。。。
// ...
//生成回执url缓冲区
StringBuffer receiptUrlBuffer=新的StringBuffer(receiptPageUrl);
...
...
document.location=“”;
然而,看起来他们希望我在jsp中执行处理,而我更希望使用Javaservlet在后端执行这项工作。我试着用两种方法来实现这一点,这两种方法都不是我想要的

尝试1)我将“order\u receive.jsp”标记替换为另一个jsp的url,后者随后向servlet提交表单,并传递所有请求参数

String receiptPageUrl = "http://<my_server's_ip_address>/another.jsp";
String receiptPageUrl=“http://
document.getElementById(“myform”).submit();
这里的问题是,尽管浏览器显示我的relay_response.jsp文件,document.location.hostname的值是test.authorize.net,因此它无法识别我的操作,因为该操作位于我的服务器上,而不是authorize.net的服务器上

或者,我尝试将表单上的操作设置为我的服务器和servlet操作的完整url:

<form id='myform' method='post' action="http://<my_server's_ip_address>/webapp/servlet_action" accept-charset='UTF-8'>

但我收到一条警告(至少在Firefox中是这样),说数据不是通过安全连接传输的:“尽管这个页面是加密的,但您输入的信息是通过未加密的连接发送的,并且很容易被第三方读取。”

如何将事务结果从relay_response.jsp传递到Java servlet,而不向用户公开传递的参数?我应该使用https吗?为什么document.location.host指向authorize.net而不是我的relay_response.jsp


谢谢!

一位朋友为我发布的最初问题提出了两个解决方案,其中一个我已经验证过了

解决方案1: 只需将初始表单重定向到servlet而不是relay_response.jsp。然后servlet就可以重定向到另一个jsp作为相应的jsp。我已经验证了Authorize.net DPM可以这样做

解决方案2: 在relay_response.jsp中的scriptlet中,调用实际处理逻辑的Java类。您不必在scriptlet中公开或编写任何Java代码,只需调用该类并调用一些方法。您可以将响应参数映射作为参数传递给该方法。我想您调用的类甚至可以e是一个合适的servlet,尽管混合使用这些可能不是一种好的形式

<form id='myform' method='post' action="http://<my_server's_ip_address>/webapp/servlet_action" accept-charset='UTF-8'>