【问题标题】:fsockopen equivalent in JSPJSP 中的 fsockopen 等效项
【发布时间】:2011-06-14 00:41:28
【问题描述】:

如何将此代码转换为 JSP

任何帮助表示赞赏..!

$fp = fsockopen("www.example.com", 80, $errno, $errstr, 30);
if (!$fp) {
    echo "$errstr ($errno)<br />\n";
} else {
    $out = "GET / HTTP/1.1\r\n";
    $out .= "Host: www.example.com\r\n";
    $out .= "Connection: Close\r\n\r\n";
    fwrite($fp, $out);
    while (!feof($fp)) {
        echo fgets($fp, 128);
    }
    fclose($fp);
}

【问题讨论】:

  • 用JSP写代码不是个好主意,你为什么不创建一个bean并在那里使用呢?代码将相同,可用性和可测试性更好。

标签: java jsp fsockopen


【解决方案1】:

检查一下它是否有效.......

<%@ page contentType="text/html" import="java.io.*, java.net.*" %>

<% 
    try {
        Socket s = new Socket("www.java2s.com", 80);

        BufferedReader in = new BufferedReader(new 
            InputStreamReader(s.getInputStream()));
        PrintWriter socketOut = new PrintWriter(s.getOutputStream());

        socketOut.print("GET /index.html\n\n");
        socketOut.flush();

        String line;

        while ((line = in.readLine()) != null){
            out.println(line);
        }

    } catch (Exception e){}
%>

【讨论】:

    【解决方案2】:

    您可以为此使用 JSTL 标签库。首先使用在jsp顶部声明命名空间

    <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    

    然后使用c:import标签来包含来自指定url的内容:

    <c:import url="htp://www.example.com/" />
    

    【讨论】:

      【解决方案3】:

      您可以使用Apache HTTP Components 库来做到这一点。类似以下的内容应该适用于 HTTP 组件库:

      <%@ page import="org.apache.http.*, org.apache.http.impl.*, org.apache.http.params.*, org.apache.http.protocol.*, org.apache.http.message.BasicHttpRequest, org.apache.http.util.EntityUtils,  java.net.Socket" %>
      
      <%
      HttpParams params = new SyncBasicHttpParams();
      HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);
      HttpProtocolParams.setContentCharset(params, "UTF-8");
      HttpProtocolParams.setUserAgent(params, "HttpComponents/1.1");
      HttpProtocolParams.setUseExpectContinue(params, true);
      
      HttpProcessor httpproc = new ImmutableHttpProcessor(new HttpRequestInterceptor[] {
              new RequestContent(),
              new RequestTargetHost(),
              new RequestConnControl(),
              new RequestUserAgent(),
              new RequestExpectContinue()});
      
      HttpRequestExecutor httpexecutor = new HttpRequestExecutor();
      
      HttpContext context = new BasicHttpContext(null);
      HttpHost host = new HttpHost("www.example.com", 80);
      
      DefaultHttpClientConnection conn = new DefaultHttpClientConnection();
      ConnectionReuseStrategy connStrategy = new DefaultConnectionReuseStrategy();
      
      context.setAttribute(ExecutionContext.HTTP_CONNECTION, conn);
      context.setAttribute(ExecutionContext.HTTP_TARGET_HOST, host);
      
      try 
      {        
           Socket socket = new Socket(host.getHostName(), host.getPort());
           conn.bind(socket, params);
      
           BasicHttpRequest request = new BasicHttpRequest("GET", "/");
      
      
           request.setParams(params);
           httpexecutor.preProcess(request, httpproc, context);
           HttpResponse response = httpexecutor.execute(request, conn, context);
           response.setParams(params);
           httpexecutor.postProcess(response, httpproc, context);
      
      %>
      <%=EntityUtils.toString(response.getEntity())%>
      <%
      } 
      finally 
      {
          conn.close();
      }
      %>
      

      【讨论】:

        猜你喜欢
        • 2012-09-15
        • 2021-09-15
        • 2010-11-22
        • 1970-01-01
        • 2011-08-05
        • 2020-03-23
        • 1970-01-01
        • 1970-01-01
        • 2018-02-21
        相关资源
        最近更新 更多