Java servlet调用(authorize.net)示例JSP代码返回空白页面

时间:2014-10-20 21:30:07

标签: java jsp authorize.net

我需要使用Authorize.net AIM方法在线收取信用卡。作为一个起点,我创建了一个java servlet来调用Authorize.net的示例JSP代码。我是Java新手,这是我第一次使用JSP。

servlet编译得很好,但是当我在浏览器中访问servlet时,它会返回一个空白屏幕。我期待看到sample.jsp生成的输出(即使它不是真正的事务)。任何人都知道它为什么没有出现?

我猜测它使用变量res与JSP文件有关,而JSP文件只是使用out写入屏幕。不要在JSP文件中需要PrintWriter out = res.getWriter();这样的东西吗?或者,变量res如何传递到JSP文件中,以便JSP文件可以编写浏览器等?我不清楚这一点。有人可以给我一个健全检查吗?

-------- Java Servlet -------

public class Payment extends HttpServlet {

  @Override
  public void init(ServletConfig config) throws ServletException {
    super.init(config);
  }

  protected void doGet(HttpServletRequest req, HttpServletResponse res)
    throws ServletException, IOException {

    try {
      // call sample.jsp
      req.getRequestDispatcher("/sample.jsp").include(req,res); 

    } catch (Exception e) {
        ...
    } finally {  
        ...
    }
  }
}

--------来自Authorize.net的sample.jsp;与Payment.class ---------

位于同一目录中
<!-- This sample code is designed to connect to Authorize.net using the AIM method.
  For API documentation or additional sample code, please visit: http://developer.authorize.net  -->

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<HTML lang='en'>
<HEAD>
    <TITLE> Sample AIM Implementation </TITLE>
</HEAD>

<BODY>
<P> This sample code is designed to generate a post using Authorize.net
Advanced Integration Method (AIM) and display the results of this post to
the screen. </P>
<P> For details on how this is accomplished, please review the readme file,
the comments in the sample code, and the Authorize.net AIM API documentation
found at http://developer.authorize.net </P>
<HR />

<%@ page import="java.util.*" %>
<%@ page import="java.net.*" %>
<%@ page import="java.io.*" %>
<%@ page import="javax.net.ssl.*" %>
<%@ page import="java.net.URLEncoder" %>
<%

// By default, this sample code is designed to post to our test server for
// developer accounts: https://test.authorize.net/gateway/transact.dll
// for real accounts (even in test mode), please make sure that you are
// posting to: https://secure.authorize.net/gateway/transact.dll
URL post_url = new URL("https://test.authorize.net/gateway/transact.dll");

Hashtable post_values = new Hashtable();

// the API Login ID and Transaction Key must be replaced with valid values
post_values.put ("x_login", "API_LOGIN_ID");
post_values.put ("x_tran_key", "TRANSACTION_KEY");

post_values.put ("x_version", "3.1");
post_values.put ("x_delim_data", "TRUE");
post_values.put ("x_delim_char", "|");
post_values.put ("x_relay_response", "FALSE");

post_values.put ("x_type", "AUTH_CAPTURE");
post_values.put ("x_method", "CC");
post_values.put ("x_card_num", "4111111111111111");
post_values.put ("x_exp_date", "0115");

post_values.put ("x_amount", "19.99");
post_values.put ("x_description", "Sample Transaction");

post_values.put ("x_first_name", "John");
post_values.put ("x_last_name", "Doe");
post_values.put ("x_address", "1234 Street");
post_values.put ("x_state", "WA");
post_values.put ("x_zip", "98004");
// Additional fields can be added here as outlined in the AIM integration
// guide at: http://developer.authorize.net

// This section takes the input fields and converts them to the proper format
// for an http post.  For example: "x_login=username&x_tran_key=a1B2c3D4"
StringBuffer post_string = new StringBuffer();
Enumeration keys = post_values.keys();
while( keys.hasMoreElements() ) {
  String key = URLEncoder.encode(keys.nextElement().toString(),"UTF-8");
  String value = URLEncoder.encode(post_values.get(key).toString(),"UTF-8");
  post_string.append(key + "=" + value + "&");
}

// The following section provides an example of how to add line item details to
// the post string.  Because line items may consist of multiple values with the
// same key/name, they cannot be simply added into the above array.
//
// This section is commented out by default.
/*
String[] line_items = {
    "item1<|>golf balls<|><|>2<|>18.95<|>Y",
    "item2<|>golf bag<|>Wilson golf carry bag, red<|>1<|>39.99<|>Y",
    "item3<|>book<|>Golf for Dummies<|>1<|>21.99<|>Y"};

for (int i = 0; i < line_items.length; i++) {
  String value = line_items[i];
  post_string.append("&x_line_item=" + URLEncoder.encode(value));
}
*/

// Open a URLConnection to the specified post url
URLConnection connection = post_url.openConnection();
connection.setDoOutput(true);
connection.setUseCaches(false);

// this line is not necessarily required but fixes a bug with some servers
connection.setRequestProperty("Content-Type","application/x-www-form-urlencoded");

// submit the post_string and close the connection
DataOutputStream requestObject = new DataOutputStream( connection.getOutputStream() );
requestObject.write(post_string.toString().getBytes());
requestObject.flush();
requestObject.close();

// process and read the gateway response
BufferedReader rawResponse = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String line;
String responseData = rawResponse.readLine();
rawResponse.close();                         // no more data

// split the response into an array
String [] responses = responseData.split("\\|");

// The results are output to the screen in the form of an html numbered list.
out.println("<OL>");
for(Iterator iter=Arrays.asList(responses).iterator(); iter.hasNext();) {
    out.println("<LI>" + iter.next() + "&nbsp;</LI>");
}
out.println("</OL>");
// individual elements of the array could be accessed to read certain response
// fields.  For example, response_array[0] would return the Response Code,
// response_array[2] would return the Response Reason Code.
// for a list of response fields, please review the AIM Implementation Guide
%>
</BODY>
</HTML>

更新1

如果我用sampleJustHTML.jsp替换上面的sample.jsp,它仍然会给出一个空白页面。

---------- sampleJustHTML.jsp -----------

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<HTML lang='en'>
<HEAD>
    <TITLE> Sample AIM Implementation </TITLE>
</HEAD>

<BODY>
<P> This sample code is designed to generate a post using Authorize.net
Advanced Integration Method (AIM) and display the results of this post to
the screen. </P>

</BODY>
</HTML>

1 个答案:

答案 0 :(得分:0)

如果你把jsp文件放在WEB-INF文件夹下,你可以使用:req.getRequestDispatcher(&#34; /WEB-INF/sample.jsp")。include(req,res);

现在我猜:req.getRequestDispatcher(&#34; /WEB-INF/classes/sample.jsp")。include(req,res);