2011-01-23 132 views
0

如何将此代码转换为JSPfsockopen在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); 
} 
+0

编写的代码是没有好主意,你为什么不创建一个bean,并使用它呢?代码将是相同的,可用性和可测试性要好得多。 – maaartinus 2011-01-23 14:25:58

回答

0

您可以使用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(); 
} 
%> 
2

您可以使用JSTL taglib。首先使用

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

声明在JSP的顶部的名称空间,然后使用C:进口标签,包括从指定的URL内容:

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

看看这个工程.... ...

<%@页面的contentType = “text/html的” 进口= “java.io。,java.net。” %>

< % try {socket} s = new Socket(“www.java2s.com”,80);在JSP

 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){} 

%>