Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.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 测试servlet时在浏览器输出上获取字符串_Java_Tomcat_Servlets - Fatal编程技术网

Java 测试servlet时在浏览器输出上获取字符串

Java 测试servlet时在浏览器输出上获取字符串,java,tomcat,servlets,Java,Tomcat,Servlets,我正在运行下面的servlet,在我的浏览器上得到了一些奇怪的输出。程序运行正常,没有任何错误,但出于某种原因,out.println行的输出(Add_To_Queue(“abc”、“xyz”、“pqr”)正在显示 以java字符串的形式,代码如下所示: protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

我正在运行下面的servlet,在我的浏览器上得到了一些奇怪的输出。程序运行正常,没有任何错误,但出于某种原因,
out.println行的输出(Add_To_Queue(“abc”、“xyz”、“pqr”)正在显示
以java字符串的形式,代码如下所示:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        try {
            out.println("<!DOCTYPE> html");  // HTML 5
            out.println("<html><head>");
            out.println("<meta http-equiv='Content-Type' content='text/html; charset=UTF-8'>");
            out.println(Test_Servlet("abc","xyz","pqr"));
            out.println("<head><title>TEST SERVLET API Call</title></head>");
            out.println("<body>");
            out.println("<h3>TEST SERVLET</h3>");

            // Tabulate the request information 
            out.println("</body></html>");
        }   
        finally {
            out.close();  // Always close the output writer
        }
    }

      public static Object Test_Servlet(String FirstString,String Secondstring,String ThirdString) throws IOException {
        String accessKey = "myaccesskey";
        String secretKey = "mysecretkey";
        String uRLCppList = "http://myurl.com";
        String method = "POST";
        java.util.Date currentTime = new java.util.Date();
        SimpleDateFormat sdf = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss z");

        // Give it to me in GMT time.
        sdf.setTimeZone(TimeZone.getTimeZone("GMT"));
        String dateTimeString = sdf.format(currentTime);

        String signature = generateSignature(method, secretKey, dateTimeString);
        String authorization = accessKey + ":" + signature;
        Map<String, String> params = new HashMap<String, String>();

        params.put("Content of first String", FirstString);
        params.put("Content of Second String", Secondstring);
        params.put("Content of Third String", ThirdString);

        String[] result = sendHttpRequest(uRLCppList, "POST", params, dateTimeString, authorization);

        return result;
    }
我使用JDK 8、ApacheTomcat 6和Netbeans 7.4进行部署。我怀疑,在
Test\u Servlet
方法中定义的变量
result
中返回的结果没有在web浏览器上正确显示

SendHttpRequest方法的附加代码:

public static String[] sendHttpRequest(String requestUrl, String method, Map<String, String> params, String dateTimeString, String authorization) throws IOException {
        List<String> response = new ArrayList<String>();
        StringBuffer requestParams = new StringBuffer();

        if (params != null && params.size() > 0) {
            Iterator<String> paramIterator = params.keySet().iterator();
            while (paramIterator.hasNext()) {
                String key = paramIterator.next();
                String value = params.get(key);
                requestParams.append(URLEncoder.encode(key, "UTF-8"));
                requestParams.append("=").append(URLEncoder.encode(value, "UTF-8"));
                requestParams.append("&");
            }
        }
        URL url = new URL(requestUrl);
        URLConnection urlConn = url.openConnection();
        urlConn.setRequestProperty("accept", "application/json");
        urlConn.setRequestProperty("datetime", dateTimeString);
        urlConn.setRequestProperty("authorization", authorization);
        urlConn.setUseCaches(false);

        // the request will return a response
        urlConn.setDoInput(true);

        if ("POST".equals(method)) {
            // set request method to POST
            urlConn.setDoOutput(true);
        } else {
            // set request method to GET
            urlConn.setDoOutput(false);
        }

        if ("POST".equals(method) && params != null && params.size() > 0) {
            OutputStreamWriter writer = new OutputStreamWriter(urlConn.getOutputStream());
            writer.write(requestParams.toString());
            writer.flush();  
        }

        // reads response, store line by line in an array of Strings
        BufferedReader reader = new BufferedReader(new InputStreamReader(urlConn.getInputStream()));

        String line = "";
        while ((line = reader.readLine()) != null) {
            response.add(line);
        }
        reader.close();
        return (String[]) response.toArray(new String[0]);
    }
公共静态字符串[]sendHttpRequest(字符串请求URL、字符串方法、映射参数、字符串dateTimeString、字符串授权)引发IOException{
列表响应=新建ArrayList();
StringBuffer requestParams=新的StringBuffer();
if(params!=null&¶ms.size()>0){
迭代器paramIterator=params.keySet().Iterator();
while(parameterator.hasNext()){
String key=paramIterator.next();
字符串值=params.get(键);
append(URLEncoder.encode(键,“UTF-8”);
requestParams.append(“=”).append(urlcoder.encode(值,“UTF-8”);
requestParams.append(“&”);
}
}
URL=新URL(请求URL);
URLConnection urlConn=url.openConnection();
setRequestProperty(“接受”、“应用程序/json”);
setRequestProperty(“datetime”,dateTimeString);
urlConn.setRequestProperty(“授权”,授权);
urlConn.setUseCaches(false);
//请求将返回一个响应
urlConn.setDoInput(true);
如果(“POST”。等于(方法)){
//将请求方法设置为POST
urlConn.setDoOutput(真);
}否则{
//设置要获取的请求方法
urlConn.setDoOutput(假);
}
if(“POST.equals(method)&¶ms!=null&¶ms.size()>0){
OutputStreamWriter writer=新的OutputStreamWriter(urlConn.getOutputStream());
writer.write(requestParams.toString());
writer.flush();
}
//读取响应,在字符串数组中逐行存储
BufferedReader=新的BufferedReader(新的InputStreamReader(urlConn.getInputStream());
字符串行=”;
而((line=reader.readLine())!=null){
响应。添加(行);
}
reader.close();
return(String[])response.toArray(新字符串[0]);
}

您的
测试\u Servlet
方法正在返回一个
字符串数组。对数组调用
toString()
的结果是得到的字符串,其中包括类型和对象Id

不确定要做什么,但可以通过迭代返回的数组来输出字符串

html [Ljava.lang.String;@430bc84a
html
来自
out.println(“html”)需要关闭标记的位置

[Ljava.lang.String;@430bc84a
是字符串数组的默认toString,告诉您引用存在的位置。[-表示数组,下面的类型恰好是java.lang.String。这是JVM级别的输出

我会这样做:

String resultStr=”“;
for(字符串s:结果){
//格式-无论您希望如何,这会将每个元素分隔为一个空格
结果TR+=s+“”;
}
返回结果TR


如果要将结果放入表或其他内容中,可以返回数组并使用相同的for循环将每个元素封装到标记中。选择权在您,并且可以正常工作。

打印数组时会发生这种情况,是的。您希望发生什么?另外,您的DOCTYPE错误。@immibis我希望得到JSON响应我想对于您所指的DOCKTYPE,在
html
中包含
,对吗?我为
sendHttpRequest
方法添加了额外的代码,其中调用了
toString
方法
writer.write(requestParams.toString());
,您认为这可能是问题所在吗?我为
sendHttpRequest
方法添加了额外的代码,其中调用了
toString
方法
writer.write(requestParams.toString());
,您认为这可能是问题所在吗?Servlets不会自动将您的响应转换为JSON,您必须手动转换。您发送请求的方式不会改变您的响应的格式。一种快速而肮脏的检查方法是使用
GSON
将您的响应序列化为JSON。更好的解决方案是可以使用Jersey或RESTEasy等工具。这些工具提供了一个健壮的框架,包括自动序列化/反序列化。谢谢你的回答。我还有几个问题。1)你认为行
urlConn.setRequestProperty(“接受”,“应用程序/json”)是否;
在我的代码中接受JSON格式,该格式可用于在浏览器上显示JSON响应?2)如果我必须使用您建议的脏方法,我可以在哪里使用
GSON
在我的代码中?
Accept
头通知服务器客户端将接受何种数据格式。由服务器对数据进行编码其中一种格式的ata。要使用
GSON
编辑
doGet
读取
输出.println(GSON.toJson(Test_Servlet(“abc”、“xyz”、“pqr”);
。必须先实例化
GSON
对象。
html [Ljava.lang.String;@430bc84a