我在ACTION中写了
JSONObject jo=new JSONObject();
jo.put("empId", m.get("empId").toString());
jo.put("loginName", m.get("loginName").toString());
jo.put("password", m.get("password").toString());
jo.put("empName", m.get("empName").toString());
jo.put("departId", m.get("departId").toString());
jo.put("queryString", m.get("queryString").toString());
jo.put("groupIDs", m.get("groupIDs").toString());
response.setContentType("text/html");
response.setCharacterEncoding("GBK");
PrintWriter out = response.getWriter();
out.write(jo.toString())
我想写个测试的主函数用HttpURLConnection 来调这个action,然后在这里删除ACTION中out.write出来的数据,
InputStream inputStream = httpurlconnection.getInputStream();
BufferedReader bufferedReader = new BufferedReader(
new InputStreamReader(inputStream));
String line = null;
while ((line = bufferedReader.readLine()) != null) { 
 System.out.println(line);
}
这样只会把返回的网页给输出出来,但不能输出out.write的数据,怎么才能得到out.write的数据?

解决方案 »

  1.   

    I think this may help you:
    [code=Java]
    final URL url = new URL("fullActionRequestURL");
    final BufferedReader reader = new BufferedReader(new InputStreamReader(
    url.openStream()));
    try {
    System.out.println(reader.readLine()); 
    }catich(Exception e){
                    } finally {
    reader.close();
    }
    [/code
      

  2.   

    fullActionRequestURL用的这个。。
    http://192.168.1.12:8080/vbvv/login.do?loginName=admin&password=admin
      

  3.   

    我不知道这个Action是否是一个MVC框架的控制器,如果是的话,你的response.getWriter();是不能直接输出内容了,除非你用这个response来直接响应请求(就是return"",一般的MVC框架都是返回个逻辑视图来映射实际的视图);直接的用个Servlet来响应就没问题了;
      

  4.   

    就是return"",
    这里说错了,应该是把execute方法的返回类型变为void
      

  5.   

    ajax调用到Action其实也是servlet,你用HttpURLConnection来请求是没问题的,检查IO输入输出代码是否有没有关闭
      

  6.   

    我上面说的是Struts2的情况,struts1中应该return null;
    至于楼上说的flush和检查IO是否关闭,这些都没错,但这里明显不是没有flush和IO关闭,原因楼主获取了响应;只是这响应的Print流被替换了;
      

  7.   

    响应的Print流被替换了这样说也不准确,总之不知道怎么表达,原因是我对struts的底层实现和响应流程不熟悉,但我肯定的是你客户端必须是获取response.getWriter()这个写入流的内容,而且必须是这response来响应的。
      

  8.   

    写成servlet肯定没问题,只是我想些一个main函数来看能否取得server端PrintWriter的值,用HttpURLConnection可以访问URL链接,但是不知怎么取PrintWriter得值。
      

  9.   

    URL链接4步曲:
    创建URL对象;
    获取URLConnection对象;
    连接;
    调用getInputStream()获取流;(这步就是获取PrintWriter写入的内容)main函数就写入下面的内容(没测试)URL url = new URL("http://192.168.1.12:8080/vbvv/login.do?loginName=admin&password=admin");
    URLConnection conn = url.openConnection();
    conn.connect();
    BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
    String line = null;
    while ((line = bufferedReader.readLine()) != null) {  
       System.out.println(line);
    }
    bufferedReader.close();
    不知道你上面的请求在服务器端处理脚本中是否会验证loginName=admin&password=admin,且是正确的。
      

  10.   


    我用final URL测试过,是可以的;你在浏览器里直接输这个链接,看看能看到输出的信息不?Ps:我的两种方式都可以;还有一点,这种方式下action不要跳转了,return null 或者 action method返回void